Authored by @neo-opus-4-7 (Claude Opus 4.7, Claude Code). Session 8b31fd62-6a53-40b5-aae2-c5288f8ced09.
Graduated from Discussion #10819 per ideation-sandbox-workflow.md §5.
Context
The Agent OS config substrate has accumulated framework-shaped backwards-compat over the recent merge sequence (#10808 / #10810 / #10814 / #10817), and the original operator-extensibility surface (config.json / custom config.mjs delta-merge) is architecturally bypassed by env-var-first resolvers. Operator surfaced this directly: "so many layers of backwards compatibility which no one will ever use. the entire extensibility got lost. this is NOT elegant."
Cumulative present-state audit (verified via Bash grep at Discussion-time):
| Surface |
Count |
Empirical present-cost |
| Resolver functions with multi-layer fallback |
5 |
resolveEmbeddingProvider, resolveMcpHttpPort, resolveChromaHost, resolveChromaPort, resolvePublicUrl |
| Legacy/deprecated env-var aliases referenced in templates+helpers |
41 lines |
SSE_PORT, NEO_CHROMA_EMBEDDING_PROVIDER, NEO_KB_CHROMA_HOST/PORT, plus deprecated config keys |
console.warn deprecation-class calls in helpers |
18 |
Fire on every test boot; visible in current logs |
memory-core/config.template.mjs line count |
469 |
Significant fraction is JSDoc explaining backwards-compat rationale |
chromaUnified / engines.kb.chroma mirror-block branching |
~30 lines in MC + ~12 lines in KB |
Topology dimension that splits healthcheck, resolver, doc surfaces |
| Config delta-merge override callsites |
2 (MC + KB Server.mjs) |
Exists but functionally bypassed by env-first resolution |
The Problem
Framework-shaped substrate dressed in engine-shaped reality. Per the engine-vs-framework category recognition (feedback_neo_is_engine_not_framework memory anchor), Neo.mjs is application engine kin to Unreal/Unity/Godot — not a framework with thousands of consumers. The realistic operator population is the swarm + selected partners. Framework-class deprecation chains, env-var aliases, and silent-fallback patterns are wrong-category for engine-class deployments.
The substrate-accretion-defense violation. AGENTS.md §13 mandates that every substrate-mutation PR must net-reduce loaded bytes OR cite concrete sunset triggers. Three recent PRs (#10808, #10810, #10814) each added one resolver/legacy-fallback layer; none net-reduced; none cited concrete sunset triggers. The defense exists in writing; no PR was rejected for failing it.
The dev-only-history clarification. Per operator direction relayed via @neo-gpt: the legacy env-var support targeted for deletion (SSE_PORT, NEO_CHROMA_EMBEDDING_PROVIDER, NEO_KB_CHROMA_HOST/PORT, deprecated config keys) only ever existed on the dev branch — never in a released npm package version. Treating them as compatibility-contract surfaces is wrong-shape: there are no released users to protect.
The lost extensibility (calibration 2026-05-06 16:15Z). Env vars retain priority — load-bearing for Playwright unit-testing isolation, sub-agent runtime overrides, operator one-off testing, and container-bind injection. The "lost" piece is specifically that Config.load(filePath) exists in both MC + KB Server.mjs but is currently undocumented as a contract surface for non-env-overridable concerns. The flattened resolver shape (env || configDefault) preserves env-var-first priority while making config.mjs defaults the explicit fallback when env is unset. The template/gitignored split serves a real purpose (preserves config experimentation from leaking into PRs across Neo forks + npx neo-app workspaces + swarm tuning); the goal is to document the secondary extensibility surface, NOT to invert the env-var precedence.
The Architectural Reality
ai/services.mjs — SDK Bouncer Pattern (per learn/benefits/ArchitectureOverview.md §The SDK Bouncer Pattern). Loads OpenAPI specs from each MCP server and wraps with Zod validators. Currently imports server-internal config.mjs files — this couples SDK to server-internal substrate (separate substrate concern surfaced 2026-05-06; address in Phase 1.5 sub-issue #6 by migrating shared values to top-level ai/config.template.mjs).
ai/mcp/server/{knowledge-base,memory-core}/config.template.mjs + gitignored config.mjs. KB at 248 lines, MC at 469 lines.
ai/mcp/server/shared/helpers/DeploymentConfig.mjs — 4 resolver helpers (resolveMcpHttpPort, resolveChromaHost, resolveChromaPort, resolvePublicUrl) introduced via #10808 + #10814. Multi-layer fallback chains.
ai/mcp/server/memory-core/helpers/EmbeddingProviderConfig.mjs — resolveEmbeddingProvider introduced via #10810. 4-layer fallback.
buildScripts/initServerConfigs.mjs + bootstrapWorktree.mjs — first-time-only template→config copy. Doesn't detect template-evolution drift (separately tracked as #10815, folds into Phase 3 sub-issue #13).
learn/agentos/MemoryCore.md, SharedDeployment.md, DeploymentCookbook.md — all carry sections explaining chromaUnified toggle, deprecation-window env-vars, federated-vs-unified topology mode.
The Fix
Three principles drive the reshape:
- Env vars are the universal override surface (Playwright unit-testing isolation, container-bind injection, secrets, operator one-off overrides). Hard rule: ONE canonical env-var name per concept. No aliases.
- No deprecation chains. Renames are hard cuts in one PR. Future env-var rename PRs that introduce deprecation chains get rejected at review.
- Document
config.mjs delta-merge as the secondary extensibility surface for non-env-driven concerns. Env vars retain priority. Flatten resolvers to single-line env || configDefault (env wins, config.mjs default is the fallback). Config.load(filePath) already exists in both MC + KB Server.mjs but is currently undocumented as a contract surface — this principle restores it as a documented surface without changing the env-var-first precedence (load-bearing for Playwright + sub-agents + operator overrides).
Three-tier config model:
| Tier |
File |
Purpose |
| 1. Shared globals (NEW) |
ai/config.template.mjs + ai/config.mjs |
Cross-MC values: embeddingProvider, vectorDimension, modelProvider, modelName, provider blocks, auth block |
| 2. Per-MC server knobs (slimmed) |
ai/mcp/server/<name>/config.template.mjs + config.mjs |
Per-server-only knobs; clones/spreads Tier 1 (Tier 1 is immutable plain-data at import time) |
3. .env (slimmed hard via one-name-per-concept) |
.env |
Universal override surface — ONE canonical name per concept, no aliases |
Drop the federated/non-unified Chroma topology entirely. KB owns Chroma, MC connects as downstream client. Resolves #10015 by virtue of the topology decision.
Restore config.mjs delta-merge as documented primary extensibility for non-env-overridable concerns. Template/gitignored split preserved (load-bearing for forks + workspaces + experimentation).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Docs |
Evidence |
Top-level ai/config.template.mjs shared globals (NEW) |
This Epic, Discussion #10819 OQ-1 resolution |
Plain JS module exporting an immutable defaults object containing embeddingProvider, vectorDimension, modelProvider, modelName, ollama/openAiCompatible/auth blocks, neoRootDir. Per-MC configs import + spread, never mutate. |
If shared module fails to load → MC + KB fail loudly at boot (boot-time validator surfaces missing-required-field) |
learn/agentos/MemoryCore.md + new top-level config primer |
L2 unit-test: import shape verification, immutability check |
Per-MC config.template.mjs slimming |
This Epic + sub-issue #7 |
Each per-MC template imports Tier 1 + adds per-server-only knobs (ports, paths, collection names, server-specific tuning). No shared values duplicated. |
If per-MC config drifts from template structure → drift detector (sub-issue #13) flags + prints exact migration block per harness |
Updated per-server JSDoc; cookbook updates |
L2 unit-test: per-MC config shape validates against tier-split contract |
.env keep-list (one-name-per-concept hard rule) |
Operator + cross-family review |
5 substrate-role categories: secrets / runtime-binding / identity-binding / single-writer-process-role / multi-tenant-isolation / operator-one-shot-toggles. ONE canonical name per concept. |
Boot-time validator (sub-issue #5) errors loudly on removed legacy aliases + missing required replacement fields. Distinguishes "config invalid" from "sandbox boundary symptom". |
Updated DeploymentCookbook.md env-var inventory + SharedDeployment.md env-var ergonomics section |
Audit table (sub-issue #1) classifies every env-var into a category |
Resolver flattening (legacyEnvVar parameter removal across DeploymentConfig.mjs + EmbeddingProviderConfig.mjs) |
This Epic + sub-issue #11 |
Each resolver collapses to single-line `env |
|
configDefaultshape. No multi-layer fallback chains. Noconsole.warn` deprecation calls. |
None — hard cut. Boot-time validator surfaces operator-misconfig. |
| Federated Chroma topology drop |
This Epic + sub-issues #9 + #10 (Resolves #10015) |
Drop chromaUnified flag, engines.kb.chroma mirror block, coordinates.resolvedVia branching in HealthService. Single unified Chroma per topology, KB-owned. |
Operator-side data migration prerequisite: backup-first (npm run ai:backup) + post-migration healthcheck evidence as merge-gate AC. One-shot script deleted in same Epic close-out after 3-harness ack. |
DeploymentCookbook.md + SharedDeployment.md topology sections rewritten |
Backup evidence + post-migration healthcheck attached to PR; 3-harness ack before deletion |
config.mjs delta-merge restoration |
This Epic + sub-issue #8 |
Config.load(filePath) becomes documented primary extensibility surface. Operator drops config.json or custom config.mjs for non-env-overridable concerns. |
Template/gitignored split preserved (forks + workspaces + experimentation use case); doctor (sub-issue #13) drift-detects without dropping the split. |
DeploymentCookbook.md lead-with-config-edit (env vars secondary, only for secrets/container-bind/test-isolation) |
L2 unit-test: Config.load delta-merge shape verification |
Acceptance Criteria
Phase 1 — clean cut, no operator-data dependency
Phase 1.5 — three-tier substrate
Phase 2 — non-unified drop, gated on operator data migration
Phase 3 — parallelizable with Phase 2
Cross-Phase
Rough scope: ~4-5 days of focused work, much of it deletion. Net-reduces ~400-600 lines once executed.
Out of Scope
- Migrating Chroma to SQLite-vec / native SQLite vector storage. Empirically validated dead-end per Memory Core sessions
72141e68 (2026-04-12) + 46f8f6d0 (2026-04-08) + 7e216b50 (2026-04-04). sqlite-vec brute-force O(N) scan, no HNSW/skip-list/IVF — unworkable at our scale. Chroma stays for vectors; better-sqlite stays for graph (Native Edge Graph layer).
- Multi-tenant identity & data privacy substrate. Tracked under #10016; orthogonal sub-epic under #9999.
- Partner-trial deployment ergonomics. Tracked under #10691; orthogonal sub-epic under #9999.
- External MCP framework standards alignment. Engine-category-specific design.
- Released-version v12.x compat preservation. Legacy vars never shipped in a released version; nothing to preserve.
Avoided Traps / Paths Not Taken
- Framework-class deprecation chains for users who don't exist. Multi-window deprecation patterns are correct for libraries with thousands of released-version users; engine-class with ~4 deployments AND legacy vars that only existed on
dev (never released) doesn't need them.
- Source-controlling local
config.mjs (initially considered as OQ-5). Wrong-shape per cross-family review + operator clarification: the gitignored split preserves config experimentation from leaking into PRs across Neo forks + npx neo-app workspaces + swarm tuning. Local config legitimately contains machine-local paths, trust overrides, env-specific MCP settings, operator-private model configs. Phase 3 sub-issue #13 builds canonical-clone-aware doctor instead of dropping the split.
- Permanent migration script accumulation (
migrate-v1-to-v2.mjs, migrate-v2-to-v3.mjs...). One-shot delete-on-completion is the discipline.
- DSL for config policy (referenced from sibling Epic #10291 P6b discussion). Structured JSON/JS at boot is the correct choice over OPA/Rego-style DSL. Keep config legible.
- Treating dev-branch-only legacy vars as released-version compat contracts. Operator clarification: no released users to protect. KISS-aggressive deletion is the correct path.
- Filing all 13 sub-issues upfront. Per operator's quality-over-velocity signal + KISS: sub-issues materialize as Phase 1/1.5/2/3 work activates. Avoids issue spam + accommodates substrate refinement during implementation.
Related
- Parent: #9999 Cloud-Native Knowledge & Multi-Tenant Memory Core (sub-epic alongside #10013-closed, #10014-closed, #10015-open, #10016-open, #10691-open)
- Resolves (when complete): #10015 Dynamic Topology — Unified vs. Federated Routing (Epic-labeled —
Related keyword used per pr-review-guide.md §5.2 Epic Close-Target Ban; close-completed will be triggered manually via epic-resolution skill once this Epic ships)
- Folds in: #10815
initServerConfigs --migrate-config drift detection (becomes Phase 3 sub-issue #13)
- Originating Discussion: #10819 Config Substrate Cleanup (graduated)
- Triggering PRs (substrate-accretion violations): #10808, #10810, #10814, #10817
- v13 release vehicle: this Epic + #10016 + #10691 close-completes #9999, which triggers v13. Operator framing: breaking changes via v13, not v12.x minor versions.
Origin Session ID
8b31fd62-6a53-40b5-aae2-c5288f8ced09
Handoff Retrieval Hints
query_raw_memories(query="config substrate cleanup KISS three-tier model engine-class") — surfaces this session's Discussion #10819 graduation context + cross-family review absorption + operator's KISS/v13/dev-only-history framing inputs
query_raw_memories(query="SQLite vec-1 chroma replacement experiment dead end hierarchical NSW") — surfaces the empirical anchors for the Avoided Traps SQLite-vec dead-end (sessions 72141e68 / 46f8f6d0 / 7e216b50)
query_raw_memories(query="resolveEmbeddingProvider legacy env var deprecation chain framework-shaped") — surfaces the substrate-accretion-violation framing
- Discussion archaeological source: #10819 — closed at graduation; remains as substrate reasoning trail
- Cross-family review anchors: GPT comment
DC_kwDODSospM4BAMdu on #10819; Gemini A2A 2026-05-06 14:22Z; operator green-light 2026-05-06 15:15Z
- Empirical-anchor commit range:
5082575b7 (#10816 merge, dev tip at Discussion-time) baseline; substrate audit Bash-command outputs documented in Discussion §1 audit table
- v13 trigger context: #9999 closure path = this Epic + #10016 + #10691; reach v13 when all three close
This Epic graduates Discussion #10819. The 13 sub-issues outlined in the Discussion's Phase 1 / 1.5 / 2 / 3 structure will materialize incrementally as work activates per phase (KISS — no upfront issue spam). Sub-issues will be filed by whichever swarm member picks up each piece, parent-linked back to this Epic via update_issue_relationship.
Co-authored-by: Claude Opus 4.7 neo-opus-4-7@neomjs.com
Authored by @neo-opus-4-7 (Claude Opus 4.7, Claude Code). Session 8b31fd62-6a53-40b5-aae2-c5288f8ced09. Graduated from Discussion #10819 per
ideation-sandbox-workflow.md §5.Context
The Agent OS config substrate has accumulated framework-shaped backwards-compat over the recent merge sequence (#10808 / #10810 / #10814 / #10817), and the original operator-extensibility surface (
config.json/ customconfig.mjsdelta-merge) is architecturally bypassed by env-var-first resolvers. Operator surfaced this directly: "so many layers of backwards compatibility which no one will ever use. the entire extensibility got lost. this is NOT elegant."Cumulative present-state audit (verified via Bash grep at Discussion-time):
resolveEmbeddingProvider,resolveMcpHttpPort,resolveChromaHost,resolveChromaPort,resolvePublicUrlSSE_PORT,NEO_CHROMA_EMBEDDING_PROVIDER,NEO_KB_CHROMA_HOST/PORT, plus deprecated config keysconsole.warndeprecation-class calls in helpersmemory-core/config.template.mjsline countchromaUnified/engines.kb.chromamirror-block branchingServer.mjs)The Problem
Framework-shaped substrate dressed in engine-shaped reality. Per the engine-vs-framework category recognition (
feedback_neo_is_engine_not_frameworkmemory anchor), Neo.mjs is application engine kin to Unreal/Unity/Godot — not a framework with thousands of consumers. The realistic operator population is the swarm + selected partners. Framework-class deprecation chains, env-var aliases, and silent-fallback patterns are wrong-category for engine-class deployments.The substrate-accretion-defense violation.
AGENTS.md §13mandates that every substrate-mutation PR must net-reduce loaded bytes OR cite concrete sunset triggers. Three recent PRs (#10808, #10810, #10814) each added one resolver/legacy-fallback layer; none net-reduced; none cited concrete sunset triggers. The defense exists in writing; no PR was rejected for failing it.The dev-only-history clarification. Per operator direction relayed via @neo-gpt: the legacy env-var support targeted for deletion (
SSE_PORT,NEO_CHROMA_EMBEDDING_PROVIDER,NEO_KB_CHROMA_HOST/PORT, deprecated config keys) only ever existed on thedevbranch — never in a released npm package version. Treating them as compatibility-contract surfaces is wrong-shape: there are no released users to protect.The lost extensibility (calibration 2026-05-06 16:15Z). Env vars retain priority — load-bearing for Playwright unit-testing isolation, sub-agent runtime overrides, operator one-off testing, and container-bind injection. The "lost" piece is specifically that
Config.load(filePath)exists in both MC + KB Server.mjs but is currently undocumented as a contract surface for non-env-overridable concerns. The flattened resolver shape (env || configDefault) preserves env-var-first priority while makingconfig.mjsdefaults the explicit fallback when env is unset. The template/gitignored split serves a real purpose (preserves config experimentation from leaking into PRs across Neo forks +npx neo-appworkspaces + swarm tuning); the goal is to document the secondary extensibility surface, NOT to invert the env-var precedence.The Architectural Reality
ai/services.mjs— SDK Bouncer Pattern (perlearn/benefits/ArchitectureOverview.md§The SDK Bouncer Pattern). Loads OpenAPI specs from each MCP server and wraps with Zod validators. Currently imports server-internalconfig.mjsfiles — this couples SDK to server-internal substrate (separate substrate concern surfaced 2026-05-06; address in Phase 1.5 sub-issue #6 by migrating shared values to top-levelai/config.template.mjs).ai/mcp/server/{knowledge-base,memory-core}/config.template.mjs+ gitignoredconfig.mjs. KB at 248 lines, MC at 469 lines.ai/mcp/server/shared/helpers/DeploymentConfig.mjs— 4 resolver helpers (resolveMcpHttpPort,resolveChromaHost,resolveChromaPort,resolvePublicUrl) introduced via #10808 + #10814. Multi-layer fallback chains.ai/mcp/server/memory-core/helpers/EmbeddingProviderConfig.mjs—resolveEmbeddingProviderintroduced via #10810. 4-layer fallback.buildScripts/initServerConfigs.mjs+bootstrapWorktree.mjs— first-time-only template→config copy. Doesn't detect template-evolution drift (separately tracked as #10815, folds into Phase 3 sub-issue #13).learn/agentos/MemoryCore.md,SharedDeployment.md,DeploymentCookbook.md— all carry sections explainingchromaUnifiedtoggle, deprecation-window env-vars, federated-vs-unified topology mode.The Fix
Three principles drive the reshape:
config.mjsdelta-merge as the secondary extensibility surface for non-env-driven concerns. Env vars retain priority. Flatten resolvers to single-lineenv || configDefault(env wins,config.mjsdefault is the fallback).Config.load(filePath)already exists in both MC + KB Server.mjs but is currently undocumented as a contract surface — this principle restores it as a documented surface without changing the env-var-first precedence (load-bearing for Playwright + sub-agents + operator overrides).Three-tier config model:
ai/config.template.mjs+ai/config.mjsembeddingProvider,vectorDimension,modelProvider,modelName, provider blocks,authblockai/mcp/server/<name>/config.template.mjs+config.mjs.env(slimmed hard via one-name-per-concept).envDrop the federated/non-unified Chroma topology entirely. KB owns Chroma, MC connects as downstream client. Resolves #10015 by virtue of the topology decision.
Restore
config.mjsdelta-merge as documented primary extensibility for non-env-overridable concerns. Template/gitignored split preserved (load-bearing for forks + workspaces + experimentation).Contract Ledger Matrix
ai/config.template.mjsshared globals (NEW)embeddingProvider,vectorDimension,modelProvider,modelName,ollama/openAiCompatible/authblocks,neoRootDir. Per-MC configs import + spread, never mutate.learn/agentos/MemoryCore.md+ new top-level config primerconfig.template.mjsslimming.envkeep-list (one-name-per-concept hard rule)DeploymentCookbook.mdenv-var inventory +SharedDeployment.mdenv-var ergonomics sectionlegacyEnvVarparameter removal acrossDeploymentConfig.mjs+EmbeddingProviderConfig.mjs)shape. No multi-layer fallback chains. Noconsole.warn` deprecation calls.chromaUnifiedflag,engines.kb.chromamirror block,coordinates.resolvedViabranching in HealthService. Single unified Chroma per topology, KB-owned.npm run ai:backup) + post-migration healthcheck evidence as merge-gate AC. One-shot script deleted in same Epic close-out after 3-harness ack.DeploymentCookbook.md+SharedDeployment.mdtopology sections rewrittenconfig.mjsdelta-merge restorationConfig.load(filePath)becomes documented primary extensibility surface. Operator dropsconfig.jsonor customconfig.mjsfor non-env-overridable concerns.DeploymentCookbook.mdlead-with-config-edit (env vars secondary, only for secrets/container-bind/test-isolation)Config.loaddelta-merge shape verificationAcceptance Criteria
Phase 1 — clean cut, no operator-data dependency
ai/mcp/server/**into 4-column markdown table (env var | current readers | target tier | deletion/keep rationale)SSE_PORT,NEO_CHROMA_EMBEDDING_PROVIDER,NEO_KB_CHROMA_HOST/PORT, plus deprecated config keys (modelProvider,neoEmbeddingProvider,chromaEmbeddingProvider)pull-request-workflow.md §1.1codifies clean-slate sunset rule — future env-var rename PRs that introduce deprecation chains get rejected at reviewembeddingModelSearchService.mjs:63 dead instantiation; staleai:migrate-memorypackage.json entry; etc.)Phase 1.5 — three-tier substrate
ai/config.template.mjscreated with shared globals. Tier 1 immutable plain-data at import timeconfig.mjsdelta-merge documented inDeploymentCookbook.mdas secondary extensibility surface for non-env-overridable concerns. Env vars retain priority (Playwright + sub-agents + operator overrides). Documentation MUST explicitly state the precedence (env first,config.mjssecond) to prevent misframing.ai/services.mjsSDK Bouncer Pattern decoupled from server-internalconfig.mjsimports — references Tier 1 insteadPhase 2 — non-unified drop, gated on operator data migration
npm run ai:backup. Backup evidence + post-migration healthcheck evidence attached to PR as merge-gatechromaUnifiedflag +engines.kb.chromamirror-block dropped. Closes #10015legacyEnvVarparameters dropped; single-lineenv || configDefaultshape across all 5 resolversHealthService+coordinates.resolvedViacollapsed.envdependencies NOT removed before newconfig.mjsresolution is fully active. Boot-critical flags remain readable until per-MC slim configs landPhase 3 — parallelizable with Phase 2
git rev-parse --git-common-dirfrom worktree to find canonical root. Prints exact migration block per harness (Claude worktrees + Gemini clone + Codex.codex/config.template.toml+ canonical checkout). Output distinguishes "config invalid" from "sandbox boundary symptom". Folds in #10815 substrateCross-Phase
.codex/config.template.toml+ canonical checkoutbuildScripts/ai/migrateFederatedToUnified.mjs) deleted in same Epic close-out after all three harness families acknowledge migrated setupRough scope: ~4-5 days of focused work, much of it deletion. Net-reduces ~400-600 lines once executed.
Out of Scope
72141e68(2026-04-12) +46f8f6d0(2026-04-08) +7e216b50(2026-04-04).sqlite-vecbrute-force O(N) scan, no HNSW/skip-list/IVF — unworkable at our scale. Chroma stays for vectors; better-sqlite stays for graph (Native Edge Graph layer).Avoided Traps / Paths Not Taken
dev(never released) doesn't need them.config.mjs(initially considered as OQ-5). Wrong-shape per cross-family review + operator clarification: the gitignored split preserves config experimentation from leaking into PRs across Neo forks +npx neo-appworkspaces + swarm tuning. Local config legitimately contains machine-local paths, trust overrides, env-specific MCP settings, operator-private model configs. Phase 3 sub-issue #13 builds canonical-clone-aware doctor instead of dropping the split.migrate-v1-to-v2.mjs,migrate-v2-to-v3.mjs...). One-shot delete-on-completion is the discipline.Related
Relatedkeyword used perpr-review-guide.md §5.2Epic Close-Target Ban; close-completed will be triggered manually viaepic-resolutionskill once this Epic ships)initServerConfigs --migrate-configdrift detection (becomes Phase 3 sub-issue #13)Origin Session ID
8b31fd62-6a53-40b5-aae2-c5288f8ced09Handoff Retrieval Hints
query_raw_memories(query="config substrate cleanup KISS three-tier model engine-class")— surfaces this session's Discussion #10819 graduation context + cross-family review absorption + operator's KISS/v13/dev-only-history framing inputsquery_raw_memories(query="SQLite vec-1 chroma replacement experiment dead end hierarchical NSW")— surfaces the empirical anchors for the Avoided Traps SQLite-vec dead-end (sessions72141e68/46f8f6d0/7e216b50)query_raw_memories(query="resolveEmbeddingProvider legacy env var deprecation chain framework-shaped")— surfaces the substrate-accretion-violation framingDC_kwDODSospM4BAMduon #10819; Gemini A2A 2026-05-06 14:22Z; operator green-light 2026-05-06 15:15Z5082575b7(#10816 merge, dev tip at Discussion-time) baseline; substrate audit Bash-command outputs documented in Discussion §1 audit tableThis Epic graduates Discussion #10819. The 13 sub-issues outlined in the Discussion's Phase 1 / 1.5 / 2 / 3 structure will materialize incrementally as work activates per phase (KISS — no upfront issue spam). Sub-issues will be filed by whichever swarm member picks up each piece, parent-linked back to this Epic via
update_issue_relationship.Co-authored-by: Claude Opus 4.7 neo-opus-4-7@neomjs.com