You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- ISS-8961: the signals/ namespace key was (diff_tip, taxonomy_hash,
prompt_hash), and diff_tip is a ref name -- literally "HEAD" for a
local branch review -- so no component varied with the diff. The
cache dir is ~/.claude/cr-cache-global-repo-<worktree basename>, so
two reviews from one pooled directory shared directory and key, and
the second was served the first's extracted signals.
- Add signal_input_hash: SHA-256 over the canonical serialization of
the agent input bundle extract-signals-prepare builds, which is
exactly what the extraction agent reads. Key is now (diff_tip,
input_hash, taxonomy_hash, prompt_hash).
- Build the bundle before computing the key rather than only on a miss.
- A bundle with no changed files has no diff identity: emit an empty
cache_key plus cache_bypass_reason "no-changed-files", which
suppresses the read and (via consolidate's empty-key guard) the write.
- Correct the --diff-tip help, which claimed the flag was a SHA.
Testing: pytest plugins/ (3 pre-existing failures unrelated to this
change: TestOverrideCache/TestPR114ReviewFixes fail on clean main
because their override fixture is dated 2026-05-29 and the overrides
TTL is 90 days). Counterfactual: reverting code_review_helpers.py turns
TestPooledWorktreeSignalCacheIsolation red with lane 2's manifest
reading status "cache_hit". ruff check; pyright.
Risks: cached extractions written under the old key scheme are misses
after this lands, so the first review in each cache directory re-runs
one Haiku extraction.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,11 @@ All notable changes to the claude-plugins project will be documented in this fil
4
4
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Entries are listed newest-first; each plugin section is treated as released when merged to `main`.
6
6
7
+
### code-review v3.7.1
8
+
9
+
#### Fixed
10
+
- **Signal extraction no longer serves one review's signals to a different review that shares a cache directory (ISS-8961).** The `signals/` namespace key was `(diff_tip, taxonomy_hash, prompt_hash)`, and `diff_tip` is a ref *name* — `resolve-scope` leaves it as the literal `"HEAD"` for every local branch review and sets it to `origin/<head_ref>` for a PR — so no component of the key varied with the diff. The cache directory is `~/.claude/cr-cache-global-repo-<basename of the git toplevel>`, which is the worktree directory name, so any two reviews run from the same directory shared both the directory and the key: the second review was served the first review's extracted signals and `extract_signals.json` described a diff that was never under review. The key now includes `signal_input_hash` — a SHA-256 over the canonical serialization of the agent input bundle `extract-signals-prepare` builds (file list, per-file added/removed excerpts, intent hint), which is exactly what the extraction agent reads — so a different diff produces a different key even at an identical path, branch, and tip. `extract-signals-prepare` builds that bundle before computing the key rather than only on a miss. When the bundle carries no changed files there is no diff identity to key on, so the run bypasses the cache in both directions: it emits an empty `cache_key` plus `cache_bypass_reason: "no-changed-files"` in the manifest, which suppresses the read and, through `extract-signals-consolidate`'s existing empty-key guard, the write. A miss re-runs a single Haiku extraction; a wrong hit silently misdescribes the change under review.
Copy file name to clipboardExpand all lines: plugins/code-review/tools/python/prefix_fixtures/golden_prefix_empty_diff/expected/extract_signals_manifest.json
0 commit comments