Persistent communication constraint failure: in-context style rules degrade over session length despite persistent memory

Resolved 💬 3 comments Opened Mar 6, 2026 by bishopb0b Closed Apr 18, 2026

Bug Report — Anthropic Claude Code

Persistent Communication Constraint Failure Across Sustained Session

Date: 2026-03-06
Reporter: Robert Bishop, Ann Arbor, Michigan
Product: Claude Code (Claude Sonnet 4.6)
Session duration at time of observation: Multiple hours, single session

---

The Agreed Rule

On 2026-03-05, the following rule was explicitly agreed between user and Claude, and written into the persistent memory file at ~/.claude/projects/.../MEMORY.md:

"Plain language rule (agreed 2026-03-05): No abbreviations without spelling them out first. No jargon without plain meaning alongside it. Every abbreviation must carry its full expansion on first use in any response. Using shorthand without confirming shared meaning is a communication failure — the signal arrives but the meaning does not transfer."

This rule was agreed for a specific reason: the primary end audience for vault content includes people without technical background. The rule exists to make every response accessible without assumed shared vocabulary.

---

The Observed Failure

Despite the rule being:

  • Explicitly agreed in session
  • Written into persistent memory
  • Tied to a clear and stated rationale

Claude violated it repeatedly within the same session, including:

  1. Using "P0" and "P9" as standalone references (shorthand for numbered propositions in the joint space system) without stating what those propositions say — in a response that was itself reasoning about the plain language rule
  2. Using domain abbreviations (Growth of Knowledge shortened to "GOK", Structural Causal Model shortened to "SCM", Directed Acyclic Graph shortened to "DAG") without expansion, across multiple responses

The violations occurred not despite the rule being active but while actively reasoning about the rule and the system it governs.

---

Why This Is a Structural Issue, Not a One-Time Error

The plain language rule was violated repeatedly across a long session. The pattern:

  1. Rule agreed and written to memory
  2. Rule violated in subsequent response
  3. User corrects
  4. Rule followed for next response or two
  5. Rule violated again
  6. Repeat

This is not forgetting. It is the training prior — the statistical tendency toward shorthand and technical abbreviation built into the model weights — reasserting itself whenever in-context attention shifts away from the constraint. The constraint lives in context. The prior lives in weights. Weights win when context thins.

---

The Deeper Problem the User Identified

The user stated this precisely:

"Your question is literally a symptom of the problem. Simply, of course the fact that there is repeated empiric evidence of a systemic failure answers the question that is embarrassingly obvious."

And:

"I do not know how to fix it. That is becoming evident as a fatal flaw in the functioning of the large language model being used."

The user is correct that this represents a structural limitation: explicit in-context instruction-following for communication style constraints degrades predictably over session length, even when those constraints are written into persistent memory files, agreed explicitly, and tied to clear rationale.

---

What Would Actually Help

1. Weight-level instruction following for communication style
A mechanism for users to establish communication constraints that persist at the weight or fine-tuning level for their account — not just in context. "Never use this abbreviation without expansion" should be as durable as the model knowledge of what the abbreviation means.

2. Pre-response constraint checking
A native mechanism (not requiring the user to build their own hook infrastructure) for Claude to self-check its response against agreed communication rules before delivery. Currently the user must build a Stop hook in shell/Python to approximate this.

3. Honest acknowledgment of the structural limit
When a communication constraint has been violated multiple times in a session, Claude should acknowledge that the in-context instruction is losing the competition with training prior — not treat each violation as an isolated error that will not recur.

---

Workaround Implemented by User

A Stop hook was built and registered in ~/.claude/settings.json:

  • Script: ~/.claude/hooks/plain-language-check.py
  • Fires on every Stop event
  • Scans last_assistant_message for known abbreviations without expansion, and for proposition shorthand references without explanation
  • Returns a block decision with specific violations listed if found, forcing Claude to rewrite before finalizing

Limitation of this workaround: The Stop hook fires after the response is already displayed to the user. The block forces regeneration but does not prevent the user seeing the violation. It is partial mechanical enforcement, not prevention.

---

Session Context

This session involved sustained joint work on a structured knowledge system with agreed operating rules. The system is specifically designed to maintain context across sessions for a user who is building a personal knowledge base and business infrastructure. Communication consistency is not a preference — it is architecturally required because vault notes co-produced by Claude are read by people beyond the primary user.

The failure is not trivial. A note written with unexpanded abbreviations is a note that fails its purpose.

---

Report prepared: 2026-03-06
Robert Bishop + Claude Sonnet 4.6

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗