原始配置是作用域数据。可执行配置是经过验证的不可变值。
CM_HVNB 管理保留的作用域层,ConfigEngine 则通过一条固定管线解析领域配置。
1. 为何需要配置
没有配置所有者时,每个包装函数都要携带并不属于自己的选项:2. 理解所有权划分
Context拥有机器后端及其命名 Registry 命名空间。ConfigManager拥有默认值、作用域、版本化配置层、插值和快照。ConfigEngine拥有确定性的领域解析与 Apply 配置档案。- 领域引擎拥有 LLM、数据库、工作区和文件系统策略。
3. 读取和编辑作用域数据
使用get(...) 读取一个当前值:
scoped(...) 用作上下文管理器或装饰器:
heavenbase.workspace.docs-demo,解析顺序是 heavenbase、heavenbase.workspace,最后是完整目标作用域。
重复不可变读取使用 snapshot(),读取单个原始作用域层使用 layer(...),查看保留版本使用 history(...):
unset(...) 会写入 tombstone,使子作用域可以隐藏继承的键。setdef(...) 仅在解析值缺失时写入。列表路径支持 items[0]、items[] 和 items[2+]。
4. 解析领域配置
每个ConfigEngine 都遵循相同阶段:
- 预设 (Preset) 展开完整的命名模板。
- 标准化 (Normalize) 解析别名、简写、优先级和规范值。
- 验证 (Validate) 检查规范值而不修复它。
- 应用 (Apply(profile)) 返回确定性的分离值。
ConfigSpec:
ConfigSpec.data 包含面向用户的规范字段。bindings 包含已选择的可执行契约。raw 和 meta 保留诊断信息。to_dict() 与 from_dict() 会保留可执行信封。
5. 使用 Apply 配置档案
Apply 配置档案会把一个已验证规范转换成特定值:validate(restored_spec) 与 apply(restored_spec, ...) 不会重新读取原始管理器或目录。这让可执行规范可以跨共享相同代码契约的进程边界传递。
6. 使用严格的本地文件 URI
显式本地存储只使用一种语法:
可写位置拒绝资源别名。网络 authority、反斜杠、根目录逃逸、查询字符串、片段和旧式
file: 拼写都会被拒绝。
数据库字段也可以使用不含分隔符的逻辑名称。DBEngine 会在 heavenbase.db.local_root 下解析它,并在 DBSpec 中保存规范的 file:/// URI。
scripts/migrate_config_locations.py 用于转换受控的旧配置文件。它默认执行 dry-run,并在写入前验证每个替换项都解析到相同的原生目标。7. 理解缓存和插值
每个领域引擎都为已解析规范和 Apply 值提供有界缓存。缓存身份包含当前作用域 generation、被引用的环境值、根覆盖、已选择目录 revision 和领域契约 revision。 环境插值默认开启;命令插值默认关闭:engine.clear_cache() 使本地领域缓存失效;当下一次源读取必须立即观察当前 Registry revision 时,使用 CM_HVNB.refresh()。
8. 安全扩展配置
新增领域时,请继承ConfigEngine,声明一个稳定的 domain,并实现受保护的 Normalize、Bind、Validate 和默认配置档案 hook。通过注册返回值的 Apply 配置档案扩展,而不要在通用配置中添加分支。
请为幂等性、序列化、无需源的恢复规范 Apply、缓存失效和脱敏添加测试。提供商选择、方言事实、文件策略、SDK 行为和活动资源应留在所属领域。

