Files
knowledge-governance/docs/P2_PP_LEDGER_TAKEOVER_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.4 KiB
Raw Blame History

P2.2 PP历史账本离线接管验收

范围

本阶段将旧PP同步器的append-only本地账本接入治理数据库:

  • 不请求PP、AList、钉钉或WeKnora网络API;
  • 不修改旧同步项目及其账本、manifest或下载文件;
  • 不下载、上传、移动或删除源文件;
  • 不启用新PP定时Connector;
  • 不将离线历史记录宣称为当前WeKnora已验证状态。

折叠与恢复契约

  1. 按旧脚本的source_url_hash稳定键折叠;
  2. 只接受completed和带Knowledge ID的content_alias终态;
  3. 单次账本只能包含一个KB;
  4. 所有终态字段必须完整,source locator和SHA必须是64位小写十六进制;
  5. 任何仅有中间状态、没有终态的source key都会阻断整批导入;
  6. 缺SHA终态只能从匹配locator hash的manifest恢复;
  7. 恢复前验证账本大小、manifest大小、实际文件大小和实际SHA;
  8. 超过旧连接器50MiB单文件限制时阻断;
  9. alias必须指向同一快照内的completed canonical,并且SHA、Knowledge ID一致;
  10. 输出只含聚合数字,不输出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或外部部署。