guard: a run reports failure while its only job's log ends in success #36
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PerishLab/codehull run 120 (task id 6511, head
1207405ea6658ded853a1fdf1c1a2937c133ddc3) reportsfailureafter 15m29s. Its log contains no failure of any kind, and ends by declaring success.The contradiction
One job. API says failure, its own log says succeeded.
The step boundaries are incomplete
Every
⭐ Run Xin the 1274-line log:guard.ymldeclares a step namedGuard(line 33). No⭐ Run Guardmarker appears anywhere. The ~1200 lines between Main Checkout and Post Install carry the whole guard body — cargo fmt, clippy, test, release check, deno, plumb doctor, ectropy, act — all of it succeeding, withact: cleanas its last output. Those lines belong to no delimited step.Why it matters to a caller
plumb landrefuses to merge on guard failure, correctly, and leaves the pull open. Diagnosing that refusal means reading the log. Here the log cannot explain the verdict: it shows no failure and ends in success. The caller has no way to distinguish a real failure whose cause is unlogged from a reporting defect.What was verified locally
The same tree passes every guard step on a workstation, following
guard.ymlline by line:cargo fmt --all --check,clippy --locked --workspace --all-targets -- -D warnings,test --locked,check --locked --release,deno fmt,deno check,helm lint charts/codehull --quiet,plumb doctor .(true to the skeleton, on plumb 0.18.26 matching CI's stable),ectropy .(clean), andcargo run -p codehull -- act(act: clean).The previous run on the same branch, 119 (
c20b1c38), failed in 16s on a genuinecargo fmtdiff and its log showed it plainly. So short failures do surface; this one does not.Not asking for
No change to what guard runs. The claim is only that a job's reported status and its log disagree, and that one declared step leaves no boundary marker.
Three more runs: the status contradiction did not reproduce, the missing step boundary did
Re-checked 2026-08-14 against the same branch.
1207405🏁 Job succeeded, no failure of any kind1207405plumb doctor2 out of true, then⚙️ [runner]: exitcode '1': failure, then🏁 Job failedd7324dfd7324dfThe headline claim now rests on one sample
Run 121 failed for a real reason and said so plainly:
plumb doctorwent out of true because plumb 0.18.27 shipped between 20:12 and 22:00 while the pin stayed at^0.18.26. Its log carries⚙️ [runner]: exitcode '1': failureand ends🏁 Job failed. Runs 122 and 123 succeeded and reported success.So status and log agree in three of four runs, including one genuine failure. Run 120 stays unexplained, but nothing since reproduces it.
One timing detail the original report did not have
Run 120's log stops at 20:12:42 with
🏁 Job succeeded; the run record'supdated_atis 20:25:48. The work took 2m23s, then nothing happened for 13m06s before the verdict landed. The 15m29s quoted originally is wall clock, not job duration. Runs 121 and 122 have no such gap — they finish and report immediately.Job body completes, result never posted, verdict arrives 13 minutes later: that shape points at the runner's task connection rather than at guard.
The step-boundary half reproduces every time
Unchanged across 120, 121, 122 and 123:
guard.ymldeclares a step namedGuard, and no⭐ Run Guardmarker appears in any log.Main Checkoutnever gets a matching Success line. The entire guard body sits between them, belonging to no delimited step.That half is reproducible and independent of any verdict, including on successful runs. Suggest re-scoping this issue to it, and tracking run 120 separately — or closing that half as unreproduced unless it recurs.