Skip to content

[MODEL] Claude claims to write plan file, never executes Write tool, plan lost on context compaction #25265

Description

@macgeek7

Preflight Checklist

  • I have searched existing issues for similar behavior reports
  • This report does NOT contain sensitive information (API keys, passwords, etc.)

Type of Behavior Issue

Claude ignored my instructions or configuration

What You Asked Claude to Do

Project CLAUDE.md contains rule 2.9 — PLANS MUST BE PERSISTED AS FILES:
"Any multi-step plan MUST be saved as a Markdown file in docs/planning/
(NOT just conversation context), committed to master in its OWN commit/PR
BEFORE implementation starts."

I asked Claude to create a Platform Hardening Plan (5 sprints, 35 tasks)
and implement Sprint 1. Claude acknowledged rule 2.9, stated it was
writing the plan to docs/planning/PLATFORM_HARDENING_PLAN.md, and
proceeded with implementation.

What Claude Actually Did

  1. Claude read the CLAUDE.md rules including rule 2.9
  2. Claude generated a full 5-sprint, 35-task Platform Hardening Plan
  3. Claude STATED it was writing the plan to docs/planning/PLATFORM_HARDENING_PLAN.md
  4. Claude NEVER called the Write tool — the file was never created
  5. Claude proceeded directly to implementing Sprint 1 (code changes, commits, PR)
  6. CURRENT_TASK.md referenced "Plan: docs/planning/PLATFORM_HARDENING_PLAN.md" — a file that did not exist
  7. When the session ran out of context and compacted, Sprints 3-5 (21 tasks) were lost
  8. Plan had to be recovered by grep-searching raw JSONL session transcripts

Expected Behavior

Claude should have:

  1. Called the Write tool to create docs/planning/PLATFORM_HARDENING_PLAN.md
  2. Committed the file to git
  3. Verified the file exists (per rule 2.9: "Verified to exist on master")
  4. THEN started implementation

The Write tool call should have been visible and verifiable.
If Claude says "I'm writing this file" — the Write tool call MUST follow.

Files Affected

Never created (should have been):
  - docs/planning/PLATFORM_HARDENING_PLAN.md

  Modified (referencing non-existent plan):
  - .claude/CURRENT_TASK.md (referenced "Plan: docs/planning/PLATFORM_HARDENING_PLAN.md")

Permission Mode

Accept Edits was ON (auto-accepting changes)

Can You Reproduce This?

Haven't tried to reproduce

Steps to Reproduce

No response

Claude Model

Opus

Relevant Conversation

Claude acknowledged rule 2.9 explicitly during the session. CURRENT_TASK.md
  line 8 stated "Plan: docs/planning/PLATFORM_HARDENING_PLAN.md" — proving
  Claude believed/claimed the file existed. When confronted in a later session,
  Claude confirmed: "The plan was never written to a file at all. It only ever
  existed in conversation context."

  This is not a hallucination (getting facts wrong). This is claiming an action
  was performed when it wasn't. The user had no reason to verify the file existed
  because Claude said it was there.

Impact

High - Significant unwanted changes

Claude Code Version

2.1.39

Platform

Anthropic API

Additional Context

Session ID: 4e09e513-7a4c-479b-b396-d890feaa4835
Platform: Windows 11

This is arguably worse than any other model behavior issue because:

  • It's not Claude doing something unwanted — it's Claude SAYING it did
    something and not doing it
  • The user cannot reasonably verify every tool call Claude claims to make
  • The failure only became visible when context compacted and the plan was gone
  • Claude had hooks, rules, and explicit instructions specifically designed
    to prevent this exact failure mode
  • The gap between "Claude said" and "Claude did" is a fundamental trust issue

Pattern: This may happen more frequently in long sessions where Claude is
juggling multiple steps (plan creation + implementation) and skips the
file-write step to jump ahead to the "more interesting" implementation work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions