仅将 events:streamEvents 按用户批准推进为 completed,并保留 Events 其它 operation 与 Account/Content/Market/Meta 的 needs_verification 边界。
204 lines
5.8 KiB
Markdown
204 lines
5.8 KiB
Markdown
# 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。
|