EPS
← All tasks·#1546Completed

workflow-fix: digest crash-tails on orchestrator poll turns

kind: infra#wf-fix#wf-fix-fp:75a693142385#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 the workflow-fix-on-bug protocol from the 2026-07-18 /daily transcript problem sweep (c3-P1 + c5-P10). Route-2 filing.

Goal

Extend the trigger-dense-review discipline so (a) orchestrator poll/forensics turns ingest crash-log tails + lane state as STRUCTURAL DIGESTS (counts + file references, not raw text) and (b) guard-hook task briefs pass the hook's own BLOCKED text by file reference — closing the two refusal-kill classes that first-pass brief neutralization does not cover.

Workflow gap

  • Bug observed: 7 refusal kills 15:04-17:52 wedged the #1481 orchestrator as it paged raw pod crash-forensics tails on its OWN poll turns (session replaced); and guard-hook task briefs carrying the hook's own BLOCKED text drew 3 more refusal kills (c5-P10).
  • Why it is a workflow gap: trigger-dense-review.md § First-pass briefs (#1503) and § Revision-round briefs (#1413) neutralize SUBAGENT BRIEF composition, but neither covers the ORCHESTRATOR's own poll/forensics turns (where it reads raw crash tails directly), nor explicitly the case of a brief whose TARGET is a guard hook carrying that hook's BLOCKED text.
  • Confidence (emitter): medium
  • verified-at-filing: grep -n -i 'poll turn\|forensic\|crash-log tail' .claude/rules/trigger-dense-review.md → 0 hits; the § First-pass briefs section scopes its read/vocabulary discipline to SUBAGENT briefs, with no orchestrator-poll-turn digest duty and no explicit hook-BLOCKED-text-by-reference clause (2026-07-19)

Proposed change (candidate diff sketch — refine in planning)

# trigger-dense-review.md: add an § Orchestrator poll/forensics turns clause —
+ When the ORCHESTRATOR itself polls a run whose forensics are trigger-dense
+ (crash-log tails, pod stderr, guard-BLOCKED output), it ingests them as
+ STRUCTURAL DIGESTS: counts, grep -c of error/traceback/killed/OOM, sha +
+ file references, a bounded windowed excerpt — NEVER the raw multi-KB tail
+ into its own context (the #1481 orchestrator wedge: 7 kills paging raw
+ crash tails on poll turns).
# And in § First-pass briefs: a brief whose target is a guard hook passes the
# hook's BLOCKED text by file reference, never inlined (c5-P10: 3 kills).
# issue-tick SKILL.md: confirm the tick's crash-tail read stays digest-only
# (grep -c / tail-bounded), consistent with this clause.

Scope / surfaces

  • Primary target: .claude/rules/trigger-dense-review.md, .claude/skills/issue-tick/SKILL.md
  • Add the orchestrator-poll-turn clause + the hook-BLOCKED-text-by-reference clause; verify the issue-tick crash-tail read is already digest-only (it is documented as vocabulary-thin — confirm it does not page raw tails).

Constraints / invariants

  • Workflow-surface only. Neutral gate vocabulary throughout (CLAUDE.md § Spurious usage-policy refusals rung (e)).
  • scripts/workflow_lint.py --check-asks passes.
  • Recursion guard applies.

Provenance

  • workflow_fix_target: .claude/rules/trigger-dense-review.md, .claude/skills/issue-tick/SKILL.md
  • fingerprint: b74a21c183c1

Surfaced problem (c3-P1 + c5-P10): the #1481 orchestrator wedged on 7 refusal kills paging raw crash tails on poll turns; guard-hook briefs carrying BLOCKED text drew 3 more kills.

Activity