test: stabilize load-sensitive release contracts

This commit is contained in:
Erik 2026-08-18 11:50:23 +02:00
parent c8c764a40e
commit dfc841b779
8 changed files with 199 additions and 43 deletions

View file

@ -134,7 +134,7 @@ identifiable in the lane report.
| 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-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 | active; first mechanism reproduced | `PortalProjectionTests.ClipToRegion_FrameOwnedStore_ReusesExactResultArray` reported 6,904 B only while three App test hosts ran concurrently, then passed in an isolated run. Preserve both observations and remove ambient process-allocation sensitivity rather than loosening the zero-allocation oracle. |
| 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`. |
| T-016 historical test taxonomy | open | Rename/re-home only after each test's durable owner and oracle are established. |
| T-017 Avalonia ownership | reopened and closed in batch D | The full gate exposed the same compositor ownership class between six newer `MainWindowViewTests` facts. Their six named assertion phases now run in one owned Avalonia application session; 25 fresh-process stress iterations and the complete gate pass. |
@ -330,3 +330,43 @@ recognition. The public production factory remains wired directly to
The focused class passes 4/4 in 17 ms with exact 10 ms and 600 ms virtual
intervals. The complete Release build then passed with 0 warnings/errors, and
the no-retry hermetic gate passed 14,392/14,392 with zero skips or failures.
## Batch F load-sensitive contracts
The seven cases in T-014 have now been separated into six unreliable test
mechanisms and one real product defect:
- #308 `NakEmissionTests.LossSoak...` no longer mixes its virtual transport
clock with a 60-second `DateTime.UtcNow` cutoff and fixed sleeps. Its two
convergence phases each permit exactly 120 half-second virtual steps and
yield to the background receiver. The full 10,000-message oracle is intact;
25 fresh-process repetitions pass.
- #302 and #346, the two `PortalProjectionTests` allocation contracts, now
cross tiered-JIT/PGO thresholds before measuring and take the minimum of five
warmed 1,000-operation batches. A linear result-array regression would
allocate in every batch and still fail far above the existing ceilings.
- #336 `RuntimeCollisionReportingStateTests.WarmedSteadyContactRefreshDoesNotAllocate`
now earns the word "warmed": it performs one complete 10,000-refresh warmup
and requires at least one of five subsequent 10,000-refresh batches to
allocate exactly zero bytes. It passes in 25 fresh processes.
- #340 `StreamingWorkBudgetTests.DestinationAndEmptyUnloadPriorityNeverBypassPublicationBudget`
now supplies a frozen meter clock through an internal test-only constructor.
The public production constructor still supplies `Stopwatch.GetTimestamp`
and `Stopwatch.Frequency` exactly as before.
- #402 `LandblockBuildFactoryTests.Build_UsesTheSuppliedSharedReaderGate` now
starts a dedicated thread and observes it in `WaitSleepJoin` on the held
monitor before checking that no DAT read occurred. It no longer treats a
ThreadPool start within two seconds or an arbitrary 100 ms wait as evidence.
- #321 `DatSoundCacheTests.GetWave_ConcurrentSameId_PublishesOneCanonicalWaveAndDecodesOnce`
exposes a real race. A caller can pass the resident-cache check, pause, and
reach `_inflight` after the winning caller has admitted the wave and removed
its `Lazy`, producing a second decode. The assertion and rationale are
preserved under `Status=KnownFailure`; R3 makes no cache behavior change.
The four changed App cases pass 100/100 across 25 fresh processes. The Runtime
allocation case passes 25/25, and the Core.Net loss soak passes 25/25. Complete
batch verification then passed: the 44-project Release build reports zero
warnings/errors, the refreshed inventory reports two explicit known-failure
methods and 15 remaining direct `Thread.Sleep` methods, and the no-retry
hermetic gate passed 14,391/14,391 with zero skips or failures. The one-pass
reduction is exactly #321 leaving the release lane.