mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 08:41:13 -07:00
The open item "Idle before the kernel drains" asked to decide between holding Idle until the kernel drains and stopping the continuation pads growing the lag. Measured first: on the machine, four chained 50 mm jogs against cnc/state give 171, 175, 177 and 176 ms after Idle. One queue depth, flat. The growth the item described is gone, so neither driver change was made and the item is closed. Host side agrees and says where the mechanism lives. Stream bytes are the time axis, so a dumped stream's length is how long the machine plays it: chained jogs produce 35755 bytes each with no growth, and the churn session holds at 64790 bytes at a producer lead of 2 or 10 ms. Only above the lead ceiling does it inflate. Rule 17 now holds that stream to a budget derived from the job rather than to a recorded number, so the inflation regime cannot return unnoticed; it fails at 5899 and 8005 ms with the ceiling lifted and passes at 2301 against 3800. BRINGUP carried a second error. It said every forgectrl path that stops the controller after motion waits for cnc/state idle. super.c says outright that POST /controller/stop is not idle-gated, because it is also the emergency lever, and safes the machine with cnc/stop and the latch before the signal instead. The mode switch, the cooling gate and the daemon shutdown do gate on machine_is_idle(). Both the tail figure and the gating claim are corrected, and CAMPAIGN-LOG carries the measurements and the decision not to hold Idle. Acceptance: rule 17 is a host harness rule in the grblHAL repo's CI, not a catalog case. The catalog is unchanged because no machine behavior is: the driver change is a bound on an out-of-range knob.