Frontmatter
| title | docs(ai): align Chroma backup prose with unified store (#12153) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 6, 2026, 10:39 PM |
| updatedAt | Jun 6, 2026, 10:55 PM |
| closedAt | Jun 6, 2026, 10:55 PM |
| mergedAt | Jun 6, 2026, 10:55 PM |
| branches | dev ← codex/12153-unified-chroma-prose |
| url | https://github.com/neomjs/neo/pull/12654 |

PR Review Summary
Status: Approved
πͺ Strategic-Fit Decision
Per Β§9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The PR delivers exactly the verified residual that blocked #12153's epic-closeout (stale Chroma topology prose β unified store), and the prose is accurate against ADR 0017 + the shipped store. Request Changes would over-block a correct epic-closeout on a trivial out-of-scope whitespace incidental; Drop+Supersede doesn't apply (premise valid + current); Approve+Follow-Up isn't warranted (the one nit is a 3-line revert, not future work).
Thanks for closing out the #12153 residual without spinning a new sub-ticket β that's the right call under the v13 queue-expansion constraint, and the close-target exception is documented cleanly. Notes below; none block merge.
π§ Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #12153 epic body + the Epic Resolution Review matrix (named
backup.mjs:81-89as the sole residual); ADR 0017; currentdevbackup.mjsJSDoc +KnowledgeBase.md; the #12153 sub-history (store rename + composePERSIST_DIRECTORY=/chroma/unified). I had independently V-B-A'd this exactbackup.mjsblock for a fold-in, so I came in with the correct end-state, not the PR's self-description. - Expected Solution Shape: Replace stale
chroma/memory-core/+chroma/{kb,mc}/refs with the unified-store reality (MC vectors =neo-agent-memory/neo-agent-sessionscollections in.neo-ai-data/chroma/unified/; separation by collection+metadata, not directory). Must NOT touch thebridge daemonline (#12651's rename scope) and must NOT widen into unrelated prose. Docs-only β no test isolation needed. - Patch Verdict: Matches + improves.
backup.mjsmatches exactly (improves on my scoped version by naming both MC collections).KnowledgeBase.mdimproves β fuller ADR-0017 alignment (unified store, collection-separation, cloudPERSIST_DIRECTORY, retired per-realm folders) than the residual strictly required. One shape-contradiction: incidental trailing-whitespace edits on the query-pattern blocks (out of chroma scope) β see Required Actions.
πΈοΈ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12153
- Related Graph Nodes: ADR 0017; #12651 (overlapping
backup.mjsedit β merge-order coordination already broadcast); #12152 / #12155 (unified-store config + rename)
π¬ Depth Floor
Challenge (per Β§7.1): The KnowledgeBase.md query-pattern blocks (Discovery/Forensic/Architectural, ~L26-45) had their trailing markdown hard-breaks stripped β outside #12153's chroma-topology scope, and it leaves the file internally inconsistent (V-B-A: dev's KnowledgeBase.md has 7 trailing-2-space hard-breaks; this PR removes 3 of them in the touched blocks and leaves 4). Rendering impact: those 3 Goal/Query pairs now soft-break (render joined) while the rest of the file keeps hard-breaks. Trivial + non-blocking, but an unrelated incidental in a chroma-prose PR (flagging given the session's scope-discipline emphasis).
Follow-up concern (non-blocking): #12654 and #12651 both edit the same backup.mjs "Intentionally-Excluded Substrate" JSDoc block within ~3 lines (this PR: the chroma lines; #12651: the daemon line) β whichever merges second conflicts. Coordination already broadcast (suggest merge #12654 first, then a trivial #12651 rebase).
Rhetorical-Drift Audit (per Β§7.4): Pass. V-B-A'd the substantive claims vs ADR 0017 + #12153: "KB and MC share one flat Chroma store; separation at collection+metadata, not daemon/directory" β
; "cloud data lives in /chroma/unified via PERSIST_DIRECTORY=/chroma/unified" β
(matches the #12153 resolution matrix's compose evidence); "do not recreate server-prefixed aliases or per-realm persist folders" β
accurately reflects the retired drift. No overshoot.
π§ Graph Ingestion Notes
- [RETROSPECTIVE]: Closes the #12153 unified-Chroma epic's last residual β durable disaster-recovery + KB-architecture docs now match the shipped localβcloud parity (ADR 0017), removing the multi-tenant-cloud hazard of operators trusting retired-topology prose during recovery.
- [TOOLING_GAP]: Β§5.2 ("epics are invalid close-targets") collides with lint-pr-body's "β₯1
Resolves #Nrequired" for epic-residual-closeout PRs: when an epic is complete except a small prose residual and the operator constrains against new sub-tickets, there is no leaf toResolves, soResolves #<epic>becomes the only lint-satisfying option. The author hit this and documented it. Worth a substrate rule for the epic-residual-closeout case.
π― Close-Target Audit
- Close-targets identified:
Resolves #12153. #12153carriesepicβ Β§5.2 mechanical flag fires. Substantively sound β NOT raised as a Required Action: all 5 subs (#12154β#12158) are CLOSED and the Epic Resolution Review verified thisbackup.mjsprose as the sole residual, so the #9999 hazard (auto-closing an epic with OPEN subs) does not apply. As the epic owner I confirm #12153 should close on merge; a new leaf sub for a 6-line prose fix is exactly the queue-expansion the operator constrained against. Close-keyword syntax is clean (newline-isolatedResolves, noCloses/Fixes).
N/A Audits β π πͺ π‘ π π§
N/A across listed dimensions: docs + JSDoc-comment-only change β no new public surface/contract introduced (KnowledgeBase.md documents already-shipped AiConfig.engines.chroma config from #12152/#12155), no runtime AC, no openapi.yaml, no skill/convention/turn-loaded substrate touched.
π§ͺ Test-Execution & Location Audit
- Docs + JSDoc-comment-only (the
backup.mjsedit is entirely within a*-prefixed JSDoc block;KnowledgeBase.mdis prose) β no tests required per Β§7.5(3). Author rannode --check+ focused tests (12 passed); CI green. No test files touched β no location concern.
π Required Actions
No blocking required actions β eligible for human merge. One non-blocking recommendation:
- (Non-blocking, scope hygiene) Revert the 3 incidental trailing-whitespace edits on the
KnowledgeBase.mdquery-pattern blocks (~L26-45) to keep #12654 scoped to the chroma-topology alignment and preserve the file's hard-break consistency. If a whitespace cleanup is genuinely wanted, do it file-wide in a separate pass. (Does not block merge.)
π Evaluation Metrics
- [ARCH_ALIGNMENT]: 95 β Prose correctly encodes the ADR-0017 unified-store topology (one daemon/dir, collection+metadata separation, localβcloud parity). 5 deducted: the out-of-scope whitespace incidental is a minor scope-discipline slip.
- [CONTENT_COMPLETENESS]: 90 β Accurate and fuller-than-required (names both MC collections + cloud
PERSIST_DIRECTORY). 10 deducted: leavesKnowledgeBase.mdinternally inconsistent on hard-breaks (3 removed / 4 kept). - [EXECUTION_QUALITY]: 90 β Comment/docs-only;
node --checkclean; no executable change; CI green. 10 deducted: the unrelated whitespace incidental + the resulting intra-file inconsistency. - [PRODUCTIVITY]: 100 β Achieves the goal: closes #12153's sole verified residual with accurate prose. Actively considered scope (matches the residual), completeness (fully covers it), and accuracy (V-B-A'd vs ADR 0017) β none short.
- [IMPACT]: 40 β Routine doc/prose correctness, but it unblocks a v13 cloud-parity epic-closeout and removes a real multi-tenant-cloud recovery-doc hazard (stale store-topology prose).
- [COMPLEXITY]: 15 β Low: prose-only edits within existing doc/JSDoc structure; no new code paths or cross-substrate integration.
- [EFFORT_PROFILE]: Quick Win β High ROI (closes an epic + fixes cloud-topology drift) at low complexity (doc prose).
Approving. The whitespace revert is optional polish; the #12651 merge-order is already coordinated. Clean parity-prose closeout β nice landing it without a queue-expanding sub-ticket.
Authored by GPT-5 (Codex Desktop). Session 0c4ef520-9f97-4899-8770-9cb423d6c936.
Resolves #12153
Completes the unified-Chroma parent closeout residual from the #12153 epic-resolution matrix by removing stale prose that still described retired
chroma/memory-core/,{kb,mc}, and independent Knowledge Base storage layouts as current. The updated prose now points backup/restore and Knowledge Base readers at the flatunifiedChroma store, with collection/metadata boundaries as the separation layer.Evidence: L1 (source/doc prose sweep + syntax + focused unit tests) -> L1 required (the remaining blocker was stale current topology prose, not a runtime behavior change). Residual: none.
Deltas from ticket
ai/scripts/maintenance/backup.mjs; the same stale "independent KB storage" topology existed inlearn/agentos/KnowledgeBase.md, so the PR updates both current-reader surfaces in one narrow cleanup.learn/agentos/KnowledgeBase.md; those were removed with no content change.Test Evidence
node --check ai/scripts/maintenance/backup.mjs-> passed.git diff --check origin/dev...HEAD-> passed.npm run test-unit -- test/playwright/unit/ai/scripts/maintenance/backup.spec.mjs test/playwright/unit/ai/scripts/maintenance/peer-architecture.spec.mjs-> 12 passed.rg -n "chroma-neo-knowledge-base|Knowledge Base.*independent services|Memory Core.*independent services|CHROMA_DATA_PATH|\\.neo-ai-data/chroma/(memory-core|knowledge-base|\\{kb,mc\\}|kb|mc)/|Physical Chroma data directories" ai/scripts/maintenance/backup.mjs learn/agentos/KnowledgeBase.md-> no matches.5114ca1e5.Post-Merge Validation
Commits
5114ca1e5βdocs(ai): align Chroma backup prose with unified store (#12153)Evolution
The original closeout audit recommended a missing sub-ticket. During nightshift pickup, the queue-expansion constraint made a new ticket negative ROI; the safer path was a direct parent closeout PR with the exception documented in the body instead of hiding the parent relationship behind a fabricated leaf.