forgetest: the liveness test waits for the probe's log line; forgectrl pinned at 0.1.4 (the probe's detail text); the campaign log records the first campaign

This commit is contained in:
ScottW514
2026-09-06 20:57:56 -04:00
parent 0df0162c8d
commit 143ef11a60
3 changed files with 44 additions and 2 deletions
+36
View File
@@ -9120,6 +9120,42 @@ rebuilt from that head with the taint stamps cleared: stamp
kind. That pair is the one to flash; the 20260907000214 pair, never
flashed, was removed.
The CI on 60e06c7 then failed the shared-UI check: the acceptance page's
`theme.css` had not followed forgectrl's (54f6574). The coverage lint, run
locally on the tree manifest before the next push, found `src/wizrun.h`
uncovered and the sheet test's entry for the font generator hollow (a
non-behavioral path), both fixed in the sheet test's `covers` (0df0162).
Every CI step then passed locally. Both pushed; the pair rebuilt from
0df0162: stamp **20260907002443**, the same kernel, the same checks, no
warning. That pair is the one to flash; the 20260907001140 pair, never
flashed, was removed.
## 2026-09-07: the first campaign on image 20260907002443 finds two defects
The operator flashed the dev image 20260907002443 and power-cycled; forgetest
took the fresh-boot reference; the unattended batch (67 tests) started at
00:36Z in campaign c-20260907003616-ba87. 43 tests passed in a row; the
44th, `motion.liveness-probe`, failed at 00:52Z with "the first probe after
the restart was not MOTION OK: []" and closed the campaign. The machine was
fine: forgectrl's log shows the probe after the masked restart reading
MOTION OK and the supervisor reporting motion verified.
Two causes, one in the daemon and one in the test:
- **The probe's log line was cut to three characters** ("MOTION OK - hea").
The commissioning change that made the probe's detail text static for
the setup page (`super.c`, `probe_detail[96]`) left the probe call with
`sizeof(detail)` on what had become a pointer: four bytes. The image of
2026-09-03 logged the whole line ("head accel p2p x=1746 y=1543
(moving>=800 dead<=250)"). Fixed: `sizeof(probe_detail)`.
- **The test read the log once, too early.** It reads the daemon's log for
the probe line as soon as `/mode` reports motion verified; the line
reaches the file through rsyslog a moment later, and this time the read
came first. Fixed: the test waits up to ten seconds for the line.
The fix needs a forgectrl pin bump, so the pair is rebuilt and the
campaign starts over on the next image.
## Reference notes
### Head-IRQ source validation — the beam-emission hypothesis
+6
View File
@@ -383,7 +383,13 @@ def _liveness_masked_restart(ctx, fc, ev):
or m.get("controller") == "motion-fault"):
break
ctx.sleep(1)
# The probe's own line reaches the file through rsyslog a moment after
# the supervisor reports its verdict: wait for it, briefly.
t1 = time.time()
lines = _probe_lines(FORGECTRL_LOG, off)
while not lines and time.time() - t1 < 10:
ctx.sleep(0.5)
lines = _probe_lines(FORGECTRL_LOG, off)
for ln in lines:
ctx.log(" %s", ln.split(" INFO ", 1)[-1] if " INFO " in ln else ln[-160:])
ev["masked_restart"] = {"mode": m, "probe_lines": lines[-4:], "motor_lock_after": ctx.sysfs("cnc/motor_lock")}
@@ -2,5 +2,5 @@
# only SRCREV and PV here - the image manifest leaves *-pin.inc out of the
# layer content hash because the component entry already identifies the
# pinned source (forgefirm-image-manifest.bbclass).
SRCREV = "c895630281a62dc380ee8ad47f274243f85014cd"
PV = "0.1.3"
SRCREV = "9b178c2bb70d781ecb5f995ef74ed88af988098e"
PV = "0.1.4"