只推进 11 个 MetaSchema 管理 operation 到 dedicated/completed,保留 FunctionChain 与 ProtectionNode 的 5 个 operation 为 dedicated/needs_verification。同步 scanner approval 白名单、coverage report、P1R gate 测试和阶段留痕,避免把 Meta 扩写成整域 completed。
15 KiB
P1R Meta Completed Approval 审阅版
日期:2026-06-10
结论
推荐把 Meta 作为剩余业务域 completed approval 的第一候选,但当前 Meta 仍不是 completed。
本审阅版只冻结 Meta completed approval 的范围、证据缺口、推荐审批粒度和后续执行版要求。不修改 OpenAPI,不修改 scanner,不修改 coverage report,不修改业务代码,不把 Meta 或其它 domain 推进 completed。
推荐审批策略:
Meta domain-level approval candidate
前提是后续执行版能一次性证明 Meta 16 个 operation 的真实运行态、数据迁移、状态机、权限、审计、幂等和失败路径证据。如果任一 operation 无法满足 completed 证据,必须退回 operation-level approval,不能整域推进。
审批路径
flowchart TB
Start["当前 coverage<br/>Meta 16 dedicated / needs_verification"] --> Review["本审阅版<br/>冻结 Meta completed 证据标准"]
Review --> FreshReview["fresh spec/scope review<br/>fresh quality/feasibility review"]
FreshReview --> ExecDoc["执行版<br/>列出测试、迁移、scanner/report/gate 修改"]
ExecDoc --> ExecReview["执行版 fresh 双 review"]
ExecReview --> UserApproval{"用户明确批准<br/>Meta completed 推进?"}
UserApproval -->|否| Stop["保持 needs_verification"]
UserApproval -->|是| Implement["只按执行版允许路径修改<br/>scanner / gate / report / 必要测试"]
Implement --> Verify["focused tests + P1R gates<br/>真实 Flyway _test + XML 防空跑<br/>allowed/protected diff"]
Verify --> ImplReview["fresh implementation 双 review"]
ImplReview --> FinalApproval{"用户批准提交和 push?"}
FinalApproval -->|否| LocalOnly["保留本地 evidence"]
FinalApproval -->|是| Commit["提交并 push"]
已验证事实
工作区与远端
- 工作区:
/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0。 - 分支:
dev/1.0.0。 - 当前远端:
origin/dev/1.0.0。 - 本轮已执行
git pull --ff-only origin dev/1.0.0,结果为Already up to date.。 - 当前 HEAD:
85c5422 test(p1r): 收口 P1R-7 completed approval 门禁
当前 coverage 状态
当前 docs/superpowers/reports/p1r-api-coverage.json summary:
totalOperations 233
completedOperations 101
needsVerificationOperations 132
incompleteOperations 0
genericPersistenceOperations 0
ssePlaceholderOperations 0
missingOperations 0
blockedOperations 0
Meta 当前状态:
meta_count 16
implementationStatus dedicated:16
completionStatus needs_verification:16
Meta 16 个 operation:
| operationId | method/path | 当前状态 |
|---|---|---|
listMetaSchemas |
GET /admin-api/muse/governance/meta-schemas |
dedicated / needs_verification |
getMetaSchema |
GET /admin-api/muse/governance/meta-schemas/{schemaKey} |
dedicated / needs_verification |
getMetaSchemaVersion |
GET /admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version} |
dedicated / needs_verification |
saveMetaSchemaDraft |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/drafts |
dedicated / needs_verification |
validateMetaSchemaDraft |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/validate |
dedicated / needs_verification |
previewMetaSchemaDraftImpact |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/impact-preview |
dedicated / needs_verification |
publishMetaSchemaDraft |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/publish |
dedicated / needs_verification |
activateMetaSchemaVersion |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/activate |
dedicated / needs_verification |
rollbackMetaSchemaVersion |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/rollback |
dedicated / needs_verification |
deprecateMetaSchemaVersion |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/deprecate |
dedicated / needs_verification |
setMetaSchemaGrayRules |
POST /admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/gray-rules |
dedicated / needs_verification |
listProtectionNodes |
GET /admin-api/muse/governance/protection-nodes |
dedicated / needs_verification |
getProtectionNode |
GET /admin-api/muse/governance/protection-nodes/{nodeKey} |
dedicated / needs_verification |
listFunctionChains |
GET /admin-api/muse/governance/function-chains |
dedicated / needs_verification |
previewFunctionChainImpact |
POST /admin-api/muse/governance/function-chains/{chainKey}/impact-preview |
dedicated / needs_verification |
activateFunctionChainVersion |
POST /admin-api/muse/governance/function-chains/{chainKey}/versions/{version}/activate |
dedicated / needs_verification |
已有 dedicated 实现证据
Meta 已有 dedicated Controller:
AdminMetaSchemaControllerAdminProtectionNodeControllerAdminFunctionChainController
这三个 Controller 均使用 /muse/governance/... 类级路由,方法级 @GetMapping / @PostMapping 覆盖 Meta 16 个 operation,并通过 @PreAuthorize 绑定管理端权限。
这三个 Controller 都调用 MetaApiVersionGuard.requireVersion(...) 校验 X-API-Version,缺少版本头时不回退到旧合同兜底结果。
Meta 已有 dedicated Service / Guard / DAL:
MetaSchemaServiceImplMetaSchemaValidationServiceImplMetaSchemaImpactPreviewServiceImplProtectionNodeServiceImplFunctionChainServiceImplMetaCommandServiceImplMetaAuditServiceImplMetaVersionStateGuardMetaProtectionNodeGuardFunctionChainGuard- Meta DO / Mapper / Convert 文件
Meta 旧合同兜底路由已有退役测试:
AdminMuseMetaContractControllerTest.should_notKeepGenericMetaContractControllerOnClasspath
已有状态机、幂等、审计与失败边界证据
MetaSchemaServiceImpl 已覆盖:
- save draft
- publish
- activate
- rollback
- deprecate
- gray rules
- command reservation
- command replay
- governance audit
MetaCommandServiceImpl 已覆盖:
reserveCommand(...)recordSucceeded(...)- request hash
- operation / actor / target envelope 校验
- 未完成 command 冲突
- succeeded command replay
MetaAuditServiceImpl 已把治理审计写入 muse_meta_governance_audit,并有测试证明审计不是复用 command resultSnapshot 冒充。
MetaSchemaImpactPreviewServiceImpl 依赖 MetaImpactFacade;默认 UnavailableMetaImpactFacade 在没有真实外部 owner bean 时抛出 META_EXTERNAL_OWNER_UNAVAILABLE,不是空成功。
已有 SQL 与测试证据
Meta 已有 migration:
muse-cloud/sql/muse/V10__extend_meta_real_api_schema.sql
V10 追加:
muse_meta_commandmuse_meta_governance_auditmuse_meta_validation_resultmuse_meta_impact_previewmuse_meta_gray_rulemuse_meta_function_chain_versionmuse_meta_function_chain_slotmuse_meta_function_chain_nodeuk_muse_meta_schema_version_active_schema_idmuse_meta_protection_node结构化字段
Meta 已有静态 SQL gate:
P1rMetaMigrationSqlTest,3 个@Test。
Meta 已有 coverage gate:
P1rMetaRealApiGateTest,4 个@Test。
该 gate 当前明确禁止 Meta operation 标记为 completed,并要求 Meta 保持 dedicated / needs_verification。
Meta 模块现有测试清单包含 16 个测试类,按源码 @Test 统计共 165 个测试方法;P1R Meta gate 额外包含 7 个测试方法。
推断
- Meta 是剩余四个业务域中最适合先走 completed approval 的候选,因为 operation 数量最少,主要围绕 Meta owner 自有治理事实,外部依赖比 Account / Market / Content 少。
- Meta 可以作为 domain-level approval 候选,但只有在后续执行版补齐真实
_test、XML 防空跑、审批后 coverage gate 和运行态失败路径证据后才成立。 - 当前
P1rMetaRealApiGateTest的旧口径会阻止 Meta completed;后续用户批准前不能修改该 gate,用户批准后必须把它改成“只允许 Meta 16 个 operation completed,且不连带其它 domain”的审批后门禁。
假设
- 用户确认先从 Meta 推进剩余业务域 completed approval。
- 后续执行版允许在 fresh 双 review 与用户明确批准之后,修改 scanner、coverage report、
P1rMetaRealApiGateTest、P1rApiCoverageReportTest和必要的 Meta completed approval gate 测试。 - 如果真实
_test或外部 owner fail-closed 证据证明某个 Meta operation 不满足 completed,用户接受把 Meta 从 domain-level approval 降级为 operation-level approval。
主要缺口
缺口 1:真实 Flyway _test 尚未覆盖 V10
当前只有 P1rMetaMigrationSqlTest 静态读取 V10 SQL。它证明 SQL 文本包含关键表、索引和字段,但不证明真实 PostgreSQL 可以执行,也不证明约束、partial unique index、trigger 和非法写入拒绝实际生效。
后续执行版必须新增真实 PostgreSQL _test,最低验证:
- schema version 到达 V10 或当前全量迁移目标中包含 V10。
- V10 追加表真实存在。
muse_meta_command的(tenant_id, command_id)unique 生效。muse_meta_schema_version的 active partial unique index 使用(tenant_id, schema_id)且同 schema 不能有两个 active 版本。muse_meta_function_chain_version的 active partial unique index 生效。muse_meta_protection_node结构化字段真实存在。- V10 表的
updated_attrigger 可执行。 - 代表性非法 insert 被拒绝,例如重复 commandId、重复 active schema version、重复 active function chain version、必填字段为空。
缺口 2:当前 P1R gate 仍明确禁止 Meta completed
P1rMetaRealApiGateTest.should_not_mark_meta_operations_as_completed 和 should_keep_current_meta_operations_dedicated_and_needs_verification 当前是正确的防误升门禁。
后续执行版必须把 gate 修改分成两步:
- 用户批准前:保持该 gate 不变,证明 Meta 仍未 completed。
- 用户批准后:改为 completed approval gate,精确断言 Meta 16 个 operation 为
dedicated / completed,并断言 Account / Market / Content 仍为dedicated / needs_verification。
缺口 3:外部 owner impact preview 需要明确 completed 口径
MetaSchemaImpactPreviewServiceImpl 调用 MetaImpactFacade。默认 UnavailableMetaImpactFacade 抛出 META_EXTERNAL_OWNER_UNAVAILABLE。
这说明当前系统没有伪造外部 owner 成功,但也意味着 completed approval 必须选择清楚:
- 如果
previewMetaSchemaDraftImpact要算 completed,必须证明有真实MetaImpactFacade或明确接受 fail-closed 是该 operation 的完成口径。 - 如果真实外部 owner 不可用且该 operation 需要成功预览外部影响,必须保持该 operation
needs_verification,不能把 bare mock 或空 summary 当 completed。
缺口 4:需要把 165 个 Meta 测试变成可审计 XML 证据
历史留痕记录 Meta 模块全量测试曾通过 165 个测试,但 completed approval 执行必须重新运行当前代码,并读取 Surefire XML 逐类证明:
tests > 0
failures = 0
errors = 0
skipped = 0
后续执行版必须列出 required test classes 和最低测试数,不能只写 Maven exit 0。
缺口 5:scanner/report 修改必须是审批后动作
Meta completed approval 需要修改 scanner 的 completed allowlist 或 approval 模型,并重生成 coverage report。
这些动作只能在执行版 fresh 双 review 且用户明确批准后执行。用户批准前 protected diff 必须证明以下文件没有 staged/unstaged diff:
muse-cloud/scripts/p1r-audit-api-coverage.pydocs/superpowers/reports/p1r-api-coverage.jsondocs/superpowers/reports/p1r-api-coverage.md
推荐审批粒度
推荐先按 domain-level approval 设计 Meta 执行版:
approved_completed_domains += {"meta"}
但执行版必须提供降级机制:
- 如果全部 16 个 operation 证据闭合,允许 domain-level approval。
- 如果
previewMetaSchemaDraftImpact或其它高风险 operation 因外部 owner 不满足 completed 标准,必须降级为 operation-level approval。 - 降级时 scanner/report/gate 只能推进证据满足的 operation,不得把 Meta 整域加入 completed domain allowlist。
非目标
- 不修改
docs/api-contracts/meta/openapi.yaml。 - 不修改任何其它 OpenAPI 文件。
- 不修改
muse-cloud/scripts/p1r-audit-api-coverage.py。 - 不修改
docs/superpowers/reports/p1r-api-coverage.json。 - 不修改
docs/superpowers/reports/p1r-api-coverage.md。 - 不修改 Meta 业务实现代码。
- 不推进 Account / Market / Content completed。
- 不推进总 P1R completed。
- 不把 P1R-7 Events completed approval 或 source owner propagation evidence 当作 Meta completed 证据。
后续执行版必须包含
- Meta 16 operation 的完整清单与目标状态。
- 允许修改文件清单;至少区分用户批准前和批准后。
- scanner approval 模型:domain-level Meta 或 operation-level fallback,二选一并写明触发条件。
P1rMetaRealApiGateTest从禁止 completed 到审批后 completed gate 的修改策略。P1rApiCoverageReportTestsummary 期望从completed=101 / needsVerification=132到目标值的修改策略。- 真实 PostgreSQL Flyway
_test:目标 schema version、V10 表、索引、约束、trigger、非法 insert 拒绝。 - Meta focused tests:16 个测试类逐类 XML 计数下限。
- P1R mixed gates:包含 Meta gate、coverage report gate,以及用于证明非目标 domain 不被推进的 Account / Market / Content gate。
/tmp/p1r-meta-completed-approval-scan.*隔离 scanner 预验证。- 真实 worktree scanner/report 重生成只允许在执行版双 PASS 和用户批准后执行。
- protected diff gate,必须覆盖 7 个 OpenAPI、scanner 和 coverage report。
- allowed-diff gate,必须覆盖 unstaged / staged / untracked,并使用
core.quotePath=false。 - implementation review 复核项:新增 completed 只覆盖用户批准范围;非目标 domain 状态不变;XML 防空跑和
_test证据完整。 - rollback 策略:撤回 scanner allowlist、coverage report、gate test 和新增
_test,恢复 Meta 为dedicated / needs_verification。
验收标准
本审阅版可以视为完成的条件:
- 文件写入
docs/agent-specs/2026-06-10-P1RMetaCompletedApproval审阅版.md。 .agent记录 Meta completed approval 审阅版状态。git diff --check通过。- OpenAPI、scanner、coverage report 无 diff。
- 本审阅版通过 fresh spec/scope review 和 fresh quality/feasibility review。
待确认项
- 是否确认 Meta 作为剩余业务域 completed approval 第一候选。
- 是否确认先按 Meta domain-level approval 设计执行版,并保留 operation-level fallback。
- 是否确认用户批准前不得修改 scanner、coverage report、coverage gate 或 Meta 业务代码。
- 是否确认真实 Flyway
_test是 Meta completed approval 的硬门槛。