Record GATE A closure: kernel drills pass, liveness guard defect found and fixed

K1/K2/K3 pass on image 20260814223300 with software witnesses
(fire_test A/B/U reproduce the scope-pinned reference); GATE A is
closed and live fire permitted. The campaign caught the liveness
probe's inverted doors-bit guard (forgectrl 424f185, hot-deployed,
probe live-verified MOTION OK).
This commit is contained in:
ScottW514
2026-08-14 20:41:00 -04:00
parent 3afd64dbc7
commit 97a4cae346
+45 -11
View File
@@ -74,17 +74,51 @@ the cooling verdict, and has the new daemon stand by and retake at idle
(F-12). The liveness probe's designed skip-on-open path — the safety-chain (F-12). The liveness probe's designed skip-on-open path — the safety-chain
output is known to de-assert during motion, so an at-that-moment read can output is known to de-assert during motion, so an at-that-moment read can
skip the probe, proceed without a motion fault, and re-probe on the next skip the probe, proceed without a motion fault, and re-probe on the next
spawn — was exercised and behaved per `liveness.c`. **Still pending — spawn — was exercised and behaved per `liveness.c`. **GATE A kernel drills PASS on this image (operator present, HV
operator-present bench work only, and no live-fire until GATE A's unpowered, software witnesses — the bit-to-pin correspondence was
live-fire drills pass on this image:** the scope-pinned 2026-08-02):** run with forgectrl stopped so the pulse
controlled-stop decel at the default cloud tick / resume-with-latch-locked device is free (`scripts/bench/gate_a_kernel_drills.py`). K1: a
stays-laser-less / mid-ramp-latch-does-not-re-arm-FIRE drills, all with controlled stop from the 10 kHz cloud tick decelerates in 0.091 s
LASER_ON probed at the PSU connector; the connection-flood (theoretical ramp 0.072 s) to `idle` with no max-rate burst and no
`machine_is_idle` fail-closed check under motion (X-2); the emission fault. K2: with the latch locked, a `stop` + `resume +200` replays a
witness + lid-IR characterization (Phase 5, `cool_fire_ir_delta` set from 2 s FIRE window with `laser_enable`/`laser_on` at 0 throughout and
the baseline); and the stale-gate / motion-integrity job drills across interlock pinned at 13 — the waypoint provably completed (the position
Phases 4 and 6. None of these proceed without the operator at the counter advanced all 1000 masked steps; `motor_lock` masks the output
machine with the physical arm button, fire watch, and eye protection. drive, not the counters). K3: `laser_latch=0` written inside the accel
ramp drives the latch pin (interlock 13→5, bit 3 clear) but the FIRE
output drive is never restored while the run is in flight —
`laser_enable` 0 for the entire 3.5 s FIRE-bit stream. `fire_test.py`
A/B/U reproduce the 2026-08-02 reference on the rebuilt kernel: A
(latch locked) pins interlock at 13 through 40,000 FIRE bits; B (latch
unlocked, chain unarmed) shows `laser_enable=1`/interlock 7 mid-window
with `laser_on`/`laser_on_sampled` 0 — the safety AND-gate holds; U
reaches a true underrun, the backstop drops FIRE, and `stop` acks it.
**GATE A IS CLOSED**: every Phase 1 row is fixed, the G-1 assertion is
green in CI, and the drills above are the bench log. Live fire is
permitted again. The masked K2 steps leave the un-anchored X counter
offset (+1000 steps); `homed:false` already enforces the re-home.
**The campaign caught a live defect (fixed same day):** the liveness
probe's enclosure guard read the combined-doors EV_SW bit with the
sense inverted (bit 3 set means *closed*, as the controller's switch
map decodes; the guard treated set as *open*), so the probe skipped on
every spawn with the lid closed — and would have moved the gantry with
it open. Verified live against `EVIOCGSW` (lid closed, bit 3 = 1,
probe reporting "door/interlock open"). Fixed in forgectrl `424f185`
and hot-deployed; on the next start the probe genuinely ran and the
supervision behaved exactly as designed: a first gray-zone read (head
accel p2p x=455, below the ≥500 moving threshold) was treated as NO
MOTION and re-probed rather than false-passed, and the second probe
returned MOTION OK (p2p x=3919, y=1636) — the DRV8825s are not wedged
after the drill session's rail cycles.
**Still pending — operator-present:** the connection-flood
`machine_is_idle` fail-closed check under motion (X-2); the stale-gate
/ motion-integrity armed drills across Phases 4 and 6 (physical
button); and the Phase 5 live-fire work — emission-witness live check
and lid-IR fire characterization to set `cool_fire_ir_delta` from the
ambient baseline below. Live fire only with the operator armed: eye
protection, fire watch, exhaust running.
The lid-IR **ambient baseline** for the fire-watch characterization is The lid-IR **ambient baseline** for the fire-watch characterization is
captured on this image (600 samples over 5.6 min at 2 Hz, lid closed, captured on this image (600 samples over 5.6 min at 2 Hz, lid closed,