oh-my-muse/docs/memorys/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

204 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# P1R-7 Completed Approval 状态推进
## 结论
本次在用户明确批准后,只把 P1R-7 Events End-to-End Acceptance 的唯一 operation
```text
events:streamEvents / GET /app-api/muse/events
```
`dedicated / needs_verification` 推进为 `dedicated / completed`
本次没有把整个 `events` domain 加入 completed 白名单,没有推进 Market / Account / Content / Meta completed也不代表总 P1R completed。
## 用户批准点
用户已明确批准三项:
1. 只审批 `events:streamEvents / GET /app-api/muse/events`
2. 采用 operation-level approval不采用 `events` domain-level 白名单。
3. 允许在真实 worktree 修改 scanner、coverage gate test 与 coverage report把 completed summary 从 `100/133` 推进到 `101/132`
实现中发现既有 P1R mixed gate 还包含旧 coverage 口径断言。用户于 2026-06-10 回复“允许”,批准把以下 4 个旧 RealApi gate 纳入本轮测试口径修正:
- `P1rEventsRealApiGateTest.java`
- `P1rAiRealApiGateTest.java`
- `P1rKnowledgeRealApiGateTest.java`
- `P1rMarketRealApiGateTest.java`
该扩展只允许同步测试断言到 `events:streamEvents` operation-level completed不允许修改业务实现或 OpenAPI。
## 状态变化
推进前 coverage summary
```text
233 100 133 0 0 0
```
推进后 coverage summary
```text
233 101 132 0 0 0
```
推进后 domain 状态:
```text
account 33 dedicated/needs_verification:33
ai 41 dedicated/completed:41
content 51 dedicated/needs_verification:51
events 1 dedicated/completed:1
knowledge 59 dedicated/completed:59
market 32 dedicated/needs_verification:32
meta 16 dedicated/needs_verification:16
```
唯一新增 completed
```text
events streamEvents GET /app-api/muse/events dedicated completed P1R-7 End-to-End Acceptance
```
## 修改文件
scanner
- `muse-cloud/scripts/p1r-audit-api-coverage.py`
测试:
- `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rApiCoverageReportTest.java`
- `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rEventsRealApiGateTest.java`
- `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAiRealApiGateTest.java`
- `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rKnowledgeRealApiGateTest.java`
- `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rMarketRealApiGateTest.java`
report
- `docs/superpowers/reports/p1r-api-coverage.json`
- `docs/superpowers/reports/p1r-api-coverage.md`
文档:
- `docs/agent-specs/2026-06-09-P1R7CompletedApproval审阅版.md`
- `docs/agent-specs/2026-06-09-P1R7CompletedApproval执行版.md`
- `docs/agent-specs/.agent`
## 关键实现口径
scanner 保留历史 domain-level approval
```python
APPROVED_COMPLETED_DOMAINS = {"ai", "knowledge"}
```
并新增 operation-level approval
```python
APPROVED_COMPLETED_OPERATIONS = {"events:streamEvents"}
```
`approved_completed_operation` 仍要求 completed operation 必须是 `dedicated`,并且只能来自已批准 domain 或已批准 operation key。
## 验证证据
TDD RED
```text
P1rApiCoverageReportTest tests=6 failures=1
失败原因expected completed=101 but was=100
```
隔离 scanner 预验证:
```text
/tmp/p1r7-completed-approval-impl-scan.QMrhrf
233 101 132 0 0 0
events streamEvents GET /app-api/muse/events dedicated completed P1R-7 End-to-End Acceptance
```
真实 scanner
```text
python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check
233 101 132 0 0 0
```
局部 gate
```text
P1rApiCoverageReportTest tests=6 failures=0 errors=0 skipped=0
```
旧 RealApi gate 同步后局部 gate
```text
P1rMarketRealApiGateTest tests=6 failures=0 errors=0 skipped=0
P1rKnowledgeRealApiGateTest tests=8 failures=0 errors=0 skipped=0
P1rAiRealApiGateTest tests=7 failures=0 errors=0 skipped=0
P1rApiCoverageReportTest tests=6 failures=0 errors=0 skipped=0
P1rEventsRealApiGateTest tests=5 failures=0 errors=0 skipped=0
```
P1R focused gates
```text
JAVA_HOME=$(/usr/libexec/java_home -v 21) mvn -o test -pl muse-server -am -Dtest=... -Dsurefire.failIfNoSpecifiedTests=false
Tests run: 118, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
```
XML 防空跑计数:
```text
p1r_completed_approval_gate_tests=118
```
最终 diff gate
```text
git diff --check
OpenAPI staged / unstaged diff 为空
allowed_diff_gate=PASS
```
Fresh implementation review
```text
Linnaeus spec/correctness review PASS
Hypatia quality/data-integrity/testing review PASS
```
review 结论边界:
- PASS 只代表 `events:streamEvents` operation-level completed approval implementation 可收口。
- PASS 不代表总 P1R completed。
- PASS 不代表 Market / Account / Content / Meta completed。
## 已验证事实
- `events:streamEvents` 是本次唯一新增 completed operation。
- Market 32 个 operation 仍为 `dedicated / needs_verification`
- Account 33 个 operation 仍为 `dedicated / needs_verification`
- Content 51 个 operation 仍为 `dedicated / needs_verification`
- Meta 16 个 operation 仍为 `dedicated / needs_verification`
- 7 个 OpenAPI 合同没有 diff。
- 本次没有修改业务实现代码。
## 推断
基于 P1R-7a 到 P1R-7f 已收口的 source owner propagation evidence、operation-level approval scanner、coverage gate、P1R focused gates 与 protected diff可以把 P1R-7 Events completed approval 作为状态推进完成候选,进入 fresh implementation review。
## 假设
提交和 push 仍需用户明确指令。
## 后续约束
- 不得把整个 `events` domain 加入 completed 白名单。
- 不得把 Market / Account / Content / Meta 推进 completed。
- 不得把总 P1R completed 写成已完成。
- fresh implementation 双 review PASS 前不得提交或 push。