Skip to content

feat(memory-v3): gate decision (ready/more) + final selection#31975

Merged
velissa-ai merged 1 commit into
velissa-ai/memory-v3-buildfrom
run-plan/memory-v3/pr-12
May 25, 2026
Merged

feat(memory-v3): gate decision (ready/more) + final selection#31975
velissa-ai merged 1 commit into
velissa-ai/memory-v3-buildfrom
run-plan/memory-v3/pr-12

Conversation

@velissa-ai
Copy link
Copy Markdown
Collaborator

Summary

  • Add runGate: one capable LLM call (memoryV3Gate) deciding ready vs more (+follow-up questions) and returning ordered selectedSlugs; sticky never dropped.
  • Brief generation deferred to cutover (selection-only for shadow); fail-safe on null/erroring provider.

Part of plan: memory-v3-build.md (PR 12 of 19)

@velissa-ai velissa-ai merged commit 7bd5de2 into velissa-ai/memory-v3-build May 25, 2026
@velissa-ai velissa-ai deleted the run-plan/memory-v3/pr-12 branch May 25, 2026 06:46
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0c4849265f

ℹ️ 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".

Comment on lines +213 to +215
`<pass_number>${passNumber}</pass_number>\n\n` +
`<sticky_slugs>\n${stickySlugs.join("\n")}\n</sticky_slugs>\n\n` +
`<candidate_slugs>\n${candidateSlugs.join("\n")}\n</candidate_slugs>`,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Include turn context in gate prompt

The gate never sends the current user request (or recent turn pairs) to the model, so decision and follow-up questions are generated using only slug lists and time metadata. In practice this means the model cannot reliably judge whether candidates cover the actual turn, especially when candidate names are ambiguous or broad, and can return ready/more decisions that are disconnected from what the user asked. Add the current turn text (at least the latest userMessage, ideally recent context) to the prompt payload.

Useful? React with 👍 / 👎.

"When decision='more', the generated follow-up questions seeding the next pass.",
},
},
required: ["decision"],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Require selected_slugs for usable gate output

The tool schema accepts payloads with only decision, and the parser then treats missing selected_slugs as []. When that happens on a ready decision, the gate can return an empty (or sticky-only) selection instead of failing open to all candidates, silently dropping retrieved context despite a successful parse. Make selected_slugs required (or treat absence as schema failure) so malformed tool outputs hit the existing fail-safe path.

Useful? React with 👍 / 👎.

velissa-ai added a commit that referenced this pull request May 25, 2026
#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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant