dcdc8d1ddd
全栈知识治理平台首次入库(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 干净
87 lines
3.0 KiB
Markdown
87 lines
3.0 KiB
Markdown
# 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`、卷删除、提交、推送或外部部署。
|