仅将 events:streamEvents 按用户批准推进为 completed,并保留 Events 其它 operation 与 Account/Content/Market/Meta 的 needs_verification 边界。
11 KiB
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 已在历史审批中是 completed;Market、Account、Content、Meta 当前仍保持 dedicated / needs_verification。
如果后续执行版获 fresh 双 review PASS 且用户明确批准,推荐采用 operation-level approval,把 events: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.yamldocs/api-contracts/market/openapi.yamldocs/api-contracts/ai/openapi.yamldocs/api-contracts/knowledge/openapi.yamldocs/api-contracts/events/openapi.yamlmuse-cloud/scripts/p1r-audit-api-coverage.pydocs/superpowers/reports/p1r-api-coverage.jsondocs/superpowers/reports/p1r-api-coverage.md
P1R-7a Events SSE evidence
- P1R-7a 已把
streamEvents GET /app-api/muse/events从sse_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_verificationevidence。 - 已提交并 push:
3db5fbe、230152c。
P1R-7c Knowledge:
- Knowledge source owner terminal event -> Knowledge outbox -> worker -> EventsPublishApi ->
muse_unified_event-> SSE 可见链路已形成needs_verificationevidence。 - 已提交并 push:
cef686b、e55618f。
P1R-7d Market:
- Market governance terminal fact -> Market outbox -> worker -> EventsPublishApi ->
muse_unified_event-> SSE owner-visible 链路已形成needs_verificationevidence。 - 已提交并 push:
b36b153、e8ed7d7。
P1R-7e Account:
- Account quota adjustment terminal fact -> Account outbox -> worker -> EventsPublishApi ->
muse_unified_event-> SSE owner-visible 链路已形成needs_verificationevidence。 - 已提交并 push:
0e10caf、68cee5d;0f49802记录旧 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_verificationevidence。 - 已提交并 push:
acda7a2、6f5b9b3、f84c18f。
当前 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_verificationevidence 自动推出。 - 后续执行版可以修改 coverage scanner、coverage report 和 coverage gate,但必须先通过 fresh review,并在用户明确批准后执行。
推荐方案
方案 A:operation-level approval
后续执行版应把 completed 批准模型从纯 domain-level 扩展为 operation-level:
- 保留 AI / Knowledge 既有 completed 状态。
- 新增显式批准 key:
events:streamEvents。 approved_completed_operation同时支持既有 approved domains 和 approved operation keys。P1rApiCoverageReportTest同步断言 completed operation 必须属于 approved domain 或 approved operation key。- scanner 生成 report 后,只有
events / streamEvents从needs_verification变为completed。
推荐选择该方案。
理由:
- 最小、准确、可审计。
- 不影响 Market / Account / Content / Meta。
- 不会让未来 Events 新 operation 自动继承 completed。
方案 B:把 events 加入 approved domain
后续执行版也可以把 events 加入 APPROVED_COMPLETED_DOMAINS。
不推荐选择该方案。
理由:
- 当前虽然只会影响
streamEvents一项,但模型表达不准确。 - 未来若 Events OpenAPI 新增 operation,scanner 会默认把 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。
后续执行版必须包含
- 只读 preflight:
git status --short --branchgit log --oneline -5git pull --ff-only origin dev/1.0.0- protected staged / unstaged diff gate
- 批准模型修改方案:
- 推荐 operation-level approval
- 明确只批准
events:streamEvents
- coverage report 更新方式:
- 用户明确批准前只能在
/tmp隔离副本验证 - 用户批准后才允许在真实 worktree 运行 scanner 生成 report
- 用户明确批准前只能在
- 验证命令:
- scanner
--check P1rApiCoverageReportTestP1rEventsRealApiGateTestP1rEventsRouteOwnershipTest- AI / Knowledge / Market / Account / Content 既有 P1R owner propagation gates 的最小回归集合
git diff --check
- scanner
- 复审 gate:
- fresh implementation spec/correctness review
- fresh implementation quality/data-integrity/testing review
- 明确提交边界:
- scanner/test 逻辑改动、coverage report 生成、
.agent/docs/memorys状态留痕可同阶段提交 - 真实 coverage report 更新必须发生在用户明确批准 completed 推进之后
- OpenAPI 不进入提交
- 不连带推进其它 domain completed
- scanner/test 逻辑改动、coverage report 生成、
验收标准
本审阅版通过标准:
- 审批对象唯一且明确:
events:streamEvents。 - 已区分 P1R-7 Events completed approval 与 Market / Account / Content / Meta domain completed。
- 已确认 P1R-7e / P1R-7f 关闭旧预检中的 Account / Content source owner 前置疑问。
- 已指出当前 scanner 是 domain-level completed approval,后续执行版必须改成 operation-level 或显式解释为什么不改。
- 未修改 OpenAPI、scanner、coverage report 或业务代码。
待确认项
- 是否确认本轮 completed approval 只审批
events:streamEvents? - 是否确认采用 operation-level approval,而不是把整个
eventsdomain 加入 approved domain? - 是否确认执行版 review 双 PASS 后,再由用户单独批准真实 worktree 的 coverage report 状态推进?
下一步
- 对本审阅版派发 fresh spec/scope review。
- 对本审阅版派发 fresh quality/feasibility review。
- 双 PASS 后写
docs/agent-specs/2026-06-09-P1R7CompletedApproval执行版.md。 - 执行版仍需 fresh 双 review;双 PASS 前不得修改 scanner、coverage report 或推进 completed。