Skip to content

Follow up on workflow runs that end blocked or failed between turns - #444

Merged
lavaman131 merged 1 commit into
mainfrom
fix/planner-run-ended-turn
Oct 10, 2026
Merged

lavaman131 merged 1 commit into
mainfrom
fix/planner-run-ended-turn

Conversation

@lavaman131

Copy link
Copy Markdown
Collaborator

Follow up on workflow runs that end blocked or failed between turns

When a Planner's workflow run ended blocked or failed after the turn that
started it, Atomic's lifecycle notice asked the idle session to start a
turn on its own. The adapter only forwards events while Chopin runs a
turn, so that turn reached the model but nobody saw or recorded it, and
Chopin let the kept session go as soon as no run was live. Chat showed
only the run card and its "ended blocked" line.

Chopin now starts a Planner turn itself when a run it owns ends blocked
or failed between turns, with the run's end line as the turn's reason,
and keeps the session until that turn has run. A run that ends during
the Planner's own turn still reaches it through Atomic's in-turn notice,
so it starts no extra turn. The adapter stops any turn Atomic starts on
its own and waits for it to settle before running Chopin's next prompt.

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline
Assistant-duration: 8m converged, estimated unmeasured
Assistant-verification: bun test red/green passed: chat/invoke.test.ts "ends blocked between turns" fails without the service change and passes with it
Assistant-verification: bun test red/green passed: harness/atomic/full.test.ts self-started turn makes 2 stub model requests without the adapter change, 1 with it
Assistant-verification: bun test passed: apps/server src/chat and src/harness (402 pass, 0 fail)
Assistant-verification: types passed: bun --filter '@chopin/server' types
Assistant-verification: bun run ci passed: dprint, oxlint (31 warnings, same as main), tokens, design contract
User-preference: Open a quick Chopin PR so a blocked workflow run reaches the Planner

When a Planner's workflow run ended blocked or failed after the turn that
started it, Atomic's lifecycle notice asked the idle session to start a
turn on its own. The adapter only forwards events while Chopin runs a
turn, so that turn reached the model but nobody saw or recorded it, and
Chopin let the kept session go as soon as no run was live. Chat showed
only the run card and its "ended blocked" line.

Chopin now starts a Planner turn itself when a run it owns ends blocked
or failed between turns, with the run's end line as the turn's reason,
and keeps the session until that turn has run. A run that ends during
the Planner's own turn still reaches it through Atomic's in-turn notice,
so it starts no extra turn. The adapter stops any turn Atomic starts on
its own and waits for it to settle before running Chopin's next prompt.

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline
Assistant-duration: 8m converged, estimated unmeasured
Assistant-verification: bun test red/green passed: chat/invoke.test.ts "ends blocked between turns" fails without the service change and passes with it
Assistant-verification: bun test red/green passed: harness/atomic/full.test.ts self-started turn makes 2 stub model requests without the adapter change, 1 with it
Assistant-verification: bun test passed: apps/server src/chat and src/harness (402 pass, 0 fail)
Assistant-verification: types passed: bun --filter '@chopin/server' types
Assistant-verification: bun run ci passed: dprint, oxlint (31 warnings, same as main), tokens, design contract
User-preference: Open a quick Chopin PR so a blocked workflow run reaches the Planner
@lavaman131
lavaman131 merged commit f4643c8 into main Oct 10, 2026
3 checks passed
@lavaman131
lavaman131 deleted the fix/planner-run-ended-turn branch October 10, 2026 05:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant