daily-fix: verify_task_body FAILs every kind:infra task
kind: infra#wf-fix#wf-fix-fp:e0f4c14f4f22#daily-auto-filed
track:Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Overview / Motivation
Auto-filed by the /daily 2026-07-26 problem sweep (route 2). Surfaced by 1 independent miner group(s) over the 2026-07-26 session transcripts.
Goal
Short-circuit scripts/verify_task_body.py to an explicit not-applicable verdict for kind: infra|batch|survey bodies with has_clean_result: false, instead of returning a bare FAIL that every infra session has to reason away by hand.
Workflow gap
- Bug observed:
verify_task_body.py --issue <N>returnsOVERALL: FAILfor everykind: infratask, because it validates the clean-result body spec against a body that by definition never carries one. - Why it is a workflow gap: the verifier is prescribed as an acceptance check on the infra path but its verdict carries no signal there, so each infra session spends a paragraph explaining that the FAIL is structural — recurring noise repeated fleet-wide.
- Confidence (emitter): high
- verified-at-filing:
grep -c 'infra' scripts/verify_task_body.py→ 1 hit, and that hit is L10825 ("change once the parked corpus clears, via a future infra task"— unrelated prose), so there is nokind-keyed short-circuit — the absence-of-guard evidence; live semantic probeuv run python scripts/verify_task_body.py --issue 1684(a livekind: infratask) →[FAIL] body is not a stub — body has no \# ` H1 line …/OVERALL: FAIL (1 of 1 checks failed), reproducing the reported behavior verbatim;git log --oneline --since='7 days ago' -- scripts/verify_task_body.py` → no landed short-circuit (2026-07-26)
Evidence
- Session
2de5253e, 14:10:00Z, task #1702: the implementer's own acceptance check recorded"verify_task_body.py: --issue 1702 reports FAIL \"body is not a stub — body has no \# ` H1 line" — this is the EXPECTED status for a kind: infra task that will never carry a clean-result body (matches every other in-flight infra task); not introduced by my edits."` (transcript row 206). - The behavior reproduces today:
uv run python scripts/verify_task_body.py --issue 1684on a livekind: infratask returns the same single FAIL with the same message text, confirming the FAIL is structural rather than task-specific. - Scale of the affected corpus: 1,094
body.mdfiles undertasks/*/carrykind: infra(measured 2026-07-26 by a regex scan of the frontmatter), so any infra session prescribed this check hits the same verdict. - Measured cost: none material — roughly one paragraph of reasoning per infra task. The gap is repeated noise plus an unusable gate signal, not lost wall time.
- Design note: the verifier's argparse exposes
--issue/--file/--body-stdin(L14559-14562) andmain()resolves the body via_load_text_for_issue, so the task's frontmatterkindis already reachable on the--issuepath; the--file/--body-stdinpaths have no task frontmatter and must retain today's behavior.
Proposed change
- In
scripts/verify_task_body.pymain()(L14555+), after--issueresolution loads the task body and its frontmatter, short-circuit whenkindis in{infra, batch, survey}ANDhas_clean_resultis false: print an explicit verdict line naming the kind, e.g.OVERALL: N/A (kind: infra — no clean-result body expected), and return without running the clean-result checks. - Use a verdict string and exit code distinct from both PASS and FAIL so a caller can branch on it mechanically; do not silently coerce the case to PASS, which would make a genuinely malformed clean-result body on a mis-filed task invisible.
- Leave the
--fileand--body-stdinpaths unchanged — neither carries task frontmatter, so neither can resolvekind. - Keep the short-circuit conditional on
has_clean_result: false: an infra task that was later promoted and does carry a clean-result body must still be verified normally. - Update the SKILL.md acceptance-criteria wording that tells infra implementers to run the verifier, so the expected verdict is the not-applicable one rather than a FAIL to be explained away.
- Add a regression test pinning the not-applicable verdict for a
kind: infra/has_clean_result: falsebody and the unchanged FAIL for a malformed clean-result body.
Scope / surfaces
- Primary target:
scripts/verify_task_body.py .claude/skills/issue/SKILL.md(the infra acceptance-criteria wording that prescribes the run)tests/test_verify_task_body.py(regression pin)
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. uv run python scripts/workflow_lint.pypasses (no-flags); ruff clean on touched files.- This session runs under a
workflow_fix_target:Provenance line — it MUST NOT auto-route its own subagents' workflow-fix candidates (recursion guard).
Provenance
-
fingerprint: e0f4c14f4f22
-
workflow_fix_target: scripts/verify_task_body.py
-
fingerprint: PENDING
/daily 2026-07-26 route-2 filing. Miner refs: D-P10.
Activity