Summary
Final Stage-4 piece of Epic #12101 — the 10 KB Source classes now read their path from the sourcePaths config leaf directly, dropping #11660's ?? '<default>' byte-equivalence shims (the leaf defines all 10 verbatim). With #12185 (A/B/D-prod + scalar/tenant E) merged, this completes Stage 4 → Resolves #12106.
Deltas
- 10 KB Sources:
aiConfig.sourcePaths?.<Source> ?? '<default>' → aiConfig.sourcePaths?.<Source> (kept the ?. null-safe nav). AdrSource, ConceptSource, LearningSource, TestSource, SkillSource, ReleaseNotesSource, TicketSource, PullRequestSource, DiscussionSource, ApiSource. The stale #11660 byte-equivalence comments are replaced with SSOT-pointing prose (also clears those #11660 code-comment anchors).
Test Evidence
296 KB unit specs pass (incl. VectorService tenant-stamping + work-volume-branching + the Source-exercising specs). node --check clean; grep confirms 0 remaining sourcePaths ?? + 0 #11660 anchors in the sources.
Evidence: the sourcePaths leaf in ai/mcp/server/knowledge-base/config.template.mjs defines every Source's default verbatim (AdrSource: 'learn/agentos/decisions', ApiSource: {…}, the array sources, etc.) — so the removed fallbacks were exact duplicates of the config default.
Post-Merge Validation
⚠️ Behaviour change for stale overlays: an operator config.mjs predating #11660's sourcePaths block no longer falls back to the in-code default — it regenerates from the template (config is SSOT). Current overlays (which carry sourcePaths) are byte-identical. This applies the no-hidden-default contract, superseding the older #11660 compat — flagged here for the merge-gate.
FAIR-band: n/a — operator-directed epic lane (#12101 Stage 4).
Resolves #12106.
Authored by Claude Opus 4.8 (Claude Code, 1M context).
Summary
Final Stage-4 piece of Epic #12101 — the 10 KB
Sourceclasses now read their path from thesourcePathsconfig leaf directly, dropping #11660's?? '<default>'byte-equivalence shims (the leaf defines all 10 verbatim). With #12185 (A/B/D-prod + scalar/tenant E) merged, this completes Stage 4 → Resolves #12106.Deltas
aiConfig.sourcePaths?.<Source> ?? '<default>'→aiConfig.sourcePaths?.<Source>(kept the?.null-safe nav). AdrSource, ConceptSource, LearningSource, TestSource, SkillSource, ReleaseNotesSource, TicketSource, PullRequestSource, DiscussionSource, ApiSource. The stale#11660byte-equivalence comments are replaced with SSOT-pointing prose (also clears those#11660code-comment anchors).Test Evidence
296 KB unit specs pass (incl. VectorService tenant-stamping + work-volume-branching + the Source-exercising specs).
node --checkclean; grep confirms 0 remainingsourcePaths ??+ 0#11660anchors in the sources.Evidence: the
sourcePathsleaf inai/mcp/server/knowledge-base/config.template.mjsdefines every Source's default verbatim (AdrSource: 'learn/agentos/decisions',ApiSource: {…}, the array sources, etc.) — so the removed fallbacks were exact duplicates of the config default.Post-Merge Validation
⚠️ Behaviour change for stale overlays: an operator
config.mjspredating #11660'ssourcePathsblock no longer falls back to the in-code default — it regenerates from the template (config is SSOT). Current overlays (which carrysourcePaths) are byte-identical. This applies the no-hidden-default contract, superseding the older #11660 compat — flagged here for the merge-gate.FAIR-band: n/a — operator-directed epic lane (#12101 Stage 4).
Resolves #12106.
Authored by Claude Opus 4.8 (Claude Code, 1M context).