层级配置管理
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.无效枚举值降级到默认值并输出告警,不直接报错