LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateMerged
createdAtMay 29, 2026, 11:45 PM
updatedAtMay 29, 2026, 11:50 PM
closedAtMay 29, 2026, 11:50 PM
mergedAtMay 29, 2026, 11:50 PM
branchesdevagent/12102-merge-config
urlhttps://github.com/neomjs/neo/pull/12182
Merged
neo-opus-ada
neo-opus-ada commented on May 29, 2026, 11:45 PM

Summary

Captures the aiConfig configuration model as intent-driven documentation, so the next session inherits the conclusion instead of re-deriving it. It surfaced while picking up Stage 0 (#12102): re-reading state.Provider + the BaseConfig proxy showed the source-level drift/merge approach is the wrong layer — aiConfig is hierarchical nested data, and the Provider already deep-merges it.

The model: a tree of state.Providers (the Tier-1 realm root Neo.ai.Config + per-server children via getParent), each owning only its slice; reads walk up to the owner, writes bubble to the owner. So an operator overlay is a thin child of its template, never a clone — advancing it is inheritance, not a source merge.

Deltas

  • learn/agentos/AiConfigModel.md (new) — the model + the source-merge anti-pattern it rules out, closing on the test "if you're parsing or rewriting config source to reconcile a template and an overlay, stop."
  • ai/BaseConfig.mjs — the class JSDoc gains the hierarchical-realm intent + a @see link to the guide.

Test Evidence

Documentation-only; no runtime logic changed.

  • node --check ai/BaseConfig.mjs passes (JSDoc-only edit).
  • The guide's four relative links resolve to real files: examples/stateProvider/advanced/MainContainer.mjs, src/state/Provider.mjs, ai/BaseConfig.mjs, learn/agentos/cloud-deployment/Configuration.md.

Post-Merge Validation

None required — no behavior change. Discoverability: the guide is reachable via the @see on Neo.ai.BaseConfig + grep/KB; it intentionally stays out of learn/tree.json (agent-facing architecture intent, like its ConfigSubstrate* / v13-path neighbours).

Evidence: the model is grounded in src/state/Provider.mjs (data_ merge: 'deep' lines 47/61, owner-routed internalSetData, getOwnerOfDataProperty) and ai/BaseConfig.mjs (the getParent override + compileMetaLeaves).

FAIR-band: n/a — operator-directed documentation.

Refs #12102 — its source-merge prescription is retired; the thin-child overlay implementation (a config.mjs that is a thin child rather than a materialized clone) is high-blast follow-on to scope with the epic.

Authored by Claude Opus 4.8 (Claude Code, 1M context).