workflow-fix: artifact-reuse (h) check for train-input mixes
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 <!-- workflow-fix-candidate v1 --> block raised on task #734 round 4 (emitting agent: experiment-implementer).
Goal
Add an (h) reuse-fitness check to .claude/rules/artifact-reuse.md covering reused training-input mixes / on-policy response caches — verify each reused mix file resolves on HF via list_repo_files AND is fetchable on the target backend BEFORE plan approval; if not fetchable, the plan must include a self-contained regen phase or upload the mix first.
Workflow gap
- Bug observed: A plan that reuses a parent experiment's TRAINING-INPUT MIX (a
train/*.jsonlthe parent built but never uploaded) passed planning + 3 review rounds, then crashed phase2 at the pre-trainassert data_path.exists()on the git-clone-only GCP lane because the mix is on neither HF repo and the lane cannot stage it. - Why it is a workflow gap: The (a)–(g) artifact-reuse fitness check verifies reused ADAPTERS resolve on HF (check (e)) but has NO check that a reused TRAINING-INPUT MIX / on-policy cache is fetchable on the TARGET BACKEND; the fact-checker verifies adapter paths but not train-mix paths.
- Confidence (emitter): medium
Proposed change (candidate diff sketch — refine in planning)
## The checklist
+ - **(h)** for reused TRAINING-INPUT artifacts (train/*.jsonl mixes, on-policy
+ response caches): the file resolves on HF via `list_repo_files` AND is
+ fetchable on the TARGET backend — the git-clone-only GCP lane stages NO
+ VM-local `data/`, so a mix the parent built but never uploaded is unreachable
+ there. If not fetchable: the plan includes a self-contained regen phase
+ (reuse the parent's deterministic build blocks) OR uploads the mix first.
+ (incident #734 round-4: #664's seed-42 marker mix was on neither HF repo;
+ phase2 crashed at the pre-train assert on the GCP lane.)
Plus parallel updates:
.claude/agents/consistency-checker.md— extend the artifact-reuse section to call out the (h) check (the consistency-checker is the agent that runs the reuse-fitness pass)..claude/agents/planner.md— §11 hyperparameter grounding already requiresSource:per knob; add an analogous "Source:" line per REUSED INPUT-DATA artifact (train mix, on-policy cache, eval JSON) that names how the file is fetched on the target backend..claude/agents/critic.mdMethodology lens item 9 (artifact reuse) — extend to verify (h) alongside (a)-(g).
Scope / surfaces
- Primary target:
.claude/rules/artifact-reuse.md - Sibling:
.claude/agents/consistency-checker.md,.claude/agents/planner.md,.claude/agents/critic.md - Grep the workflow surface for the pattern (
(a)-(g),artifact-reuse,reuse-fitness) before editing — there may be other call sites that enumerate the (a)-(g) checks (code-reviewer.md, etc.) that need to grow a (h) reference too.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.pypasses; 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/rules/artifact-reuse.md
- fingerprint: e6a24e31f459
target_file: .claude/rules/artifact-reuse.md
bug_observed: A plan that reuses a parent experiment's TRAINING-INPUT MIX (a train/*.jsonl the parent built but never uploaded) passed planning + 3 review rounds, then crashed phase2 at the pre-train assert data_path.exists() on the git-clone-only GCP lane because the mix is on neither HF repo and the lane cannot stage it.
why_workflow_gap: The (a)-(g) artifact-reuse fitness check verifies reused ADAPTERS resolve on HF (check (e)) but has NO check that a reused TRAINING-INPUT MIX / on-policy cache is fetchable on the TARGET BACKEND; the fact-checker verifies adapter paths but not train-mix paths.
proposed_change: Add an (h) check to artifact-reuse.md — "training-input mixes / on-policy caches: verify each reused mix file resolves on HF via list_repo_files AND is fetchable on the target backend (the git-clone-only GCP lane cannot stage a VM-local-only mix) BEFORE plan approval; if not fetchable, the plan must include a self-contained regen step or upload it" — and have the fact-checker verify reused train-mix paths the same way it verifies adapter paths.
diff_sketch: |
The checklist
-
- (h) for reused TRAINING-INPUT artifacts (train/*.jsonl mixes, on-policy
- response caches): the file resolves on HF via
list_repo_filesAND is - fetchable on the TARGET backend — the git-clone-only GCP lane stages NO
- VM-local
data/, so a mix the parent built but never uploaded is unreachable - there. If not fetchable: the plan includes a self-contained regen phase
- (reuse the parent's deterministic build blocks) OR uploads the mix first.
- (incident #734 round-4: #664's seed-42 marker mix was on neither HF repo;
- phase2 crashed at the pre-train assert on the GCP lane.) confidence: medium related_task: #734