os-sdlc Runner: two implementations opened in one Claude session collide #1447

Open
opened 2026-10-27 21:42:38 +00:00 by jared · 3 comments
Owner

Problem

The os-sdlc Runner finds the active implementation by the Claude session ID. Two implementations that one session opens in parallel subagents therefore share one active run. The second implementation-open makes the first run stale, and dispatches of one ticket get recorded on the run of another ticket.

Observed

On 2026-10-27, session 9f415790-a6bd-4850-8d70-3dd45004ce2b ran AFK units for #1364 (implementation 199) and #1357 (implementation 200) in parallel. Opening 200 made 199 stale. The #1364 change-auditor submit for dispatch 1763 failed:

StaleDispatchError: dispatch 1763 belongs to implementation 199

Run 199 then showed finished after 28 s. Implementation 201 then recorded dispatch 1769 (a #1357 programmer) and unrelated change-auditor and finding-builder dispatches. Both tickets were hand-finished.

Reproduce

In one Claude session, start two subagents that each run os-sdlc-implementation-open <same SESSION_ID> <ticket> poodr-ticket-implementation, then let both dispatch their change-auditor.

Origin

  • Trigger: AFK /os-sdlc:implement 1364 in a coordinator session that also ran #1357
  • Improvised this session: hand-finished #1364 outside the Runner
  • Chain: StaleDispatchError on submit ← Runner resolves the current implementation by session ID ← DESIGN (plugins/os-sdlc/lib/os_sdlc/implementation.rb:65)
  • Root candidate: none found; searched session ID, StaleDispatchError, implementation-open, concurrent/parallel implementations, stale
  • Where: plugins/os-sdlc/lib/os_sdlc/implementation.rb
  • Session: 9f415790-a6bd-4850-8d70-3dd45004ce2b
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9f415790-a6bd-4850-8d70-3dd45004ce2b.jsonl

VERDICT: CREATE

## Problem The os-sdlc Runner finds the active implementation by the Claude session ID. Two implementations that one session opens in parallel subagents therefore share one active run. The second `implementation-open` makes the first run stale, and dispatches of one ticket get recorded on the run of another ticket. ## Observed On 2026-10-27, session 9f415790-a6bd-4850-8d70-3dd45004ce2b ran AFK units for #1364 (implementation 199) and #1357 (implementation 200) in parallel. Opening 200 made 199 stale. The #1364 change-auditor submit for dispatch 1763 failed: ``` StaleDispatchError: dispatch 1763 belongs to implementation 199 ``` Run 199 then showed finished after 28 s. Implementation 201 then recorded dispatch 1769 (a #1357 programmer) and unrelated change-auditor and finding-builder dispatches. Both tickets were hand-finished. ## Reproduce In one Claude session, start two subagents that each run `os-sdlc-implementation-open <same SESSION_ID> <ticket> poodr-ticket-implementation`, then let both dispatch their change-auditor. ## Origin - Trigger: AFK `/os-sdlc:implement 1364` in a coordinator session that also ran #1357 - Improvised this session: hand-finished #1364 outside the Runner - Chain: StaleDispatchError on submit ← Runner resolves the current implementation by session ID ← DESIGN (plugins/os-sdlc/lib/os_sdlc/implementation.rb:65) - Root candidate: none found; searched session ID, StaleDispatchError, implementation-open, concurrent/parallel implementations, stale - Where: plugins/os-sdlc/lib/os_sdlc/implementation.rb - Session: 9f415790-a6bd-4850-8d70-3dd45004ce2b - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9f415790-a6bd-4850-8d70-3dd45004ce2b.jsonl VERDICT: CREATE
Author
Owner

Occurrence: os-sdlc: implementation-open in one session abandons a concurrent implementation and steals its dispatches
Seen: plugins/os-sdlc/lib/os_sdlc/implementation.rb (abandon_unfinished!(session_id), lines 43-54)
Run: session 9f415790-a6bd-4850-8d70-3dd45004ce2b; #1357 implementation 200 (opened 17:32) abandoned when #1364 opened implementation 201 (17:36)
Adds: the victim side. #1357 programmer dispatch 1769 was recorded on implementation 201 with empty gate_steps, os-sdlc-next returned 201's await_completion to the #1357 orchestrator, and the ungated programmer change carried 6 rubocop offenses plus a nil crash. #1357 was hand-finished (main 49e185f1).

Occurrence: os-sdlc: implementation-open in one session abandons a concurrent implementation and steals its dispatches Seen: plugins/os-sdlc/lib/os_sdlc/implementation.rb (abandon_unfinished!(session_id), lines 43-54) Run: session 9f415790-a6bd-4850-8d70-3dd45004ce2b; #1357 implementation 200 (opened 17:32) abandoned when #1364 opened implementation 201 (17:36) Adds: the victim side. #1357 programmer dispatch 1769 was recorded on implementation 201 with empty gate_steps, os-sdlc-next returned 201's await_completion to the #1357 orchestrator, and the ungated programmer change carried 6 rubocop offenses plus a nil crash. #1357 was hand-finished (main 49e185f1).
Author
Owner

Occurrence from #1337 (same session 9f415790): os-sdlc-implementation-open 9f415790-... 1337 poodr-ticket-implementation --target os-sdlc returned implementation 201 at 2026-10-27 17:36 EDT. Its change-auditor (dispatch 1770) called os-sdlc-subagent-stop from worktree .claude/worktrees/ticket-1337 and got exit 3: harness error: Sequel::Error: No database associated with Sequel::Model; no next_step came back. The coordinator reports that 201 also holds foreign dispatch 1769 (#1357 programmer). #1337 was hand-finished outside the Runner; 201 is to be abandoned after the merge. The Sequel error may be a separate defect (unbound model in subagent-stop), or a result of the collision; not diagnosed.

Occurrence from #1337 (same session 9f415790): `os-sdlc-implementation-open 9f415790-... 1337 poodr-ticket-implementation --target os-sdlc` returned implementation 201 at 2026-10-27 17:36 EDT. Its change-auditor (dispatch 1770) called `os-sdlc-subagent-stop` from worktree `.claude/worktrees/ticket-1337` and got exit 3: `harness error: Sequel::Error: No database associated with Sequel::Model`; no next_step came back. The coordinator reports that 201 also holds foreign dispatch 1769 (#1357 programmer). #1337 was hand-finished outside the Runner; 201 is to be abandoned after the merge. The Sequel error may be a separate defect (unbound model in subagent-stop), or a result of the collision; not diagnosed.
Author
Owner

Occurrence 2026-10-28 (session 9f415790): the collision is wider than parallel implement runs. A fast-batch for #1455 ran in the same session as implement run 208 (#1449). Its finding-builder subagent was recorded by the SubagentStart hook as dispatch 1851 on implementation 208, after change-auditor 1850 passed. The Runner then answered await_completion for about 15 minutes, then reported stalled dispatch 1851 at node change-auditor with directive re-dispatch. Fast-batch subagents are not part of any implementation, but the hook attaches them to the session's open implementation. Evidence: os-sdlc-implementation-report 208 lists dispatch 1851 agent_type finding-builder, stalled true.

Occurrence 2026-10-28 (session 9f415790): the collision is wider than parallel implement runs. A fast-batch for #1455 ran in the same session as implement run 208 (#1449). Its finding-builder subagent was recorded by the SubagentStart hook as dispatch 1851 on implementation 208, after change-auditor 1850 passed. The Runner then answered await_completion for about 15 minutes, then reported stalled dispatch 1851 at node change-auditor with directive re-dispatch. Fast-batch subagents are not part of any implementation, but the hook attaches them to the session's open implementation. Evidence: os-sdlc-implementation-report 208 lists dispatch 1851 agent_type finding-builder, stalled true.
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#1447
No description provided.