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 干净
3.4 KiB
3.4 KiB
P2.2 PP历史账本离线接管验收
范围
本阶段将旧PP同步器的append-only本地账本接入治理数据库:
- 不请求PP、AList、钉钉或WeKnora网络API;
- 不修改旧同步项目及其账本、manifest或下载文件;
- 不下载、上传、移动或删除源文件;
- 不启用新PP定时Connector;
- 不将离线历史记录宣称为当前WeKnora已验证状态。
折叠与恢复契约
- 按旧脚本的
source_url_hash稳定键折叠; - 只接受
completed和带Knowledge ID的content_alias终态; - 单次账本只能包含一个KB;
- 所有终态字段必须完整,source locator和SHA必须是64位小写十六进制;
- 任何仅有中间状态、没有终态的source key都会阻断整批导入;
- 缺SHA终态只能从匹配locator hash的manifest恢复;
- 恢复前验证账本大小、manifest大小、实际文件大小和实际SHA;
- 超过旧连接器50MiB单文件限制时阻断;
- alias必须指向同一快照内的completed canonical,并且SHA、Knowledge ID一致;
- 输出只含聚合数字,不输出KB ID、source ID、Knowledge ID、URL或本地文件路径。
预期真实账本口径
events=1093
source_items=559
completed=530
content_aliases=29
recovered_sha256=75
verified_bytes=871524116
content_objects=530
versions=559
publications=530
recovered_sha256=75必须建立在75个文件逐字节重算全部匹配的前提上。
数据库映射
1 source_connection enabled=false,secret_ref/base_url为空
559 source_items external + pp_public_tag + unchanged
530 content_objects verified,完整SHA唯一,不保存local_spool_ref
559 versions raw摘要只保留legacy_status、source_ids和alias canonical hash
530 publications uploaded + completed + unpublished
29个alias只建立自己的SourceItem和Version,共享canonical ContentObject,不重复创建TestPublication。
幂等和事务
- 整批导入在单个PostgreSQL事务内完成;
- 只允许
INSERT ... ON CONFLICT DO NOTHING; - 禁止UPDATE和DELETE;
- 第一次真实导入期望新增
1/559/530/559/530; - 第二次相同导入期望新增
0/0/0/0/0; - 任一步失败必须回滚整批。
自动验证
在项目根目录运行:
/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/...
真实数据库集成测试必须在唯一临时数据库中设置TEST_DATABASE_URL后运行;普通无环境测试显示SKIP不等于集成测试通过。
本地库读回验收
必须验证:
schema_migrations=1,2
jobs=2
source_connections=1
source_items=559
content_objects=530
source_item_versions=559
test_publications=530
content_alias versions=29
unique publication knowledge IDs=530
forbidden raw fields=0
530条历史Publication的retrieval_state必须是unpublished。只有未来通过目标WeKnora只读API确认对象存在、状态和检索行为后,才能改为enabled。
备份与运行边界
- 导入前创建PostgreSQL原生自定义格式备份;
- 备份必须非空、权限600并通过
pg_restore --list; - 导入只使用短期容器,不重启Compose五个长期服务;
- 不执行
docker compose down -v、卷删除、commit、push或外部部署。