feat(memory-v3): tree-node on-disk format + node store#31971
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e19c2e4772
ℹ️ 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".
| */ | ||
| export const TreeNodeFrontmatterSchema = z | ||
| .object({ | ||
| children: z.array(z.string()).default([]), |
There was a problem hiding this comment.
Validate children refs as page:/node: entries
Tighten the children schema so each entry matches the documented ref forms (page:<slug> or node:<id>). Right now any string passes validation, so malformed edges like "people/alice" or "foo" are persisted and reloaded as valid frontmatter, which can silently corrupt the v3 DAG and break downstream traversal/routing logic that expects typed refs. Since this store is the read/write boundary for on-disk nodes, rejecting bad refs here prevents bad graph state from entering the system.
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 1 of 19)