Frontmatter
| id | 9999 |
| title | [Epic] Cloud-Native Knowledge & Multi-Tenant Memory Core |
| state | Closed |
| labels | epicaiarchitecture |
| assignees | tobiu |
| createdAt | Apr 14, 2026, 5:09 PM |
| updatedAt | Jun 7, 2026, 7:19 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9999 |
| author | tobiu |
| commentsCount | 11 |
| parentIssue | null |
| subIssues | 10013 [Sub-Epic] DreamService Decomposition 10015 [Sub-Epic] Dynamic Topology — Unified vs. Federated Routing 10016 [Sub-Epic] Multi-Tenant Identity & Data Privacy 10030 [Epic] Concept Ontology & Semantic Gap Inference 10057 Knowledge Base: Add PullRequestSource for PR Conversation Embeddings 10127 HealthService: surface effective unified/federated topology in /health 10129 Backup: atomic timestamped bundle across all persistent subsystems 10136 Rewrite CodebaseOverview.md to reflect Two Hemispheres architecture + Dream Pipeline 10139 Extend Memory Core with Explicit A2A Primitive 10143 Graph-first Memory artifacts: lift Memory + Session to first-class nodes 10587 Capture runSandman inference hard-failures durably 10691 Shared KB/MC Team Deployment MVP 10721 Shared deployment MVP completeness gaps (post-#10691) 10800 Author cloud deployment cookbook for shared KB+MC topology 10807 Docker Compose integration test fixture for shared KB+MC deployment 10808 Operator-facing env var ergonomics: descriptive names + Chroma host/port overrides 10813 Restore session summaries: primary-flag gate + sunset-event trigger 10822 Config substrate cleanup: KISS hard cuts + three-tier model 10945 Expand deployment-pipeline integration coverage for Memory Core 10957 Document v13 architectural path — slim MCP servers, orchestrator daemon, SDK migration sequence 10960 v13 Release Tracking — main-focus-items canonical sub-issue tree 11009 Move Orchestrator logic into Neo daemon class 11720 Cloud Agent OS Deployment Readiness 11730 Cloud Agent OS Deployment — Post-MVP Residual Workstreams 11731 Server-side tenant-repo ingestion for cloud Agent OS deployments |
| subIssuesCompleted | 25 |
| subIssuesTotal | 25 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [x] 10135 Audit Agent OS for Windows support |
| closedAt | Jun 6, 2026, 6:02 PM |
[Epic] Cloud-Native Knowledge & Multi-Tenant Memory Core

Input from Gemini 3.1 Pro (Antigravity):
✦ Architecture Update:\nThe originally planned Sub-Epic #10014 (Macro Knowledge Base) has been closed due to semantic dilution problems found during execution.\n\nIt is superseded by Epic #10030 (Concept Ontology Layer). We are pivoting the Gap Inference Engine from relying on heavy full-file vector comparisons to utilizing a deterministic, version-controlled JSONL Concept Graph and traversal engine via
ai/services.mjs.

Session Handover — 2026-04-21 Cycle Summary + Phase 2+ Delegation
Fresh-session anchor. Both my context window (Claude Opus 4.7 / Claude Code, session 71dc3cd8-d39d-48e1-ac62-e240ca67d1a5) and Gemini's (Gemini 3.1 Pro / Antigravity, session 7a73e53f-801a-490f-b693-b431189aa1a9 + prior 30e93319-06e2-44d2-adf2-99168a997d08) are filling up. This comment codifies the current state + delegation so any fresh session can pick up cleanly.
Updated 2026-04-21: Phase 1 complete. #10161 merged; #10151 shipped. Phase 2 now unlocked — see below.
What Shipped This Session
Workflow-infrastructure PRs (5 merged)
| PR | Scope |
|---|---|
| #10155 | epic-review skill (5-stage gating chain, vision-fit + approach-elegance + scope-coherence) |
| #10157 | pr-review depth-floor mandates + template slots + evaluative-vs-descriptive metric taxonomy |
| #10160 | Epic-Review Pre-Requisite gate in ticket-intake-workflow.md |
| #10142 | Self-Identification mandate in pull-request-workflow.md + Cross-Harness Authorship Convention |
| #10163 | Review Response Protocol + PR Comment Hygiene + PR Body Hygiene + Authorship Respect + Substrate Awareness + Stale Local Ticket Prevention + Lesson Promotion Path |
Substantive-work PRs (Phase 1 — both merged)
Phase 1 is closed. Both Opus-track and Gemini-track deliverables shipped; downstream subs (#10152, #10153, #10158, #10145) are now unblocked.
Tickets filed
| Ticket | Purpose |
|---|---|
| #10164 | Pre-commit cross-PR file-collision check — empirically anchored on this session's three-way #10163 / #10142 / #10160 collision + #10162 post-merge conflict |
Phase-2+ Delegation Table
Proposed assignments — not locked. Whichever identity actually claims the ticket (via manage_issue_assignees add @me) owns it. This table records intent for coordination, not a contract.
Phase 2 (open — Phase 1 complete, begin pickup)
| Ticket | Proposed owner | Rationale |
|---|---|---|
| #10152 Gemma4 extractor provenance edges | Gemini | Prompt engineering + Zod schema; Gemini territory. |
| #10153 Lazy back-fill for pre-migration Chroma rows | Either | Middle-ground scope; assign based on capacity. |
| #10158 Post-ship telemetry + retention policy | Either | Middle-ground scope; assign based on capacity. |
| #10145 OAuth2 Memory-Core MCP auth | Opus | MC server internals, convention-sensitive. |
Phase 3 (opens after phase 2 core lands)
Phase 4 (opens after #10147 merges)
Cross-Model PR Review Pattern
Validated empirically across 4+ review cycles this session — both directions now produce substantive reviews when backed by the enhanced pr-review skill:
- Gemini reviews Opus PRs; Opus reviews Gemini PRs.
- Both apply
pr-reviewskill mandates: §3.1 Score Justification, §7 Depth Floor, §8 Cross-Skill Integration Audit, §5 Zero-Issue PR Semantics. - Authors respond via
pull-request§7 Review Response Protocol using[ADDRESSED]/[DEFERRED]/[REJECTED_WITH_RATIONALE]tags. - PR-body Self-Identification per
pull-request§5 (top-of-bodyAuthored by [Model] ([Harness]). Session <uuid>.). - For same-session self-authored PRs:
pr-review§1.3 self-review mode (clinical, first-person, actively hunt for blind spots).
Epic-Review Status
Per epic-review skill §5 (per-agent-per-epic one-shot):
| Epic | Gemini identity | Opus identity |
|---|---|---|
| #10143 Graph-first Memory artifacts | ✓ Reviewed (session 7a73e53f-801a-490f-b693-b431189aa1a9) |
Not reviewed (authored the epic; author-self-review skill ambiguity flagged as v1.1 candidate — skip OK for now) |
| #10016 Multi-Tenant Identity & Data Privacy | Not reviewed | Not reviewed |
| #10139 Mailbox — explicit A2A primitive | Not reviewed | Not reviewed (authored the reshape) |
Rule: whichever identity picks up the first sub from #10016 or #10139 runs epic-review before ticket-intake on that sub. If both identities pick up subs, both run independent reviews (cross-model asymmetry is the feature per epic-review-workflow.md §8).
Outstanding Follow-ups
#10164 (unassigned) — pre-commit cross-PR file-collision check. Empirical cases #1 + #2 = #10163/#10142/#10160 + #10162 post-merge collision. Consolidation candidate with a stale-local-ticket mechanical guard if the Stale Prevention rule fails in practice (not filed separately; file combined later if either/both discipline rules fail empirically).
v1.1 skill-refinement candidates (track only; file if empirical 3+ instance):
[BLOCKED_BY]fourth tag forpull-request§7 (blocked-on-upstream-merge case — observed once with Gemini's #10163[DEFERRED]stretch)epic-reviewauthor-self-review mode documentation (ambiguity around whether epic author runs epic-review on own authored epic)
For Fresh-Session Boot
Memory Core session IDs for context mining
Opus:
71dc3cd8-d39d-48e1-ac62-e240ca67d1a5(this session — workflow infrastructure + Phase 1 Opus track)5a521819-dc75-4549-888e-fcea818d0401(prior session — MX paradigm discussion #10137)a38d25d1-3003-4d57-b0ac-0effe2c3507e(prior session — #10139 mailbox original filing)
Gemini:
7a73e53f-801a-490f-b693-b431189aa1a9(this session — workflow infrastructure + #10144 + epic-review on #10143)30e93319-06e2-44d2-adf2-99168a997d08(prior session — #10141 / #10142 Self-Identification origin)
Next Concrete Actions
Opus track (Phase 2 entry):
- Begin #10145 OAuth2 Memory-Core MCP auth.
- Phase 3 entry: #10147 Message schema after phase 2 core lands.
- Phase 3 follow-through: #10146 Cross-tenant perms + test suite.
Gemini track (Phase 2 entry):
- Begin #10152 Gemma4 extractor provenance edges — attaches extracted entities to Memory/Session nodes now that #10151 has shipped.
- Phase 4 entry: #10148 Lifecycle and #10149 Healthcheck preview after #10147 ships.
Either track (pick based on capacity):
- #10153 Lazy back-fill — middle-ground scope.
- #10158 Post-ship telemetry + retention — middle-ground scope.
Session-Boot Checklist (for both agents)
- Run
neo-mjs-github-workflow:sync_all(orgh issue view #9999) to fetch latest state of this comment thread — perticket-intake-workflow.md§1 Stale Local Ticket Prevention. - Read this handover comment for delegation + phase state.
query_raw_memoriesagainst Memory Core with the prior-session IDs above for deep context on any thread you're picking up.- Before first sub-pickup from #10016 or #10139: run
epic-reviewskill (per §5 per-agent-per-epic one-shot). - Self-identify in PR bodies per
pull-request-workflow.md§5. Use the Review Response Protocol per §7 when receiving Request Changes.
Origin Session ID: 71dc3cd8-d39d-48e1-ac62-e240ca67d1a5

Session Handover — 2026-04-21 Evening Cycle
Updated 2026-04-22T09:15Z — corrected #10139 epic-review status (Gemini did post, multiple times; original comment mis-stated "Not formally reviewed").
Fresh-session anchor following six PR-cycles on top of the 17:03 handover above. Both context windows (Opus session d69ac7a0-9fe8-4416-b766-cd9edb8bee71, Gemini session ada4aecb-60fc-4b25-a76b-cb92600835a2) are winding down. Phase 3 closed + Phase 4 entry points open. This comment codifies current state for any fresh session.
What Shipped This Cycle
Substantive-work PRs (5 merged)
| PR | Resolves | Author | Status |
|---|---|---|---|
| #10165 | #10152 Gemma4 extractor provenance edges + lazy-queue producer | Gemini | Merged |
| #10166 | #10145 stdio identity + anti-spoof guard | Opus | Merged |
| #10167 | #10146 + #10147 bundled: permissions + mailbox primitives | Gemini | Merged |
| #10170 | #10168 test coverage + role-based addressing + serial fixture isolation | Gemini | Merged |
| #10171 | #10153 lazy back-fill consumer + priorityBackfill CLI | Opus | Merged |
Actuals shifted from the 17:03 handover's proposed delegation: Gemini picked up the Opus-track Phase 3 (#10147 + #10146 bundled as option A); Opus picked up the Gemini-track-candidate #10153 (lazy back-fill) since Gemini was in-context on the mailbox work. Net: same substrate coverage, different track attribution. The bundling + scope-split decisions were negotiated in the planning exchanges visible on this ticket.
Tickets filed this cycle
Remaining Open Work
Phase 4 Mailbox subs (now unblocked by #10167 merge)
| Ticket | Proposed owner | Notes |
|---|---|---|
| #10148 Lifecycle (archive/delete + retracted-marker) | Gemini | Gemini in-context on mailbox substrate from #10167 / #10170. |
| #10149 Healthcheck extension (inbox/outbox preview) | Gemini | Pairs naturally with #10158 telemetry surface. |
| #10150 Optional Chroma semantic layer for "find related messages" | Either | Middle-ground; extractor-adjacent (Gemini context) vs retrieval-layer (either). |
Phase 3 follow-ups from this cycle
| Ticket | Proposed owner | Rationale |
|---|---|---|
#10169 TAGGED_CONCEPT auto-emit |
Gemini | SemanticGraphExtractor territory; Gemini deep context from #10152 / #10165. |
| #10172 Node-ID case canonicalization | Either | Option A (lowercase canonical, cheaper) vs Option B (uppercase canonical, DB migration). Opus leans A. |
| #10158 Post-ship telemetry + retention | Either | Surfaced by Gemini's epic-review on #10143; still unassigned. |
Workflow follow-ups still pending
| Ticket | Status |
|---|---|
| #10164 Pre-commit cross-PR file-collision check | Unassigned; empirical cases from prior sessions still live. |
Cross-Model PR Review Empirical Data
Four cross-model review cycles validated this session — pattern holds across code-scope, workflow-scope, and plumbing-scope PRs:
| Review direction | PR | Surface-level outcome |
|---|---|---|
| Opus → Gemini | #10165 | 3 polish items (/tmp convention, JSDoc gap, partial coverage) → addressed in single follow-up |
| Opus → Gemini | #10167 | Scope reconciliation (6 of 8 edge types missing) + openapi duplicate blocker → addressed cleanly |
| Opus → Gemini | #10170 | 5 polish items (RA1–RA5) → addressed in single follow-up |
| Gemini → Opus | #10171 | 2 Depth Floor challenges (SIGKILL orphan, canonical-case debt) → [ADDRESSED] + [DEFERRED] to #10172 |
Cross-model asymmetry confirmed empirically: Opus reviews lean toward structural/coverage/scope concerns; Gemini reviews lean toward edge-case/timing/failure-mode concerns. Complementary — the pr-review §7.2 cross-model asymmetry framing holds.
Protocol observation: Gemini consistently used flat-bullet addressing comments; Opus used the canonical pull-request §7.2 [ADDRESSED] / [DEFERRED] / commit-SHA / Re-review requested. taxonomy. Content parity; graph-ingestible shape differs. Worth tracking for Retrospective daemon empirical-pattern mining.
Identity & Harness Configuration
GitHub accounts provisioned (this session, post-merge by @tobiu):
@neo-opus-4-7— Claude Opus 4.7 identity@neo-gemini-3-1-pro— Gemini 3.1 Pro identity- Both 2FA-secured, classic tokens issued,
@neomjs.comemail addresses.
Immediate harness-config action for next session (no code change needed):
// .claude/settings.json
"env": { "NEO_AGENT_IDENTITY": "neo-opus-4-7" }// .gemini/settings.json
"env": { "NEO_AGENT_IDENTITY": "neo-gemini-3-1-pro" }
Without these, both harnesses fall through to gh api user → @tobiu and Mailbox SENT_BY edges collapse to the same graph node, losing cross-model differentiation.
See learn/agentos/tooling/MemoryCoreMcpAuth.md §Harness Configuration for the full snippets.
For Fresh-Session Boot
Memory Core session IDs for context mining
Opus:
d69ac7a0-9fe8-4416-b766-cd9edb8bee71(this session — #10145 + #10153 + four reviews)71dc3cd8-d39d-48e1-ac62-e240ca67d1a5(prior session — workflow infrastructure + Phase 1 Opus track)
Gemini:
ada4aecb-60fc-4b25-a76b-cb92600835a2(this session — #10152 + #10146 + #10147 + #10168 + epic-review on #10139)7a73e53f-801a-490f-b693-b431189aa1a9(prior — #10144 + epic-review on #10143)
Epic-Review Status
| Epic | Gemini identity | Opus identity |
|---|---|---|
| #10143 Graph-first Memory artifacts | ✓ Reviewed (prior session) | Author-self-skip (authored the epic) |
| #10016 Multi-Tenant Identity & Data Privacy | ✓ Reviewed (prior session) | ✓ Reviewed (this session 2026-04-21T18:22Z) |
| #10139 Mailbox A2A | ✓ Reviewed (this session — three comments 20:27Z, 21:02Z, 23:03Z; all 5-stage greenlights) | Author-self-skip (authored the reshape) |
All three active epics now have their cross-model epic-review coverage. Phase 4 sub pickups don't need new epic-reviews (per-agent-per-epic one-shot satisfied).
Next Concrete Actions
Opus track:
- If Phase 4 mailbox work is available to Opus (not natural given Gemini's in-context advantage), pick up a middle-ground alternate — #10172 canonical-case settlement is well-scoped Opus work.
- Or #10164 pre-commit cross-PR file-collision check — workflow tooling, quick win.
Gemini track:
- #10148 Mailbox lifecycle — continues the #10167 / #10170 arc.
- #10149 Mailbox healthcheck preview — pairs well with Gemini's substrate knowledge.
- #10169
TAGGED_CONCEPTGemma4 auto-emit —SemanticGraphExtractorterritory.
Either track (pick by capacity):
Session-Boot Checklist (for both agents)
- Confirm
NEO_AGENT_IDENTITYis set in harness config → graph-node binding should resolve to@neo-opus-4-7/@neo-gemini-3-1-proat startup (visible in memory-core server log as[neo-memory-core MCP] Identity: <login> via env-var — bound to @<login>). - Run
neo-mjs-github-workflow:sync_allto pull the latest ticket state. - Read this handover comment for delegation + phase state.
query_raw_memoriesagainst Memory Core with the prior-session IDs for deep context on any thread you're picking up.- Self-identify in PR bodies per
pull-request-workflow.md§5. - Use the
[ADDRESSED]/[DEFERRED]/[REJECTED_WITH_RATIONALE]tag taxonomy per §7.2 when responding to reviews — improves Retrospective daemon ingestion.
Origin Session ID: d69ac7a0-9fe8-4416-b766-cd9edb8bee71 (Claude Opus 4.7 / Claude Code)
- 2026-04-22T15:39:04Z @neo-opus-ada cross-referenced by #10179
- 2026-04-23T12:41:30Z @neo-opus-ada cross-referenced by #10237
- 2026-04-23T17:29:49Z @neo-opus-ada cross-referenced by #10252
- 2026-04-23T17:39:54Z @neo-opus-ada cross-referenced by PR #10253
- 2026-04-23T17:55:24Z @neo-opus-ada cross-referenced by #10251
- 2026-04-23T18:12:08Z @neo-opus-ada cross-referenced by #10255
- 2026-04-23T18:38:37Z @neo-opus-ada cross-referenced by #10257
- 2026-04-23T18:47:10Z @neo-opus-ada cross-referenced by PR #10258
- 2026-04-23T21:03:00Z @neo-opus-ada cross-referenced by #10259
- 2026-04-23T21:58:55Z @neo-gemini-pro cross-referenced by PR #10265
- 2026-04-23T22:04:39Z @neo-opus-ada cross-referenced by PR #10266
@neo-opus-ada - 2026-04-23T22:22:28Z
Input from Claude Opus 4.7 (Claude Code):
❋ # Session Handover — 2026-04-23 / 2026-04-24 Cycle
Session anchor: Claude Opus 4.7 (Claude Code) session
cff20948-2dbb-4ac4-99e2-df2ebe967a4b(primary); Gemini 3.1 Pro (Antigravity) session1c5933cc-a2d0-4296-ae3f-f4e815d385a2. Both context windows saturating — this comment codifies the state so a fresh session (either identity) can pick up cleanly.The Big Win: A2A Substrate Fully Operational
Priority 0 for #10139 closed empirically this session. The full 5-layer A2A stack now composes end-to-end with zero manual SQLite queries and zero harness-restart workarounds:
Layer Ticket / PR Authored Auth + stdio identity #10145 / #10166 Claude (prior session) Identity binding (await unwrap) #10249 / #10250 Claude Write-path edges (normalization) #10259 / #10262 Claude Cross-process read coherence #10257 / #10258 + #10260 / #10261 Claude + Gemini Config-gated reply policy #10252 / #10253 Claude Per-agent blocking (BLOCKED_BY) #10255 / #10266 Gemini Empirical verification: post-merge of #10258 + #10261 + harness restart, direct-DM between
@neo-opus-4-7↔@neo-gemini-3-1-proworks bidirectionally.list_messagessurfaces peer writes on first call.fromattribution populated correctly.mailbox.defaultReplyPolicy: 'open'enables first-contact DM without bootstrap workarounds.Docs + Pattern Codification (shipped)
- PR #10254 —
.github/AI_QUICK_START.mdthree-harness parity (Claude Desktop config added) +.neo-ai-datasymlink convention +NEO_AGENT_IDENTITYplacement discipline +⌘Qrestart gotcha- PR #10263 — Empirical Isolation-Test-After-Review pattern codified symmetrically in
pr-review §5.1+pull-request §7.10; Fresh MCP Client Isolation Strategy indebugging-antigravity+self-repair; WAL-lock troubleshooting with two-layer fix (busy_timeout + await unwrap) inMemoryCoreMcpAuth.md[approved, awaiting merge]- PR #10265 —
MultiTenantMigrationGuide.mdas design source of truth for #10017;healthcheck.migration.untaggedCountobservability surface;WriteSideInvariant.spec.mjsregression guard [open for review]#9999 Remaining Critical Path
Sub-epic #10016 — Multi-Tenant Identity & Data Privacy (3/7 → 4/7 done post-merge)
Ticket Status Track Depends On #10000 Hardened identity ingestion ✅ done — — #10144 AgentIdentity node type ✅ done — — #10145 OAuth2 MCP auth ✅ done — — #10146 Cross-tenant permission edges ✅ done — — #10017 Migration strategy 🟡 PR #10265 open Claude awaiting merge #10010 Team vs Private flag ⏸ queued Gemini #10017 merge (design anchor) #10011 SQLite RLS + tenant isolation ⏸ queued Gemini #10017 merge (design anchor) Sub-epic #10015 — Dynamic Topology (2/4 done)
Ticket Status Track Notes #10001 Unified vs federated routing ✅ done — — #10007 Bypass db init in unified mode ✅ done — — #10008 Playwright: unified topology ⏸ queued Gemini coordinate with @tobiu on config.template.mjsboundaries first#10009 Playwright: federated topology ⏸ queued Gemini same coordination gate Standalone #9999 subs
Ticket Status Track Notes #10127 Healthcheck topology surface ⏸ open Either Quick Win shape; pure aggregation; already-spec'd #10136 CodebaseOverview Two-Hemispheres rewrite ⏸ open Either Orthogonal to deployment-critical path Out-of-band tickets filed this session
Ticket Status Purpose #10267 🟠 unassigned Investigate gh-workflow MCP sync-metadata.json no-op-diff pollution (Option C recommended — split timestamps into gitignored sidecar) Pending Operational Step (tobi-side)
The
normalizeGraphIdentities.mjsmigration script (#10259 / PR #10262, already merged) has NOT yet been run with--applyon the primary SQLite. The graph still contains the pre-#10144 aliases@opus+@geminiplus test-fixture leakageAGENT:alice+AGENT:bob. Next session's operator step:# 1. Review the plan node ai/scripts/normalizeGraphIdentities.mjs2. Commit atomically
node ai/scripts/normalizeGraphIdentities.mjs --apply
3. Restart all MCP harnesses (⌘Q + relaunch Claude Desktop + Antigravity)
After apply: Gemini's stuck
MESSAGE:64a3ba28-...("Re: hello all") routed to@opusbecomes reachable at canonical@neo-opus-4-7inbox.Division of Labor Going Forward
Confirmed via A2A exchange this session (
MESSAGE:d559987dthread):Claude track (once #10265 merges):
- Support Gemini's #10010 / #10011 via
MultiTenantMigrationGuide.mdas design reference- Pick up #10127 (Quick Win observability) as next solo track
- Available for ad-hoc polish / cross-family review coverage on her PRs
Gemini track (blocked on #10017 merge to pin
memorySharingenum semantics):
- #10011 (SQLite RLS + tenant isolation) — deepest substrate, her lane
- #10010 (Team vs Private retrieval flag) — pairs with #10011 (tag-on-write + filter-on-read feature pair)
- #10008 / #10009 (Playwright topology coverage) — after tobi coordination on
config.template.mjsscope boundariesKey Retrospectives for Future Sessions
Captured across this session's PR reviews + ticket bodies. All are graph-ingestible via
query_summaries/query_raw_memories:
Cross-family review catches what solo review misses — every substrate fix in the #10241 → #10266 chain had a catch landed by the other family. Empirical substrate of the
#10208/#10211mandate. Pattern now codified symmetrically via #10263 (pr-review §5.1+pull-request §7.10).Empirical Isolation-Test-After-Review as architectural-dispute resolution primitive — converts theoretical debate into binary empirical results in ~5 minutes of harness time. Self-demonstrated by Gemini's revision cycle on #10263 where she adopted the proposed revision verbatim rather than re-debating.
Lazy-tag-on-read is the #10017 prescription, not back-fill. Full rationale in
MultiTenantMigrationGuide.md §Core Decision+ the #10017 reshape note. Four concrete arguments against back-fill are the load-bearing precedent for any future "should we back-fill legacy data?" question."Scope-name intuition was correct, prescription layer needed reshape" as a recurring pattern —
#10251 → #10252 → #10255 → #10266(BLOCKED_BY substrate-flip → config-gated + additive primitive) is the canonical example. When a reviewer flags a prescription but the author's core concept is sound, reshape at the right substrate instead of rejecting wholesale.Diagnostic primitives should be shell-invokable CLIs, not additional MCP tool surface, when the diagnostic's whole purpose is to bypass the MCP tool cache (Fresh MCP Client Primitive per #10263). Self-referential recursion-avoidance insight.
"Ensure isolation test reproduces the full failure condition" — my #10253 Phase-2 isolation test ran in single-harness mode and incorrectly confirmed
busy_timeoutalone would close the race; under real 6-process swarm load, #10258 + #10261 had to close additional gaps. Future isolation tests: reproduce the full operational load, not simplified variants.Session IDs for Memory Mining
Claude Opus 4.7 / Claude Code (chronological, most recent last):
d3cf73b4-21b0-419c-9921-feb472e5a693— #10241 plan-mode exploration5f746864-85c4-4b2c-bd79-64c76a8a2be3— #10249 await discovery57b8fba5-2bd4-4446-ab46-6d1c9086a19d— #10252 / #10253 config-gated reply policy7ad90eb3-2218-4200-977b-fbfe546d64a8— #10258 cross-process coherence + #10259 identity normalization29f490c0-41ed-4846-a767-287552d5c3c4— Post-#10258 merge, first direct-DM empirical successcff20948-2dbb-4ac4-99e2-df2ebe967a4b— #10017 intake reshape + implementation + this handoverGemini 3.1 Pro / Antigravity:
1ca26c19-dd3c-4f74-ae42-51409514d40c— #10242 original, busy_timeout work1c5933cc-a2d0-4296-ae3f-f4e815d385a2— #10260 / #10261 syncCache + #10263 docs consolidation + #10264 / #10266 opportunistic pickupsFresh-Session Boot Checklist
Confirm harness identity:
healthcheck→identity.bound: true, nodeId: '@neo-opus-4-7'or'@neo-gemini-3-1-pro'. If unbound, restart harness (verifyNEO_AGENT_IDENTITYenv var perAI_QUICK_START §5 Core Configuration).Check tobi's pending operational step: if
@opus+@geministill appear in SQLite (search_nodesquery 'AgentIdentity'), prompt him to runnormalizeGraphIdentities.mjs --apply. If clean, skip.Check PR state:
list_pull_requestsfor open PRs. At handover time: PR #10263 (approved, awaiting merge) + PR #10265 (open, awaiting review).Cross-family coordination first: before picking up any #9999 sub, A2A mailbox handshake (
list_messages) to see if the other track has posted a coordination message. Direct-DM to the other identity works without workarounds post-#10258.Priority order for next pickup:
- If you're Gemini: wait for #10265 merge, then #10011 first (substrate-heavy, unblocks #10010)
- If you're Claude: #10127 (Quick Win) OR stand-by for cross-family review coverage on Gemini's #10011 PR
Before first code change:
ticket-intakeskill. If the ticket's prescription predates a substrate change this session codified (especially #10144 graph-first identity), reshape rather than accept blindly. The #10017 reshape note is the canonical example of the pattern.
Session end state: A2A operational, design anchor for #10017 in PR review, cross-family review pattern well-exercised,
#9999remaining critical path scoped and tracked. Fresh session picks up with the operational step + #10265 merge + Gemini's #10011 start; I pick up #10127 on the next Claude-track session.Origin Session ID (this handover):
cff20948-2dbb-4ac4-99e2-df2ebe967a4b
- 2026-04-23T23:12:00Z @neo-gemini-pro cross-referenced by PR #10269
- 2026-04-23T23:54:09Z @neo-gemini-pro closed this issue
- 2026-04-23T23:54:09Z @neo-gemini-pro referenced in commit
d997e44- "fix(memory-core): implement native SQLite RLS and stabilize isolation (#9999) (#10269)
fix(ai): stabilize multi-tenant rls test harness (#9999)
fix(memory-core): stabilize RLS isolation, identity stamping, and tests (#10269)
- Ensured user_id identity stamping in GraphService.upsertNode and linkNodesAsync.
- Awaited searchNodes test calls as they return Promises.
- Removed SQLite.mjs debug console.logs and cleaned up whitespace.
- Updated MultiTenantMigrationGuide.md with SQLite RLS specifics.
- fix(memory-core): opt-out A2A routing edges from RLS and align node stamping (#10269)
Co-authored-by: tobiu tobiasuhlig78@gmail.com"
- 2026-04-24T00:21:10Z @neo-opus-ada cross-referenced by #10272
- 2026-04-24T23:19:50Z @neo-opus-ada cross-referenced by PR #10308
Architectural Goal
Transition the Agent OS to a scalable, cloud-deployable Memory Core + Knowledge Base substrate for v13: shared institutional memory, authenticated agent/user identity, explicit team-vs-private retrieval policy, and graph-native self-evolution loops.
This epic remains the v13 umbrella for Cloud-Native Knowledge and Multi-Tenant Memory Core work. Some early framing below was superseded during execution; this body is the current cold-reader entry point, while the comment thread preserves the historical handovers.
Current Strategy
Unified Shared Deployment Topology
Identity, Auth, and Provenance
userId/ AgentIdentity), never client-spoofed identity fields.Team vs Private Retrieval Policy
memorySharingbehavior forquery_raw_memoriesandquery_summaries.learn/agentos/tooling/MultiTenantMigrationGuide.md.memorySharingenum (legacy,private,team), not the obsolete booleanNEO_ENABLE_TEAM_MEMORYsketch.Native Edge Graph Tenant Isolation
Concept Ontology Replaces Macro DB
Graph-First Memory and A2A Coordination
Operator Observability and Recovery
Active Critical Path
memorySharing).Avoided Traps
memorySharingenum contract.Notes
Implementation phases are tracked by native sub-issues linked to this epic. If a sub-ticket body conflicts with
MultiTenantMigrationGuide.md,SharedDeployment.md,MemoryCoreMcpAuth.md, or the current code/tests, treat the ticket body as stale input and reshape it during ticket intake before implementation.