--- fp-driver-d2-r2.sh 2026-09-13 01:40:21.961816800 -0700 +++ fp-driver-d2-r3.sh 2026-09-13 02:44:48.681902900 -0700 @@ -1517,9 +1517,25 @@ # THE READ HAPPENS ONCE AND NEVER WAITS. A receipt that arrived late is evidence to read, # never a reason to spend reporting budget waiting for one. SETUP_OUTSTANDING=no - if [ -z "${SETUP_RECEIPT:-}" ] || ! has_state fw_mutation_may_have_occurred; then + # THE TWO ABSENCES ARE DIFFERENT QUESTIONS, AND r2 COLLAPSED THEM (doyle 5N5TZOBG; measured in + # group G). "No setup was ever dispatched" is a statement about the MARKER. An unassigned + # SETUP_RECEIPT path is a statement about THIS DRIVER'S OWN BOOKKEEPING, and while the marker + # is set it is the absence of a reading about a leg that may be running — never evidence that + # nothing was dispatched. The driver marks fw_mutation_may_have_occurred BEFORE the dispatch and + # assigns SETUP_RECEIPT AFTER handoff_request has already written the request to disk, so a + # signal in between lands in exactly that state, with the request file sitting there as evidence + # that the dispatch DID happen. + # + # THE GUARANTEE IS HERE, NOT IN THE ORDER OF TWO ASSIGNMENTS (doyle's ruling). Moving the + # assignment earlier would narrow the window and would not close it: any dispatch-then-record + # sequence has one, and a window narrowed by rearrangement is not a safety property. + if ! has_state fw_mutation_may_have_occurred; then SETUP_COMPLETION=NOT_REQUESTED - record "R6 setup_completion=NOT_REQUESTED — no elevated setup was ever dispatched, so nothing is outstanding and the gates below decide on their own measurements" + record "R6 setup_completion=NOT_REQUESTED — the mutation marker was never set, so no elevated setup was ever dispatched: nothing is outstanding and the gates below decide on their own measurements" + elif [ -z "${SETUP_RECEIPT:-}" ]; then + SETUP_COMPLETION="UNPROVEN: no-receipt-path-assigned" + SETUP_OUTSTANDING=yes + record "R6 setup_completion=UNPROVEN missing: no-receipt-path-assigned — the mutation marker IS set and this run holds no receipt path to read, which happens when it was interrupted between writing the request and recording where the answer will arrive. A DISPATCH CANNOT BE DISPROVED HERE, so the leg is treated as OUTSTANDING and every cleanup mutation is withheld. The cost of being wrong this way is a PENDING report; the cost of being wrong the other way is an autostarting stop racing a leg that may still be starting processes, which is IR-124." else local r6_missing='' r6_nonce r6_exit [ -f "$SETUP_RECEIPT" ] || r6_missing="$r6_missing no-receipt-file"