Plan Mode: Plan History, TODO Deduplication

Where does the bug appear (feature/product)?

Cursor CLI

Describe the Bug

  • Bug 1 (history overwrite): Creating a new plan in the same session overwrites the previous file while keeping the old filename — impossible to access previous versions.
  • Bug 2 (TODO duplicates): Building from new plans introduces duplicate TODOs, including already completed tasks that should stay done.

Steps to Reproduce

Current Behavior

  • When user creates Plan A, then Plan B in the same chat → file .cursor/plans/cursor-{id}.plan.md gets overwritten with Plan B content, but keeps the original filename/ID from Plan A.
  • When Building from a new plan that contains similar tasks to a previous plan → TODO list shows duplicates; completed tasks reappear as pending.

Expected Behavior

  • Each plan version should be saved as a separate file with unique timestamp.
  • Building should merge TODOs intelligently: no duplicates, preserve completion status.

Operating System

Windows 10/11

Current Cursor Version (Menu → About Cursor → Copy)

Version: 1.7.52 (system setup)
VSCode Version: 1.99.3
Commit: 9675251a06b1314d50ff34b0cbe5109b78f848c0

Additional Information

Impact

  • High: Users lose access to previous plans; manual cleanup of duplicate TODOs is time-consuming and error-prone.

Requirements to Fix

BUG-1: Plan History Preservation

  • BUG-1.1: Save each new plan as .cursor/plans/{YYYYMMDD_hhmmss}_{slug}.plan.md.
  • BUG-1.2: Add frontmatter fields: plan_id (UUID), session_id (chat ID), created_utc, slug, schema_version.
  • BUG-1.3: Provide “Plan History” UI: list all versions per session, show date/slug/TODO count/progress.
  • BUG-1.4: Support version comparison (diff by sections and TODOs: added/changed/removed).
  • BUG-1.5: Maintain latest symlink/alias pointing to most recent plan.

BUG-2: TODO Deduplication on Building

  • BUG-2.1: Implement merge by key: todo_id (if exists) or sha256(normalized_text + tags + scope + source_path).
  • BUG-2.2: On key match, merge statuses by priority: done > in_progress > pending.
  • BUG-2.3: Never revive done tasks in active lists; hide/merge duplicates.
  • BUG-2.4: When match confidence is low (text significantly changed), prompt user for confirmation.
  • BUG-2.5: Show counter in Building dialog: “merged X, hidden Y, added Z”.

Data Model

  • Identifiers: plan_id, todo_id — UUID v4; session_id — chat identifier.
  • TODO text normalization for hash: trim, lowercase, collapse whitespace, remove technical suffixes (e.g., status markers in parentheses).
  • Schema version: schema_version: 1.

UX for Bug Fixes

  • UX-BUG-1: “Plan History” screen with list, search, diff view, actions: “Open”, “Compare”, “Make Current”.
  • UX-BUG-2: Building dialog with “TODO Deduplication” toggle and merge results preview.
  • UX-BUG-3: TODO list shows only unique active tasks; duplicates accessible via “Show Merged” filter.

Acceptance Criteria

  • AC-BUG-1: Creating 3 consecutive plans saves 3 separate files; latest points to most recent; all accessible in history.
  • AC-BUG-2: Repeated Building adds zero duplicates of previously completed/identical tasks; counter reflects actual merge results.
  • AC-BUG-3: Version diff correctly shows added/removed/modified TODOs between any two versions.

Does this stop you from using Cursor

No - Cursor works, but with this issue