@@ -0,0 +1,47 @@
# `tb_system_config` 调研结论
## 结论
`tb_system_config` **确实是已确认的七月迭代公共基础需求 ** ,不是 UR#48 临时假定或需要重新发明的能力;但它在当前工作区仍是**已规划、已拆票、未实现**状态。
UR#48 应依赖公共基础的第 07、08 号票,不应复制系统配置表、注册表、缓存、超管权限、通用列表/更新 API 或审计壳层。UR#48 自己负责注册两个支付 Key、其值域与钱包不可移除规则, 以及资产展示、下单、支付、充值等支付业务校验。
## 已确认的七月迭代设计
- 标准评审稿将系统配置列为“跨需求基础设施”,目标是把支付方式等受控配置从代码迁移到数据库;数据模型和首批两个支付 Key 均已明确:[7月迭代技术方案-标准评审稿.md:162 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:162 )、[同文件:170 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:170 )、[同文件:184 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:184 )。
- 该稿冻结了更新后删缓存、默认缓存五分钟、未知 Key 不可写、异常回退安全默认值,以及“受控控件而非 JSON 文本框”的规则:[同文件:201 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:201 )、[同文件:209 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:209 )。管理接口也已约定为 `GET /api/admin/system/config?module=` 和 `PUT /api/admin/system/config/{config_key}` : [同文件:215 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:215 )。
- 需求 09 明确卡/设备支付方式读取系统配置、钱包恒定允许、C 端仅展示接口返回集合、订单创建固化方式且支付时再次校验:[同文件:761 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:761 )。
- 独立系统配置方案提供了 `tb_system_config` DDL、两个 `c2b.payment` 初始化值和唯一 Key 约束:[系统配置.md:35 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:35 )、[同文件:54 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:54 )。它还定义了 Model、Store、五分钟 Redis 读取辅助能力和管理 API 形态:[同文件:65 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:65 )、[同文件:90 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:90 )、[同文件:107 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:107 )、[同文件:138 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:138 )。
- 原始需求 09 也显式声明依赖系统配置,并规定 C 端消费 `allowed_payment_methods` 、后台用钱包不可取消的复选框:[需求09-C端支付限制配置化.md:1 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:1 )、[同文件:116 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:116 )、[同文件:133 ](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:133 )。
## 已有公共基础 PRD 与票据
公共基础 PRD 已将“受控系统配置壳层”纳入交付范围,并明确当前 `tb_system_config` 尚未落地:[tech-public-foundation/PRD.md:7 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:7 )、[同文件:25 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:25 )。
- 公共基础是 `tb_system_config` 和其公共索引、约束、必要初始化数据的唯一迁移所有者:[tech-public-foundation/PRD.md:84 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:84 )。
- 公共壳层的责任包括受控注册表、超级管理员查询/更新、GORM 事务、Audit 接缝、五分钟 Redis 缓存与安全回退:[同文件:154 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:154 )。其中明确划分: UR#48 负责具体支付 Key、支付值域和启停校验; 公共基础只负责存储、注册、权限、缓存、API 和审计壳层:[同文件:165 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:165 )。
- 当前仓库“没有公共 Outbox 和受控系统配置实现”的状态被 PRD 再次明确记录:[同文件:259 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:259 )。
- 下游依赖表将 UR#48 明确列为受 `tb_system_config` 、受控 Key 注册、缓存、权限、API 和审计壳层阻塞;并禁止下游复制临时配置中心:[同文件:267 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:267 )、[同文件:283 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:283 )、[同文件:285 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:285 )。
对应票据已存在、均为 `ready-for-agent` ,但尚未勾选完成:
1. **07 — 交付受控系统配置注册与查询闭环 ** :被 01 号公共迁移门禁阻塞;只交付系统配置表、注册、缓存读取和超级管理员列表 API, 明确不注册支付具体 Key。[07-controlled-system-config-read.md:1 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:1 )、[同文件:5 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:5 )、[同文件:11 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:11 )。
2. **08 — 交付系统配置更新、权限和审计闭环 ** :被 07 号票阻塞;交付单 Key 更新、授权、校验、事务、缓存失效和审计接缝。[08-controlled-system-config-update.md:1 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:1 )、[同文件:5 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:5 )、[同文件:11 ](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:11 )。
因此, UR#48 在真实执行顺序上至少依赖:**公共基础 01 → 07 → 08**; UR#48 可在公共契约稳定后并行实现其支付领域部分,但不可先行落一套替代基础设施。
## 当前实现核查
截至当前 `HEAD` ,仓库没有 `SystemConfig` 模型、`tb_system_config` 迁移、对应 PostgreSQL Store、通用系统配置 Handler/Route 或 `pkg/sysconfig` 读取包。作为对照,现存 `internal/model/system.go` 只定义 `DevCapabilityConfig` 等旧模型,其表名是 `tb_dev_capability_config` ,不是 `tb_system_config` : [internal/model/system.go:9 ](/data/zoujin/xj02/junhong_cmp_fiber/internal/model/system.go:9 )、[同文件:23 ](/data/zoujin/xj02/junhong_cmp_fiber/internal/model/system.go:23 )。
迁移目录中也没有包含 `tb_system_config` 或 `c2b.payment` 的 SQL 文件;清理脚本列出的现有“系统配置表”保留集合同样未包含 `tb_system_config` : [scripts/cleanup/main.go:38 ](/data/zoujin/xj02/junhong_cmp_fiber/scripts/cleanup/main.go:38 )。这与公共 PRD 的“尚未落地”状态一致。
## Git 历史
- 七月迭代标准方案在提交 `d022cc8788999c9e5426063907d6fe3c569bd22c` ( 2026-07-17, `迭代方案确认` )中确认。
- 公共基础 PRD 与票据在提交 `21702da413979970989a0026ee0e5cbba248e47b` ( 2026-07-22, `创建相关issues` )中加入;该提交新增第 07、08 号系统配置票据。
- 对所有分支的 Git 历史及当前 Go、迁移、路由和 Store 路径检索,未发现将 `tb_system_config` 实现提交到仓库的证据;命中均为上述规划/票据/文档,或与通用系统配置无关的旧模型。
## 对 UR#48 拆票的影响
UR#48 不应再包含“建立公共系统配置能力”票。其首张业务票应改为“在公共基础 07、08 完成后,注册 `c2b.payment.card_allowed_methods` 和 `c2b.payment.device_allowed_methods` ,并交付支付许可读取/安全默认/资产展示契约”;后续再按订单创建、固定方式支付与取消等完整业务纵向切片拆分。