Plan side panel renders stale plan from a previous conversation after /clear (persists across refresh)

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 0 comments · opened Jul 26, 2026

Environment

  • Claude Code 2.1.220
  • claude.ai/code web UI session attached to a Linux host (plan mode / brainstorming workflow)

Summary

The "Plan" side panel (and the "Open plan" link on the plan-approval dialog) renders the plan document from a previous conversation in the same session window (written ~2.5 weeks earlier, before a /clear), instead of the plan file the current conversation actually wrote. The approval dialog therefore shows the wrong plan, causing the user to repeatedly reject a correct plan.

Steps to reproduce

  1. In a session window, complete a plan-mode task; a plan file (call it plan A) is written to ~/.claude/plans/plan-a.md.
  2. /clear the conversation in the same window.
  3. Start a new plan-mode task. The harness correctly instructs the model to write to a new file, plan B (~/.claude/plans/plan-b.md), and the model writes it.
  4. Model calls ExitPlanMode → approval dialog appears.
  5. Click Open plan (or open the Plan side panel).

Actual behavior

The panel renders plan A (the pre-/clear plan from weeks earlier). Persists after refreshing the browser tab and reopening the session.

Expected behavior

The panel should render the current conversation's active plan file (plan B); /clear should reset any plan-panel association.

Verification done host-side

  • On-disk ~/.claude/plans/plan-b.md content is correct.
  • The session transcript .jsonl references plan B (plan A only appears in older sessions' transcripts).
  • No stale pointer file to plan A found under ~/.claude/.
  • Rendering plan B via a file-send tool shows the correct content, so the file itself is fine — only the Plan panel resolves to the stale document.

Impact

User cannot trust the approval dialog: Accept would execute plan B while the UI displays plan A. User rejected a correct plan multiple times before the mismatch was diagnosed.

View original on GitHub ↗