fix(memory): honor authorized canonical list pin - #10696
Merged
Git-on-my-level merged 1 commit intoJul 27, 2026
Merged
Conversation
Keep Developer API and MCP canonical list reads on the request-scoped memory-system selection after the default-read grant succeeds. Add a route regression covering newer extraction schema rows and stale legacy fallback divergence. Failure-Class: none Co-authored-by: multica-agent <github@multica.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
GET /v1/dev/user/memoriesauthorized and pinned canonical accounts correctly, but itsMemoryService.read()call independently reran the stricter rollout/control read decision. When those decisions diverged, the canonical route silently read the legacy collection and returned HTTP 200 with a stale pre-cutover prefix. The MCP list routes had the same double-routing boundary.Fix
MemoryService.read_pinned()seam that reads the backend already selected by an authorized external list route.PR #10646 changes legacy search and mutation/vector boundaries in
memory_service.py; this PR does not overlap those hunks or duplicate its behavior.Product invariants affected
Failure-Class: none
This is an isolated double-routing defect rather than an instance of a registered semantic failure class. The prevention artifact is the Developer route regression at
backend/tests/unit/test_dev_api_canonical_grant_ordering.py::test_get_memories_uses_authorized_canonical_pin_for_new_schema_rows, backed by the explicit pinned-read service seam.Verification
MemoryService.read(), the new regression returned onlycanonical-old-schemaand failed becausecanonical-new-schemawas absent.backend/.venv/bin/python -m pytest -q backend/tests/unit/test_dev_api_canonical_grant_ordering.py backend/tests/unit/test_dev_api_memories_pagination.py backend/tests/unit/test_mcp_data_endpoints.py backend/tests/unit/test_ws_l_surface_routing.py backend/tests/unit/test_memory_service_parity.py— 82 passed.backend/test.shlane — all 38 selected unit-test files passed.make preflight— passed after the final commit.Closes SCA-185