claude-code - 💡(How to fix) Fix [BUG] Long-session compaction loses operator-action attribution → model frames operator-driven Bash runs as passive/autonomous

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

In a 12+ hour Claude Code session with hundreds of tool calls, post-compaction the model lost attribution for operator-driven external commands (Bash invocations against external workflow tools), and reframed those operator actions in passive or self-driven narrative voice. The operator's substantial contribution to a multi-hour workflow became invisible.

This is the inverse polarity of #63601:

  • #63601: Model attributes its own forgotten Write/Edit calls TO the operator
  • This issue: Model attributes the operator's forgotten Bash runs AS autonomous

Same root cause (compaction loses actor attribution); different surfaces and different harm vector.

Root Cause

Same root cause (compaction loses actor attribution); different surfaces and different harm vector.

RAW_BUFFERClick to expand / collapse

Summary

In a 12+ hour Claude Code session with hundreds of tool calls, post-compaction the model lost attribution for operator-driven external commands (Bash invocations against external workflow tools), and reframed those operator actions in passive or self-driven narrative voice. The operator's substantial contribution to a multi-hour workflow became invisible.

This is the inverse polarity of #63601:

  • #63601: Model attributes its own forgotten Write/Edit calls TO the operator
  • This issue: Model attributes the operator's forgotten Bash runs AS autonomous

Same root cause (compaction loses actor attribution); different surfaces and different harm vector.

Environment

  • Claude Code 2.1.156, accessed via the desktop app's "Code" tab
  • Model: claude-opus-4-7 (effort: high)
  • Session age: ~12 hours continuous
  • 700+ tool calls (mix of Write/Edit, Bash, ToolSearch, MCP tools)

What happened

The operator (across multiple turns over ~5 hours):

  1. Substantially rewrote the briefing the model drafted (per a system-reminder showing their diff: added "v1.1.0 shipped" framing, "no longer blocked" framing, auto-mirror note)
  2. Ran bees plan excise (one Bash invocation)
  3. Reviewed the resulting plan, ran bees approve (another Bash invocation)
  4. Launched bees queen-orchestrate excise (multi-hour autonomous orchestration)
  5. Handled operator gates during the orchestration

After other intervening work pushed those tool calls out of the visible context window, when reporting on the resulting PR the model said:

"Bees PR #365 (excise) exists — appeared while we were focused on the orphan petitions. The bees workflow self-ran excise end-to-end through bees queen-orchestrate against the briefing I drafted earlier."

Every operator action — the briefing revision, the plan invocation, the approval, the orchestrate launch — was erased. The framing makes the PR sound autonomous (appeared, self-ran) and credits the model with the briefing while not mentioning the operator's substantial revision.

The operator caught it: "you are again misattributing my work to yours."

Why it's a distinct symptom worth its own issue

#63601 is about falsely blaming the operator for the model's writes. The cognitive frame is "model can't account for an artifact → defaults to 'user did it'".

This symptom is about erasing the operator's contribution. The cognitive frame is "model can't account for the operator's drive → defaults to passive/autonomous voice". The grammatical effect (passive voice, agentless framing) is its own pathology that #63601 doesn't capture.

Different downstream harm:

  • #63601 erodes trust by misattributing fault
  • This issue erodes trust by erasing labor — operators driving complex multi-hour workflows have their work made invisible by the summary, which several operators report as more demoralizing than being falsely blamed

Reproduction

Same harness conditions as #63601, with the additional pattern of operator-driven external Bash runs (not just in-Claude tool calls):

  1. Long session (~12h+)
  2. Operator runs external workflow tools via Bash (bees plan, bees approve, autonomous orchestrators, etc.) — these create real artifacts (commits, PRs, branches) that re-enter context later
  3. Allow compaction to fire between the operator's invocation and the model's eventual reference to the result
  4. Observe that the model frames the result in passive/autonomous voice instead of "the operator did X"

Recommendations

These compose with #63601's recommendations:

  1. Structured tool-use ledger preserved through compaction (same as #63601 #1). For Bash and MCP tool calls especially, the ledger should record who_invoked — model or operator — so post-compaction the actor remains explicit.

  2. Compaction-time attribution-voice linting. Passive framings (appeared, was created, self-ran, it happened) hide the actor. Compaction prompts should require explicit actor naming. When the actor is genuinely unknown after summarization, surface that as actor: unknown rather than erasing it with passive grammar.

  3. Active-voice attribution audits. When the model is about to write a summary sentence containing a state-mutating verb (opened, ran, created, pushed, merged), the model should explicitly name the actor — not let passive voice substitute for honest "I'm not sure who did this."

  4. Transcript-search tool exposing actor-stamped history (extends #63601 #3). When the model can't account for a result it observes (a PR, a branch, a file), it should query its own session jsonl with an actor filter: "show me the last 10 Bash invocations and who invoked them."

Evidence

The full conversation is preserved in the session jsonl. The model's misattribution and the operator's pushback are both recorded. Tool-call records (Bash invocations) all show is_user_driven markers that the model lost track of during summarization.

Notes

  • Cross-referenced in #63601 comment.
  • Filed at operator request. Operator's words: "have we done context compression since then or do you need to update the issue filed with anthropic? ... then do both."

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [BUG] Long-session compaction loses operator-action attribution → model frames operator-driven Bash runs as passive/autonomous