From 51fb449b563408cbdab8cfbb7bc23e862552cbb3 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 17 Sep 2026 00:02:05 +0200 Subject: [PATCH] Record the second fix batch and the harness that was never there The lifetime fix holds under a thread sanitizer and the assertion kills the deleted wait on both targets. The harness defending all of it does not hold. Every native kill this cut had reported came from scratchpads that no longer exist, the committed Linux path dies before its scenario starts and hides the reason, and the scenario stays green when calls are not counted at all or when nothing ever parks. Two rules are defended by nothing committed. They are recorded as undefended rather than given a number that would look better. Co-Authored-By: Claude Fable 5.1 --- docs/typescript-quic-realtime-cut.md | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/docs/typescript-quic-realtime-cut.md b/docs/typescript-quic-realtime-cut.md index 257998bc..bd0be20a 100644 --- a/docs/typescript-quic-realtime-cut.md +++ b/docs/typescript-quic-realtime-cut.md @@ -264,6 +264,66 @@ on Windows release and kill three times of three under AddressSanitizer, so the entries table must say which target each is honest on. A mutation whose kill depends on the target is not killed until it runs there. +**The second fix batch landed** (Opus) at `a4753f4` (the notify moves inside +the gate), `dc9e12c` (a Windows status stops sign-extending in diagnostics), +`53d5929` (the header says the return code is portably negative, not portably +meaningful), `19d8d5c` (the readme says the committed Unity plugin is the +older build), `f4186e7` (a committed scenario runner for the runtime +lifetime) and `180917d` (four native entries, each naming the target it is +honest on). + +**The discovery that outweighed the fix: there was no committed native +harness at all.** Every native mutation kill this cut had reported came from +consumers and scenarios that lived in agent scratchpads and no longer exist. +The runner at the previous head carried three package targets and nothing +touching the bridge, and two entries could not even be re-marked because +their definitions were gone. Hands built what the brief had assumed already +existed. + +**Soul's third pass, 2026-09-17** (Fable). Held: the lifetime fix on both +targets, the reverted notify killed three of three by the thread sanitizer +and invisible to the address sanitizer, so its target marking is right; the +assertion killing the deleted wait deterministically on both targets and +absent from both shipped libraries and a fresh release build; two fresh +release builds byte-identical to the committed artifact; the return-code +numbers recomputed from the pinned headers; byte-exact restore on both hosts. +**Cut 3 still does not close**, and the reason is that the harness defending +the fix is weaker than the fix: + +- **The committed Linux path does not run as committed.** The sanitizer + configuration dies before the scenario starts, on the kernel's + address-space randomisation, and the runner swallows the child's standard + error, so a future agent sees a red control and no diagnosis. Soul reached + four of four kills only by disabling randomisation and relaxing the + container's seccomp profile, neither of which any committed file mentions. + The image came from a definition that is not in the repository, and the + documented development recipe cannot run the runner at all, since it + installs the C++ toolchain but not the JavaScript runtime. High for the + claim that the Linux kills are rerunnable. +- **The scenario does not test the rule it exists for.** Deleting the call + guard from the polling entry point, so host calls are not counted at all, + survived nine runs of nine across every configuration. The harness pins the + order of the count and the notify, not that anything is counted. +- **The scenario passes vacuously when nothing parks.** Inverting the timeout + comparison makes every poller return before the close begins, and the + scenario is green on all six configurations. +- **The bounded-wait loosening is pinned by a constant, not by the rule.** At + one millisecond it dies with as few as two calls outstanding; at fifty + milliseconds it survives on both targets. A bounded wait is the wrong + contract at any bound. +- **A skipped entry exits zero** with no closing summary, so a gate reads a + host that killed nothing as green. +- **The header contradicts itself**, forbidding a call that begins after + close starts and separately promising such a poll is refused, when that + refusal path reads freed memory after teardown. + +**Two rules are defended by nothing committed**: popping before copying, and +a handle closed under a live call. Both were previously reported killed on +the sanitizer target only, and neither has a definition left. The third fix +batch is told to give each a real entry or to say plainly that the rule is +undefended, because an honest gap beats a fabricated kill. **Third fix batch +in Hands.** + **Cut 1 Soul findings, 2026-09-16.** Held: every test count, both negative greps, all twelve mutations rerun and killed, the control catching a truncated write, the equivalent mutant confirmed (Node 24 WebCrypto refuses