diff --git a/docs/reviews/2026-08-18-r3-test-truth-ledger.md b/docs/reviews/2026-08-18-r3-test-truth-ledger.md index 776eb20b..d93a7550 100644 --- a/docs/reviews/2026-08-18-r3-test-truth-ledger.md +++ b/docs/reviews/2026-08-18-r3-test-truth-ledger.md @@ -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.