workflow-fix: fact-checker verifies realized grain of row-grain reuse rows
kind: infra#wf-fix#wf-fix-fp:2d5476067c0b
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 workflow-fix-on-bug protocol from a failure-lesson candidate
raised on task #1900 (emitting agent: experiment-implementer, crash-fix round 4;
epm:new-bug-class v1 plan_row_count_floor_vs_realized_grain).
Goal
Extend the adversarial-planner Phase-1.5 fact-checker HF-reuse-row instructions to verify the REALIZED GRAIN (row/line counts) of row-grain-consuming reuse rows — not just existence at the pin.
Workflow gap
- Bug observed: plan #1900 assumed "~50–300 positive rows/mix" for the reused
delta_tf/<mix>/pos.jsonl; the fact-checker verified the files EXIST at the pinned revision but never counted rows. Realized grain was exactly 20 rows/mix, and a plan-derived 40-row hard floor crashed fellows job 16055 (one burned launch + a crash-fix round). - Why it is a workflow gap: the fact-checker template (adversarial-planner SKILL.md § Phase 1.5, "For EACH HF reuse row: verify existence with the Python Hub API...") mandates existence/probe-at-pin only; a reuse row whose row/line count feeds a plan floor, sizing arithmetic, or subset draw needs its grain counted (a one-file
hf_hub_download+wc -lis seconds). This is the grain sibling of the #1345 probe-at-pin rule the template already carries. - Confidence (emitter): medium
- verified-at-filing:
grep -c 'realized grain\|count rows' .claude/skills/adversarial-planner/SKILL.md→ 0 hits (absence-of-guard claim — 0-hit in-target IS the evidence) (2026-07-31). Landed-fix history: recent SKILL.md commits carry no grain-count semantics.
Proposed change (candidate diff sketch — refine in planning)
For EACH HF reuse row: verify existence with the Python Hub API (...) at the
pinned revision, per named stem/path ...
+ For a ROW-GRAIN-CONSUMING reuse row — a file whose row/line count feeds a
+ plan floor, sizing arithmetic, per-mix quota, or subset draw — ALSO verify
+ the realized grain: hf_hub_download the file (or one representative per
+ family) at the pin and COUNT its rows; a floor/sizing figure resting on an
+ assumed range with no counted basis is UNVERIFIED (#1900: assumed 50-300
+ rows/mix, realized exactly 20; a 40-row hard floor killed the launch).
Scope / surfaces
- Primary target:
.claude/skills/adversarial-planner/SKILL.md - Consider the sibling surface
.claude/agents/planner.md(reuse fitness self-attestation) — grep both for the pattern before editing; the planner's own §12 "how to verify" conventions may warrant a matching line.
Constraints / invariants
- Workflow-surface only.
scripts/workflow_lint.py --check-askspasses; ruff on touched files passes. - This session runs under
EPM_WORKFLOW_FIX_SESSION=1and carries aworkflow_fix_target:Provenance line — recursion guard applies.
Provenance
- workflow_fix_target: .claude/skills/adversarial-planner/SKILL.md
- fingerprint: 2d5476067c0b
Origin: #1900 crash-fix round 4 failure-lesson (root_cause_confirmed) + epm:new-bug-class v1 plan_row_count_floor_vs_realized_grain.
Activity