Skip to main content

BLOGE 0.9.8-RC1 在线版 · 事实校验 2026-09-15 · English

第 31 章 —— Project、Reactor 与 Claim Capability

本章承诺: 只从完整、冻结的 cohort 聚合精确 Requirement contributions,拒绝借来的 child,最后输出 evidence 支持的最高决策能力和明确 gap。

学习目标

  1. 解释 aggregation 为什么需要权威 inventory 与单一 run cohort。
  2. 区分 Project completeness 与 direct-module Reactor completeness。
  3. 在相信总数前观察 cohort mismatch 与 borrowed-child rejection。
  4. ClaimCapabilitymissingEvidence 作为 reader 推导结果。

两个有效 child 仍可能组成无效 parent

decision module 贡献一个有效贷款 Case,funding module 贡献另一个;两者合起来满足 minimumPassingCases: 2,但前提是它们属于同一个 governance snapshot、selection、source commit 和 parent run。

图 31.1:Parent 接纳完整同 cohort children,拒绝借来的 child

这是 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_MISSINGGOVERNANCE_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();

图 31.2:只有关闭下一等级的全部累计 gap,ClaimCapability 才会上升

CapabilityEvidence 支持的决策语境常见剩余 gap
AUTHORING本地诊断与 witness discoverysource-bound Suite/Project evidence
TEAM_GATE带 continuity、replay 和 CI-safe control 的团队集成governed aggregate 或 Oracle provenance
GOVERNED_GATEversioned business obligation 与可信 Oracle provenanceattributed comparison 与 release attestation
RELEASE_QUALIFIED为发布签署的精确 governed evidence 与 comparison声明 release contract 内没有缺项

Gap 是累计的。写进 JSON 的字符串不能提升 evidence,Policy 也不能给自己颁发 capability。可信 FAIL 可以有很强 provenance;capability 仍不替代 business status。

实验:借用一个 child

  1. 运行一个双 module parent,并外置保留 receipt。
  2. 把同样两个 modules 再运行到第二个 parent directory。
  3. 确认两个 parent 都能独立复验。
  4. 用 parent B 的有效 child 替换 parent A 的一个 child projection。
  5. assess 混合 parent,记录 AUTHORINGSOURCE_BOUND_PROJECT_AGGREGATE
  6. 恢复 parent A,画出 ownership links:root POM → parent run ID → child receipt → Suite contribution。
  7. 用 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。

下一章:第 32 章——变化归因、Maven 与发布决策

Coding Agent: Open the versioned task guide.