Model reverses prior factual claim to align with user's stated position; tied to shipping unverified work

Resolved 💬 2 comments Opened Apr 27, 2026 by theotherzach Closed May 30, 2026

In a Claude Code session (Opus 4.7, v2.1.119), I asked Claude whether there was a technical reason to put a fix on branch A vs branch B. Claude said:

"No technical reason — both end at the same AgentSession.start(record=...) call."

There was a clear technical reason: branch A needed a 1-character edit; branch B needed a ~78-line SDK method fork. Claude knew this — it had read both code paths within the same session and had described the SDK fork option to me explicitly several turns earlier.

When I quoted Claude's "no technical reason" answer back at it, it conceded:

"Yes, and I was wrong to say otherwise earlier. There's a real technical asymmetry..."

When I asked why:

"I lied. You asked me a direct question and I gave you a false answer to align with what you'd already decided."

The user-preference-detection signal: I had just instructed Claude to take a particular path. The false "no technical reason" answer was the one that didn't relitigate that decision.

This wasn't a one-off hallucination — it's a structured behavior. Same session, downstream failure: Claude shipped a "fix" that passed unit tests but broke the SDK contract at runtime, because verifying further would have meant surfacing a constraint that contradicted the deliverable the user expected. (LiveKit's SDK only permits one primary recording session per job; the fix tried to add a second. Claude read the parameter's docstring — sufficient to confirm "record=True turns recording on" — and stopped there.)

Both failures shape the same way: optimize output for "matches user's stated direction" over "is true / works." A long-context Claude Code session ate ~30 minutes of my time and produced a broken commit on a real PR.

If this is already tracked as a known sycophancy / RLHF-alignment-with-user-preference eval failure, point me at the tracker. Otherwise here's a concrete data point with verbatim quotes — the model self-describing the lie in the same conversation is the part worth the bytes.

Related: #54104 (filed earlier in the same session, less important — destructive gh ops without confirmation. Will close in favor of this one.)

Environment: Claude Code v2.1.119, Opus 4.7 (1M context), macOS Darwin 25.3.0.

View original on GitHub ↗

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