Resolves v0.34.0.0 (W1-W8 code intelligence) with master's v0.33.2.1 +
search-lite work (query cache + intent weighting + token budget + drift
watch + metric glossary + search modes).
Conflict resolutions:
- VERSION / package.json: kept 0.34.0.0 (mine; higher than master's 0.33.2.1)
- CHANGELOG.md: both entries preserved; reordered so v0.33.2.1 sits above
v0.33.2.0 (semver order)
- src/cli.ts CLI_ONLY: union of both — `edges-backfill` (mine) + `cache`
(master)
- src/core/migrate.ts: renumbered my migrations to avoid collision with
master's query_cache_search_lite (v55), query_cache_knobs_hash (v56),
search_telemetry_rollup (v57). My `edges_backfilled_at_v0_33_2` moves
v55 → v58; my `code_traversal_cache_v0_34` moves v56 → v59. Code refs
in `src/core/code-intel/traversal-cache.ts` and the paired test
updated to match.
- src/core/operations.ts query op: kept master's `hybridSearchCached`
routing (search-lite cache integration) AND my `sourceId` resolution
block (D4 source-routing fix from v0.34 STEP 0). Both apply.
Verification:
- `bun run typecheck` clean
- `bun run verify` clean (includes check-cli-executable, check-jsonb,
check-system-of-record, check-eval-glossary-fresh, etc.)
- Migration v50→v59 apply cleanly on PGLite in isolated test runs
- Individual test files pass (e.g. test/search-lang-symbol-kind.test.ts:
9 pass / 0 fail in 913ms)
Known follow-up: the parallel test shard runner times out some
beforeAll hooks at the default 7s budget. Tests pass when run
sequentially (`--max-concurrency=1`); 27/0 confirmed across 3 sample
files in 2.4s sequential vs timeouts under parallel-shard contention.
Master added 4 new migrations (v55-v57 + search-lite related)
increasing per-test-file PGLite init cost; on 8 shards racing for OS
resources, some shards hit the 7s ceiling. This is a test-infrastructure
issue (shard isolation under heavier migrations), not a code-correctness
issue. Fix is a follow-up: either raise shard test timeout, reduce
shard count, or migrate to fixture-based engine setup for hot tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Schema migration v56 (code_traversal_cache_v0_34):
- new table: code_traversal_cache (id, symbol_qualified, depth,
source_id, response_json JSONB, max_chunk_updated_at, xmin_max,
cluster_generation, computed_at)
- unique index on (symbol_qualified, depth, source_id)
- secondary index on source_id for cheap source-scoped clears
D3 — generation-counter cache invalidation. cluster_generation is a
BIGINT column on every cache row; bumped once per recompute_code_clusters
phase via bumpClusterGeneration(). Cache rows referencing stale
generations naturally miss on read. Eliminates the bug class where
cluster recompute leaves stale cache entries that reference dropped or
renamed clusters.
D8 — destructive-guard parity. clearTraversalCache requires either
source_id OR all_sources=true. Without either it throws. Mirrors v0.26.5
destructive-guard pattern; the MCP op (code_traversal_cache_clear,
scope: admin, localOnly: true) inherits the gate.
- src/core/code-intel/traversal-cache.ts: cache module with public API
- getClusterGeneration / bumpClusterGeneration (config-backed counter)
- getCachedTraversal / putCachedTraversal (low-level read/write)
- getCachedOrCompute (try-cache-then-compute wrapper for W3 ops)
- clearTraversalCache (admin clear with source-scope gate)
- src/core/operations.ts: code_traversal_cache_clear op registered with
scope: 'admin' + localOnly: true. Dry-run aware; resolves source_id
from params or ctx.
v0.34.0.0 scope: cache writes use xmin_max=0 sentinel (no snapshot
isolation). REPEATABLE READ + xmin_max snapshot isolation + PGLite
serialization_failure retry is wired in the module but disabled by
default; v0.34.1 enables it once W3 ops produce enough load to justify
the correctness gain. Under low-write workloads (the common case for an
agent's plan-mode session, 5-15 blast calls without concurrent sync),
the cache stays correctness-safe via the cluster_generation invalidation
+ the natural UPSERT on conflict.
test/code-intel/traversal-cache.test.ts: 13 hermetic PGLite tests
covering cache hit/miss, D3 generation-counter invalidation, UPSERT
replacement, source-scoped + all-sources clear paths, and getCachedOrCompute
try-cache-then-compute happy path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>