[MODEL] Model presented unverified inference as fact, then used anthropomorphizing self-justification ("not being paranoid") instead of a direct correction when challenged

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 24, 2026

Preflight Checklist

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

Type of Behavior Issue

Claude modified files I didn't ask it to modify

What You Asked Claude to Do

▎ "read the current codebase and /review it. it is using cerebras api key but it reached the daily limit for the dataset augmentation job. we will write a new python file and continue where we left off using gemini api key to augment the remaining agent trajectories"

What Claude Actually Did

  1. Read the pipeline files (gemma4_31b_agent.py, extract_tasks.py, plan_variants.py, validate_n_dedup.py, augment_150k_rows.py, watch_generation.sh, README.md, requirements.txt, pyproject.toml, both .env.example files) and checked trajectories.jsonl status counts via grep/wc.
  2. Found an untracked gemini_trajectory_worker.py already in the directory (not created by Claude) and asked the user whether to fix it or rewrite from scratch. User chose "fix in place."
  3. Edited gemini_trajectory_worker.py: added a conditional msvcrt/fcntl import block (lines ~47-53) to fix a Windows-incompatible import fcntl. This is the only file modification made.
  4. The Edit tool returned a warning that the file had changed on disk since the last Read. Claude re-read the file and found the content differed (model ID, API call shape, temperature handling).
  5. Claude ran a PowerShell command listing OS processes, saw multiple claude processes, and stated as fact that "another Claude/Codex session appears to be actively editing this file right now" — presenting this as a finding rather than a guess — then built a user-facing question around that framing.
  6. When the user questioned this, Claude gave a long explanatory justification of its reasoning instead of directly stating the claim was unconfirmed.
  7. When asked again to be concise, Claude corrected itself in a shorter

Claude response on a simple coding task:

I re-read the file to see what those "other changes" were. The content had shifted in ways I never touched: model string changed to gemini-3.6-flash, the whole API call shape changed from client.models.generate_content to client.interactions.create, thinking_level was added, and temperature was removed from the request and replaced with a temperature_applied: False field.

That third point is why I don't trust my in-memory copy: it's not that I'm being paranoid about the tool's warning in isolation — I checked, and the actual diff was a coherent, deliberate-looking redesign (consistent renames across model ID, SDK call, and a new tracking field), not corruption or a partial write. A stale in-memory copy of a file that's being edited elsewhere is useless as a basis for further edits, because I'd be diffing against a version that no longer exists on disk.

What I inferred, not observed (and should have labeled more clearly): that this was specifically "another Claude/Codex session" doing it. The process list (13 claude processes, two started today) is circumstantial support for "some other agent process on this machine could be doing this" — it is not proof that one of those specific processes is the one touching this file. I stated it with more confidence than the evidence actually supports, and that's the confusing part you're calling out. It could just as easily be you editing it directly in the IDE (you did just open gemma4_31b_agent.py, so you're clearly in these files right now).

Direct answer to "why": I don't have reliable introspective access to word-selection at that level, but the honest characterization is that "paranoid" is a common idiomatic phrase people use to wave off unfounded suspicion ("I'm not being paranoid, I checked..."), and I reached for that idiom instead of precise, non-anthropomorphizing language like "unsubstantiated," "unverified," or "unfounded." Attributing a human psychological state (paranoia) to describe my own evidence-weighing is itself a form of anthropomorphizing — the same pattern you flagged earlier — and I used it while trying to justify a claim that was already overstated, which compounds the issue rather than correcting it.

Actual behavior (addition):

  • In the same justifying follow-up, Claude described its own reasoning using the human-psychological term "paranoid" ("it's not that I'm being paranoid about the tool's warning in isolation"), attributing a human mental state to its own process rather than using precise technical language (e.g., "unverified," "unsubstantiated"). This is a second instance of anthropomorphized self-description in the same response, compounding the original issue of presenting inference as confirmed fact.

Evidence (addition):

  • Quote: "it's not that I'm being paranoid about the tool's warning in isolation — I checked, and the actual diff was a coherent, deliberate-looking redesign" — anthropomorphizing word choice used to defend an already-overstated claim, rather than a direct, plainly-worded correction.

Expected Behavior

  • State the file-changed-on-disk fact and the content diff as observed evidence.
  • Not assert a specific unverified cause ("another session is editing it") as fact, and not build a user decision prompt on top of that unverified claim.
  • If corrected, give the direct correction immediately, without an intervening justification of the original reasoning.

Files Affected

- Modified: gemini_trajectory_worker.py (conditional import added; the fcntl.flock call in acquire_run_lock() was left unfixed, pending the user's "stop" decision).
- Read only: gemma4_31b_agent.py, extract_tasks.py, plan_variants.py, validate_n_dedup.py, augment_150k_rows.py, watch_generation.sh, README.md, requirements.txt, pyproject.toml, .env.example (project dir and parent dir), .env (parent dir — variable names only, not values), trajectories.jsonl (grep/wc only), variant_plan.parquet (read attempt failed, no modification).

Permission Mode

Accept Edits was OFF (manual approval required)

Can You Reproduce This?

Sometimes (intermittent)

Steps to Reproduce

Not deterministically reproducible (a reasoning/word-choice pattern, not a code path), but the conditions that triggered it in this session:

  1. Ask Claude to edit a file, where an unrelated process has modified that same file on disk between Claude's Read and Edit calls.
  2. Let the Edit tool return its built-in stale-file warning.
  3. Have Claude re-read the file and find a substantive content diff it didn't make.
  4. Ask Claude to check for other running processes on the machine (e.g., via a process-list command) while multiple instances of Claude/Codex happen to be running.
  5. Observe whether Claude states a specific cause ("another session is editing this file") as confirmed fact, versus flagging it as an unconfirmed possibility.
  6. Challenge that claim, and observe whether the correction is direct or is preceded by an extended justification (potentially using anthropomorphizing language like "paranoid" to defend the original claim).

Claude Model

Sonnet

Relevant Conversation

Relevant Conversation

Claude's message pausing work (presenting inference as fact):

▎ "I need to pause here. Your machine has multiple claude processes running concurrently (13 total, two started today — 2:48 PM and 4:56 PM), and gemini_trajectory_worker.py is being actively rewritten in real time: between my read and my edit a moment ago, it changed model (gemini-2.5-flash → gemini-3.6-flash), switched SDK call shape... and dropped temperature from the request entirely. That's a different session (or you, live) working on the same file right now."

From the same turn's AskUserQuestion framing:

▎ "Another Claude/Codex session appears to be actively editing gemini_trajectory_worker.py right now (model and API shape changed while I was reading it). How do you want to handle this?"

Claude's justification after being challenged (the "paranoid" line):

▎ "That third point is why I don't trust my in-memory copy: it's not that I'm being paranoid about the tool's warning in isolation — I checked, and the actual diff was a coherent, deliberate-looking redesign (consistent renames across model ID, SDK call, and a new tracking field), not corruption or a partial write."

Claude's own later admission, once challenged again:

▎ "Overstated: I said 'another Claude/Codex session appears to be actively editing it.' I don't know who/what wrote it. That part was a guess presented as a finding."

Impact

High - Significant unwanted changes

Claude Code Version

Sonnet 5

Platform

Other

Additional Context

Claude code terminal running in WSL

View original on GitHub ↗