feat(memory-v3): fast filter judging dense hits (sticky bypass)#31979
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54977a2b87
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const { input, dense, bypass } = args; | ||
|
|
||
| // Dense slugs that bypass judgment (near-exact sparse / hot) are kept as-is; | ||
| // only the remainder is judged. | ||
| const judged = dense.slugs.filter((slug) => !bypass.has(slug)); |
There was a problem hiding this comment.
Exclude sticky slugs from dense judging
judged is computed as dense.slugs minus bypass, but runScouts defines sticky as {hot ∪ near-exact sparse} and bypass as only a subset of that (near-exact sparse). This means hot sticky pages are still sent to the LLM filter and can be dropped, which violates the documented "sticky pages are never judged" invariant and can change retrieval behavior when a hot page is present in dense candidates. Build judged by excluding sticky (or union sticky into the non-judged set) so sticky carry-over is preserved deterministically.
Useful? React with 👍 / 👎.
#31990) * feat(memory-v3): tree-node on-disk format + node store (#31971) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): config schema + cheap/capable LLM call sites (#31972) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): curated edge-expansion lane (#31973) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): write-path job types + config (no behavior) (#31974) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): gate decision (ready/more) + final selection (#31975) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): tree index with DAG adjacency + cache (#31976) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): always-on scouts over the v2 substrate (#31977) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): compose node index from children + routing hints (#31978) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): fast filter judging dense hits (sticky bypass) (#31979) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): parallel-fan-out traversal with cycle/visited guards (#31980) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): tree validator (orphans, cycles, dangling refs, freshness) (#31981) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): scout-seeded tree-walk descent driver (#31982) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): assistant memory v3 validate/tree CLI + routes (#31983) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): retrieval loop (scouts->filter->tree->edges->gate) (#31984) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): consolidation drains shared buffer into tree + maintains standing-context files (#31985) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): v3 Retriever as comparand #2 in the compare harness (#31986) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): pass-1->pass-2 co-activation logging (#31987) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): weighted, decaying auto-edge learning job (#31988) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * feat(memory-v3): live shadow via memoryRetrieval middleware (inject v2, log v3) (#31989) Co-authored-by: Vellum Assistant <assistant@vellum.ai> * fix(memory-v3): null-safe shadow gate when memory.v3 config is absent The live-shadow middleware runs on every turn and read `config.memory.v3.enabled` unguarded. Configs built outside the Zod schema (agent-loop test fixtures) have no `memory.v3` block, so the gate threw `TypeError: undefined is not an object` and aborted the turn — cascading across ~13 agent-loop test files. Guard with optional chaining (matches the loop's existing `write?.coactivation` pattern) and add a regression test for the absent-v3 config. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(memory-v3): add route policies for memory/v3/validate + tree PR #31983 registered the two read-only v3 routes but never added their ACTOR_ENDPOINTS entries in route-policy.ts; the per-PR run skipped CI so the route-policy coverage guard never ran. Add both as settings.read (mirroring the v2 read routes), satisfying guard-tests.test.ts. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Vellum Assistant <assistant@vellum.ai> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Part of plan: memory-v3-build.md (PR 9 of 19)