docs: reconcile ambiguous test contracts

This commit is contained in:
Erik 2026-08-18 13:18:11 +02:00
parent 79a4489e03
commit ce2800a00c

View file

@ -133,7 +133,7 @@ identifiable in the lane report.
| T-002 physics tautology | high-confidence cleanup batch A | Compare old-model and new-model reflection decisions, as the surrounding contract states. |
| T-003 duplicate theory row | high-confidence cleanup batch A | Remove literal `0x41000012`, which is identical to `MotionCommand.Crouch`; remove the temporary analyzer suppression. |
| T-004 warning mismatches | resolved in R2 | Clean rebuild is zero-warning with repository-wide warnings-as-errors. |
| T-005 unreachable panel stack | requires production reachability proof | Do not delete 52 meaningful tests until the dead presentation surface and any supported plugin compatibility promise are verified together. |
| T-005 dormant panel stack | production reachability and architecture intent reconciled in batch P; user taxonomy decision remains | No shipping code implements `IPanelRenderer`/`IPanelHost` or constructs `ChatPanel`, `DebugPanel`, or `VitalsPanel`, but the architecture explicitly preserves this first-party developer-panel contract for issue #258. Do not call its behavioral tests useless or delete the contract as dead code. Decide separately whether 26 fake-renderer self-tests belong in the release count. |
| T-006 misleading installed-DAT reason | resolved in batch B | Shared opt-in is now `ACDREAM_RUN_INSTALLED_DAT_TESTS=1` (legacy switch retained), the reason names the lane, and all nine owners carry `Lane=InstalledDat`. |
| T-007 271 silent passing gates | resolved in batch G | All 280 directly found gates plus three later-reconciled sites now fail explicitly when their selected lane lacks its prerequisite. The only three syntax candidates left are reviewed cross-platform branch false positives. |
| T-008 incapable-of-failing diagnostics | resolved in batches A, C, and L | The literal wiring smoke test was deleted, the GPU contract tautology was repaired, and the six remaining constant-truth diagnostic assertions were removed after their output was preserved under `Purpose=Diagnostic`. |
@ -507,6 +507,60 @@ No source-freeze fact is removed in this classification batch. The 46 staged
facts are an ambiguous architecture decision and will be presented for user
approval in behavior-owner groups rather than deleted from a numeric heuristic.
### Source-freeze approval groups
The 46 campaign-era facts are not equivalent. Their current semantic coverage
and safest replacement path divide into six owner groups:
| Owner group | Facts | What the literal checks still prove | R3 recommendation |
|---|---:|---|---|
| Composition-root wiring | 13 | `GameWindow` calls the intended phase objects and no longer contains the extracted construction bodies. Phase-local tests cover ordering and rollback inside each phase, but not every root-to-phase link. | Keep until one symbol-aware composition-graph guard proves the root links. Then remove the literal constructor/local-name checks. |
| Runtime root, host, and lifetime | 12 | One canonical Runtime root/command surface, typed owner handoffs, acquisition order, and native-window-last shutdown. Existing Runtime/lifecycle tests prove much of the behavior, but several sole-owner and transfer claims remain unique. | Replace with direct ownership receipts, terminal-ledger assertions, and metadata dependency guards before removing any source freeze. |
| Render delegation and cleanup | 4 | Rendering is delegated and `GameWindow` does not regain leaf draw branches or resource ownership. The owning render suites already exercise the executor, frame builder, renderer, and resource disposal behavior. | Best first conversion: add one symbol-aware boundary guard for the absence/delegation claim, then remove the four literal checks. |
| Streaming publication | 4 | The window does not own render/physics publication bodies, captured build origins flow through the extracted owners, and streamer teardown follows session reset. Publisher/build/origin suites already provide broad behavioral coverage. | Best second conversion: consolidate the absence claims into a whole-tree architecture guard and retain the behavioral origin/teardown contracts. |
| Live-entity composition | 2 | Typed sources replace window closures and reset closes every streaming/readiness owner. Lifecycle tests cover convergence, but the exact constructor-shape claim is still literal. | Replace with constructor/field metadata inspection plus the existing teardown ledger; do not delete alone. |
| Frame orchestration | 11 | Exact-once publication, frame-stage order, adapter ownership, and a deliberately thin `OnUpdate`. These are high-value order rules, but exact statement fragments are the most brittle implementation specification in the set. | Replace order assertions with an observable fake event trace and use a symbol-aware dependency guard for the thin-root rule. This is the largest conversion and should be last. |
Approval should authorize this replacement sequence, not wholesale deletion:
render delegation, streaming, live entities, composition roots, Runtime/host
lifetime, then frame orchestration. If the semantic replacement exposes a
claim that exists only as historical campaign wording, preserve the rationale
and bring that individual deletion back for review.
## Batch P dormant panel reachability reconciliation
T-005's production-reachability half is now proved: repository-wide C# usage
contains no production `IPanelRenderer` or `IPanelHost` implementation and no
shipping construction of `ChatPanel`, `DebugPanel`, or `VitalsPanel`. The old
ImGui backend is gone; retained `UiHost`/`UiRoot` controllers are the sole
shipping presentation stack, and plugin UI uses
`IUiRegistry.AddMarkupPanel` rather than `IPanel`.
That does **not** make the complete abstraction useless. The architecture
document explicitly says `AcDream.UI.Abstractions` and the
`IPanel`/`IPanelRenderer` developer-panel contract survive intact for a future
host tracked by issue #258. `ChatVM` and `VitalsVM` are also live shared models
consumed by retained UI, so their model/parser/command tests are production
coverage and are outside T-005.
The dormant presentation-only subset currently contains 51 attributed methods
(57 expanded cases):
| Subset | Methods | Disposition |
|---|---:|---|
| `IPanelRendererWidgetTests` and `IPanelRendererMainMenuBarTests` | 26 | They exercise only `FakePanelRenderer`, not a production backend. Treat as test-harness/contract self-tests; user decision whether to retain outside the release total, consolidate, or remove. |
| `PanelContextTests` | 2 | Small public-contract value, but only compiler-generated record round-trip/equality. Same taxonomy decision as the renderer self-tests. |
| `ChatPanel` layout, input, focus, and colored-render behavior | 23 | Meaningful executable behavior for the explicitly preserved future developer-panel contract. Retain unless that architecture promise is intentionally retired. |
The earlier audit's recommendation to remove the whole stack was therefore too
broad. The maintainability problem is narrower: 28 harness/trivial contract
methods inflate release totals despite having no production renderer, while 23
panel behavior methods protect a deliberately dormant API. The UI framework
plan also has stale present-tense statements that ImGui remains permanent,
whereas the architecture authority correctly records its deletion; that is a
documentation-reconciliation item, not evidence that the old backend still
exists.
## Batch J descriptive test identities
The first T-016 naming batch changes no oracle or production behavior. It