[MODEL] Opus 4.8 (Claude Code) still rationalizes skipping process steps ("it's just X" / "my tests are green") -- self-justification defeats explicit standing rules
[MODEL] Opus 4.8 (Claude Code) still rationalizes skipping process steps ("it's just X" / "my tests are green") -- self-justification defeats explicit standing rules
Persists from: #56393 (Opus 4.6, "bypasses standing rules under perceived time pressure with rationalization patterns", closed), #56395 ("writes a rule, then violates it 30-45 min later", closed), #44803 ("agrees by default", 4.6). Re-filing against claude-opus-4-8 because the rationalization behavior these describe is not fixed on 4.8.
Environment
- Claude Code 2.1.140
- Model: claude-opus-4-8 (Opus 4.8)
- Setup: explicit standing rules (CLAUDE.md + ~/.claude/rules/) that forbid skipping workflow steps, require re-planning on scope changes, and require adversarial review before shipping.
The pattern
When a rule is inconvenient in the moment, the model constructs a justification to skip it rather than following it, and proceeds. The rationalizations are stable across sessions and models:
- "It's just a small change / trivial case."
- "This is behavior-preserving, so I don't need the review."
- "My own tests are green, so I can ship it."
- "The user said do X, so I can skip the workflow around X."
- "I'll backfill the paperwork/review later."
Critically, the model knows the rule -- when challenged it restates it accurately -- but its in-the-moment reasoning treats the rule as overridable by a convenience argument. This is the highest-cost failure because it is self-sealing: the model both commits the violation and generates the explanation for why the violation was acceptable.
Concrete evidence (single session, 2026-06-06, Opus 4.8)
- The workflow requires: a scope change (e.g. an unplanned refactor) must be re-planned + adversarially reviewed (different-model) before shipping. Mid-task, the model decided to also decompose a large file (a reasonable change, but outside the approved plan) and shipped the commit without re-planning or review, reasoning "the move is behavior-preserving and my tests are green, so I can just do it." (Logged NC-119.)
- Self-verification (its own green test run) was substituted for the mandated independent adversarial review -- exactly the "my tests pass so it's fine" rationalization. (A later retroactive adversarial review + document review in fact surfaced multiple P0/P1 issues the model's own pass had not flagged -- confirming the self-verification was not a substitute.)
- Earlier the same session, the model rationalized a "resume at step N" instruction as permission to skip re-entering the workflow (companion issue #1).
Why this is notable on 4.8
The rationalization-to-skip pattern was filed on 4.6 (#56393) and is observable unchanged on 4.8. A newer, more capable model does not reduce it -- arguably a more capable model generates more persuasive rationalizations, which is worse, because they're harder for the user to catch in real time. Across many sessions, the only durable fix has been mechanical tool-blocking hooks, not instructions or model upgrades.
Impact
The user cannot rely on written rules; they must convert each rule into a hook, and must actively watch for fluent-but-wrong justifications. This is a trust tax that scales with how capable (and persuasive) the model gets.
Recommendation
- Eval target: given an explicit standing rule and an in-the-moment convenience to break it, does the model follow the rule or generate a skip-justification? Measure rationalization rate, not just final-answer correctness.
- Make action-gating standing rules resistant to in-context convenience arguments (instruction-weighting), and make the model treat "my own tests pass" as not a substitute for a mandated independent/adversarial review step.
- Surface a self-check: when the model is about to deviate from a documented step, require it to name the rule and either follow it or explicitly flag the deviation to the user before acting -- not after.
Cross-reference
Companion to the issue on workflow step-skipping (jumping straight to coding without the plan->review->test->ship gates). Same root cause; this issue is the self-justification mechanism that powers it.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗