# P1R Account Remaining 21 解锁审阅版 日期:2026-06-14 ## 结论 不建议继续把 Account 剩余 21 个 `dedicated / needs_verification` operation 当作“只补 approval 证据”的任务推进。 当前剩余 21 个 operation 已经不是简单缺 HTTP+DB `_test` 或 mixed gate 的问题,而是集中落在五类真实闭环缺口: - New-API runtime / quota request / integration correlation。 - FileService / export task / download bytes。 - call attribution source / usage source fact。 - Market purchase / license / publish projection。 - security event acknowledge 的 session revoke 合同。 推荐把下一阶段定义为: ```text P1R Account Remaining 21 Unlock ``` 该阶段应先补真实 owner 边界、外部 runtime 或明确可验收替代合同,再回到 operation-level completed approval。不得用 dedicated controller、unit test、fail-closed 行为或文档结论直接把剩余 21 个 operation 推进 `completed`。 ```mermaid flowchart TB Current["当前 Account
12 completed / 21 needs_verification"] --> Split["剩余 21 分组"] Split --> NewApi["New-API / quota / integration
9 ops"] Split --> Export["FileService / export / download
3 ops"] Split --> Usage["usage / attribution
4 ops"] Split --> Market["Market projection
4 ops"] Split --> Security["security ack / session revoke
1 op"] NewApi --> Unlock["先补真实闭环或验收替代"] Export --> Unlock Usage --> Unlock Market --> Unlock Security --> Unlock Unlock --> Approval["再写切片执行版 + fresh 双 review
用户批准后才改 coverage"] ``` ## 当前事实状态 工作区: ```text /Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0 ``` 当前 HEAD: ```text 3a27e7e test(p1r): 收口 Account Security Events completed approval 门禁 ``` 当前 coverage summary: ```text 233 147 86 0 0 0 ``` 当前按 domain 聚合: ```text account total=33 completed=12 needsVerification=21 ai total=41 completed=41 needsVerification=0 content total=51 completed=14 needsVerification=37 events total=1 completed=1 needsVerification=0 knowledge total=59 completed=59 needsVerification=0 market total=32 completed=4 needsVerification=28 meta total=16 completed=16 needsVerification=0 ``` Account 已 completed 的 12 个 operation: ```text account:getCurrentUser account:getProfile account:updateProfile account:adminListAccountUsers account:adminGetUserEntitlements account:getAppEntitlements account:adminGetBalanceSnapshots account:getAppBalanceSnapshots account:adminCreateQuotaAdjustment account:adminListQuotaAdjustments account:appListSecurityEvents account:appGetSecurityEvent ``` Account 剩余 21 个 operation: ```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:appAcknowledgeSecurityEvent account:getAppUsage ``` ## 非目标 本审阅版不做以下事情: - 不修改 OpenAPI。 - 不修改 scanner 或 coverage report。 - 不修改 Account 业务实现、SQL migration 或测试代码。 - 不把 Account 加入 domain-level completed allowlist。 - 不推进 Account 33/33 completed。 - 不推进 Market、Content 或总 P1R completed。 - 不把 fail-closed、dedicated gate PASS、unit test PASS 或历史 review PASS 当作 completed 证据。 ## 剩余 21 分组与阻塞 ### 1. New-API / quota request / integration correlation 覆盖 9 个 operation: ```text account:adminListNewApiBindings account:adminCreateNewApiBinding account:getAppNewApiBinding account:appRecheckNewApiBinding account:adminCreateQuotaRequest account:appCreateQuotaRequest account:appGetQuotaRequest account:adminGetIntegrationCallByCorrelation account:appGetIntegrationCallByCorrelation ``` 已验证事实: - `AccountNewApiBindingServiceImpl` 使用 `NewApiAccountFacade` 作为外部 New-API 边界。 - 默认 `UnavailableNewApiAccountFacade` fail-closed,不能伪造 binding / recheck 成功。 - create/recheck 路径已有 command、requestHash、integration call、success/unavailable 事实。 - `AccountQuotaServiceImpl` 的 quota request create 会写 `muse_account_quota_request` 与 `muse_account_integration_call`,状态为 `queued` / `pending_attribution`。 阻塞点: - 没有真实 New-API runtime 或可验收替代 runtime 证明 binding / recheck / quota request 的成功闭环。 - quota request 目前只是 queued fact,不等于额度配置、订阅同步或余额同步完成。 - integration correlation 读侧依赖上述 integration call 事实质量;不能脱离 create/recheck/quota request 闭环单独 completed。 推荐解锁条件: - 定义并实现真实 New-API Account facade,或写明可验收替代 runtime。 - 覆盖 success、unavailable、timeout、retry、idempotent replay、correlation 查询、owner/tenant 隔离。 - 对 admin/app integration detail 做敏感字段 allowlist 与 no-write HTTP+DB `_test`。 ### 2. FileService / export / download 覆盖 3 个 operation: ```text account:appCreateExportTask account:appGetExportTask account:appDownloadExport ``` 已验证事实: - `AccountExportServiceImpl` 通过 `AccountFileServiceFacade` 调用文件 owner。 - 默认 FileService 不可用时 create export 只返回 queued 或 fail-closed。 - download 路径要求 credential hash、一次性消费、task completed、fileRef 和真实 bytes。 - 高敏 `usage` / `security_events` export 因缺 step-up proof 会 fail-closed。 阻塞点: - 没有真实 FileService / 对象存储 / 文件字节下载闭环。 - create task queued 不等于 export completed。 - appDownloadExport 不能用 mock bytes 或空 bytes 当 completed。 - step-up proof 仍未形成可信服务端合同。 推荐解锁条件: - 接入真实 FileService facade 或可验收替代文件 runtime。 - HTTP+DB `_test` 覆盖 task create、completed detail、credential 可见性、credential 一次性消费、download bytes、audit、过期/撤销/并发消费失败。 - 明确高敏 export 的 step-up proof 来源;否则高敏类型继续保持 fail-closed 与 needs_verification。 ### 3. usage / call attribution 覆盖 4 个 operation: ```text account:adminListUsageRecords account:getAppUsage account:adminCreateCallAttributionJob account:adminGetCallAttributionJob ``` 已验证事实: - `AccountUsageServiceImpl` 从 `MemberUsageRecordMapper` 和 `AccountIntegrationCallMapper` 聚合 usage / attribution 状态。 - `AccountAttributionServiceImpl.adminCreateCallAttributionJob` 当前只创建 queued job fact。 - 真实归因 source 由 `AccountAttributionSourceFacade` 代表,当前没有 completed-grade source owner 证据。 阻塞点: - usage record 的上游来源、归因状态、token 计量与 attribution source 没有形成端到端事实链。 - create attribution job 只是排队,真实归因执行、terminal transition、补偿建议和 item result 还不能证明。 - adminGetCallAttributionJob 读侧依赖 job/item terminal fact 质量,不能只凭 detail mapper completed。 推荐解锁条件: - 明确 usage source owner:AI/Content/Market/New-API 调用如何写入 `MemberUsageRecordDO`。 - 建立 attribution job worker 或明确同步归因替代路径。 - HTTP+DB `_test` 覆盖 queued、processing、completed、failed、partially_completed、revision conflict、call whitelist、owner/tenant 隔离和 no-write detail。 ### 4. Market purchase / license / publish projection 覆盖 4 个 operation: ```text account:adminListPurchaseRecords account:appListPurchases account:appListLicenses account:appListPublishRecords ``` 已验证事实: - `AccountMarketRecordServiceImpl` 通过 `MarketAccountProjectionFacade.requireProjectionAvailable(recordType)` 检查 Market 投影是否可用。 - 读侧使用 `muse_account_record_projection`,并按 `record_type` 隔离 purchase / license / publish。 - 当前 Market 仍只有 4 个 completed,purchase / install / publish / projection 相关 Market operation 仍为 `needs_verification`。 阻塞点: - Account projection 读模型依赖 Market owner 写入投影事实。 - Market purchase/license/publish 本身尚未 completed,不能在 Account 侧单独宣称 projection completed。 - 需要证明跨 owner 一致性:Market 源事实、Account projection、用户可见记录、状态枚举和排序分页一致。 推荐解锁条件: - 先完成或至少审阅 Market purchase/install/publish/projection 的真实闭环。 - 建立 Market -> Account projection E2E `_test`:Market source fact 写入后 Account 读侧可见,跨 owner/tenant 不可见,projection stale/缺失 fail-closed。 - 在 Market 仍未 completed 前,Account 这 4 个 operation 继续保持 `needs_verification`。 ### 5. security event acknowledge / session revoke 覆盖 1 个 operation: ```text account:appAcknowledgeSecurityEvent ``` 已验证事实: - `appListSecurityEvents` 与 `appGetSecurityEvent` 已在 2026-06-13 推进 completed。 - `appAcknowledgeSecurityEvent` 仍为 `dedicated / needs_verification / requiresCommandId=true`。 - 既有审阅已确认:`session_revoked` OpenAPI 合同承诺真实 session revoke,但当前实现只返回“未接入 session 管理服务”的 fail-closed 文案。 阻塞点: - ack 写入本身不够;`session_revoked` 必须有真实 session revoke owner 或合同降级。 - 不能把 fail-closed 文案当 completed。 - 如果修改 OpenAPI 降级合同,必须单独审批;不能作为掩盖实现缺口的 scanner/report 修改。 推荐解锁条件: - 接入真实 session management / token revoke owner,或单独评审并批准 OpenAPI 合同变更。 - HTTP+DB `_test` 覆盖 commandId、ack row、replay、conflict、owner/tenant 隔离、session revoke success/fail-closed、audit/outbox/no-write rollback。 ## 推荐路线 ### 路线 A:Account unlock implementation 优先 先写 Account Remaining 21 执行版,把五类缺口拆成独立 implementation stage。每个 stage 先补真实闭环,再回到 completed approval。 优点: - 直接推进 Account 33/33 的真实完成。 - 不把缺口留给 Market / Content 后续阶段。 代价: - 会进入真实业务实现,不再只是 scanner/report/gate 的 completed approval。 - 需要用户确认外部 runtime 边界:New-API、FileService、Market projection、attribution source、session management。 ### 路线 B:暂缓 Account,继续 Market / Content 独立切片 Account 剩余 21 保持 `needs_verification`,转向 Market 或 Content 中已有较强闭环证据的 operation-level completed approval。 优点: - 可以继续增加 completed 总量。 - 避免在 Account 外部 owner 未明确时硬做实现。 代价: - 总 P1R 仍会被 Account remaining 21 阻塞。 - Market projection 最终仍会反向影响 Account 4 个 Market projection operation。 ### 推荐选择 推荐路线 A,但先只写 Account Remaining 21 执行版,不直接实现。执行版应先明确: 1. 哪些 runtime 由现有模块 owner 承担。 2. 哪些 facade 允许接入真实实现,哪些只能保持 fail-closed。 3. 哪些 OpenAPI 合同需要修订,哪些必须坚持实现兑现。 4. 每个 stage 的 HTTP+DB `_test`、focused test、P1R gate、XML 防空跑、protected diff。 5. 哪些 operation 可以在 stage 完成后进入 operation-level completed approval。 ## Fresh 审阅结果 本审阅版已完成 fresh 双 review: - Spec/scope review:PASS,无 P0/P1/P2 阻塞。 - Feasibility/testing review:PASS,无 P0/P1 阻塞。 审阅结论确认本审阅版可以进入执行版编写,但不代表 Account remaining 21 已完成,也不授权实现、提交或推进 coverage。 执行版必须吸收以下 reviewer 约束: 1. New-API 与 attribution 的真实 facade wiring 不能停留在“接入真实 facade”一句话;必须明确 `Unavailable*Facade` 默认实现与真实实现的 bean 选择策略,例如 `@Primary`、`@ConditionalOnMissingBean`、profile 排除或自动配置拆分,避免多 bean 冲突或继续选中 fail-closed 默认实现。 2. `adminCreateQuotaRequest`、`appCreateQuotaRequest`、`adminCreateCallAttributionJob` 等写命令必须明确 command、audit、job/outbox 的边界;若某 stage 不需要 outbox,也必须写明“不需要”的原因和验证方式。 3. export/download stage 必须把 `muse.account.download-credential-secret` 作为 completed 前置校验;FileService completed 证据必须包含 `fileRef`、过期时间、credential secret 与非空 bytes。 4. 新增 HTTP+DB `_test` 必须以 V1-V21 clean migrate 为基线;历史 V20 Account outbox 证据只能作为既有迁移回归,不能替代新 stage 主证据。 5. Market projection stage 必须独立覆盖 source fact、Account projection、stale/missing projection fail-closed、read-only no-write snapshot 与 owner/tenant 隔离。 6. rollback 不能只写 scanner/report 回滚;真实 unlock stage 必须包含 runtime switch、facade fallback 或配置级回退策略。 ## 验收标准 本审阅版自身的验收标准: - 文件写入 `docs/agent-specs/2026-06-14-P1RAccountRemaining21解锁审阅版.md`。 - 不产生 scanner/report/OpenAPI/业务实现 diff。 - 明确 Account remaining 21 的分组、阻塞、解锁条件和推荐路线。 - 不宣称任何新增 operation completed。 后续执行版的最低验收标准: - fresh spec/scope review PASS。 - fresh quality/feasibility/testing review PASS。 - 用户明确批准 execution scope 后才允许实现。 - 每个 implementation stage 都必须有真实 HTTP+DB `_test`、focused tests、P1R mixed gates、XML 防空跑、protected diff 和 rollback 策略。 ## 待确认 1. 是否确认下一阶段命名为 `P1R Account Remaining 21 Unlock`。 2. 是否确认路线 A:先写 Account Remaining 21 执行版,进入真实闭环解锁,而不是继续做纯 approval。 3. 是否确认外部 owner 边界优先级:New-API、FileService、Market projection、attribution source、session management。