daily-fix: step9c oracle detached from root dirt
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-07-15 problem sweep (route 2 — behavior/logic change, independent review required).
Goal
Run the Step 9c pristine-oracle baseline compare in a detached scratch worktree at origin/main by default, so other sessions' shared-root dirt never serializes an infra gate; default step9c fixture TMPDIR onto the data disk.
Workflow gap
- Bug observed: #1317's baseline compare serialized ~3h20m behind #825's live GCP workload dirtying the shared root (5 bounded poll legs; 0f9a8fbf 08:38-11:54Z) — despite #1251 ("step9c baseline oracle tolerates unrelated concurrent dirty", completed) the overlapping-dirt case still blocks; separately #1363's gate needed fixture temp writes redirected to the data disk to pass under disk pressure (5464a16a 22:37-23:04Z).
- Why it is a workflow gap: the scratch-worktree machinery exists in step9c_baseline.py but only as an eligibility-gated FALLBACK — a live sibling workload continuously re-dirtying the root keeps the primary path waiting instead of routing straight to the detached oracle, and fixture TMPDIR defaults to
/under disk pressure. - Severity: medium
- verified-at-filing:
grep -n 'scratch\|dirty\|TMPDIR' scripts/step9c_baseline.py→ scratch machinery PRESENT as fallback (--scratch-timeout-sL26,--no-scratch-fallbackL27, "scratch-worktree fallback creation" L53, scratch PYTHONPATH shadow L61-70; "dirty oracle on a failing node where the scratch fallback is ineligible" L46-49) — the eligibility-gated fallback exists but the 07-15 #1317 serialization post-dates it, showing the overlapping-dirt case is not covered; no TMPDIR/data-disk routing hit (absence confirmed for that leg) (2026-07-16 UTC).
Proposed change (refine in planning)
In scripts/step9c_baseline.py + .claude/skills/issue/SKILL.md Step 9c: (a) make the detached scratch worktree at origin/main the DEFAULT oracle root (or auto-route to it as soon as the shared root reads dirty once, rather than polling the root clean across bounded legs) so a concurrent session's continuous dirt never serializes the gate — reconcile with #1251's tolerance work and the existing eligibility gates (L46-53) to see which predicate kept #1317 on the waiting path; (b) default step9c fixture temp writes (TMPDIR) onto the data disk (the #1363 in-session fix, generalized) so the gate passes under root-disk pressure.
Scope / surfaces
- Primary target:
scripts/step9c_baseline.py(scratch fallback, L26-70) - Secondary:
.claude/skills/issue/SKILL.mdStep 9c (gate invocation)
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. - The pristine-oracle correctness contract (HEAD-pinned scratch, PYTHONPATH shadow, never the invoking sys.executable) is preserved.
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 — it MUST NOT auto-route its own subagents' workflow-fix candidates (recursion guard).
Provenance
-
fingerprint: 8d992e55716e
-
workflow_fix_target: scripts/step9c_baseline.py
Mined from 2026-07-15 session transcripts by the /daily problem sweep. Evidence: 0f9a8fbf (#1317) 08:38-11:54Z (batch 09 P3); 5464a16a (#1363) 22:37-23:04Z (batch 00 P14).