Thin PostToolUse to ack/query and rewrite implement skill for pull-instruction flow #430

Closed
opened 2026-08-18 18:31:54 +00:00 by jared · 2 comments
Owner

#430 Thin PostToolUse to ack/query and rewrite implement skill for pull-

instruction flow (open)

@jared created 2026-08-18 14:31

Parent

#425
Map: #425

What to build

Remove the ADR-0121 async_launched rejection guard from the PostToolUse-on-
Agent hook, reducing it to a thin state-aware ack/next-instruction query
against the instruction endpoint. Launch receipts acknowledge rather than
reject, so async-launching harnesses no longer stall. Rewrite
skills/implement/SKILL.md's sync-dispatch mandate to describe the new flow:
dispatch async-OK, await completion notification, pull instructions from the
runner; orchestrator reads only runner instructions. Run bin/refresh-
plugins.

Acceptance criteria

[ ] async_launched path gone
[ ] CLI-seam tests cover the ack/query behaviour
[ ] skill text carries no gate/sequencing/retry logic per ADR-0097
[ ] an async Agent dispatch in the new flow reaches await completion instead
of an error

Blocked by

#429

Origin

• Trigger: /to-tickets skill on #425 spec
• Improvised this session: none
• Chain: #425 (DESIGN) ← decomposed via /to-tickets user approval 2026-08-18
• Root candidate: none (this is a decomposition task)

# #430 Thin PostToolUse to ack/query and rewrite implement skill for pull- instruction flow (open) @jared created 2026-08-18 14:31 ## Parent #425 Map: #425 ## What to build Remove the ADR-0121 async_launched rejection guard from the PostToolUse-on- Agent hook, reducing it to a thin state-aware ack/next-instruction query against the instruction endpoint. Launch receipts acknowledge rather than reject, so async-launching harnesses no longer stall. Rewrite skills/implement/SKILL.md's sync-dispatch mandate to describe the new flow: dispatch async-OK, await completion notification, pull instructions from the runner; orchestrator reads only runner instructions. Run bin/refresh- plugins. ## Acceptance criteria [ ] async_launched path gone [ ] CLI-seam tests cover the ack/query behaviour [ ] skill text carries no gate/sequencing/retry logic per ADR-0097 [ ] an async Agent dispatch in the new flow reaches await completion instead of an error ## Blocked by #429 ## Origin • Trigger: /to-tickets skill on #425 spec • Improvised this session: none • Chain: #425 (DESIGN) ← decomposed via /to-tickets user approval 2026-08-18 • Root candidate: none (this is a decomposition task)
Author
Owner

Resolution

Done: PostToolUse hook's ADR-0121 async_launched rejection guard removed (verified zero remaining references): a pipeline agent's launch receipt now ACKs by shelling to os-sdlc-runner next SESSION_ID and relaying the JSON instruction as additionalContext; runner failure surfaces loudly with the runner's exit status; non-pipeline async agents remain a silent no-op; sync events unchanged. skills/implement/SKILL.md dispatch section rewritten: async dispatch allowed, completion arrives via SubagentStop intake, orchestrator reads next action only from runner instructions — no gate/sequencing/retry logic in the prose (ADR-0097). bin/refresh-plugins run.

Evidence: commit ; full runner suite 306 runs/655 assertions 0 failures; rubocop clean on 4 touched files; async-dispatch test proves an async_launched event yields an await_completion instruction instead of an error

Follow-ups: one, verdict: legitimate coupling debt, deferred to #431/#433 scope — the hook still gates the ack path on the legacy ticket-engine pipeline_agent? check, so PostToolUse currently straddles two state models; #431 (recovery-cluster retirement) and the #433 sweep decide whether that gate moves to the round pipeline; recorded in the map workbench, no separate ticket

## Resolution **Done:** PostToolUse hook's ADR-0121 async_launched rejection guard removed (verified zero remaining references): a pipeline agent's launch receipt now ACKs by shelling to os-sdlc-runner next SESSION_ID and relaying the JSON instruction as additionalContext; runner failure surfaces loudly with the runner's exit status; non-pipeline async agents remain a silent no-op; sync events unchanged. skills/implement/SKILL.md dispatch section rewritten: async dispatch allowed, completion arrives via SubagentStop intake, orchestrator reads next action only from runner instructions — no gate/sequencing/retry logic in the prose (ADR-0097). bin/refresh-plugins run. **Evidence:** commit <HASH>; full runner suite 306 runs/655 assertions 0 failures; rubocop clean on 4 touched files; async-dispatch test proves an async_launched event yields an await_completion instruction instead of an error **Follow-ups:** one, verdict: legitimate coupling debt, deferred to #431/#433 scope — the hook still gates the ack path on the legacy ticket-engine pipeline_agent? check, so PostToolUse currently straddles two state models; #431 (recovery-cluster retirement) and the #433 sweep decide whether that gate moves to the round pipeline; recorded in the map workbench, no separate ticket
jared closed this issue 2026-08-18 21:38:21 +00:00
Author
Owner

Correction: evidence commit hash is 28384cc (placeholder in the close comment).

Correction: evidence commit hash is 28384cc (placeholder <HASH> in the close comment).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#430
No description provided.