Plan-review widget shows stale/wrong plan content (survives full app restart)
Summary
Calling ExitPlanMode to present a plan for approval sometimes shows the user a different, older plan than the one just written to the plan file — not the plan that was actually drafted for the current request. This happened twice in one session, with two different stale plans, and survived a full application restart.
What I observed (from the assistant's side)
- Wrote a new plan to the session's plan file (e.g.
~/.claude/plans/<name>.md), confirmed via directRead/md5that its on-disk content was correct. - Called
ExitPlanMode. - User reported the plan view showed an unrelated, already-completed older plan instead.
- Re-read the plan file again — content was still correct on disk.
- Called
ExitPlanModeagain — user reported it was now showing a different, even older plan (from several turns earlier in the same session, matching a second stale plan file's own title sitting in the same~/.claude/plans/directory). - User fully quit and restarted the application. The bug persisted — same stale plan still shown.
- Workaround: pasted the plan's own text directly into the chat response instead of relying on the widget; the user reviewed and approved via plain text, and a subsequent
ExitPlanModecall (after the user replied "Proceed"/"go ahead") then correctly returned the right plan content in its own tool result.
This happened a second time, later in the same session, with yet another plan — same symptom (widget shows a stale/wrong plan even though the underlying file is correct), same workaround (paste as text) resolved it.
Environment detail that may be relevant
There were two files in ~/.claude/plans/: the one referenced by the current turn's system reminder (containing the correct, current plan), and an older one from a previous planning round earlier in the same conversation. The content shown in the broken widget matched the older file's title, suggesting the review UI may be resolving to a stale plan file reference/identifier for the conversation rather than the one the harness told the assistant to use for that turn.
Impact
- Blocks the normal plan-approval flow — the user cannot trust what they're reviewing matches what was actually planned.
- Not fixed by restarting the app.
- Only reliable workaround found: have the assistant paste the plan as plain chat text and get approval that way instead of via the plan-review UI.
Expected behavior
The plan-review widget should always render the plan file's current, actual on-disk content for the active conversation turn, and should not persist/serve stale content across either repeated ExitPlanMode calls or a full application restart.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗