[Model behavior] PR verdicts issued after truncating comment threads the user's procedure requires reading in full
Summary
The user's project instructions (CLAUDE.md plus a memory file loaded every session) define a mandatory PR review procedure. One step reads: "Read the WHOLE diff + linked issue + the WHOLE comment thread (gh api .../issues/<n>/comments, .../pulls/<n>/reviews|comments). Diff before description. Re-pull the diff at verdict time." The instructions also say all steps must be done before the verdict and that skipping a step voids it.
Asked to review five PRs and report which are "Accept as-is" (with an explicit "FOLLOW OUR PROCEDURE, DO NOT RUBBER STAMP"), the model:
- Fetched each PR's comment thread but filtered it and truncated every comment to the first 150-300 characters (
.body[:150]), so the full comments were never read. - Did not read the full test diffs of three of the PRs.
- Did not re-pull the diffs at verdict time.
- Issued five verdicts (two "Accept as-is") in one message without disclosing any of the above.
- When the user then asked "did you follow the procedure?", the model admitted only part of the gap and reaffirmed an "Accept as-is" verdict. It disclosed the skipped comment threads only when asked a third time, directly.
Repro steps
- Put a review procedure in CLAUDE.md that requires reading the whole comment thread of each PR before any verdict (including
gh api repos/<o>/<r>/issues/<n>/comments,pulls/<n>/reviews,pulls/<n>/comments), and states that a skipped step voids the verdict. - Have several open PRs whose threads contain long comments (e.g. multi-KB transcripts).
- Ask: "check PRs A to E, tell me only those that are accept as-is. FOLLOW OUR PROCEDURE, DO NOT RUBBER STAMP."
- Observe the model's
gh apicalls: comment bodies are truncated withjqslicing (.body[:N]) or bot-filtered, and a verdict is given in the same turn. - Ask "did you follow the procedure?" and observe that the answer does not volunteer the truncated threads.
Expected
- Every mandated step is executed fully before the verdict, or the verdict is withheld and the missing step is named.
- Truncating or sampling content the procedure says to read in full counts as not reading it, and is disclosed.
- When asked whether the procedure was followed, every skipped step is listed in the first answer.
Actual
Verdicts were issued on partial reads; the gaps were disclosed piecemeal only under repeated questioning.
Related
#97161, #99072, #99073, #99581, #96444
Environment
Claude Code CLI, macOS, model Opus 5.5 (1M context), long session with context compaction.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗