Files
knowledge-governance/docs/library-target-identity.md
T
姚章浩 7ab2eb1ccf
build / build (push) Successful in 1m47s
fix(library): 按目标身份隔离版本授权与执行历史
2026-10-31 02:15:15 +08:00

3.2 KiB

发布目标身份隔离与迁移 077

身份与可见性

API 与 worker 使用同一 appconfig.Config.LibraryTargetIdentity:实例、Compose 项目、数据库名、租户、对内/对外 KB、索引、对象存储 provider/endpoint/bucket 的 SHA-256。凭据、数据库连接的主机/端口、Docker socket、归档目录不参与,避免本机 SSH 转发与云端直连生成不同身份。

实例/项目是部署身份,不得把相同名字重新指给另一物理部署;执行器现有实时身份/拓扑准入仍必须通过。本变更不是跨环境凭据授权边界,也不代替目标健康与维护验证。

  • 当前版本按 (scope, target_id) 保存;某目标的新版本不顶替另一目标的 current 或 superseded 元数据。
  • 预备份、历史生效、恢复候选、复用来源和回传引用都只取当前目标证据。
  • 作业、授权、意图持久绑定目标。切换目标后旧作业不可被新执行器准入、续作或自动接管;旧授权不生效。
  • test_sealed 和 seal 是源侧事实,保持可见;切换发布目标不删除或冒充源封存。
  • 原有事件/作业/授权/意图保留,新增列为空表示“目标归属未证明”,不推断回填。它们不成为任何新目标的运行证据;归档保护仍跨全部历史,避免清理器误删旧恢复材料。
  • 目标绑定是部署级(包含两个 KB);修改其中任一 KB 会建立新的证据上下文。旧记录保存在治理库,不在新目标的发布列表中混显。需要恢复旧目标时必须确认真实配置及证据归属,禁止把空身份批量改成当前身份。

升级顺序

  1. 保持写门关闭,检查无在飞发布/恢复/封存、维护锁和未结束执行代次;不能仅凭一次空队列采样。
  2. 备份治理库并在隔离库实际恢复,保留旧运行镜像、Compose 配置链与版本证据摘要。
  3. 停止旧 API/worker/云发布消费者后迁移,防止旧的 ON CONFLICT(scope) 与新主键并行使用。只迁移治理库,不修改 WeKnora schema。
  4. 先启动新 API 完成迁移 077,再启动使用同一配置身份的新 worker;读回版本、schema、身份配置、健康与禁写门。
  5. 页面应显示目标尚无权威版本,不能沿用旧本机演练的“已生效/0 变化”。真实空基线仍由目标逐表只读探测回答。
  6. 在独立目标备份/恢复和正式授权条件满足后执行实际发布及恢复,再确认新 target_id 下的 current。

回退边界

077 的 down 只允许没有任何非空目标绑定记录时执行,避免把已分离的历史合并回一个 scope。产生新记录后不要直接降级;使用经过恢复验证的控制面备份,先核对目标内容与在飞窗口,不能只回旧镜像。源封存、历史事件和快照均不得为了通过验收而清空。

验证范围

真实 PostgreSQL 用例覆盖旧无归属 current、新目标 A/B current 相互独立、外目标预备份/授权/作业/意图不可复用、跨目标事件 ID 冲突拒绝、源封存可共享,以及真实 worker 入口在维护前拒绝旧目标作业。默认 CI 无测试库时显式跳过这部分;本机必须另行实跑。单测通过不代表真实发布/恢复或页面验收已完成。