Skip to content

feat(studio): live re-attach via the durable session watch - #982

Closed
jtenniswood wants to merge 1 commit into
studio/S16from
studio/S17
Closed

jtenniswood wants to merge 1 commit into
studio/S16from
studio/S17

Conversation

@jtenniswood

Copy link
Copy Markdown

Stack 17/21 — Studio: live re-attach via the durable session watch

Re-attach to a running session from any tab (ADR 0250/0249): the watch transport landed in PR 5 (watch.ts); this PR wires the chat surface to it.

  • use-agent-chat grows the self-contained watch effect + the pure reduceWatchEvent reducer (+tests): replay-batch/parked-ask boundary, fault latch → transcript fallback, and runIdRef threaded into cancel/approve/steer (stale_run_control handling — completing PR 15's strict steer).
  • Gated on features.has('watch_session_events') — the endpoint pre-exists on main, so this works against any current daemon; the e2e fixture has no watch route, so specs are untouched.
  • Docs honesty, same PR: docs/architecture.md and the readiness tracker stop calling live re-attach a non-goal (the original branch shipped the feature but left those documents stale); the honest residual stays named — the driving tab's own POST /prompt stream still cancels the run on disconnect.

Demo at this stack point: open a second tab on a driving session and watch it live; refresh mid-run and re-attach.

Part of the stacked landing of #618.

🤖 Generated with Claude Code

Any tab can now follow a driving run live: use-agent-chat grows the
self-contained watch effect over the ADR 0250 session watch, the pure
reduceWatchEvent reducer (+tests) with the replay-batch/parked-ask boundary,
a fault latch that falls back to the transcript, and runIdRef threaded into
cancel/approve/steer for strict stale_run_control handling — completing the
strict steer from the queue/steer PR. Gated on
features.has('watch_session_events'); the endpoint pre-exists on the daemon
(ADR 0250), and the e2e fixture has no watch route, so specs are untouched.

Same-PR docs honesty: docs/architecture.md and the readiness tracker stop
calling live re-attach a non-goal (the original branch shipped the feature
but left both stale); the honest residual stays named — the driving tab's
own POST /prompt stream still cancels the run on disconnect.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jtenniswood jtenniswood added documentation Improvements or additions to documentation enhancement New feature or request WebUI Applies to the WebUI interface labels Sep 2, 2026
@jhrozek jhrozek closed this Sep 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request WebUI Applies to the WebUI interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants