claude-code - 💡(How to fix) Fix [Bug] Session timeout silently terminates /ultraplan while UI remains active, losing unsaved feedback [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#48215Fetched 2026-04-15 06:29:56
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Timeline (top)
labeled ×5commented ×1

Error Message

"error": { "type": "error" The error had no recovery path and my 20 minutes of feedback were lost. surface a raw API error.

Root Cause

What happened:
I ran /ultraplan on a non-trivial planning task. The session terminated server-side after 90 minutes with "no approval." because I took my dog for a walk. I didn't see that in the browser — the feedback composer remained active and editable. I spent ~20 minutes writing detailed feedback on the plan. When I hit submit, the API returned:

RAW_BUFFERClick to expand / collapse

Bug Description Title: /ultraplan browser UI accepts feedback into an already-terminated session, then loses it on submit

What happened:
I ran /ultraplan on a non-trivial planning task. The session terminated server-side after 90 minutes with "no approval." because I took my dog for a walk. I didn't see that in the browser — the feedback composer remained active and editable. I spent ~20 minutes writing detailed feedback on the plan. When I hit submit, the API returned:

{
"error": { "message": "Cannot send events to inactive session: session_01DPsH1geoW9EQfYnRFvHtxq",
"reason": "", "type": "invalid_request_error"
}, "request_id": "req_011Ca4gHW6jnkm4gjvSrQ29n",
"type": "error" }

The error had no recovery path and my 20 minutes of feedback were lost.

Expected:
Any of these would have prevented the data loss:

  1. The browser should disable the composer (or show a clear banner) as soon as the session goes inactive, so I can't waste time writing into a dead session.
  2. Feedback drafts should be persisted client-side (localStorage) so a failed submit — for any reason —
    doesn't destroy the work.
  3. On submit failure, the UI should keep the composer contents and offer retry / copy-to-clipboard, not just
    surface a raw API error.
  4. User activity in the composer should extend the session timeout, or the timeout should be much longer than 90 minutes given the "async" framing.

Actual:

  • Session terminated silently in the background while the UI still looked live.
  • Composer accepted 20 minutes of typing into a session the server already considered dead.
  • Submit returned invalid_request_error with no retry, no draft preservation, no export.
  • All feedback lost, plus the tokens spent generating the plan.

Impact:
The core value prop of /ultraplan is async inline feedback on a plan. A 90-minute wall clock doesn't match
"async" — real review cycles (walk away, come back, think) routinely exceed that. And … Note: Content was truncated.

extent analysis

TL;DR

To prevent data loss, the browser UI should be updated to handle session termination and provide a recovery path for failed submissions, such as disabling the composer when the session is inactive or persisting feedback drafts client-side.

Guidance

  • The session termination should trigger an update in the browser UI to reflect the inactive session, preventing users from submitting feedback to a dead session.
  • Implementing client-side persistence of feedback drafts using localStorage can help recover lost work in case of a failed submission.
  • Consider extending the session timeout or making it configurable to accommodate longer review cycles.
  • When a submission fails, the UI should retain the composer contents and offer options like retry or copy-to-clipboard to minimize data loss.

Example

// Example of persisting feedback draft to localStorage
const saveDraft = (draft) => {
  localStorage.setItem('feedbackDraft', draft);
};

const loadDraft = () => {
  return localStorage.getItem('feedbackDraft');
};

Notes

The provided solution focuses on the client-side improvements to handle session termination and submission failures. Server-side adjustments, such as extending session timeouts or implementing a more robust session management system, may also be necessary but are not directly addressed here due to the focus on the client-side issue.

Recommendation

Apply a workaround by implementing client-side draft persistence and updating the UI to reflect session status, as these changes can be made without waiting for a potential server-side fix and directly address the user's pain points.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [Bug] Session timeout silently terminates /ultraplan while UI remains active, losing unsaved feedback [1 comments, 2 participants]