BLOGE
0.9.8-RC1在线版 · 事实校验 2026-09-15 · English
第 31 章 —— Project、Reactor 与 Claim Capability
本章承诺: 只从完整、冻结的 cohort 聚合精确 Requirement contributions,拒绝借来的 child,最后输出 evidence 支持的最高决策能力和明确 gap。
学习目标
- 解释 aggregation 为什么需要权威 inventory 与单一 run cohort。
- 区分 Project completeness 与 direct-module Reactor completeness。
- 在相信总数前观察 cohort mismatch 与 borrowed-child rejection。
- 把
ClaimCapability和missingEvidence作为 reader 推导结果。
两个有效 child 仍可能组成无效 parent
decision module 贡献一个有效贷款 Case,funding module 贡献另一个;两者合起来满足 minimumPassingCases: 2,但前提是它们属于同一个 governance snapshot、selection、source commit 和 parent run。
这是 aggregation 版本的复制粘贴 report 问题。child 有效是必要条件,parent membership 是另一项事实。
Project aggregation 在执行前冻结 discovery
VerificationGovernedProjectEvidence evidence =
VerificationProjectRunner.runGovernedEvidence(
scenarioDirectory,
verifier,
VerificationSelection.all(),
projectIdentity,
outputDirectory);
runner 在计算 Requirement 前冻结 Scenario discovery、effective selection、governance context、project POM identity 和 source-bound child receipts。required binding 缺失或被 filter 排除时,它会报告 GOVERNANCE_BINDING_MISSING 或 GOVERNANCE_BINDING_FILTERED,不会为了适配现有 child 而降低 minimum。
RC1 测试 aggregatesDistinctSuiteCasesAndRejectsAMissingGovernedChildBeforeBootstrap 保护这个区别:不同 Suite contribution 只能通过拥有完整 inventory 的 Project aggregate 合并。
Reactor 增加另一种 completeness authority
VerificationReactorRunner.runGovernedEvidence(...) 读取 root pom.xml 的 direct <modules> 列表。交给 runner 的每个 module 都必须匹配该 inventory、literal GAV、Suite/Case inventory、共同 Git commit、selection 与 governance cohort。
在 recomputesOneGlobalRequirementFromTwoIndependentModules 中,任一 module 单独运行都会得到 INVALID / GOVERNANCE_BINDING_MISSING,且调用数为零。Reactor run 各执行一次,列出两个 qualified Suite identity,再重算一个拥有两个 satisfied Cases 的 Requirement。
当前 Preview 只覆盖同一 Git worktree 中的 direct modules。Nested reactor、任意 Maven profile、external-parent effective model 和 deployment topology 不在该 completeness claim 中。
先攻击 cohort,再读取总数
测试 rejectsAReactorGovernanceCohortMismatchBeforeCustomerBootstrap 只改变第二个 module 的 catalogId,结果是:
status = INCOMPLETE
reasonCodes = [REACTOR_GOVERNANCE_COHORT_MISMATCH]
module calls = 0 + 0
runner 在客户 bootstrap 前拒绝 parent。这比两次昂贵或带 effect 的执行结束后才发现不匹配更强。
另一项攻击先运行两个有效 Reactor parent,再把第一个内存 parent 的一个 Suite 换成第二个 parent 的有效 Suite。reactorClaimRejectsAValidChildBorrowedFromAnotherParentRun 把 capability 降到 AUTHORING,并重新把 SOURCE_BOUND_PROJECT_AGGREGATE 列为 TEAM_GATE gap。有效 child 加错误 parent 仍是无效 aggregate。
让 Claims 明确剩余决策边界
VerificationClaimAssessment assessment =
VerificationClaims.assess(evidence, projectRoot);
ClaimCapability current = assessment.capability();
Map<ClaimCapability, List<VerificationEvidenceGap>> gaps =
assessment.missingEvidence();
| Capability | Evidence 支持的决策语境 | 常见剩余 gap |
|---|---|---|
AUTHORING | 本地诊断与 witness discovery | source-bound Suite/Project evidence |
TEAM_GATE | 带 continuity、replay 和 CI-safe control 的团队集成 | governed aggregate 或 Oracle provenance |
GOVERNED_GATE | versioned business obligation 与可信 Oracle provenance | attributed comparison 与 release attestation |
RELEASE_QUALIFIED | 为发布签署的精确 governed evidence 与 comparison | 声明 release contract 内没有缺项 |
Gap 是累计的。写进 JSON 的字符串不能提升 evidence,Policy 也不能给自己颁发 capability。可信 FAIL 可以有很强 provenance;capability 仍不替代 business status。
实验:借用一个 child
- 运行一个双 module parent,并外置保留 receipt。
- 把同样两个 modules 再运行到第二个 parent directory。
- 确认两个 parent 都能独立复验。
- 用 parent B 的有效 child 替换 parent A 的一个 child projection。
- assess 混合 parent,记录
AUTHORING与SOURCE_BOUND_PROJECT_AGGREGATE。 - 恢复 parent A,画出 ownership links:root POM → parent run ID → child receipt → Suite contribution。
- 用 gap 卡结束:current capability 、desired capability、missing evidence、owner、next experiment。
现实迁移:多模块计费发布
假设计税、开票、账本三个 module 都发布了有效 child evidence。把昨天 parent 的
计税 child 与今天的开票、账本 child 拼在一起,文件仍可读,却已经混合 cohort。
只有 root build identity、parent run 和 child receipt 的 ownership 同时成立,
才能声明项目完整;否则停在 AUTHORING,并写明缺失证据的 owner。
本章边界
- 有效 child evidence 不证明它属于某个特定 parent run。
- Project completeness 不代表 direct-module Reactor completeness 或 deployment completeness。
- 只有通过 inventory 与 cohort 检查,Reactor total 才有意义。
ClaimCapability说明支持的决策语境,既不改变 verdict,也不批准发布。
实验验收卡
- 预期与观察: 两个有效 child 仍可能让 parent capability 留下聚合缺口。
- 失败与恢复: 借用另一 cohort 的 child;恢复冻结 discovery 集。
- 证明边界: 证明 Project/Reactor completeness,不证明组织接受剩余风险。
- 练习合同: 一个 parent 和两个 child;只替换一个 child;交付 capability gap;borrowed child 被识别即停止。
小结
Aggregation 不是简单相加,而是在权威 inventory 和单一冻结 cohort 下相加。Claims reader 再说明 evidence 能走多远,以及什么仍阻挡下一决策。第 32 章会执行最后两次受控实验:一个 DSL change 和一个 BLOGE toolchain change。
Coding Agent: Open the versioned task guide.