oh-my-muse/docs/agent-specs/2026-06-10-P1RRemainingDomainCompletedApproval审阅版.md
zizi 16e9f4ee72 test(p1r): 收口 Meta completed approval 门禁
只推进 11 个 MetaSchema 管理 operation 到 dedicated/completed,保留 FunctionChain 与 ProtectionNode 的 5 个 operation 为 dedicated/needs_verification。同步 scanner approval 白名单、coverage report、P1R gate 测试和阶段留痕,避免把 Meta 扩写成整域 completed。
2026-06-10 17:09:01 +08:00

428 lines
17 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 Remaining Domain Completed Approval 审阅版
日期2026-06-10
## 结论
推荐把 P1R 下一阶段定义为:
```text
P1R Remaining Domain Completed Approval
```
该阶段不是继续 P1R-7也不是直接进入一个已经存在的 P1R-8 实现阶段;它的目标是为仍处于 `dedicated / needs_verification` 的四个业务域建立 completed approval 总方案:
- Meta 16 operations
- Account 33 operations
- Market 32 operations
- Content 51 operations
本审阅版只冻结总路线、审批边界、证据标准和推荐推进顺序。不修改 OpenAPI不修改 scanner不修改 coverage report不修改业务代码也不把任何剩余业务域推进 `completed`
推荐推进顺序:
```text
Meta -> Account -> Market -> Content
```
理由是 Meta 体量最小、外部依赖最少,适合作为 domain-level completed approval 模板Account 和 Market 分别牵涉 New-API/FileService、授权/安装/治理投影Content 最大且跨 AI/Knowledge/Meta/FileService/Export/Import/Parse/Planning 等 owner适合最后按模板分片验收。
## 审批主线
```mermaid
flowchart TB
Start["当前 HEAD<br/>P1R-7 Events completed approval 已推送"] --> Remaining["剩余 needs_verification domains<br/>Meta / Account / Market / Content"]
Remaining --> Review["总审阅版<br/>冻结证据标准与顺序"]
Review --> DomainSpec{"按域单独审阅?"}
DomainSpec -->|Meta| Meta["P1R-Meta Completed Approval<br/>16 operations"]
DomainSpec -->|Account| Account["P1R-Account Completed Approval<br/>33 operations"]
DomainSpec -->|Market| Market["P1R-Market Completed Approval<br/>32 operations"]
DomainSpec -->|Content| Content["P1R-Content Completed Approval<br/>51 operations"]
Meta --> DomainGate["每域执行版 + fresh 双 review<br/>用户批准后才改 coverage"]
Account --> DomainGate
Market --> DomainGate
Content --> DomainGate
DomainGate --> Scanner["operation/domain allowlist<br/>scanner + report + gates"]
Scanner --> Done{"四域均完成?"}
Done -->|否| NextDomain["继续下一个 domain"]
Done -->|是| P1RApproval["总 P1R completed approval 候选<br/>仍需单独审批"]
```
## 已验证事实
### 工作区与远端
- 正确 worktree`/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0`
- 当前分支:`dev/1.0.0`
- 写入本文档前已执行:
```bash
git status --short --branch
git log --oneline -5
git pull --ff-only origin dev/1.0.0
```
结果:
```text
## dev/1.0.0...origin/dev/1.0.0
85c5422 test(p1r): 收口 P1R-7 completed approval 门禁
Already up to date.
```
### 当前 coverage 状态
当前 `docs/superpowers/reports/p1r-api-coverage.json` summary
```text
totalOperations 233
completedOperations 101
needsVerificationOperations 132
incompleteOperations 0
genericPersistenceOperations 0
ssePlaceholderOperations 0
missingOperations 0
blockedOperations 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 的范围:
- AI 41 operations。
- Knowledge 59 operations。
- Events `streamEvents / GET /app-api/muse/events` 1 operation。
仍未 completed 的范围:
- P1R-1 Content Real API51 operations。
- P1R-2 Meta Real API16 operations。
- P1R-3 Account Real API33 operations。
- P1R-6 Market Real API32 operations。
### 既有阶段结论
P1R 总规格定义的 completed 标准不是“路由存在”或“dedicated Controller 存在”,而是“真实业务行为、状态机、持久化、外部闭环、审计、测试与真实环境验收证据”。
P1R-1 Content 留痕明确:
- Content 51 operations 已退出 catch-all / generic persistence。
- 当前状态只是 `dedicated / needs_verification`
- 仍缺真实 PostgreSQL/Flyway 集成、外部 owner facade 与端到端验收。
P1R-2 Meta 留痕明确:
- Meta 16 operations 已进入 dedicated Controller / Service。
- 当前状态只是 `dedicated / needs_verification`
- 当时未运行真实 PostgreSQL / Flyway 迁移验证,外部 runtime owner 仍 pending。
P1R-3 Account 留痕明确:
- Account 33 operations 已进入 dedicated route / service / DTO / DAL。
- PostgreSQL / Flyway V11 已在同实例 test 库验证。
- New-API runtime、FileService、导出下载真实交付与跨域 runtime 仍未验收,因此不能 completed。
P1R-6 Market 留痕明确:
- Market 32 operations 已从 generic persistence 推进到 `dedicated / needs_verification`
- Market completed 不等于治理事件 propagation completed。
- 仍需证明购买、安装、handoff、授权消费、治理与账户聚合等真实用户流。
P1R-7 completed approval 留痕明确:
- 只把 `events:streamEvents``dedicated / needs_verification` 推进为 `dedicated / completed`
- 没有把 Market / Account / Content / Meta 推进 completed。
- 没有把总 P1R 写成 completed。
## 推断
- 当前主线瓶颈已经从“事件流是否可见”转为“剩余业务域是否具备真实业务 completed 证据”。
- 下一阶段不应再扩展 P1R-7 source owner propagationP1R-7 已完成的是 Events SSE operation-level approval。
- 剩余四域不能用一次总批准直接推进 completed因为它们的外部依赖、状态机、数据面和用户旅程差异较大。
- 最稳妥路线是先冻结总标准,再按 domain 分批写审阅版 / 执行版 / fresh review / 用户批准 / scanner-report-gate 修改。
## 假设
- 用户希望继续 P1R 主线,而不是切换到前端 P2/P3 或新功能开发。
- 用户仍要求 coverage completed 必须基于真实证据和单独批准,不能由 dedicated gate、review PASS 或文档推断自动推进。
- 后续每个 domain 的 completed approval 都允许修改 scanner、coverage report 和 coverage gate但必须先通过该 domain 的执行版 review并在用户明确批准后执行。
## 推荐方案
### 方案 A按 domain 分批 completed approval
每个剩余业务域单独走:
1. 审阅版:冻结该 domain 的 operation 列表、证据缺口、非目标、审批边界。
2. fresh spec/scope review + fresh quality/feasibility review。
3. 执行版列出可验证证据、scanner/report/gate 修改方式、allowed-diff、rollback。
4. fresh execution spec review + fresh execution quality review。
5. 用户明确批准该 domain completed 状态推进。
6. 修改 scanner / coverage gate / report。
7. 运行 focused tests、P1R gates、真实环境或 `_test` gate、protected diff、allowed-diff。
8. fresh implementation 双 review。
9. 用户批准后提交和 push。
推荐选择该方案。
理由:
- 保持最小审批面。
- 每个 domain 的缺口可以独立验证。
- 不会因为某个 domain 证据充分而误推进其它 domain。
- 与 AI / Knowledge / Events 的既有 approval 模型一致。
### 方案 B一次性总 P1R completed approval
一次性把 Content / Meta / Account / Market 全部纳入一个总执行版,并统一推进 completed。
不推荐。
理由:
- 132 个 remaining operation 风险面过大。
- Content / Account / Market 的外部链路差异明显,容易出现证据稀释。
- 一次性 scanner/report 修改难以证明每个 operation 的证据归属。
- 任何一个 domain 的 blocker 都会阻塞整批推进。
### 方案 C按 operation 极细粒度推进
对剩余 132 个 operation 逐个 operation-level approval。
暂不推荐作为主线默认方案。
理由:
- 最精确,但成本过高。
- 对 Meta 这种小域会造成过度流程开销。
- 更适合在某个 domain 内存在少数高风险 operation 不能与其它 operation 一起批准时局部采用。
## 推荐推进顺序
### 第一阶段Meta Completed Approval
候选范围:
```text
meta 16 dedicated/needs_verification
```
推荐先做 Meta因为
- operation 数量最少。
- 主要围绕 MetaSchema、保护节点、功能链治理。
- 外部依赖比 Account / Market / Content 少。
- 更适合建立 completed approval 的 domain 模板。
Meta 审阅版必须重点证明:
- V10 或后续 Meta migration 在真实 `_test` 库可执行。
- MetaSchema draft / validate / impact preview / publish / activate / rollback / deprecate / gray-rules 有真实状态机、版本约束和审计证据。
- 保护节点不能被降级为用户可替换槽位。
- 管理端权限、tenant 隔离和错误码路径可验。
- 没有把 Content / Account / Market 连带推进。
### 第二阶段Account Completed Approval
候选范围:
```text
account 33 dedicated/needs_verification
```
Account 必须在 completed 前补足:
- New-API binding / recheck / quota request / integration call 的真实 runtime 或明确验收替代边界。
- call attribution 基于真实 integration call / correlation 的查询与归因证据。
- FileService 或对象存储导出下载真实交付证据。
- security event / acknowledge / profile / entitlement / usage / purchase / license / publish projection 的 owner 与 tenant 隔离。
- P1R-7e Account quota adjustment Events propagation 只能作为事件可见证据,不能替代 Account API completed 证据。
### 第三阶段Market Completed Approval
候选范围:
```text
market 32 dedicated/needs_verification
```
Market 必须在 completed 前补足:
- 资产发布、审核、驳回、下架、召回、申诉的真实状态机和审计。
- 购买、安装、bind-precheck、handoff、目标 owner 授权消费链路。
- Account projection 与 Market installation / purchase / license 的一致性。
- P1R-7d Market governance Events propagation 只能作为治理事件可见证据,不能替代 Market API completed 证据。
- `needs_recheck` 仍不能作为 SourceStatus 值误用。
### 第四阶段Content Completed Approval
候选范围:
```text
content 51 dedicated/needs_verification
```
Content 放最后,因为它覆盖面最大:
- 作品、章节、Block、结构编辑、来源归因。
- planning、style check、candidate confirm/discard。
- import / parse / batch confirm / parse retry。
- export / export task / download。
- meta projection。
- suggestion merge。
- admin risk action / import task / export task / work governance。
Content completed 前必须证明:
- 核心写命令、幂等、revision、owner guard、审计和 DTO 响应。
- import / parse / export / download 的真实文件或对象存储闭环。
- AI suggestion / Knowledge draft / Meta projection / FileService 等外部 owner 边界。
- P1R-7f `saveBlock` source owner propagation 只覆盖一个事件切片,不能替代全部 Content 51 operations completed。
## 非目标
- 不修改 `docs/api-contracts/**/openapi.yaml`
- 不修改 `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 任何 operation 推进 `completed`
- 不把总 P1R 标记为 completed。
- 不把 P1R-7 source owner propagation evidence 当作业务域 completed 证据。
## 全域 anti-fake-green 基线
后续任一 domain completed approval 都必须继承以下硬基线。执行版不得把这些基线留给 implementer 临场决定。
### XML 防空跑
每个 domain 执行版必须列出所有 required test class并为每个 class 指定最低 `tests` 数。
最终验证必须读取对应 Surefire XML逐类断言
```text
tests > 0
failures = 0
errors = 0
skipped = 0
```
如果新增测试类、拆分测试类或修改 `-Dtest` 列表,执行版必须同步更新 XML 计数下限。不得只依赖 Maven exit 0 或 `surefire.failIfNoSpecifiedTests=false`
### Allowed diff gate
每个 domain 执行版必须列出允许修改的文件清单,并用同一个 gate 覆盖:
```bash
git -c core.quotePath=false diff --name-only
git -c core.quotePath=false diff --cached --name-only
git -c core.quotePath=false ls-files --others --exclude-standard
```
最终 `git status --short --untracked-files=all` 只能出现 allowed 路径。中文路径必须使用 `core.quotePath=false`,避免八进制转义导致误判。
### Protected diff gate
在用户明确批准真实 coverage 状态推进前,以下文件 staged 与 unstaged diff 必须为空:
```text
docs/api-contracts/account/openapi.yaml
docs/api-contracts/ai/openapi.yaml
docs/api-contracts/content/openapi.yaml
docs/api-contracts/events/openapi.yaml
docs/api-contracts/knowledge/openapi.yaml
docs/api-contracts/market/openapi.yaml
docs/api-contracts/meta/openapi.yaml
muse-cloud/scripts/p1r-audit-api-coverage.py
docs/superpowers/reports/p1r-api-coverage.json
docs/superpowers/reports/p1r-api-coverage.md
```
执行版必须内联 `git diff --quiet -- ...``git diff --cached --quiet -- ...` 命令。若某个 domain 的 completed approval 需要修改 scanner/report/gate必须先在执行版写明允许路径、修改时机和回滚策略并在用户批准后才允许真实 worktree 修改。
### Scanner 与 coverage report 时机
执行版 fresh 双 review 前,只允许在 `/tmp` 隔离副本运行 coverage scanner
```text
/tmp/p1r-<domain>-completed-approval-scan.*
```
隔离 scanner 只能用来预验证目标 summary、目标 operation/domain 状态和负向保护。真实 worktree 运行 `python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check` 并改写 `docs/superpowers/reports/**`,必须同时满足:
1. domain 执行版 fresh spec/scope review PASS。
2. domain 执行版 fresh quality/feasibility review PASS。
3. 用户明确批准该 domain 的 completed 状态推进。
4. allowed-diff gate 已把 scanner/report/test 允许路径列明。
### 真实 `_test` / 外部验收最低标准
每个 domain 审阅版必须先说明 completed 证据所需的真实运行态最低标准:
- 如果涉及新增或既有 migration必须指定真实 PostgreSQL `_test` Flyway 验证,包含目标 schema version、关键表、索引、约束、trigger 和非法 insert 拒绝。
- 如果涉及外部服务,例如 New-API、RAGFlow、FileService、对象存储或导出下载必须指定成功路径、失败路径、超时、重试或 fail-closed 边界。
- 如果外部服务暂不可用,必须把该 operation 或该切片保持 `needs_verification`,不能以 mock、bare fake、空成功或固定样例数据替代 completed 证据。
- 如果某个 domain 只能部分 operation 满足 completed 证据,执行版必须采用 operation-level approval而不是 domain-level approval。
### Implementation review 复核项
每个 domain 的 implementation review 必须复核:
- scanner approval 模型没有扩大到非目标 domain 或未来 operation。
- report 中新增 completed 的 operation 与用户批准范围完全一致。
- 非目标 domain 仍保持原状态。
- OpenAPI 与业务实现 diff 符合执行版 allowed list。
- focused tests、P1R gates、XML 防空跑、真实 `_test` 或外部验收、allowed-diff、protected diff 均有 fresh 输出。
## 后续审阅版必须包含
每个 domain 的 completed approval 审阅版都必须包含:
1. 当前 operation 清单和 coverage 状态。
2. 已有 dedicated 实现证据。
3. 已有外部或端到端证据。
4. 明确缺口:数据库、外部服务、状态机、权限、审计、失败路径、重试补偿。
5. 非目标 operation 或跨域链路。
6. 推荐 approval 粒度domain-level 或 operation-level。
7. scanner/report/gate 的修改边界。
8. protected 文件清单,必须覆盖 7 个 OpenAPI
- `docs/api-contracts/account/openapi.yaml`
- `docs/api-contracts/ai/openapi.yaml`
- `docs/api-contracts/content/openapi.yaml`
- `docs/api-contracts/events/openapi.yaml`
- `docs/api-contracts/knowledge/openapi.yaml`
- `docs/api-contracts/market/openapi.yaml`
- `docs/api-contracts/meta/openapi.yaml`
9. review gate
- fresh spec/scope review
- fresh quality/feasibility review
10. 用户批准点:执行版双 PASS 后,仍必须由用户单独批准真实 coverage 状态推进。
11. 本文“全域 anti-fake-green 基线”的继承方式;如需例外,必须在审阅版列出理由和替代验证。
## 验收标准
本总审阅版可以视为完成的条件:
1. 文件写入 `docs/agent-specs/2026-06-10-P1RRemainingDomainCompletedApproval审阅版.md`
2. `.agent` 记录下一阶段状态。
3. `git diff --check` 通过。
4. OpenAPI、scanner、coverage report 无 diff。
5. 文档只定义总路线,不进入执行版或实现。
## 待确认项
1. 是否确认下一阶段正式命名为 `P1R Remaining Domain Completed Approval`
2. 是否确认推荐顺序为 `Meta -> Account -> Market -> Content`
3. 是否确认下一步先写 Meta completed approval 审阅版,而不是直接进入执行版或实现。
4. 是否确认每个 domain 的 completed 状态推进仍需要单独用户批准。