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

87 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P2.1 来源数据底座验收
## 范围
本阶段只验证统一来源领域模型和PostgreSQL Migration 2:
- 来源连接、来源对象、内容对象、来源版本、测试发布五层身份分离;
- 来源内`stable_external_id`唯一;
- 全局内容对象仅按完整64位小写十六进制SHA-256去重;
- 来源变化、内容获取、测试导入、处理和检索状态分开保存;
- 新表初始为空,不读取或导入PP、AList、钉钉数据;
- 不连接测试或生产WeKnora。
## 静态与单元验证
在项目根目录执行:
```bash
/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/`执行:
```bash
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验收。
## 当前本地数据库只读验收
```bash
docker compose exec -T postgres psql -U governance -d governance -At -c \
"SELECT string_agg(version::text, ',' ORDER BY version) FROM schema_migrations;"
```
期望:
```text
1,2
```
```bash
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`。
```bash
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`、卷删除、提交、推送或外部部署。