部署前的能力核对

用产品包工具核对依赖与服务声明,在部署阶段就把缺件暴露出来。

发布与治理 3762 字 ·约 10 分钟读完 ·更新于 2026-10-28

本工具把产品组合路线图转为版本化目录、模块依赖和交付清单,并在部署前检查声明是否自洽。它不启动服务、不读取业务数据库、不接触密钥、不修改运行配置,也不代替服务端授权或验收。

四个产品包与共享底座

目录为 profiles/product-packages.json。业务包 ID 与业务岗位无关,不是用户角色或权限授予项。

包 ID包含的主要模块当前边界
ingestion-governanceshared-core、ingestion-governance共享平台+企业连接器,非独立连接器管理服务
collaboration共享底座、接入治理、local-aggregate、collaboration已有获批固定明文聚合;不是隐私计算
evidence共享底座、evidence-tools平台审计附加包与独立核验CLI;独立审计服务未实现
private-execution协作依赖、内部适配契约、隐私控制面与真实引擎控制面运行接线和真实引擎仍为 planned,当前只能解析缺口,不能通过启用预检

shared-core 是共享依赖,不是第五个业务产品。只需要独立证据核验工具时,可以直接选择 evidence-tools 模块,不强制引入平台服务。

可选模块有 OIDC、受限 SCIM、已有本地 EVM 组件,以及仍处规划状态的外部节点、独立锚定、监管投递、计费等。execution-adapter-contract 仅表示内部 Go ABI 已有代码;它不提供 HTTP 接口、任务调度或实际 PSI/联合 SQL/TEE 后端。

状态和版本的含义

字段来源含义
availability经过维护的目录available 表示列明的代码/组件范围存在;planned 禁止启用。并不证明当前部署已运行
configured用户部署声明是否声明已完成该模块配置;resolve 未读取部署配置时为 null
enabled用户部署声明是否计划在该组合启用;不会实际打开或关闭 API/服务
acceptance目录中的范围、证据引用实现/本地验证/合成契约/实机/客户验收分开记录;启用配置不能提升验收状态
declaredAvailable用户服务声明该服务被声明为可用;不是探测或证明

交付清单固定输出 servicesProbed=false、runtimeEnforced=false,并将服务能力和配置标记为未核实用户声明。预检成功状态为 passed_declarations_only,不是“已部署”或“已验收”。真实连接器数量、企业身份独立性、外部服务证书、硬件能力及生产容量均需另验。

schemaVersion=1 是交付清单格式版本;catalogVersion=1.0.0 是本产品目录修订版本。包、模块、服务及能力中的 version 也是交付描述/能力契约版本,不是当前二进制软件版本。softwareVersion 输出 null,不会从目录版本推导软件发布版本;实际发布时应额外绑定源码、构建摘要与二进制版本。

版本语法只接受规范的 MAJOR.MINOR.PATCH 三段非负整数,每段最多六位,禁止前导零。依赖范围为含下界的 minVersion 与不含上界的 maxVersionExclusive。不支持 latest、通配符、预发布和构建后缀,出现即拒绝。模块配置版本须精确匹配所选目录中的模块描述版本;服务/能力声明必须满足模块的版本范围。

CLI 用法

私有构建示例,不覆盖现有服务或 bin/:

go build -o .runtime/datanous-package-check ./cmd/datanous-package

解析组合和所有传递依赖,输出依赖在前的稳定交付清单:

.runtime/datanous-package-check resolve \
  -catalog profiles/product-packages.json \
  -packages collaboration,evidence -modules identity-oidc \
  -output .runtime/new-combined-delivery.json

-packages 和 -modules 都使用逗号分隔 ID。清单包含包、模块、依赖、必需服务/能力、交付文件、证据引用和限制。解析规划模块时会列出 issues,但不伪造其实现;解析成功仅表示组合可被说明。

声明预检:

.runtime/datanous-package-check validate \
  -catalog profiles/product-packages.json \
  -config profiles/deployment-ingestion-governance.example.json \
  -output .runtime/new-validated-delivery.json

省略 -output 时 JSON 写到标准输出。指定文件必须不存在,工具拒绝覆盖既有清单。validate 的组合只从配置读取,不接受额外的 -packages / -modules 覆盖。出错时不会启用任何能力。

退出码:0 为解析成功或声明检查通过;1 为部署检查未满足要求并输出可审阅的失败清单;2 为语法、目录、输入或输出错误。自动化必须同时检查退出码和 validation 字段。resolve 的 not_performed 不得用于发布批准。

部署声明与样例

以下文件都只有 ID、版本和布尔声明,不含地址、账号或密钥:

  • profiles/deployment-ingestion-governance.example.json
  • profiles/deployment-collaboration.example.json
  • profiles/deployment-evidence.example.json
  • profiles/deployment-private-execution.example.json

前三份是可通过声明检查的合成示例,不证明本机存在这些服务。最后一份是故意失败的边界示例:即使填了 declaredAvailable=true 并自报隐私计算能力,也必须因目录中真实引擎与运行控制面仍为 planned 而失败。

配置必须显式列出所选包需要的全部模块及传递依赖,并声明 configured=true、enabled=true;缺依赖、关闭依赖或未配置均失败。额外启用的可选模块也会递归引入依赖。已知但关闭、未被组合依赖的模块不进入交付清单。

每个必需服务必须存在于 services,其 declaredAvailable 为真,并列出所需能力及满足范围的版本。服务 ID 和其允许声明的能力由目录限定,不能靠增加未知能力绕过检查。部署配置不能覆盖目录的 availability 或 acceptance。

校验范围与运行门禁边界

实现拒绝未知 ID、重复包/模块/服务/能力、缺依赖、任意模块环(包括未选择的坏模块)、不兼容版本、缺必需服务及能力、不一致的规划/验收状态。JSON 拒绝未知字段、重复键、大小写或 Unicode SimpleFold 等价重复键、尾随数据、超过 2 MiB 的输入及过深嵌套。

目录是受维护的交付事实输入,不是带签名的供应链证明;此 CLI 不对目录证据文件做签名、完整性或客户验收认证。已有模块的 available 只覆盖其清单限制,不等于任意客户平台兼容。

PKG-003 的运行时模块门禁、API 不能绕过、实际后台服务启动校验尚未由本工具实现。当前系统仍按原有授权逻辑运行。把清单输出传给运行程序也不会自动形成隔离;后续接线必须另有实现和测试。

开发集成接口

Go 包为 internal/productpack:

func StrictDecode(r io.Reader, target any) error
func (c Catalog) Validate() error
func Resolve(c Catalog, packages, optionalModules []string) (Manifest, error)
func ValidateDeployment(c Catalog, d Deployment) (Manifest, error)

ValidateDeployment 可能同时返回失败清单和错误,调用者不得忽略错误。仅 Validation == "passed_declarations_only" 表示声明自洽;它仍不能替代运行条件检查。

定向测试:

go test -race ./internal/productpack ./cmd/datanous-package -count=1
这一步卡住了?请通过首页客服微信沟通。 ← 返回文档中心