diff --git a/docs/research/2026-08-05-c4-closeout-handoff.md b/docs/research/2026-08-05-c4-closeout-handoff.md index 770dc0ee..57f7a86a 100644 --- a/docs/research/2026-08-05-c4-closeout-handoff.md +++ b/docs/research/2026-08-05-c4-closeout-handoff.md @@ -97,9 +97,31 @@ traffic); this is the one purely visual gate. 6. Portal recall while equipped — equipment present and following after arrival. -**Pass criterion: the session counts ONLY if `[child-cell]` lines with -`cause=propagate` appear during step 2**, child cell always equal to the -player's. Regressions: weapon drawn at the world origin or its last ground +**Pass criterion — CORRECTED 2026-08-05, the original was unfalsifiable.** + +The original read: *"the session counts ONLY if `[child-cell]` lines with +`cause=propagate` appear during step 2."* **That criterion cannot fail in the +presence of the bug it exists to catch.** #319 makes a player-parented child +emit NO probe line at all, so the defect's signature is ABSENCE — which the +old wording reads as "you didn't exercise it" rather than "it is broken." Two +captured gate logs (`c4-gates.log`, `c5-gates.log`) contain #319 and neither +flags it; the second was even run specifically to thicken this gate. + +A gate whose failure mode is indistinguishable from a not-run manufactures +confidence. Replace it with a POSITIVE assertion: + +1. **Assert the equipped child's `FullCellId` EQUALS the parent's** after a + landblock crossing — read it, do not infer it from probe volume. A zero + child cell is a FAILURE, not a silence. +2. Then, and only as a secondary check, expect `cause=propagate` counts in + double digits across several crossings. +3. Run it with a **player** parent AND a **creature** parent. #319 exists + precisely because every probe-firing parent in both captured logs was + `0x7…`/`0x8…` (instance sequence 0) and the sole `0x5…` player parent was + the sole failure. A gate that only ever sees sequence-0 parents is blind to + the entire player class. + +Regressions: weapon drawn at the world origin or its last ground position; invisible while equipped; **left behind at a landblock boundary** (the D4 demotion's specific risk); invisible-but-solid at a former position (#184); child culled while the parent is visible or vice versa. The headless @@ -379,7 +401,9 @@ load-bearing observation: before the round-2 R3 fix the field read **Route 7 (child cell) — PASS, but THIN.** 17 `[child-cell]` lines: 13 `cause=attach`, 3 `cause=delete`, **1 `cause=propagate`**. The stated pass -criterion (at least one `cause=propagate`) is met, so the gate passes — but +criterion (at least one `cause=propagate`) was met, so the gate was recorded +as passing — but see #319: that criterion was UNFALSIFIABLE and this very log +contains an undetected defect. Corrected above. The remaining note stands: propagation across a parent cell crossing is the slice's entire purpose, and one sample proves the path executes rather than that it is robust across repeated crossings. A future session should run several equipped landblock