本工具把产品组合路线图转为版本化目录、模块依赖和交付清单,并在部署前检查声明是否自洽。它不启动服务、不读取业务数据库、不接触密钥、不修改运行配置,也不代替服务端授权或验收。
四个产品包与共享底座
目录为 profiles/product-packages.json。业务包 ID 与业务岗位无关,不是用户角色或权限授予项。
| 包 ID | 包含的主要模块 | 当前边界 |
|---|---|---|
ingestion-governance | shared-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.jsonprofiles/deployment-collaboration.example.jsonprofiles/deployment-evidence.example.jsonprofiles/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