问题域/PD-331

层级配置管理

Hierarchical Configuration Management

多层级配置优先级链,支持项目级、用户级和全局级配置的合并与覆盖

子问题

1.多级配置优先级链

2.环境变量自动绑定

3.配置覆盖检测与告警

4.本地覆盖文件隔离

5.启动期配置与运行期配置的存储层分离

6.配置文件向上遍历搜索(monorepo 子目录支持)

7.精确写入避免配置文件膨胀(不 dump 全部 Viper 状态)

8.测试环境配置隔离(跳过仓库级配置)

各项目的解法1 solutions

Signals

横向对比

维度Beads
配置框架Viper 单例 + Cobra flag 手动绑定,AutomaticEnv 自动映射
优先级层数四级:CLI flag > BD_* 环境变量 > config.yaml > SetDefault 默认值
文件搜索策略四路搜索:BEADS_DIR > CWD 向上遍历 > ~/.config/bd/ > ~/.beads/
存储分离双层:YamlOnlyKeys 白名单路由启动期配置到 YAML,运行期配置到 Dolt/SQLite 数据库
本地覆盖config.local.yaml 通过 MergeInConfig 合并,gitignore 隔离
覆盖追溯ConfigSource 四枚举 + CheckOverrides 检测 + verbose 模式 LogOverride 输出
配置校验validateYamlConfigValue 类型校验 + sync/conflict/sovereignty 枚举验证 + 无效值告警降级
敏感信息处理密码仅通过 BEADS_DOLT_PASSWORD 环境变量传递,不存入任何配置文件

最佳实践

1.Flag > Env > Config > Default 优先级

2.config.local.yaml 隔离机器特定配置

3.配置变更源追踪

4.敏感信息(密码)仅通过环境变量传递,不存入任何文件

5.SaveConfigValue 只修改目标 key,不 dump Viper 全部合并状态

6.updateYamlKey 支持恢复注释行(# key: value → key: new_value)

7.无效枚举值降级到默认值并输出告警,不直接报错