mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 08:41:13 -07:00
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:
@@ -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
|
kind. That pair is the one to flash; the 20260907000214 pair, never
|
||||||
flashed, was removed.
|
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
|
## Reference notes
|
||||||
|
|
||||||
### Head-IRQ source validation — the beam-emission hypothesis
|
### Head-IRQ source validation — the beam-emission hypothesis
|
||||||
|
|||||||
@@ -383,7 +383,13 @@ def _liveness_masked_restart(ctx, fc, ev):
|
|||||||
or m.get("controller") == "motion-fault"):
|
or m.get("controller") == "motion-fault"):
|
||||||
break
|
break
|
||||||
ctx.sleep(1)
|
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)
|
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:
|
for ln in lines:
|
||||||
ctx.log(" %s", ln.split(" INFO ", 1)[-1] if " INFO " in ln else ln[-160:])
|
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")}
|
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
|
# only SRCREV and PV here - the image manifest leaves *-pin.inc out of the
|
||||||
# layer content hash because the component entry already identifies the
|
# layer content hash because the component entry already identifies the
|
||||||
# pinned source (forgefirm-image-manifest.bbclass).
|
# pinned source (forgefirm-image-manifest.bbclass).
|
||||||
SRCREV = "c895630281a62dc380ee8ad47f274243f85014cd"
|
SRCREV = "9b178c2bb70d781ecb5f995ef74ed88af988098e"
|
||||||
PV = "0.1.3"
|
PV = "0.1.4"
|
||||||
|
|||||||
Reference in New Issue
Block a user