EPS
← All docs·Activity

Daily — 2026-07-13 (14-task infra drain merged clean; 1 applied + 9 filed)

updated: 2026-09-03

What happened

  • The 07-12 nightly's filing batch drained end-to-end, again. 14 kind: infra tasks completed and merged to main today (PRs #1041–#1054): the 12 route-2 filings #1286–#1297 plus #1299/#1300, which were filed mid-drain by the #1286 and #1297 sessions themselves. Landed: the fleet-wide pytest collection-break fix (#1286), the watcher boot-turn-refusal respawn lane (#1287 — closes the #1277 12.5h-stall shape), Step 10d squash-first merge routing for infra (#1288), Step 9c selector diff-base → fetched origin/main (#1289) + an AST import-map selection arm (#1299), kind-aware verify_plan c8/c15 calibration (#1291), v2 lens-critic anchor-loss hardening (#1292), the upload-policy in-place-regeneration rule (#1294), the backend_poll sys.path bootstrap (#1296), and the Step 10d post-merge guard unpushed-mv pre-check (#1300).
  • Cleanest drain day yet: zero API refusals, zero 429s, zero autocompact deaths, zero hook blocks across all 15 session transcripts; the only gate FAIL round of the day was #1288's Step 9c round 1 (implementer verification-scope mismatch, fixed in round 2, ~30 min).
  • Same-day bug→fix→live-validation loop: #1297 hit a repo-root sync conflict during Step 10d, discovered the post-merge stale-task-folder guard could delete origin's ONLY folder for a task when the status-mv is unpushed, filed #1300 — which merged ~90 min later and validated its own fix on first production contact at 12:08Z.
  • Codex quota sentinel live all day (until 2026-08-06 per the #1126 seed) — every review round ran single-Claude via the #1204 pre-spawn check; handling was correct in all 15 sessions (no composer spawns, no fabricated verdicts).
  • No experiments ran; no clean-results were promoted.

Applied workflow improvements

  1. Target: .claude/rules/workflow-fix-on-bug.md — what: § Recursion guard now documents that a wf_fix: false daily-fix: session (non-workflow-surface fix) is intentionally OUTSIDE the recursion guard — first-generation candidate filing allowed, dedup still title-prefix-covered, child body carries the guard line — commit: 10daf50452 Why: miner observation on session 7054f30e (#1286, an experiment-script fix session, auto-filed #1299): the daily skill documents the wf_fix: false carve-out but the rule's § Recursion guard didn't mirror it, reading as an inconsistency. Verified before applying: #1286 body has no workflow_fix_target: line (by design), child #1299 body does (tasks/completed/1299/body.md:87). Applied edit:
    + **A `daily-fix:` session for a NON-workflow-surface fix is intentionally
    + outside this guard.** A `/daily` route-2 item filed with `wf_fix: false`
    + (an experiment-code / non-workflow-surface fix) carries neither the
    + `wf-fix` tags nor the injected `workflow_fix_target:` Provenance block
    + (`.claude/skills/daily/SKILL.md` § route 2), so
    + `is_workflow_fix_session()` correctly stays false and its session MAY
    + auto-file a first-generation workflow-fix candidate it uncovers (worked
    + example: #1286, an experiment-script fix session, filed #1299 on
    + 2026-07-13). This is by design, not a gap: the dedup predicate still
    + covers such filings via the `daily-fix:` title prefix
    + (`task_workflow.WF_FIX_TITLE_PREFIXES`, #1180), and fan-out stays bounded
    + because the CHILD workflow-fix task's body DOES carry the
    + `workflow_fix_target:` line, putting the child session under the guard.
    
    Verification: doc-only (lint gate); workflow_lint.py --check-references + --check-asks PASS post-commit.
  2. filed for review #1301: reconcile the three v2 Codex composer specs' plan_body brief contract with the v2 skill's paths-only rule (Step C, parked candidate from #1292; session spawned).
  3. filed for review #1302: pin the inline Alternative-Explanations capsule in methodology-baselines-critic.md to critic-lens-reference.md (Step C, parked candidate from #1292; dispatch deferred to watcher backstop).
  4. filed for review #1303: clean the 5 remaining if hasattr(asw, name) stub loops in tests/test_autonomous_session_watch.py to fail-loud + grep lint pin (Step C, parked candidate from #1295; dispatch deferred).
  5. filed for review #1304: guard backend_poll.py:1384's from failure_classifier import with the sys.path bootstrap + widen the guard test + pod_config.py siblings (Step C, parked candidate from #1296; dispatch deferred).
  6. filed for review #1305: implementer pre-report verification runs the same Step 9c touched-scope test selection the gate runs (.claude/agents/implementer.md + Step 4b brief) — from #1288's only-FAIL-round-of-the-day (~30 min rework).
  7. filed for review #1306: verify_plan.py c15 heuristic recognizes a named pytest.raises negative control as fail-loud coverage (WARN false-positived on #1296's plan v1 AND v2).
  8. filed for review #1307: bind verified-at-filing: greps to the cited targets — per-target-file confirmation + mandatory relocation grep before asserting a symbol nonexistent (from the 07-12 nightly's two unbound-claim filings, #1290 + #1296).
  9. filed for review #1308: planner rule — a detection/trigger-lane plan traces its predicate against the motivating incident's real artifact (from #1287's plan v1, which would not have recovered its own motivating incident; fact-checker caught it at ~26 min cost).
  10. filed for review #1309: document the HTML-escaped bg-notification recipe in the /issue skill (read the agent's output file, never the notification body) — #1287 and #1288 each rediscovered it independently.

Other problems & notes

  • 07-12 nightly filing quality — 2 of 12 bodies carried unbound claims (severity: cost one correction round each, both caught by the pipeline). #1290's body named issue/SKILL.md as target (0 verify_plan hits; real site adversarial-planner/SKILL.md — clarifier redirected) and #1296's body asserted a cited test "no longer exists" without a relocation grep (fact-checker found it at tests/test_issue_dispatch.py:1164). Both bodies HAD verified-at-filing: lines — the greps just didn't bind per-target. Strengthening filed as #1307; tonight's 9 filings ran per-target greps.
  • #1295 post-merge guard false alarm (09:41Z): "DUPLICATE tasks/reviewing/1295 on origin/main" was really an unpushed local status-mv among 32 unpushed root commits; recovered in ~65s via sync_repo_root.py. The exact class #1300 fixed later the same day (sync-before-classify pre-check, live-validated 12:08Z). No action.
  • #1297 repo-root content conflict during Step 10d (10:31Z, concurrent #1291 status-mv): recovered in ~2.5 min via the documented scratch-worktree path; the underlying guard gap became #1300. No action.
  • #928 stuck at followups_running since 2026-07-08 (5 days; its last own-lifecycle marker is 07-08, the newest event is an unrelated #1145 claim note). Suggested action: PM checks whether the follow-up round's session is dead and re-drives /issue 928 or re-parks it at awaiting_promotion. Not auto-touched (status mutations are user/PM-only per skill rules).
  • Triage-observer INFO rows on #1289 (breadcrumb-missing-line) and #1291 (none-with-candidates) — non-gating audit flags of the pre-dispatch triage duty; both sessions completed clean. No action beyond the observer's own sidecar record.
  • Disk headroom: / at 84% (82G free), /mnt/eps-data at 85% (80G free) — both at the guard thresholds; the disk-guard tier sweep ran this morning (reaped a 1.8 GB workspace HF cache; recent non-canonical caches correctly KEPT under the 48h recency window). Watch, no action tonight.
  • Title-sync drift sweep (Step D): title-sync drift unchanged (8 rows — see logs/daily/2026-07-12.md).
  • retraction re-check: 4 marker-mined parked candidates scanned across 3 source tasks (#1292 ×2, #1295, #1296), 0 skipped — no retractions found; transcript-mined filings (#1305–#1309) confirmed against session tails + the current tree.
  • Transcript coverage note: 17 files had genuine 07-13 content (15 issue sessions + the 07-12 nightly's own session, which was clean, + one short interactive dashboard Q&A, clean); 1cdf51e6 was mtime-bumped with newest content from 07-03 and was skipped per the stale-transcript rule.

Living-docs drift

  • living_docs.py check FAILs with 199 findings — drift hash 078285c14444, identical to the open re-synthesis proposal (dead legacy anchors, relates_to ⇄ evidence mismatches incl. #722/#763/#494–#501, ~54 unlinked completed clean-results, 7 stale spec-role-header State-trailer rows). docs/open_questions.md unchanged since 2026-07-07.
  • drift proposal already open (logged 2026-07-07, event-stream hash 078285c14444); not re-proposing. The standing proposal remains: re-synthesize open_questions.md (living-docs updater/backfill) — needs your ok; not auto-applied.
  • Parked-proposal re-consideration (Step B): the one un-reconciled living-docs rejection (#713) has had no context change (no promotions today, open_questions.md untouched), and no followup-parked-redundant markers exist on any on_hold task — nothing became a re-proposal candidate.

My thoughts

Highlighted results

  • no results promoted today