2.1 KiB
2.1 KiB
type, node_id, title, date
| type | node_id | title | date |
|---|---|---|---|
| plan | plan:plan-issue13-schema-mode | 实现计划: issue13-schema-mode | 2026-08-19 |
实现计划: issue13-schema-mode
正文: 2026-08-19-issue13-schema-mode.md。实现 design:issue13-schema-mode。
七个任务: ① 建 telemetry/schema.py 单一事实源(纯搬迁,行为不变)+ insert_sql()/telemetry_schema_sql(); ② PG 写入去掉冲突目标(为分区让路); ③ 两个 recorder 加必填 auto_migrate 与裁剪写入; ④ config 派生 + 装配 + .env.example; ⑤ 顶层导出; ⑥ 真实 PG 集成验收(临时 schema 隔离,严禁碰共享表); ⑦ 文档与 Expand/Contract 承诺。
insert_sql 的列名来自数据库探测结果而非常量,故子集校验是注入面的闸,不是形式主义。
- 审查留痕(Codex 计划审,2026-08-19): 报 8 项与本计划相关,全部采纳。最有价值的三条都会让计划照着写就红在测试本身而非实现: ① 列数断言写成 22/24 是错的——
COLUMNS是 INSERT 字段序,不含数据库自填的created_at,物理列是 23/25,两套口径混用会写出永远对不上的断言; ② 用caplog抓 warning 一条也抓不到(库用 loguru,不经标准 logging),那条断言会静默永远绿,须照搬captured_warnings的 loguru sink 形态; ③ 缺列旧表的最小权限现场是least_privilege_pre_tenant_dsn而非least_privilege_dsn(后者用完整 DDL 建的是列齐全的表,触发不到缺列路径)。另外三条:make lint带--fix会改文件,验证命令须用make check;Task 3 让 recorder 参数必填而 Task 4 才改_build_telemetry,中间那个提交点会TypeError,两者已合并为同一任务;库内执行的补列语句(不带IF NOT EXISTS,先探测以避 ACCESS EXCLUSIVE 锁)与打印给下游的脚本(必须带IF NOT EXISTS才幂等)是两份不是一份,原计划那句「原样搬迁」会产出不可重复执行的迁移 SQL。Task 7 的 README 验收也从人工核对升级为机械化:telemetry_schema_sql的输出在临时 schema 执行两遍,断言列集合正确且第二遍不报错。