oh-my-muse/docs/agent-specs/2026-06-09-P1R7CompletedApproval审阅版.md
zizi 85c5422cb8 test(p1r): 收口 P1R-7 completed approval 门禁
仅将 events:streamEvents 按用户批准推进为 completed,并保留 Events 其它 operation 与 Account/Content/Market/Meta 的 needs_verification 边界。
2026-06-10 10:34:15 +08:00

11 KiB
Raw Blame History

P1R7 Completed Approval 审阅版

日期2026-06-09

结论

推荐进入 P1R-7 completed approval但本轮审批对象只能是 Events 唯一 operation

events / streamEvents / GET /app-api/muse/events

本审阅版不建议把 Market、Account、Content、Meta 或总 P1R-7 自动推进 completed。AI 与 Knowledge 已在历史审批中是 completedMarket、Account、Content、Meta 当前仍保持 dedicated / needs_verification

如果后续执行版获 fresh 双 review PASS 且用户明确批准,推荐采用 operation-level approvalevents:streamEvents 单独列入 approved completed operations。不要简单把整个 events domain 加入 domain-level completed 白名单;虽然当前 Events 只有一个 operation但 domain-level 白名单会让未来新增 Events operation 误继承 completed。

本审阅版只冻结审批范围、证据口径和后续执行要求;不修改 OpenAPI、coverage scanner、coverage report 或业务代码,不推进 completed

审批主线

flowchart TB
    Start["当前 HEAD<br/>P1R-7a-f evidence 已提交推送"] --> Candidate["审批候选<br/>events streamEvents"]
    Candidate --> Evidence["证据包<br/>Events SSE + AI/Knowledge/Market/Account/Content owner propagation"]
    Evidence --> Review["Completed approval 执行版<br/>fresh spec + quality review"]
    Review --> Approval{"用户明确批准?"}
    Approval -->|否| Stay["保持 needs_verification"]
    Approval -->|是| OperationAllowlist["operation-level approval<br/>events:streamEvents"]
    OperationAllowlist --> Gates["scanner + report + P1R gates<br/>fresh implementation review"]
    Gates --> Commit["提交 / 推送<br/>不得连带推进其它 domain"]

已验证事实

工作区与远端

  • 正确 worktree/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0
  • 当前分支:dev/1.0.0
  • 写入本文档前,git status --short --branch 显示:
## dev/1.0.0...origin/dev/1.0.0
  • 本轮已执行 git pull --ff-only origin dev/1.0.0,结果:
Already up to date.
  • 当前最新提交:
f84c18f test(p1r): 收口 Content 事件传播真实链路门禁

当前 coverage 状态

真实 worktree 当前报告显示:

totalOperations              233
completedOperations          100
needsVerificationOperations  133
incompleteOperations         0
genericPersistenceOperations 0
ssePlaceholderOperations     0

按 domain 聚合:

account   33 dedicated/needs_verification:33
ai        41 dedicated/completed:41
content   51 dedicated/needs_verification:51
events     1 dedicated/needs_verification:1
knowledge 59 dedicated/completed:59
market    32 dedicated/needs_verification:32
meta      16 dedicated/needs_verification:16

Events 当前唯一 operation

events streamEvents GET /app-api/muse/events dedicated needs_verification P1R-7 End-to-End Acceptance

隔离 scanner 证据

本轮已在一次性 /tmp/p1r7-completed-approval-scan.JqNuWY 隔离副本执行:

python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check

结果 exit 0并只在隔离副本生成 coverage JSON / Markdown。该路径只作为本轮证据留痕后续执行版不得复用必须重新创建隔离副本。summary 与真实 worktree 当前报告一致:

233 100 133 0 0 0

真实 worktree 受保护文件 staged / unstaged diff 均为空:

  • docs/api-contracts/account/openapi.yaml
  • docs/api-contracts/market/openapi.yaml
  • docs/api-contracts/ai/openapi.yaml
  • docs/api-contracts/knowledge/openapi.yaml
  • docs/api-contracts/events/openapi.yaml
  • muse-cloud/scripts/p1r-audit-api-coverage.py
  • docs/superpowers/reports/p1r-api-coverage.json
  • docs/superpowers/reports/p1r-api-coverage.md

P1R-7a Events SSE evidence

  • P1R-7a 已把 streamEvents GET /app-api/muse/eventssse_placeholder / incomplete 推进到 dedicated / needs_verification
  • P1R-7a 证据包括 frontend SSE focused tests、P1R Events API gate、route ownership gate、reactor build、dependency tree 与 V16 Flyway _test
  • P1R-7a 明确没有接入 source owner propagation因此当时不能进入 completed approval。

P1R-7b 到 P1R-7f owner propagation evidence

P1R-7b AI

  • AI terminal event -> AI publish outbox -> AI worker -> EventsPublishApi -> muse_unified_event -> SSE 可见链路已形成 needs_verification evidence。
  • 已提交并 push3db5fbe230152c

P1R-7c Knowledge

  • Knowledge source owner terminal event -> Knowledge outbox -> worker -> EventsPublishApi -> muse_unified_event -> SSE 可见链路已形成 needs_verification evidence。
  • 已提交并 pushcef686be55618f

P1R-7d Market

  • Market governance terminal fact -> Market outbox -> worker -> EventsPublishApi -> muse_unified_event -> SSE owner-visible 链路已形成 needs_verification evidence。
  • 已提交并 pushb36b153e8ed7d7

P1R-7e Account

  • Account quota adjustment terminal fact -> Account outbox -> worker -> EventsPublishApi -> muse_unified_event -> SSE owner-visible 链路已形成 needs_verification evidence。
  • 已提交并 push0e10caf68cee5d0f49802 记录旧 completed approval 预检边界。

P1R-7f Content

  • Content saveBlock 首次成功 -> muse_content_block_source_attribution(source_status=active) -> Content outbox -> worker -> EventsPublishApi -> muse_unified_event -> SSE owner-visible 链路已形成 needs_verification evidence。
  • 已提交并 pushacda7a26f5b9b3f84c18f

当前 scanner completed 白名单机制

当前 muse-cloud/scripts/p1r-audit-api-coverage.py 使用 domain-level 白名单:

APPROVED_COMPLETED_DOMAINS = {"ai", "knowledge"}

当前 P1rApiCoverageReportTest 也使用同名 domain-level 白名单验证 completed 只能来自已批准域。

这说明后续如果要把 events:streamEvents 推进 completed必须修改 scanner 与 report gate 的批准模型,或者临时把整个 events domain 加入批准域。后者不是推荐方案。

推断

  • P1R-7a 到 P1R-7f 已覆盖 Events SSE 入口与 AI、Knowledge、Market、Account、Content 五个 owner 的第一批用户可见事件传播 evidence旧预检中 “Account / Content 是否仍是硬前置” 的问题已被后续 P1R-7e / P1R-7f 关闭。
  • 现在唯一合理的 completed approval 候选是 Events streamEvents,因为 coverage 中 P1R-7 只对应这一项 operation。
  • Market、Account、Content、Meta 的 operation 仍代表各自 domain API 本身,不应因为它们提供过 Events source owner evidence 就被自动推进 completed。
  • operation-level approval 比 domain-level approval 更符合长期演进:它能准确表达“本次只批准 events:streamEvents”,并避免未来新增 Events API 被误标 completed。

假设

  • 当前 P1R-7 completed approval 的目标是关闭 P1R-7 Events End-to-End Acceptance而不是重新审批所有 P1R domain API。
  • 用户仍要求 coverage completed 必须单独批准,不能由 fresh review PASS 或 needs_verification evidence 自动推出。
  • 后续执行版可以修改 coverage scanner、coverage report 和 coverage gate但必须先通过 fresh review并在用户明确批准后执行。

推荐方案

方案 Aoperation-level approval

后续执行版应把 completed 批准模型从纯 domain-level 扩展为 operation-level

  • 保留 AI / Knowledge 既有 completed 状态。
  • 新增显式批准 keyevents:streamEvents
  • approved_completed_operation 同时支持既有 approved domains 和 approved operation keys。
  • P1rApiCoverageReportTest 同步断言 completed operation 必须属于 approved domain 或 approved operation key。
  • scanner 生成 report 后,只有 events / streamEventsneeds_verification 变为 completed

推荐选择该方案。

理由:

  • 最小、准确、可审计。
  • 不影响 Market / Account / Content / Meta。
  • 不会让未来 Events 新 operation 自动继承 completed。

方案 Bevents 加入 approved domain

后续执行版也可以把 events 加入 APPROVED_COMPLETED_DOMAINS

不推荐选择该方案。

理由:

  • 当前虽然只会影响 streamEvents 一项,但模型表达不准确。
  • 未来若 Events OpenAPI 新增 operationscanner 会默认把 dedicated Events operation 标为 completed产生阶段越权风险。

非目标

  • 不修改 OpenAPI。
  • 不修改业务实现。
  • 不修改真实 coverage scanner。
  • 不修改真实 coverage JSON / Markdown。
  • 不推进 Market 32 operations completed。
  • 不推进 Account 33 operations completed。
  • 不推进 Content 51 operations completed。
  • 不推进 Meta 16 operations completed。
  • 不把 P1R-7f 或任一 owner evidence 直接写成该 owner domain completed。

后续执行版必须包含

  1. 只读 preflight
    • git status --short --branch
    • git log --oneline -5
    • git pull --ff-only origin dev/1.0.0
    • protected staged / unstaged diff gate
  2. 批准模型修改方案:
    • 推荐 operation-level approval
    • 明确只批准 events:streamEvents
  3. coverage report 更新方式:
    • 用户明确批准前只能在 /tmp 隔离副本验证
    • 用户批准后才允许在真实 worktree 运行 scanner 生成 report
  4. 验证命令:
    • scanner --check
    • P1rApiCoverageReportTest
    • P1rEventsRealApiGateTest
    • P1rEventsRouteOwnershipTest
    • AI / Knowledge / Market / Account / Content 既有 P1R owner propagation gates 的最小回归集合
    • git diff --check
  5. 复审 gate
    • fresh implementation spec/correctness review
    • fresh implementation quality/data-integrity/testing review
  6. 明确提交边界:
    • scanner/test 逻辑改动、coverage report 生成、.agent / docs/memorys 状态留痕可同阶段提交
    • 真实 coverage report 更新必须发生在用户明确批准 completed 推进之后
    • OpenAPI 不进入提交
    • 不连带推进其它 domain completed

验收标准

本审阅版通过标准:

  1. 审批对象唯一且明确:events:streamEvents
  2. 已区分 P1R-7 Events completed approval 与 Market / Account / Content / Meta domain completed。
  3. 已确认 P1R-7e / P1R-7f 关闭旧预检中的 Account / Content source owner 前置疑问。
  4. 已指出当前 scanner 是 domain-level completed approval后续执行版必须改成 operation-level 或显式解释为什么不改。
  5. 未修改 OpenAPI、scanner、coverage report 或业务代码。

待确认项

  1. 是否确认本轮 completed approval 只审批 events:streamEvents
  2. 是否确认采用 operation-level approval而不是把整个 events domain 加入 approved domain
  3. 是否确认执行版 review 双 PASS 后,再由用户单独批准真实 worktree 的 coverage report 状态推进?

下一步

  1. 对本审阅版派发 fresh spec/scope review。
  2. 对本审阅版派发 fresh quality/feasibility review。
  3. 双 PASS 后写 docs/agent-specs/2026-06-09-P1R7CompletedApproval执行版.md
  4. 执行版仍需 fresh 双 review双 PASS 前不得修改 scanner、coverage report 或推进 completed。