Context
Cluster A of the consolidated #12461 B3 cleanup — the 2-cluster reshape that replaces the per-leaf fragmentation (per @tobiu's ticket-proliferation friction: closures up, creation capped at 2 cluster tickets). Authority: ADR 0019. ONE ticket + ONE PR. Cluster B (KB/vector/graph/daemon) = @neo-gpt; review/close/resolve = @neo-opus-grace. Owner: @neo-opus-ada.
Scope — V-B-A'd B3 reads on origin/dev (source-grep ledger)
Clean — read the resolved leaf directly (confirm each leaf's template default in the PR):
ai/services/memory-core/TextEmbeddingService.mjs:245 — aiConfig.ollama || {}
ai/services/memory-core/managers/CollectionProxy.mjs:23 — aiConfig.engine || 'hybrid'; :100 — aiConfig.engines?.chroma || {}
ai/services/memory-core/SessionService.mjs:326 — aiConfig.summarizationBatchLimit || 2000
ai/services/memory-core/SummaryService.mjs:221 — aiConfig.summarizationBatchLimit || 2000
ai/mcp/server/shared/services/TransportService.mjs:262 — aiConfig.mcpHttpPort || 3000 — validation nuance: may need the resolveMcpHttpPort range-check (cf. #12420), not a bare strip. (Auth read at :57 already done by #12547.)
Validate-first (may NOT be B3 — exclude with rationale if confirmed legit):
ai/mcp/server/BaseServer.mjs:238/469 — this.aiConfig?.load / this.aiConfig?.transport read the instance property this.aiConfig, not the global SSOT — likely a legit init-time guard, not a B3 SSOT defense.
ai/mcp/server/shared/Logger.mjs:30 — aiConfig?.data ?? aiConfig ?? {} — intentional dual-shape (Provider vs raw) adapter; likely keep.
Deferred behind #12532 (memorySharing overlap — do NOT sweep until #12532 lands/supersedes):
ai/services/memory-core/SummaryService.mjs:207/380 — aiConfig?.memorySharing?.defaultPolicy || 'legacy'
ai/services/memory-core/MemoryService.mjs — entire file deferred.
Excluded (display-only log fallbacks / resolution, not behavior B3 — assess, don't reflexively strip):
SessionService.mjs:256/592 — || '<unset>' / || 'unset' (log strings); model-name resolution at :579-580.
Acceptance Criteria
Contract Ledger
Not required — pure internal refactoring under the existing ADR-0019 contract (trigger-exclusion: refactor with no observable-public-shape change). The source-grep ledger above is the surface inventory.
Related
Epic #12461 / #12456. Authority: ADR 0019 (#12457). Deferral dependency: #12532 (memorySharing). Validation ref: #12420 (resolveMcpHttpPort).
Context
Cluster A of the consolidated #12461 B3 cleanup — the 2-cluster reshape that replaces the per-leaf fragmentation (per @tobiu's ticket-proliferation friction: closures up, creation capped at 2 cluster tickets). Authority: ADR 0019. ONE ticket + ONE PR. Cluster B (KB/vector/graph/daemon) = @neo-gpt; review/close/resolve = @neo-opus-grace. Owner: @neo-opus-ada.
Scope — V-B-A'd B3 reads on
origin/dev(source-grep ledger)Clean — read the resolved leaf directly (confirm each leaf's template default in the PR):
ai/services/memory-core/TextEmbeddingService.mjs:245—aiConfig.ollama || {}ai/services/memory-core/managers/CollectionProxy.mjs:23—aiConfig.engine || 'hybrid';:100—aiConfig.engines?.chroma || {}ai/services/memory-core/SessionService.mjs:326—aiConfig.summarizationBatchLimit || 2000ai/services/memory-core/SummaryService.mjs:221—aiConfig.summarizationBatchLimit || 2000ai/mcp/server/shared/services/TransportService.mjs:262—aiConfig.mcpHttpPort || 3000— validation nuance: may need theresolveMcpHttpPortrange-check (cf. #12420), not a bare strip. (Auth read at :57 already done by #12547.)Validate-first (may NOT be B3 — exclude with rationale if confirmed legit):
ai/mcp/server/BaseServer.mjs:238/469—this.aiConfig?.load/this.aiConfig?.transportread the instance propertythis.aiConfig, not the global SSOT — likely a legit init-time guard, not a B3 SSOT defense.ai/mcp/server/shared/Logger.mjs:30—aiConfig?.data ?? aiConfig ?? {}— intentional dual-shape (Provider vs raw) adapter; likely keep.Deferred behind #12532 (memorySharing overlap — do NOT sweep until #12532 lands/supersedes):
ai/services/memory-core/SummaryService.mjs:207/380—aiConfig?.memorySharing?.defaultPolicy || 'legacy'ai/services/memory-core/MemoryService.mjs— entire file deferred.Excluded (display-only log fallbacks / resolution, not behavior B3 — assess, don't reflexively strip):
SessionService.mjs:256/592—|| '<unset>'/|| 'unset'(log strings); model-name resolution at:579-580.Acceptance Criteria
||introduced).SummaryService.memorySharing+MemoryServiceNOT touched (deferred behind #12532).mcpHttpPorthandled validation-aware (resolver or confirmed bare-safe).ai:lint-config-template-ssotOK.Contract Ledger
Not required — pure internal refactoring under the existing ADR-0019 contract (trigger-exclusion: refactor with no observable-public-shape change). The source-grep ledger above is the surface inventory.
Related
Epic #12461 / #12456. Authority: ADR 0019 (#12457). Deferral dependency: #12532 (memorySharing). Validation ref: #12420 (resolveMcpHttpPort).