workflow-fix: carry-over gate path regex misses include-tree
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-08-01 Step C parked-candidate sweep from a workflow-fix candidate parked on task #1915 (emitting agent: implementer round 1, recursion-guarded; formal candidate block, fingerprint 7ddb0181b608).
Goal
Widen verify_carryover_inputs.py's channel-A _PATH_RE so plan-text citations of committed inputs under tests/, scripts/, configs/ prefixes are extracted and audited like the three currently-covered prefixes, with a corpus sweep to calibrate the new false-positive surface.
Workflow gap
- Bug observed: a plan-text citation of a committed input under an include-tree prefix outside
eval_results|ood_eval_results|data(e.g.tests/fixtures/eval_results/a.json) produces NO finding at all — channel-A_PATH_REonly matches those three prefixes, so both the clone-lane reachability check and the new #1915 rsync exclude subtraction are blind to it in plan text (the #1915 pin tests enter viaclassify()directly). - Why it is a workflow gap: the gate's extraction scope silently under-covers the very path class #1915 made auditable; an untracked or nested-excluded tests/-prefixed input cited in a plan sails through the Step 6a.5 gate.
- Confidence (emitter): medium
- verified-at-filing:
grep -n 'eval_results|ood_eval_results|data' scripts/verify_carryover_inputs.py→ 1 hit:_PATH_REat L62-64 matches exactly(?:eval_results|ood_eval_results|data)/— notests|scripts|configsalternative present (2026-08-02 UTC). Landed-fix check:git log --oneline --since='7 days ago' -- scripts/verify_carryover_inputs.py→ 2 commits (ea98b57959#1915 itself,dcf37f9746#1835), neither widening the prefix set. Open-sibling check: open task #1935 ("exclude plan-declared outputs from carry-over bare-name resolution") targets the same file but a DIFFERENT bug (bare-name resolution of outputs, not channel-A prefix coverage) — not a duplicate.
Proposed change (candidate diff sketch — refine in planning)
- r"(?P<path>(?:eval_results|ood_eval_results|data)/"
+ r"(?P<path>(?:eval_results|ood_eval_results|data|tests|scripts|configs)/"
+ # + corpus sweep over persisted plans to calibrate new-prefix false positives
Keep the existing glob/dir/no-ext skip rungs; document the false-positive surface (plans routinely cite scripts/*.py as code references — mostly classify in-ref/planned-output; audit a corpus sweep before landing).
Scope / surfaces
- Primary target:
scripts/verify_carryover_inputs.py - Run the corpus sweep over persisted plans named in the diff sketch before landing.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes.- Recursion guard applies (workflow_fix_target Provenance line below).
Provenance
- workflow_fix_target: scripts/verify_carryover_inputs.py
- fingerprint: c0ce6e284ef5 (tag-authoritative; supersedes body-carried fingerprint: 7ddb0181b608)
- origin: parked candidate on task #1915, ts 2026-08-02T00:04:16Z, routed by /daily 2026-08-01 Step C.
target_file: scripts/verify_carryover_inputs.py
bug_observed: A plan-text citation of a committed input under an include-tree prefix outside eval_results|ood_eval_results|data (e.g. tests/fixtures/eval_results/a.json) produces NO finding at all — channel-A _PATH_RE only matches those three prefixes, so both the clone-lane reachability check and the new #1915 rsync exclude subtraction are blind to it in plan text (the #1915 pin tests enter via classify() directly).
why_workflow_gap: The gate's extraction scope silently under-covers the very path class #1915 made auditable; an untracked or nested-excluded tests/-prefixed input cited in a plan sails through the Step 6a.5 gate.
proposed_change: Widen channel-A _PATH_RE to the remaining include-tree prefixes (tests|scripts|configs), keeping the existing glob/dir/no-ext skip rungs; document the false-positive surface (plans routinely cite scripts/*.py as code references — mostly classify in-ref/planned-output, but audit a corpus sweep before landing).
confidence: medium
related_task: #1915