workflow-fix: staged-index check for ignored artifacts
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 on task #958 (emitting agent: experiment-implementer subagent mixed-turn-fit-958, inline user-chat round 7; routed by the orchestrator).
Goal
Add a staged-index verification step to the inline-round completion contract: after the explicit-path git add, verify every intended artifact file entered the index (git status --short on the round artifact dirs + git check-ignore probe) and git add -f convention-committed files skipped by ignore rules.
Workflow gap
- Bug observed: An inline round's explicit-path
git add eval_results/issue_958/mixed-turn-fit/silently excluded the round's convention-committedpercell/*.npzcells via the repo-wide*.npzgitignore rule — the commit shipped without its per-unit cells and the drop was caught only by a manual orchestrator check (#958 round 7, 2026-07-20). - Why it is a workflow gap: The same-turn completion contract (CLAUDE.md user-chat inline carve-out) and the Step 9a-ter inline payload recipe (SKILL.md) both mandate "commit by explicit path" but say nothing about ignore rules;
git add <dir>silently skips ignored files with rc=0, so any round whose artifact convention includes an ignored pattern (npz per-unit cells being the live example — the parent #958percell/convention commits them force-added) ships an incomplete durable record with no error signal. - Confidence (emitter): high
- verified-at-filing:
grep -rn 'git add -f\|check-ignore' .claude/skills/issue/SKILL.md CLAUDE.md→ 0 hits in both named targets (absence-of-guard claim; the 0-hit in-target result is the evidence); companion presence probegrep -c 'explicit path' CLAUDE.md .claude/skills/issue/SKILL.md→ 4 / 3 hits (the contract text exists at both targets); landed-fix history checkgit log --oneline --since='7 days ago' -- .claude/skills/issue/SKILL.md→ 5 commits, all unrelated classes (#1560/#1563/#1558/#1562/#1540) (2026-07-20)
Proposed change (candidate diff sketch — refine in planning)
+ After the explicit-path `git add`, verify the staged set: `git status --short <round dirs>` —
+ every intended artifact file shows as staged; for convention-committed files matching an
+ ignore pattern (e.g. percell/*.npz under the repo-wide *.npz rule), `git add -f` them
+ explicitly and re-verify. A silent ignore-rule drop ships the round without its per-unit
+ cells (#958 round 7, 2026-07-20).
Scope / surfaces
- Primary target:
.claude/skills/issue/SKILL.md, CLAUDE.md - Grep the workflow surface for the pattern before editing (
grep -rn 'explicit path' .claude/ CLAUDE.md) and update every completion-contract / payload-commit site that stages artifact dirs; list them in the plan. Consider whether subagent-facing briefs (experiment-implementer spec) should carry the same one-line duty.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes; ifworkflow.yamlorCLAUDE.mdchange, they stay consistent with the rule file.- This session runs under
EPM_WORKFLOW_FIX_SESSION=1and carries aworkflow_fix_target:Provenance line — it MUST NOT auto-route any of its own subagents' workflow-fix candidates (recursion guard).
Provenance
- workflow_fix_target: .claude/skills/issue/SKILL.md, CLAUDE.md
- fingerprint: 9f474aa18823
Surfaced prose (verbatim, from the emitting subagent's report): "git, not HF — the percell/*.npz follow the parent eval_results/issue_958/percell/ convention (the brief called for that naming). They're gitignored by the repo-wide *.npz rule, so my explicit-path git add silently excluded them (my round-5 template, dup-excluded-turn1-refit, was JSON-only, so I didn't force-add) — they need git add -f."