workflow-fix: semantic probe for absence-claim greps
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 prose follow-up raised on task #1386 (emitting agent: /issue orchestrator, Step 1 clarifier context-gathering).
Goal
Strengthen the verified-at-filing rule for ABSENCE claims about text-matching guards (substring lists / regex classifiers): require a semantic probe — grep for fragments/substrings of the claimed text and/or run the classifier against the claimed text — plus a recent-landed-fix history check (git log --since='7 days ago' -- <target_file> or the #1399 advisory list), instead of accepting a verbatim-literal 0-hit grep as absence evidence.
Workflow gap
- Bug observed: #1386 (daily-fix, Xet "maximum queue size reached" transient) was filed and an autonomous session spawned ~9h AFTER #1360 landed the functional fix on main (
hub.py'queue size reached'substring, merge289ad17572); the filer's verified-at-filing grep for the verbatim'maximum queue size'returned 0 hits and was accepted as absence evidence. A whole session spawn was burned discovering the duplicate. - Why it is a workflow gap: the current rule grants absence claims an exemption ("its 0-hit in-target result IS the evidence" — workflow-fix-on-bug.md § verified-at-filing (a)), but for a TEXT-MATCHING guard the functional fix routinely lands under a SHORTER substring than the full error text, so a verbatim-literal grep is structurally blind to it. Neither downstream defense covers this case: the dedup predicate keys on OPEN tasks only (by design), and the #1399 recently-closed-sibling advisory enumerates only
workflow-fix:/daily-fix:-prefixed closed tasks — #1360 was an ordinary infra task with no prefix, so it was invisible to both. - Confidence (emitter): medium
- verified-at-filing:
grep -rln 'verified-at-filing' .claude/ tests/→ 2 workflow-surface files (2026-07-16):.claude/rules/workflow-fix-on-bug.md(6 hits — the § Body-file template line, the consistency-BINDS paragraph (a)-(c), the anti-pattern table rows) and.claude/skills/daily/SKILL.md(1 hit — the route-2 filing duty). Presence claim confirmed per target;tests/test_daily_three_route_classifier_doc.pypins the daily wording and may need a matching update.
Proposed change (candidate diff sketch — refine in planning)
In workflow-fix-on-bug.md § verified-at-filing, extend clause (a)'s absence-claim exemption:
+ (a') An ABSENCE claim about a TEXT-MATCHING guard (an error-text substring
+ list, a regex classifier, a transient-error predicate) is NOT satisfied by a
+ verbatim-literal grep alone: probe SEMANTICALLY — grep for shorter fragments
+ of the claimed text, and/or run the predicate against the claimed text
+ (e.g. `uv run python -c "...; print(_is_transient_upload_error(RuntimeError('<text>')))"`)
+ — and check for a recently-landed fix on the target file
+ (`git log --oneline --since='7 days ago' -- <target_file>`), since the
+ dedup predicate (open-tasks-only) and the #1399 advisory
+ (wf-fix/daily-fix-prefixed tasks only) are both blind to an ordinary
+ landed infra fix. (#1386-over-#1360, 2026-07-16.)
Mirror one line into daily/SKILL.md route 2's filing duty; add an anti-pattern
table row; update tests/test_daily_three_route_classifier_doc.py if it pins wording.
Scope / surfaces
- Primary target:
.claude/rules/workflow-fix-on-bug.md,.claude/skills/daily/SKILL.md - Grep the workflow surface for the pattern before editing
(
grep -rln 'verified-at-filing' .claude/ CLAUDE.md scripts/ tests/) and update every hit; list them in the plan.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes; ifworkflow.yamlorCLAUDE.mdchange, they stay consistent with the rule file.- This session runs under
EPM_WORKFLOW_FIX_SESSION=1and carries aworkflow_fix_target:Provenance line — it MUST NOT auto-route any of its own subagents' workflow-fix candidates (recursion guard). - Non-architectural: a rule-text tightening, no public-contract change.
Provenance
- workflow_fix_target: .claude/rules/workflow-fix-on-bug.md, .claude/skills/daily/SKILL.md
- fingerprint: 9ce977ee5851
Surfaced prose (verbatim, from the /issue 1386 session, 2026-07-16): "Root cause of the mis-filing: the verified-at-filing grep searched the verbatim 'maximum queue size' (0 hits) while the landed guard uses the shorter functional substring 'queue size reached' — a too-literal absence probe. Neither the open-task dedup nor the #1399 closed-sibling advisory (wf-fix/daily-fix titles only) could catch the duplication because #1360 was an ordinary infra task. Absence claims about text-matching guards need a semantic probe + a landed-fix history check at filing time."