# P1R Account Completed Approval 执行版 > **For agentic workers:** REQUIRED SUB-SKILL: Use `superpowers:subagent-driven-development` to implement this plan task-by-task after the explicit approval gate. Steps use checkbox syntax for tracking. 日期:2026-06-11 ## 结论 本执行版推荐第一轮只做 Account operation-level completed approval,不做 Account domain-level 33/33 completed。 第一轮推荐审批 10 个 Account 本域闭合较强的 operation: ```text account:getCurrentUser account:getProfile account:updateProfile account:adminListAccountUsers account:adminGetUserEntitlements account:getAppEntitlements account:adminGetBalanceSnapshots account:getAppBalanceSnapshots account:adminCreateQuotaAdjustment account:adminListQuotaAdjustments ``` 审批后目标 coverage summary 为: ```text total=233 completed=127 needsVerification=106 incomplete=0 genericPersistence=0 ssePlaceholder=0 ``` Account 域目标状态为: ```text account total=33 completed=10 needsVerification=23 ``` 本执行版只定义实现前置批准项、允许变更范围、TDD 顺序、验证命令、XML 防空跑和回滚策略。当前不得直接实现,不得修改 OpenAPI、scanner、coverage report、业务实现或 gate test。 ```mermaid flowchart TB Current["当前 Account
33 dedicated / needs_verification"] --> Exec["执行版
锁定第一批 10 个 operation"] Exec --> Review["fresh execution spec/scope review
fresh execution quality/feasibility review"] Review --> Approval{"用户明确批准 4 项
operation list / operation-level / allowed diff / legacy gates"} Approval -->|否| Stay["保持当前 coverage
233/117/116"] Approval -->|是| Red["TDD RED
先改 Account/Coverage gates
旧 report 必须失败"] Red --> Green["TDD GREEN
scanner operation allowlist + regenerate report"] Green --> Verify["focused + P1R mixed + Flyway _test
XML 防空跑 + protected diff"] Verify --> FreshReview["fresh implementation review"] ``` ## 当前事实 正确 worktree: ```text /Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0 ``` 当前 HEAD: ```text df26bd9 test(p1r): 收口 Meta remaining 5 completed approval 门禁 ``` 当前 coverage summary: ```text 233 117 116 0 0 0 ``` 当前 Account 事实: - Account 33 个 operation 全部为 `dedicated / needs_verification`。 - `APPROVED_COMPLETED_DOMAINS` 当前只包含 `ai`、`knowledge`。 - `APPROVED_COMPLETED_OPERATIONS` 当前只包含 `events:streamEvents` 与 Meta 16 个 operation。 - `P1rAccountRealApiGateTest` 当前明确禁止 Account operation 标记为 `completed`。 - `P1rApiCoverageReportTest` 当前断言 summary `completed=117`,并断言 Account 33 个 operation 继续 `needs_verification`。 - `P1rEventsRealApiGateTest`、`P1rAiRealApiGateTest`、`P1rKnowledgeRealApiGateTest`、`P1rMarketRealApiGateTest` 仍硬编码当前 summary 或 Account needs_verification 口径;实现前必须把这些 legacy mixed gate 同步列入单独批准项。 ## 执行边界 ### 必须先获用户明确批准 实现前必须同时获得以下 4 项批准: 1. 批准第一轮 Account completed operation 精确清单为本执行版列出的 10 个 operation。 2. 批准只走 operation-level approval,不把 `account` 加入 domain-level completed allowlist。 3. 批准按本执行版修改 scanner、coverage report、Account/Coverage gate、必要的 legacy mixed gate 和 memory。 4. 批准同步 4 个 legacy mixed gate 文件的 summary / Account 状态断言: - `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` 未获 4 项批准前,不得实施本执行版。 ### 本轮允许变更 获批后只允许修改以下路径: - `muse-cloud/scripts/p1r-audit-api-coverage.py` - `docs/superpowers/reports/p1r-api-coverage.json` - `docs/superpowers/reports/p1r-api-coverage.md` - `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/P1rAccountRealApiGateTest.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` - `muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAccountEventsPublishFlywayMigrationIT.java`,仅当需要扩展 V11 Account 表/索引/约束 fresh assertion 时允许修改。 - `docs/agent-specs/.agent` - `docs/agent-specs/2026-06-11-P1RAccountCompletedApproval审阅版.md` - `docs/agent-specs/2026-06-11-P1RAccountCompletedApproval执行版.md` - `docs/memorys/2026-06-11-P1RAccount状态推进.md` 如 implementation 发现必须修改 Account 业务实现、OpenAPI、Content/Market/Meta gate、数据库迁移或其它文件,必须停下说明原因并重新取得用户批准。 ### 本轮禁止变更 - 不修改 7 个 OpenAPI。 - 不修改 Account 业务实现来掩盖 coverage 缺口。 - 不新增或修改 Account domain-level completed allowlist。 - 不推进 `getAppUsage`、`adminListUsageRecords`。 - 不推进 New-API、FileService/download、call attribution external source、Market projection、安全事件生产路径相关 operation。 - 不推进 Market、Content 或总 P1R completed。 ## 第一轮审批清单 | operation key | Method | Path | 目标状态 | 完成证据边界 | |---|---|---|---|---| | `account:getCurrentUser` | `GET` | `/app-api/muse/me` | `dedicated / completed` | App 当前登录用户 owner、Member user + Account profile 读模型、缺 profile fallback、无写入副作用 | | `account:getProfile` | `GET` | `/app-api/muse/profile` | `dedicated / completed` | App 当前登录用户 owner、Profile 读模型、缺 profile fallback、敏感联系字段不泄露 | | `account:updateProfile` | `PATCH` | `/app-api/muse/profile` | `dedicated / completed` | `X-API-Version`、`X-Command-Id`、command replay、expectedVersion、审计、profile optimistic update | | `account:adminListAccountUsers` | `GET` | `/admin-api/muse/account/users` | `dedicated / completed` | 管理端权限、分页、用户查询、Account DTO 转换 | | `account:adminGetUserEntitlements` | `GET` | `/admin-api/muse/account/users/{userId}/entitlements` | `dedicated / completed` | 管理端权限、指定 userId、entitlement + balance 本域读模型 | | `account:getAppEntitlements` | `GET` | `/app-api/muse/account/entitlements` | `dedicated / completed` | App 当前 owner、entitlement + balance 本域读模型 | | `account:adminGetBalanceSnapshots` | `GET` | `/admin-api/muse/account/users/{userId}/balance-snapshots` | `dedicated / completed` | 管理端权限、指定 userId、balance snapshot 分页 | | `account:getAppBalanceSnapshots` | `GET` | `/app-api/muse/account/balance-snapshots` | `dedicated / completed` | App 当前 owner、balance snapshot 分页 | | `account:adminCreateQuotaAdjustment` | `POST` | `/admin-api/muse/account/users/{userId}/quota-adjustments` | `dedicated / completed` | 管理端权限、`X-Command-Id`、quota guard、command replay、entitlement audit log、Account outbox、P1R-7e Events publish 证据 | | `account:adminListQuotaAdjustments` | `GET` | `/admin-api/muse/account/users/{userId}/quota-adjustments` | `dedicated / completed` | 同一 quota ledger 读侧、changeType allowlist、分页、非法 source filter 拒绝 | ## 保持 needs_verification 的 Account operation 以下 23 个 operation 必须保持 `dedicated / needs_verification`: ```text account:adminCreateCallAttributionJob account:adminGetCallAttributionJob account:adminGetIntegrationCallByCorrelation account:adminListNewApiBindings account:adminListPurchaseRecords account:adminListUsageRecords account:adminCreateNewApiBinding account:adminCreateQuotaRequest account:appDownloadExport account:appCreateExportTask account:appGetExportTask account:appGetIntegrationCallByCorrelation account:appListLicenses account:getAppNewApiBinding account:appRecheckNewApiBinding account:appListPublishRecords account:appListPurchases account:appCreateQuotaRequest account:appGetQuotaRequest account:appListSecurityEvents account:appGetSecurityEvent account:appAcknowledgeSecurityEvent account:getAppUsage ``` 其中 `getAppUsage` 与 `adminListUsageRecords` 虽有 dedicated 实现和 focused tests,但仍依赖 `muse_account_integration_call` / attribution source 的上游事实质量;本轮先不把 usage 读模型算作 completed,避免绕过 New-API / attribution runtime 缺口。 ## 证据矩阵 | 证据类型 | 必跑或必查内容 | 目的 | |---|---|---| | Account focused tests | Profile、Entitlement、Quota、Audit、Command、Guard、Controller tests | 证明 10 个 operation 的本域读写、owner、权限、审计、幂等、失败路径 | | P1R Account gates | `P1rAccountRealApiGateTest`、`P1rApiCoverageReportTest` | 证明 only 10 Account operation completed,23 个继续 needs_verification | | P1R mixed gates | Events、AI、Knowledge、Market、Content、Meta、Account、Coverage gates | 防止非目标 domain 被连带推进 | | Flyway `_test` | `P1rAccountEventsPublishFlywayMigrationIT` fresh rerun,必要时扩展 V11 assertion | 证明 V1-V20 clean migrate 和 Account V11/V20 schema 可执行 | | Coverage scanner | `python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check` | 证明 scanner/report 与 allowlist 口径一致 | | XML 防空跑 | 逐个读取 surefire XML,检查 tests、failures、errors、skipped | 防止 Maven 未跑目标类或旧 XML 假绿 | | Protected diff | OpenAPI staged/unstaged diff 必须为空 | 证明没有通过改合同掩盖缺口 | | Allowed diff | staged、unstaged、untracked 均必须落在允许清单 | 证明没有顺手扩大 scope | ## TDD 执行步骤 ### Task 0:实现前现场确认 - [ ] 确认 worktree: ```bash pwd git -c core.quotePath=false status --short --branch git log --oneline -5 jq -r '.summary | [.totalOperations,.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json ``` 预期: ```text /Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0 233 117 116 0 0 0 ``` - [ ] 确认 Account 33 个 operation 仍全部是 `dedicated / needs_verification`: ```bash jq -r '.operations[] | select(.domain=="account") | [.operationId,.implementationStatus,.completionStatus] | @tsv' docs/superpowers/reports/p1r-api-coverage.json ``` - [ ] 确认 OpenAPI 与业务实现未在实施前有相关 diff: ```bash git diff -- docs/api-contracts git diff -- muse-cloud/muse-module-member/muse-module-member-server/src/main/java/cn/iocoder/muse/module/member ``` ### Task 1:TDD RED,先改 gate 期望 获批后先修改: - `P1rApiCoverageReportTest.java` - `P1rAccountRealApiGateTest.java` - 必要的 4 个 legacy mixed gate RED 期望: - `P1rApiCoverageReportTest` 期望 completed `127`,但旧 report 仍是 `117`,必须失败。 - `P1rAccountRealApiGateTest` 期望 10 个 Account operation 为 `completed`,但旧 report 仍是 `needs_verification`,必须失败。 - 4 个 legacy mixed gate 期望 `completed=127`、`needsVerification=106`、Account `completed=10`、Account `needsVerification=23`,旧 report 下必须失败。 运行: ```bash cd muse-cloud JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \ mvn -o test -pl muse-server -am \ -Dtest=P1rApiCoverageReportTest,P1rAccountRealApiGateTest,P1rEventsRealApiGateTest,P1rAiRealApiGateTest,P1rKnowledgeRealApiGateTest,P1rMarketRealApiGateTest \ -Dsurefire.failIfNoSpecifiedTests=false ``` 预期:至少一个失败点来自旧 report 的 `117/116` 或 Account 10 个 operation 尚未 completed。若直接通过,必须停下排查假绿。 ### Task 2:TDD GREEN,最小 scanner/report 状态推进 只修改 `muse-cloud/scripts/p1r-audit-api-coverage.py`: - 不修改 `APPROVED_COMPLETED_DOMAINS`。 - 只向 `APPROVED_COMPLETED_OPERATIONS` 追加 10 个 `account:*` operation key。 - 保持 completed 必须仍是 `dedicated` 的校验。 生成 report: ```bash python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check ``` 预期 summary: ```text total=233 completed=127 needsVerification=106 incomplete=0 genericPersistence=0 ssePlaceholder=0 ``` 预期 Account: ```text completed=10 needsVerification=23 ``` ### Task 3:Account focused verification 运行 Account 本域 focused tests: ```bash cd muse-cloud JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \ mvn -o test -pl muse-module-member/muse-module-member-server,muse-server -am \ -Dtest=AccountProfileServiceTest,AccountEntitlementServiceTest,AccountQuotaServiceTest,AccountAuditServiceTest,AccountCommandServiceTest,AccountOwnerGuardTest,AccountApiVersionGuardTest,AccountQuotaGuardTest,AdminAccountUserControllerTest,AppAccountProfileControllerTest,AppAccountEntitlementControllerTest,P1rAccountEventsPublishMigrationSqlTest,P1rAccountEventsPublishDependencyTest,P1rAccountEventsPublishEndToEndTest,P1rAccountRealApiGateTest,P1rApiCoverageReportTest \ -Dsurefire.failIfNoSpecifiedTests=false ``` 必须读取以下 XML 并检查 `failures=0`、`errors=0`、`skipped=0`: | Test class | 最低 tests | |---|---:| | `AccountProfileServiceTest` | 19 | | `AccountEntitlementServiceTest` | 8 | | `AccountQuotaServiceTest` | 17 | | `AccountAuditServiceTest` | 7 | | `AccountCommandServiceTest` | 15 | | `AccountOwnerGuardTest` | 3 | | `AccountApiVersionGuardTest` | 3 | | `AccountQuotaGuardTest` | 4 | | `AdminAccountUserControllerTest` | 22 | | `AppAccountProfileControllerTest` | 7 | | `AppAccountEntitlementControllerTest` | 9 | | `P1rAccountEventsPublishMigrationSqlTest` | 3 | | `P1rAccountEventsPublishDependencyTest` | 2 | | `P1rAccountEventsPublishEndToEndTest` | 4 | | `P1rAccountRealApiGateTest` | 4 | | `P1rApiCoverageReportTest` | 6 | 如实现修改了 Account gate 测试数量,XML 检查的最低 tests 可高于上表,但不能低于上表。 ### Task 4:真实 PostgreSQL `_test` Flyway gate fresh rerun `P1rAccountEventsPublishFlywayMigrationIT`。使用独立 `_test` 库,不能使用生产库或非 `_test` 库: ```bash source ~/.config/muse-repo/infra.env export P1R_FLYWAY_PASSWORD="$MUSE_POSTGRES_PASSWORD" export P1R_ACCOUNT_TEST_DB=muse_p1r_account_completed_approval_test psql "postgresql://$MUSE_POSTGRES_USERNAME:$MUSE_POSTGRES_PASSWORD@$MUSE_POSTGRES_HOST:$MUSE_POSTGRES_PORT/postgres" \ -tc "SELECT 1 FROM pg_database WHERE datname = '$P1R_ACCOUNT_TEST_DB'" | grep -q 1 || \ psql "postgresql://$MUSE_POSTGRES_USERNAME:$MUSE_POSTGRES_PASSWORD@$MUSE_POSTGRES_HOST:$MUSE_POSTGRES_PORT/postgres" \ -c "CREATE DATABASE $P1R_ACCOUNT_TEST_DB" cd muse-cloud JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \ mvn -o test -pl muse-server -am \ -Dtest=P1rAccountEventsPublishFlywayMigrationIT \ -Dflyway.postgresql.transactional.lock=false \ -Dp1r.flyway.locations=filesystem:sql/muse \ -Dp1r.flyway.url="jdbc:postgresql://$MUSE_POSTGRES_HOST:$MUSE_POSTGRES_PORT/$P1R_ACCOUNT_TEST_DB" \ -Dp1r.flyway.user="$MUSE_POSTGRES_USERNAME" \ -Djava.net.useSystemProxies=false \ -DsocksProxyHost= -DsocksProxyPort= \ -Dhttp.proxyHost= -Dhttp.proxyPort= \ -Dhttps.proxyHost= -Dhttps.proxyPort= \ -Dsurefire.failIfNoSpecifiedTests=false ``` 必须检查 XML: | Test class | 最低 tests | |---|---:| | `P1rAccountEventsPublishFlywayMigrationIT` | 4 | 如果 reviewer 认为 V11 Account schema 对本轮 10 个 operation 的 evidence 不足,允许在该 IT 内补充 V11 表、索引、约束 assertion,但不得新增迁移或修改业务实现。 ### Task 5:P1R mixed gate 运行 mixed gates: ```bash cd muse-cloud JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \ mvn -o test -pl muse-server -am \ -Dtest=P1rApiCoverageReportTest,P1rAccountRealApiGateTest,P1rEventsRealApiGateTest,P1rAiRealApiGateTest,P1rKnowledgeRealApiGateTest,P1rMarketRealApiGateTest,P1rContentRealApiGateTest,P1rMetaRealApiGateTest \ -Dsurefire.failIfNoSpecifiedTests=false ``` 必须读取以下 XML: | Test class | 最低 tests | |---|---:| | `P1rApiCoverageReportTest` | 6 | | `P1rAccountRealApiGateTest` | 4 | | `P1rEventsRealApiGateTest` | 5 | | `P1rAiRealApiGateTest` | 7 | | `P1rKnowledgeRealApiGateTest` | 8 | | `P1rMarketRealApiGateTest` | 6 | | `P1rContentRealApiGateTest` | 5 | | `P1rMetaRealApiGateTest` | 4 | 每个 XML 均必须 `failures=0`、`errors=0`、`skipped=0`。 ### Task 6:报告与 diff gate 检查 summary: ```bash jq -r '.summary | [.totalOperations,.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json ``` 预期: ```text 233 127 106 0 0 0 ``` 检查 Account 10/23: ```bash python3 - <<'PY' import json from collections import Counter from pathlib import Path data = json.loads(Path("docs/superpowers/reports/p1r-api-coverage.json").read_text()) counter = Counter(op["completionStatus"] for op in data["operations"] if op["domain"] == "account") print(counter) PY ``` 预期: ```text Counter({'needs_verification': 23, 'completed': 10}) ``` 检查 OpenAPI protected diff: ```bash git diff --quiet -- docs/api-contracts git diff --cached --quiet -- docs/api-contracts ``` 检查 business implementation 不被修改: ```bash git diff --quiet -- muse-cloud/muse-module-member/muse-module-member-server/src/main/java git diff --cached --quiet -- muse-cloud/muse-module-member/muse-module-member-server/src/main/java ``` 检查 whitespace: ```bash git diff --check ``` 检查 allowed diff: ```bash git -c core.quotePath=false status --short ``` 输出只能包含本执行版允许路径。若出现 OpenAPI、业务实现、迁移或非批准 gate 文件,必须停止。 ### Task 7:memory 与 `.agent` 实现通过后新增: - `docs/memorys/2026-06-11-P1RAccount状态推进.md` 内容必须记录: - 批准的 10 个 Account operation。 - 保持 `needs_verification` 的 23 个 Account operation 及原因。 - scanner/report/gate 修改范围。 - 所有验证命令、结果、XML 计数、Flyway `_test` 库名。 - protected diff 与 allowed diff 结果。 - 明确说明不代表 Account 33/33 completed,不代表 Market/Content/总 P1R completed。 同时更新 `docs/agent-specs/.agent`,但只能记录事实,不写未验证结论。 ### Task 8:fresh implementation review 实现、验证和文档留痕后,必须派发两类 fresh reviewer: - spec/correctness reviewer:检查 10 个 operation 是否严格匹配本执行版,23 个 operation 是否仍 needs_verification,Account domain allowlist 是否未新增。 - quality/data-integrity/testing reviewer:检查 scanner/report/gate、XML 防空跑、Flyway `_test`、protected diff、allowed diff、rollback 是否可靠。 双 PASS 前不得提交、push 或宣称 Account completed approval 已收口。 ## 回滚策略 如实现后需要撤回: 1. 从 `APPROVED_COMPLETED_OPERATIONS` 移除 10 个 `account:*` key。 2. 重新运行: ```bash python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check ``` 3. 恢复 gate 期望: ```text summary completed=117 summary needsVerification=116 account completed=0 account needsVerification=33 ``` 4. 删除或修订本轮 memory,保留失败原因。 5. 重新运行 Account/P1R focused gates 和 `git diff --check`。 ## 验收标准 执行版本身可以进入实现前批准点的条件: 1. 本文件已写入 `docs/agent-specs/2026-06-11-P1RAccountCompletedApproval执行版.md`。 2. `.agent` 记录执行版当前状态。 3. `git diff --check` 通过。 4. OpenAPI、scanner、coverage report、业务实现当前无新增 diff。 5. fresh execution spec/scope review PASS。 6. fresh execution quality/feasibility review PASS。 实现完成条件必须等用户批准后另行满足,不由本执行版写入自动成立。