You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Correct the documented first-run replay boundary in the Claude Code channel plan #239
Correct the first-run replay-boundary description in planning/claude-code-channel.md.
The sentence at line 335 currently says the stream has caught up at “the first heartbeat after replay”. The client lifecycle now treats a heartbeat as liveness only, not as evidence that replay has ended. The planning document should describe the actual boundary so future work does not rely on the old trigger.
Background
PR #232 updates the Claude channel client's first-run lifecycle. For a first run starting at the beginning, replay remains active across pings and disconnects. The client ends replay when it receives the cursor frame, or when it handles a history_expired frame by reporting the gap and advancing to the supplied floor.
The client-side handling is covered by tests. Whether the server emits history_expired on every out-of-retention reconnect has not been independently verified, so this issue should not state that server behavior as established fact.
Scope
Update the sentence in planning/claude-code-channel.md that identifies the first heartbeat after replay as the catch-up boundary.
State that a heartbeat is not the replay boundary.
Describe the cursor frame as the normal explicit replay boundary.
Describe history_expired as the gap-reporting path that also ends replay.
Non-goals
No source-code or runtime behavior changes.
No changes to the server API or mirrored dataclasses.
No broader redesign of reconnect, heartbeat, or replay handling.
Do not claim that out-of-retention reconnects are guaranteed to produce history_expired without server-side evidence.
Acceptance criteria
The planning document no longer describes the first heartbeat as the replay boundary.
Activity
docs: a ping is the replay boundary, a cursor frame is not (Vycari#250)