daily-fix: planner names measurement grain (unit of analysis
kind: infra#wf-fix#wf-fix-fp:9bb103ec6716#daily-auto-filed
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 /daily 2026-08-01 (route 2: behavior/logic change → independent review) from consolidated problem sweep entry C5 (miner 6; session 75f66748, #1900 → redo filed and run as #1979).
Goal
Make the measurement GRAIN — the unit of analysis (per-query vs per-prefix vs per-arm) plus the aggregation from raw rows to that unit — a NAMED per-DV plan field in planner §6 Evaluation, with a matching statistics-critic lens item that REVISEs a plan whose DV grain is unstated or mismatched to the Goal's construct.
Workflow gap
- Bug observed: #1900's leakage-predictor race was computed per (prefix, query) row; Thomas wanted per-PREFIX: "basically i want to measure leakage on a per prefix level, averaged across queries" / "RESULTS THAT RAN WERE PER QUERY WHICH IS TERRIBLE". The assistant conceded the grain mismatch (the answer-similarity predictor was "asymmetric on two axes at once"); the full redo was filed as #1979 (~15–25 GPU-h, ~a day wall) — an entire run's spend lost to an unstated unit-of-analysis choice.
- Why it is a workflow gap: the plan pipeline names both mapping ARMS (prefix vs context), constructs, and on-distribution status per DV, but nowhere requires stating the unit each DV is computed AT and how rows aggregate to it — so a grain the user never intended survives planner + critics untouched.
- Confidence: high (gap re-verified by grep; incident transcript-grain, miner-inferred).
- verified-at-filing:
grep -n 'grain\|unit of analysis\|per-query\|per-prefix\|aggregat' .claude/agents/planner.md→ 3 hits, ALL about reuse-row row-COUNT grain (§10 Reproducibility Card :471-474 "counted realized grain for any reuse row whose row/line count feeds a plan floor ... (#1900)" — the #1910/7fed02515d fact-checker fix, a sizing check, NOT a DV unit-of-analysis field) and a smoke-slice corpus-grain line (:559); §6 Evaluation (:330-352) requires Measurement validity / Dual-DV / nulls / folds / mapping-baselines blocks — no unit-of-analysis or aggregation field.grep -n 'grain\|unit of analysis\|aggregat' .claude/agents/statistics-critic.md→ 1 hit (:170, "DISJOINT ... at the group grain" — fold disjointness only).grep -n 'grain\|unit of analysis' .claude/rules/critic-lens-reference.md→ no measurement-grain item (hits are compute-routing text).git log --oneline --since='7 days ago' -- .claude/agents/planner.md .claude/agents/statistics-critic.md .claude/rules/critic-lens-reference.md→ 7fed02515d (#1910) covers only the reuse-row-count sense of "grain"; no landed DV-grain field (2026-08-02).
Proposed change (refine in planning)
.claude/agents/planner.md§6 Evaluation: extend the Measurement-validity per-DV table with a required Unit of analysis column/field — the grain the DV is computed at (e.g. per-prefix), the raw-row grain it is derived from (e.g. per-(prefix, query)), and the aggregation between them (e.g. mean over queries within prefix) — plus one sentence tying the chosen grain to the Goal's construct. Named N/A escape for DVs with a single natural grain..claude/agents/statistics-critic.md(+ the v1 Statistics lens in.claude/rules/critic-lens-reference.md): new item — REVISE when a DV's unit of analysis is unstated, when the aggregation from raw rows to the stated unit is unstated, or when the stated grain does not match the Goal's construct (the #1900→#1979 shape: a per-prefix leakage question scored per (prefix, query) row).- Cross-reference the existing "both mapping arms" rule so grain and arm are stated together for mapping-line DVs.
Scope / surfaces
- Primary target:
.claude/agents/planner.md, .claude/agents/statistics-critic.md, .claude/rules/critic-lens-reference.md - Also touch
.claude/rules/planner-section-reference.md§ 6 (the full §6 template lives there) so template and summary stay in sync; keep the reuse-row "grain count" wording distinct from the new DV field to avoid conflating the two senses.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff/bash -n on touched files passes.- v2 lens→owner ledger: if the statistics-critic gains the item, update
.claude/rules/lens-coverage-map.md(--check-lens-coverage). - Recursion guard: this task's session carries the workflow_fix_target Provenance line and MUST NOT auto-route its own subagents' workflow-fix candidates.
Provenance
- fingerprint: 9bb103ec6716
- workflow_fix_target: .claude/agents/planner.md, .claude/agents/statistics-critic.md, .claude/rules/critic-lens-reference.md
- origin: /daily 2026-08-01 problem sweep, CONSOLIDATED.md entry C5.
Activity