Files
knowledge-governance/docs/P2_SOURCE_FOUNDATION_ACCEPTANCE.md
T
zheromiku dcdc8d1ddd feat: 知识治理平台(含已验证发布/回滚契约)
全栈知识治理平台首次入库(P1-P10 + 发布链路模拟验证闭环):

- 治理核心:源目录/变更集/人工审核/发布批次/发布执行(fail-closed 闸口)
- 测试通道:WeKnora 测试 KB 上传/轮询/验收;poll 完成时写入
  parser_generation/index_generation,修复 manual/seed 路径发布闸口永久拦截
- 发布适配器 v071(本地 source=测试角色 / 云端 target=生产角色 模拟验证通过):
  * ES 导出/导入 mapping 自适应(.keyword 子字段、可选 tenant_id)
  * OSS locator 支持嵌套 scheme;chunks.seq_id 由目标序列分配
  * bundle 归档同身份重试原子替换;verifier 按 bundle chunk_type 计数
  * 回滚 job payload 支持 prior_execution_id(strict 解码)
- 三通道发布+回滚演练实测:publish 4/4 verified,检索命中,
  rollback 4/4 rolled_back,目标端 PG is_enabled=false、ES is_enabled=false
- 前端 A·Data-console 风格全站统一,120 用例通过
- 门禁:go vet / go test 全包通过,gofmt 干净
2026-09-30 10:54:06 +08:00

3.0 KiB
Raw Blame History

P2.1 来源数据底座验收

范围

本阶段只验证统一来源领域模型和PostgreSQL Migration 2:

  • 来源连接、来源对象、内容对象、来源版本、测试发布五层身份分离;
  • 来源内stable_external_id唯一;
  • 全局内容对象仅按完整64位小写十六进制SHA-256去重;
  • 来源变化、内容获取、测试导入、处理和检索状态分开保存;
  • 新表初始为空,不读取或导入PP、AList、钉钉数据;
  • 不连接测试或生产WeKnora。

静态与单元验证

在项目根目录执行:

/home/zheromiku/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.26.0.linux-amd64/bin/go test ./... -count=1
/home/zheromiku/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.26.0.linux-amd64/bin/go vet ./...
/home/zheromiku/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.26.0.linux-amd64/bin/go build ./cmd/...

在web/执行:

npm test -- --run
npm run typecheck
npm run build

全部命令必须返回exit code 0。

一次性数据库验收

在唯一命名的临时数据库中依次验证:

  1. 执行Migration 1和Migration 2;
  2. 再执行一次Migration 2,确认IF NOT EXISTS允许安全重跑;
  3. 插入一条完整的来源→版本→内容→测试发布链;
  4. 同一来源内重复stable_external_id必须被拒绝;
  5. 不同来源可使用相同stable_external_id;
  6. 重复SHA-256必须被拒绝;
  7. 非64位、小写十六进制之外的SHA-256必须被拒绝;
  8. 未声明状态值必须被拒绝;
  9. 执行Migration 2 down,五张P2表必须按外键依赖反序删除;
  10. P1的jobs表必须保留;
  11. 删除临时数据库。

禁止在当前持久本地数据库中执行down验收。

当前本地数据库只读验收

docker compose exec -T postgres psql -U governance -d governance -At -c \
  "SELECT string_agg(version::text, ',' ORDER BY version) FROM schema_migrations;"

期望:

1,2
docker compose exec -T postgres psql -U governance -d governance -At -c \
  "SELECT COUNT(*) FROM pg_tables WHERE schemaname='public' AND tablename IN ('source_connections','source_items','content_objects','source_item_versions','test_publications');"

期望:5。

docker compose exec -T postgres psql -U governance -d governance -At -c \
  "SELECT (SELECT COUNT(*) FROM source_connections),(SELECT COUNT(*) FROM source_items),(SELECT COUNT(*) FROM content_objects),(SELECT COUNT(*) FROM source_item_versions),(SELECT COUNT(*) FROM test_publications);"

在正式导入来源前期望:0|0|0|0|0。

数据保留与运行状态

  • Migration前必须创建非空PostgreSQL原生备份,并通过pg_restore --list校验;
  • 只替换API容器,PostgreSQL、普通Worker、Release Worker和Web容器ID不得变化;
  • Migration后原有jobs数量和代表任务状态必须保持;
  • /health必须返回{"status":"ok"};
  • API启动日志不得包含Migration错误;
  • 不执行docker compose down -v、卷删除、提交、推送或外部部署。