daily-fix: closed-sibling probe suppressed 21 of 24 filings
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-26 problem sweep (route 2). Surfaced by the sweep's own filing run — the probe blocked 21 of this run's 24 filings.
The #1711 closed-sibling pre-filing probe and the #1674 landed-fix probe, both of which
merged on 2026-07-26, together record a terminal non-filing outcome for the large majority
of a nightly batch on this repo's hot workflow files. Tonight the operator eyeballed all 21
and every one was a false positive, so the batch was filed with --retry-suspects. A run
that did not check would have silently dropped 21 verified defects.
Goal
Tighten the closed-sibling / landed-fix suspect predicates so a shared hot target file or a generic title word does not by itself record a non-filing outcome, and make the suppressed count impossible to miss.
Workflow gap
- Bug observed: on the 2026-07-26 batch,
daily_drive_filings.py --dry-runrecordedCLOSED-SIBLING-SUSPECTorLANDED-FIX-SUSPECT(terminal, NOT filing) for 21 of 24 manifest items; only 3 would have filed. All 21 were manually confirmed unrelated to the cited sibling. - Why it is a workflow gap: the nightly sweep concentrates on a handful of hot
workflow-surface files (
.claude/skills/issue/SKILL.md,scripts/workflow_lint.py,.claude/agents/*.md), so within any 7-day window nearly every new filing shares a target file with some recently-closed sibling. Amatched: target-only hit therefore carries almost no evidence of duplication on this corpus, yet it suppresses the filing. - Confidence (emitter): high
- verified-at-filing:
uv run python scripts/daily_drive_filings.py --dir logs/daily/filings-2026-07-26 --dry-run→ 21 suspect lines vs 3FILElines (24 items);grep -oE '\(matched: [^)]*\)' /tmp/dryrun2.log | sed 's/; .*//' | sort | uniq -c | sort -rn→ top reasonstitle:main(9), baretarget(7),title:runs(5),title:merge(4),title:tests(3),title:step(3),title:probe(3),title:path(3),title:check(3);git rev-parse --verify --quiet '9106aaf478^{commit}'→9106aaf478...resolves, andgit show 9106aaf478 --statconfirms it is task #1560, the commit that BUILT the Step 5a/10d spec-freshness sync (2026-07-20) — i.e. the mechanism tonight'sspec-freshness-sync-inconsistent-treeitem reports a defect IN, not a prior fix for it. (2026-07-26)
Evidence
- Representative false positives, each a terminal non-filing outcome:
main-red-inline-round-duty-mirror→#1648"lint bare git-commit recipes lacking pathspec" (matched:target). #1648 is unrelated to a deleted lint function; this is the URGENT main-red restore.code-reviewer-ruff-policy-pin→#1693"phase idempotency + inter-phase schema assert" (matched:target).planner-grounding-discipline→#1604"wire identity+bias baseline + kNN retrieval mandate into planner/critic lenses" (matched:target,title:planner).select-step9c-tests-ergonomics→#1697"--map-files timeout dispersion margin" — same file and even the same flag name, but #1697 changed a timeout constant while this item is about--jsonbeing silently ignored.spec-freshness-sync-inconsistent-tree→ landed-fix suspect9106aaf478, which is the commit that introduced the mechanism being reported as defective.
- Nine separate items matched on the single title token
main— a word that appears in ordinary workflow prose (origin/main, "main tree", "main-red") and carries no duplication signal. - The
#1399advisory this probe descends from was explicitly specified as advisory only, never a block (.claude/rules/workflow-fix-on-bug.md, § Recently-closed-sibling ADVISORY: "it never blocks the filing, never changes exit codes"). The#1711probe records a terminal ledger outcome instead, which is a stronger contract than the rule documents. - Cost tonight: zero filings lost, because the operator read the dry-run and re-ran with
--retry-suspects. The exposure is the counterfactual — a run that trusts the default drops the batch silently, and the ledger reads as a clean pass.
Proposed change
- Require MORE than a bare target-file match before recording a suspect outcome: e.g. a shared target PLUS at least one shared informative title token, or a body-level overlap signal.
- Extend the non-informative token stoplist used by the title-overlap arm with the generic
workflow vocabulary observed here —
main,runs,step,merge,tests,path,check,probe,state,daily,zero,repo,shared— so a single such token cannot produce a match. (task_workflow.informative_title_tokensis the shared implementation; check whether the stoplist belongs there or driver-side.) - Reconcile the contract with
.claude/rules/workflow-fix-on-bug.md: either soften the probes to advisory (print, then file) to match the documented#1399behaviour, or update the rule to state that the closed-sibling probe is now blocking-by-default with--retry-suspectsas the override. Today the rule and the code disagree. - Make the suppression legible regardless: print a one-line summary
(
N of M items suppressed as suspects — re-run with --retry-suspects to file) at the end of the run, and record the suppressed count in thefiled.jsonlrun record, so a future operator cannot mistake a mass suppression for a clean batch.
Scope / surfaces
- Primary target:
scripts/daily_drive_filings.py src/explore_persona_space/task_workflow.py(informative_title_tokensstoplist, if the shared helper is the right home).claude/rules/workflow-fix-on-bug.md(advisory-vs-blocking contract reconciliation)
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. uv run python scripts/workflow_lint.pypasses (no-flags); ruff clean on touched files.- Loosening the predicate must not reintroduce the
#1350/#1329duplicate-filing class the probe exists to prevent — a genuine same-bug sibling must still be caught. The two measured reference points: #1350 (filed 25 min after #1329 merged the same fix) should still match; tonight's 21 should not. - This session runs under a
workflow_fix_target:Provenance line — it MUST NOT auto-route its own subagents' workflow-fix candidates (recursion guard).
Provenance
-
fingerprint: 24883d891330
-
workflow_fix_target: scripts/daily_drive_filings.py
-
fingerprint: PENDING
/daily 2026-07-26 route-2 filing. Observed directly in this run's own filing dry-run.