test: replace final fixed-delay oracles

This commit is contained in:
Erik 2026-08-18 13:12:26 +02:00
parent ad7ebe9425
commit 79a4489e03
6 changed files with 101 additions and 21 deletions

View file

@ -53,8 +53,8 @@ inventory refreshed for Batch L reports:
| Constant-truth assertion methods / sites | 0 / 0 |
| Reviewed syntactic self-comparison methods / sites | 4 / 5 |
| Reviewed diagnostic methods | 57 |
| Methods directly using `Thread.Sleep` / `Task.Delay` | 15 / 17 |
| Cancellable-infinite-only / elapsed-time methods | 5 / 27 |
| Methods directly using `Thread.Sleep` / `Task.Delay` | 15 / 14 |
| Cancellable-infinite-only / elapsed-time methods | 5 / 24 |
| Methods directly reading environment variables | 47 |
| Methods directly reading `.cs` source text | 63 |
@ -147,7 +147,7 @@ identifiable in the lane report.
| T-016 historical test taxonomy | first descriptive-identity batch active in batch J | Remove opaque AP/R/J/K/Slice codes from current test/type names while preserving provenance in comments and ledgers. The 47 `Issue###` files remain an explicit user-decision set because their IDs still connect tests to retail evidence. |
| 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. |
| T-018 stderr observer race | resolved in R2 | Live reader shares writes/deletes; 25 focused repetitions plus the complete gate. |
| T-019 remaining explicit waits | classified in batch H; six fixed-delay negative oracles resolved in batches M/N, three remain | Five methods are deterministic cancellation stubs, not wall-clock tests. Preserve intentional real-time contracts and bounded integration polling. The remaining cleanup owners are headless late-subscriber replay and two launcher installer/recovery contracts. |
| T-019 remaining explicit waits | resolved in batches MO | All nine fixed-delay negative oracles now use observed monitor/thread/lease/process state. The remaining 24 elapsed-time methods are the reviewed cancellation, real-time protocol, cooperative-yield, bounded-polling, and positive-timeout categories from Batch H. |
| T-020 exact duplicate bodies/data | resolved in batch K | Four redundant executions were removed. The remaining 11 body-equivalent groups are intentionally split theories with disjoint, meaningfully named datasets; the inventory enforces zero repeated rows within a theory or across body-equivalent theories. |
| T-021 suspicious assertion shapes | resolved in batch L | The inventory enforces zero `Assert.True(true)` / `Assert.False(false)` sites and reports syntactic self-comparisons for review. All five current self-comparisons assert meaningful determinism or stable identity. |
@ -448,7 +448,7 @@ invocation instead of treating both method-level booleans as equivalent. The
| Intentional real-time protocol/timeout contract | 4 | Keep with explicit bounds: two Live handshake race delays, the one-second net-probe cadence, and continuous unrelated shutdown drain. |
| Cooperative yield while virtual-clock/background transport work drains | 8 | Retain for now; prefer an observable receiver/worker signal when that seam exists. The virtual behavioral oracle does not derive from the sleep duration. |
| Bounded completion/readiness polling | 11 | Retain as integration polling with a terminal assertion and deadline; improve opportunistically with events, not by busy-spinning. |
| Fixed delay used to prove another operation is still blocked | 9 originally; 3 remain | Batches M/N replace six with observed thread wait state. Replace the remaining elapsed-time absence-of-completion checks with an observed wait state or test seam. |
| Fixed delay used to prove another operation is still blocked | 9 originally; 0 remain | Batches MO replace all nine with observed monitor/thread/lease/process state. |
| Positive completion timeout guard | 1 | Keep. The two-second `WhenAny` in `RuntimeCharacterStateTests` fails only if the operation does not complete; it does not delay a passing run. |
The original nine fixed-delay negative oracles are:
@ -696,3 +696,41 @@ Batch N verification:
Three fixed-delay negative oracles remain: headless concurrent late-subscriber
replay and the two launcher installer/recovery contracts.
## Batch O final fixed-delay negative oracles
Batch O removes the last three timing-based absence-of-completion tests:
- `HeadlessPluginSessionTests.LateSubscriberReplayQueuesConcurrentRegistrationExactlyOnceInOrder`
now runs registration on a dedicated thread and observes it enter
`WaitSleepJoin` while Runtime's exact replay read lease is held;
- `LauncherInstallerTests.IndependentInstallersSerializeAndWaitingCancellationTouchesNothing`
now waits until the second installer has actually encountered the held
transaction lease before cancelling it; and
- both rows of
`LauncherInstallerTests.OrphanBakeCanNeverPublishAfterRestartRecovery` now
observe publication-lock contention where applicable and wait for the exact
orphan child process to exit before checking that it cannot publish later.
The launcher observation points are internal callbacks on the existing
transaction/publication lease retry paths. They are unset in production, add no
new public API, and do not change lock, retry, cancellation, or publication
behavior. The former 150/200 ms delays and post-exit settle delay are gone.
Batch O verification:
- the one focused Headless fact and three focused Launcher cases pass;
- 25 fresh-process Headless iterations and 25 fresh-process Launcher iterations
pass, totaling 100/100 exercised cases;
- the refreshed inventory reduces direct `Task.Delay` methods from 17 to 14
and elapsed-time methods from 27 to 24;
- none of Batch H's nine fixed-delay negative-oracle methods contains a direct
sleep or delay;
- the complete 44-project Release build reports zero warnings and zero errors;
and
- the no-retry complete hermetic Release gate remains 14,382/14,382 with zero
skips or failures across all 12 test assemblies.
The 24 remaining elapsed-time methods retain their reviewed Batch H
classification: cancellation fakes, intentional real-time protocol behavior,
cooperative yields, bounded integration polling, or a positive timeout guard.