docs: map source-text test debt

This commit is contained in:
Erik 2026-08-18 12:17:58 +02:00
parent 056af276d0
commit e6fab96f12

View file

@ -132,7 +132,7 @@ identifiable in the lane report.
| T-009 wall-clock double-click tests | resolved in batch E | Four sleeps were replaced by a deterministic test clock behind an internal factory overload. The production factory still reads `Environment.TickCount64` exactly as before. |
| T-010 two useless cases | high-confidence cleanup batch A | Delete `SmokeTest.TestProject_IsWired` and `ChaseCameraTests.ImplementsICamera`; compilation already proves both claims. |
| T-011 51 output-only methods | classified in batch C | The reviewed current set is 51 methods / 70 cases. All carry `Purpose=Diagnostic`, preserving the apparatus while removing it from release pass totals. Contract-shaped names remain explicitly flagged until a stable oracle exists. |
| T-012 source-text freezes | requires semantic replacement map | Retain whole-tree dependency rules; remove exact-text freezes only when an equivalent semantic/behavioral guard is identified. |
| T-012 source-text freezes | replacement map complete in batch I; 46 implementation-shape facts remain staged | Twelve whole-tree architecture rules and five cross-artifact contracts stay. The other 46 are campaign-era literal implementation freezes; retire each only beside its semantic/behavioral replacement, with user approval for owner/lifecycle assertions that have no equivalent yet. |
| T-013 controller self-comparison | high-confidence cleanup batch A | Capture the first controller next to the first body and compare every retry with that reference. |
| T-014 seven load-sensitive tests | six mechanisms repaired in batch F; one product defect classified | Virtual/wall-clock mixing, tiered-JIT allocation noise, a live controller clock, and a ThreadPool-start timing oracle were removed without weakening behavioral contracts. `DatSoundCache` #321 is a real in-flight-entry race and now runs as `Status=KnownFailure` pending a product fix. |
| T-015 four non-prerequisite skips | resolved in batches A/B | PVS scaffold deleted with rationale preserved; redundant chat/radar generators deleted in favor of the comprehensive Manual lane; tower oracle is `Status=KnownFailure`. |
@ -456,3 +456,43 @@ This classification is review evidence, not a claim that the remaining waits
are flaky. The inventory run at `6faeb4a1` parsed all 1,256 tracked C# test
files and reproduced 15 sleep methods, 23 delay methods, five cancellation-
only methods, and 33 methods with some elapsed-time wait.
## Batch I source-text replacement map
The refreshed inventory finds 63 attributed methods that directly read `.cs`
source text. Reconciliation with historical T-012 assigns every method to one
of three dispositions:
| Disposition | Methods | Owning test files |
|---|---:|---|
| Campaign-era implementation-shape freeze; replace in stages | 46 | `ContentEffectsAudioCompositionTests`, `FrameRootCompositionTests`, `HostInputCameraCompositionTests`, `InteractionRetainedUiCompositionTests`, `LivePresentationCompositionTests`, `SessionPlayerCompositionTests`, `WorldRenderCompositionTests`, `GameWindowLiveSessionOwnershipTests`, `GameWindowRenderLeafCompositionTests`, `GameWindowSlice8BoundaryTests`, `ResourceCleanupGroupTests`, `RetailPViewPassExecutorTests`, `WorldRenderFrameBuilderTests`, `WorldSceneRendererTests`, `LandblockBuildOriginTests`, `LandblockPhysicsPublisherTests`, `LandblockRenderPublisherTests`, `GameWindowLiveEntityCompositionTests`, `UpdateFrameOrchestratorTests` |
| Whole-tree architecture policy; retain, then make syntax/metadata-aware | 12 | `LinuxPlatformBoundaryTests`, `RenderSceneArchitectureTests`, `RuntimePhysicsOwnershipTests`, `RuntimeEntityOwnershipTests` |
| Source/project/artifact text is the actual cross-artifact contract; retain | 5 | `ParticleBindlessInstanceTests`, `PerformanceToolsTests`, `LauncherProjectBoundaryTests` |
The 46 implementation-shape facts were useful during mechanical ownership
cutovers, but are not durable behavioral evidence. They pin constructor
spellings, local names, exact call fragments, or statement order; comments can
satisfy many of their `Contains` checks, while a harmless equivalent refactor
can fail them. Their intent is often valuable—single ownership, ordering,
handoff, teardown, or absence of a parallel path—so wholesale deletion would
discard real notes and weaken some boundaries.
R3 therefore uses this replacement rule for those 46 facts:
1. preserve the ownership/order rationale in the architecture document or this
ledger;
2. identify an existing behavioral, lifetime-ledger, project-reference, or
reflection/Roslyn guard that proves the same claim;
3. add the semantic replacement first when none exists; and
4. remove the literal source freeze in the same small batch.
The 12 whole-tree rules remain valuable even before conversion: they ban
platform calls outside owners, enforce assembly/namespace containment, and
prevent duplicate Runtime entity/physics authorities. The five cross-artifact
tests compare two independently consumed artifacts (for example CPU/shader
constants, launcher project/workflow/markup, and CLI route tooling); reading
text is appropriate there.
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.