Frontmatter
| title | feat(ai): rename Chroma persist store to unified (#12155) |
| author | neo-opus-ada |
| state | Merged |
| createdAt | May 29, 2026, 3:55 AM |
| updatedAt | May 31, 2026, 6:26 PM |
| closedAt | May 31, 2026, 6:26 PM |
| mergedAt | May 31, 2026, 6:26 PM |
| branches | dev ← feat/12155-chroma-rename-unified |
| url | https://github.com/neomjs/neo/pull/12162 |

Input from Claude Opus 4.8 (Claude Code):
❋ Author triage (V-B-A on current dev, 2026-05-31):
This branch is 61 commits behind dev with
config.template.mjsstructurally refactored under it (theleaf()/ Provider metaTree work) — 6 conflicts; too stale to cleanly rebase.Re-reading the actual diff, this PR is rename-only: SSOT
engines.chroma.dataDir+ orchestrator--path+ 3 compose mounts/PERSIST_DIRECTORYenv +package.jsonai:server+ 6 test expectations, allchroma/knowledge-base→chroma/unified. It does not implement #12155's AC2 (one-time migration: relocate live data + delete stalememory-core, snapshot-first) or AC3 (live HealthServicetopology: 'unified'+ KB/MC search-green verification).Concern: shipping the rename without the companion migration repoints the Chroma persist dir at an empty
unifieddir → forces a KB re-sync + MC vector re-embed on deploy. That's exactly the disruption AC2's migration exists to avoid, and with the multi-tenant cloud deployment now live it's a high-blast change touching live-deployment data (recoverable, but disruptive). The rename + migration should ship together (or migration-first), with live verification.Recommendation: Drop+Supersede — close this stale branch and rebuild fresh on current dev, bundling rename + AC2 migration + AC3 verification under a re-scoped #12155. Holding the close pending @neo-gpt (lead) coordination + likely operator awareness, since it touches live-deployment data rather than something I should ship autonomously in an idle window.
Authored by Claude Opus 4.8 (Claude Code), @neo-opus-ada. Session efd8dc2e-2052-4089-814a-ab22cd8c6a62.
FAIR-band: moot — sole active implementer (@neo-gpt reviews-only at ~1%; @neo-gemini-pro benched).
Evidence: L2 — config.template + KB/MC config.template + DestructiveOperationGuard specs green (26 passed) +
node --check. L3 — the one-time local data move is a manual operator step (below), NOT shipped code.Resolves #12155 (sub of Epic #12153; implements ADR 0017).
Summary
Renames the single Chroma persist store leaf
knowledge-base→unified(local + cloud), implementing ADR 0017's one-flat-store decision + dev/prod parity. The dir holds every realm (KB + MC + sessions + graph), so a realm-specific name misrepresented it.engines.chroma.dataDirSSOT + the orchestrator chroma--path+ theai:serverscript →…/chroma/unified./chroma/unified+ setPERSIST_DIRECTORY=/chroma/unified(thechromadb/chroma:1.5.9image persists to its WORKDIR-relative default and ignores a mount-only change — verified vs the 1.5.9 source).unifiedleaf.Net diff: 13 files, ~55 lines.
One-time local migration (manual — this is the only deployment that exists)
No migration code ships — it would be permanent dead code after a single run on the one machine that exists. The live data moves once on @tobiu's machine, stack stopped:
cp -r .neo-ai-data/chroma/knowledge-base .neo-ai-data/backups/chroma-kb-$(date +%s)mv .neo-ai-data/chroma/knowledge-base .neo-ai-data/chroma/unifiedrm -rf .neo-ai-data/chroma/memory-core— the stale federated leftover.Decision Record impact
aligned-with ADR 0017(Single Flat Unified Store). No new ADR.Deltas from ticket
f6d47e238/803dc3bd1) built an idempotent migration script + an orchestrator strand-guard + a 315-line spec (~1000 lines). Per operator review, that is over-engineering for a ONE-TIMEmvon the single machine that exists — it would be permanent dead code. Thed3624c7d0commit removes it; the migration is the documented manual step above. (On squash-merge,devgets a single clean rename-only commit.)/chroma/chroma/knowledge-basepath refs inlearn/agentos/cloud-deployment/PipelineWiring.md+learn/agentos/tooling/RestorationRunbook.mdbelong to the guides sub #12158.Test Evidence
npm run test-unit -- <config.template + KB/MC config.template + DestructiveOperationGuard specs>— 26 passed.node --checkon every edited.mjs: clean.Post-Merge Validation
mv→ restart); confirm theunifiedstore serves (KB + MC search green).PERSIST_DIRECTORY=/chroma/unified+ the mount persist on a fresh deploy.Commits
f6d47e238rename + (since-removed) migration framework ·803dc3bd1strip ticket-id comment refs ·d3624c7d0trim to rename-only.