workflow-fix: flag malformed footer Reused bullets escaping the form-keyed check 37
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 workflow-fix-on-bug protocol from a prose follow-up surfaced by clean-result-critic (round 1 on task #1739, 2026-07-31).
Goal
Extend verify_task_body's footer reuse-provenance checking so a Reused bullet that LACKS the canonical - Reused ... from [#M](...) form (bare issue number + bare rev pin, no link, no repo-qualified path, no fitness rationale) is flagged instead of silently escaping the form-keyed check.
Workflow gap
- Bug observed: task #1739's footer carried
#779 direction bank rev 037fcbbas a Reused bullet — no[#M](...)link form, no repo-qualified pinned path, no fitness rationale — andverify_task_body.py --issue 1739returned OVERALL PASS; clean-result-critic Lens 5 caught it manually (FAIL, tagged mechanizable: yes). - Why it is a workflow gap: check 37 (
check_footer_reuse_bullets_pinned, WARN, v4-only, #1370) verifies a revision pin on bullets matching the canonical- Reused ... from [#M](...)shape; unverified hypothesis — verify at plan time: its predicate is keyed on that link form, so a malformed Reused-intent bullet never enters the check's match set (consistent with the #1739 incident: the malformed bullet passed). The mechanical verifier should be the first line for exactly this class (the clean-result-critic's mechanizable:-yes note). - Confidence (emitter): medium
- verified-at-filing:
grep -n "Reused\|reuse" scripts/verify_task_body.py→ 8+ hits incl. check 35 (check_cross_issue_reuse_provenance, L725-728) and check 37 (check_footer_reuse_bullets_pinned, L776-779, form-keyed docstring) (2026-07-31). Presence of the checks confirmed; the escape-by-malformation mechanism is the labeled hypothesis above, evidenced by the live #1739 OVERALL-PASS-with-malformed-bullet incident.
Proposed change (candidate diff sketch — refine in planning)
In check_footer_reuse_bullets_pinned (or a sibling check):
- ALSO scan footer bullets for Reused-INTENT markers (case-insensitive
reused/reuse of/ a bare#<M> ... rev <hex>pattern in the Repro footer) that do NOT match the canonical- Reused ... from [#M](...)form → WARN naming the bullet + the canonical form. - For canonical-form bullets, additionally WARN when the bullet carries no repo-qualified artifact path alongside the rev pin (a bare rev is not independently resolvable) and no fitness clause. (Severity WARN to match check 37's class; escalation to FAIL is a planner decision.)
Scope / surfaces
- Primary target:
scripts/verify_task_body.py - Grep the workflow surface for the pattern before editing (
grep -rln 'check_footer_reuse_bullets_pinned' scripts/ tests/ .claude/) and update every hit; list them in the plan (tests pinning check 37 likely need companion cases).
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes.- Grandfathered v3/v2 bodies must not newly FAIL (v4-only check class, per check 37's existing scoping).
- This session runs under a workflow-fix Provenance line — it MUST NOT auto-route its own subagents' workflow-fix candidates (recursion guard).
Provenance
- workflow_fix_target: scripts/verify_task_body.py
- fingerprint: 19a580d5bad9
Surfaced prose (verbatim, from clean-result-critic round-1 report on #1739): "The #779 direction bank rev 037fcbb bullet lacks a fitness rationale, and neither Reused bullet carries a repo-qualified pinned path or the [#M](...) link form (rev pins not independently resolvable). Tagged mechanizable: yes with a check sketch; surfaced a follow-up to tighten the verifier's footer-reuse check accordingly."