oh-my-muse/docs/agent-specs/2026-06-11-P1RMarketCompletedApproval审阅版.md
zizi 00327749a2 test(p1r): 收口 Market 第一批 completed approval 门禁
只推进 Market 4 个 operation-level completed approval,保持 market domain-level allowlist 关闭,并保留剩余 28 个 Market operation 为 needs_verification。
2026-06-11 18:56:54 +08:00

19 KiB
Raw Blame History

P1R Market Completed Approval 审阅版

日期2026-06-11

结论

不建议把 Market 32 个 operation 一次性整域推进 completed

推荐把 Market Completed Approval 拆成 operation-level 或证据切片推进。第一候选是 Marketplace 浏览/收藏切片,但它还不能直接进入实现:favoriteAsset / unfavoriteAsset 的实现要求 X-Command-Id,而当前 OpenAPI 与 coverage report 仍显示这两个 operation requiresCommandId=false。这是合同不一致,必须在执行版中单独审批修正或把首批降级为纯读 operation。

本审阅版只冻结 Market completed approval 的范围判断、证据缺口、推荐审批粒度和后续执行版要求。不修改 OpenAPI不修改 scanner不修改 coverage report不修改业务实现也不把 Market 或其它 domain 推进 completed

flowchart TB
    Start["当前 coverage<br/>Market 32 dedicated / needs_verification"] --> Review["Market completed approval 审阅版<br/>冻结证据标准"]
    Review --> Split{"是否整域 32/32 completed?"}
    Split -->|否,推荐| Slice["按证据切片 operation-level approval"]
    Split -->|是,不推荐| Domain["domain-level approval<br/>需购买/安装/handoff/发布/治理/申诉全闭环"]
    Slice --> Candidate["第一候选<br/>Marketplace 浏览/收藏"]
    Candidate --> Contract{"favorite/unfavorite 合同一致?"}
    Contract -->|否| ReadOnly["降级为纯读候选<br/>或先审批 OpenAPI 合同修正"]
    Contract -->|是| Exec["执行版<br/>列出 operation、allowed diff、fresh 验证"]
    Exec --> FreshReview["fresh spec/scope review<br/>fresh quality/feasibility review"]
    FreshReview --> UserApproval{"用户明确批准<br/>Market 状态推进?"}
    UserApproval -->|否| Stay["保持 Market 32 needs_verification"]
    UserApproval -->|是| Change["最小修改 scanner/report/gates<br/>运行 focused + P1R + _test + XML 防空跑"]

当前事实状态

工作区:

/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0

当前分支与远端同步HEAD 为:

f18116a test(p1r): 收口 Account 第一批 completed approval 门禁

当前 coverage summary

total=233
completed=127
needsVerification=106
incomplete=0
genericPersistence=0
ssePlaceholder=0

当前按 domain 聚合:

account   total=33 completed=10 needsVerification=23
ai        total=41 completed=41 needsVerification=0
content   total=51 completed=0  needsVerification=51
events    total=1  completed=1  needsVerification=0
knowledge total=59 completed=59 needsVerification=0
market    total=32 completed=0  needsVerification=32
meta      total=16 completed=16 needsVerification=0

Market 32 个 operation 当前全部为 dedicated / needs_verification

operationId Method Path 当前状态
adminListAppeals GET /admin-api/muse/market/appeals dedicated / needs_verification
adminGetAppeal GET /admin-api/muse/market/appeals/{appealId} dedicated / needs_verification
adminResolveAppeal POST /admin-api/muse/market/appeals/{appealId}/resolve dedicated / needs_verification
adminListMarketAssets GET /admin-api/muse/market/assets dedicated / needs_verification
adminGetMarketAsset GET /admin-api/muse/market/assets/{assetId} dedicated / needs_verification
adminDelistAsset POST /admin-api/muse/market/assets/{assetId}/delist dedicated / needs_verification
adminPreviewGovernanceImpact POST /admin-api/muse/market/assets/{assetId}/governance-impact dedicated / needs_verification
adminRecallAsset POST /admin-api/muse/market/assets/{assetId}/recall dedicated / needs_verification
adminListPublishRequests GET /admin-api/muse/market/publish-requests dedicated / needs_verification
adminApprovePublishRequest POST /admin-api/muse/market/publish-requests/{requestId}/approve dedicated / needs_verification
adminRejectPublishRequest POST /admin-api/muse/market/publish-requests/{requestId}/reject dedicated / needs_verification
submitAppeal POST /app-api/muse/marketplace/appeals dedicated / needs_verification
supplementAppeal POST /app-api/muse/marketplace/appeals/{appealId}/supplements dedicated / needs_verification
withdrawAppeal POST /app-api/muse/marketplace/appeals/{appealId}/withdraw dedicated / needs_verification
listMarketplaceAssets GET /app-api/muse/marketplace/assets dedicated / needs_verification
getMarketplaceAsset GET /app-api/muse/marketplace/assets/{assetId} dedicated / needs_verification
createBindPrecheck POST /app-api/muse/marketplace/assets/{assetId}/bind-precheck dedicated / needs_verification
unfavoriteAsset DELETE /app-api/muse/marketplace/assets/{assetId}/favorite dedicated / needs_verification
favoriteAsset POST /app-api/muse/marketplace/assets/{assetId}/favorite dedicated / needs_verification
getGovernanceImpact GET /app-api/muse/marketplace/assets/{assetId}/governance-impact dedicated / needs_verification
installMarketplaceAsset POST /app-api/muse/marketplace/assets/{assetId}/install dedicated / needs_verification
purchaseAsset POST /app-api/muse/marketplace/assets/{assetId}/purchase dedicated / needs_verification
listMarketplaceCategories GET /app-api/muse/marketplace/categories dedicated / needs_verification
createMarketplaceHandoff POST /app-api/muse/marketplace/handoffs dedicated / needs_verification
getHandoffStatus GET /app-api/muse/marketplace/handoffs/{handoffToken} dedicated / needs_verification
cancelHandoff POST /app-api/muse/marketplace/handoffs/{handoffToken}/cancel dedicated / needs_verification
listMyPublishRecords GET /app-api/muse/marketplace/my-publish-records dedicated / needs_verification
savePublishDraft POST /app-api/muse/marketplace/publish-drafts dedicated / needs_verification
runPublishCheck POST /app-api/muse/marketplace/publish-drafts/{draftId}/checks dedicated / needs_verification
submitPublishRequest POST /app-api/muse/marketplace/publish-requests dedicated / needs_verification
withdrawPublishRequest POST /app-api/muse/marketplace/publish-requests/{requestId}/withdraw dedicated / needs_verification
listMarketplaceRecommendations GET /app-api/muse/marketplace/recommendations dedicated / needs_verification

已验证实现证据

Market owner 与入口

Market owner 当前位于 muse-module-market负责市场来源侧事实、授权、安装、handoff、发布、治理、申诉、浏览和收藏。

现有 dedicated Controller 覆盖 Market 32 个 operation

  • AppMuseMarketplaceAssetController
  • AppMuseMarketLicenseController
  • AppMuseMarketHandoffController
  • AppMuseMarketPublishController
  • AppMuseMarketAppealController
  • AdminMuseMarketAssetController
  • AdminMuseMarketReviewController
  • AdminMuseMarketAppealController

P1rMarketRouteOwnershipTest 已证明 Market 路由由 dedicated controller 持有,不再走 MuseContractPersistenceService 旧合同兜底。

数据库与迁移证据

V15 Market Real API schema 已存在:

  • muse-cloud/sql/muse/V15__extend_market_real_api_schema.sql

历史留痕记录 V15 已在真实 PostgreSQL _test 库通过 Flyway

flyway_success=true
migrations_executed=15
successful_migration_count=15
target_schema_version=15
flyway_latest=15:extend market real api schema
schema_version=15

历史 Market focused tests 记录为 191/191 passP1R Market gates 记录为 24/24 pass。但这些证据只证明 P1R-6 已把 Market 32 个 operation 收口到 dedicated / needs_verification,不能作为本轮 completed approval 的 fresh runtime 证据。

子代理只读盘点结论

本轮按 Market 业务切片并行只读复核,结论如下:

  • Marketplace 浏览/收藏 6 个 operation 是第一批 operation-level completed 候选,但仍缺合同一致性和真实 HTTP + DB 闭环。
  • purchase / install / handoff / bind-precheck / governanceImpact 7 个 operation 不适合作为第一批;缺目标 owner 消费 handoff token、回写 completed、Account 读侧 E2E 和跨 owner governance 影响闭环。
  • publish / review / governance 13 个 operation 的实现和测试证据较强,可作为后续候选切片;但当前仍缺审阅版/执行版冻结、fresh completed 级验证和 Market 整域覆盖,不应直接推进 completed。
  • appeal / events / projection 6 个申诉相关 operation 不适合作为第一批;申诉事件是 muse_market_appeal_event 审计事实,不是统一 Events publish outboxrestore 治理 action 当前不进入 MarketEventPublishOutboxMarketAccountProjectionProvider 不覆盖申诉。

推荐第一候选

推荐第一批候选限定为 Marketplace 浏览/收藏切片:

listMarketplaceAssets
getMarketplaceAsset
listMarketplaceCategories
listMarketplaceRecommendations
favoriteAsset
unfavoriteAsset

推荐理由:

  • Controller / Service / Mapper 链路相对短,主要停留在 Market 本域。
  • 浏览读侧依赖资产、版本、收藏状态和可见性不需要真实支付、安装、handoff 或目标 owner 消费。
  • 收藏写侧已有 command replay、owner 登录校验、可见资产校验、muse_market_favorite active/inactive 审计事实。
  • 风险面小于 purchase/install/handoff、publish/review/governance、appeal/projection 切片。

但该候选不能直接批准。执行版必须先解决以下硬条件:

  1. favoriteAsset / unfavoriteAssetX-Command-Id 合同不一致:实现和 controller test 要求 headerOpenAPI 与 coverage report 仍显示 requiresCommandId=false
  2. listMarketplaceRecommendations 当前是可解释 fallback 排序,不是独立推荐系统读模型;执行版必须明确 MVP completed 口径接受 fallback或把该 operation 留在 needs_verification
  3. 缺少真实 Spring context + 测试数据库的 HTTP/DB 闭环:上架资产种子、列表/详情/分类/推荐、收藏/取消、DB 状态、回放、冲突和不可见资产拒绝。
  4. 列表/推荐当前存在逐项取 currentVersion / favorite 的 N+1 查询形态执行版必须给出分页上限、SQL/mapper 验证或明确的 MVP 接受边界。
  5. 当前 P1rMarketRealApiGateTest 明确要求 Market 32 个 operation 保持 dedicated / needs_verification;未获用户批准前不能修改 gate。

如果不允许在 Market completed approval 中修改 OpenAPI 合同,第一批应降级为纯读候选:

listMarketplaceAssets
getMarketplaceAsset
listMarketplaceCategories

listMarketplaceRecommendations 是否纳入纯读候选,取决于用户是否接受 fallback recommendation 作为当前 completed 口径。

暂不推荐的切片

purchase / install / handoff / governanceImpact

以下 operation 暂不推荐第一批 completed

  • purchaseAsset
  • installMarketplaceAsset
  • createBindPrecheck
  • createMarketplaceHandoff
  • getHandoffStatus
  • cancelHandoff
  • getGovernanceImpact

主要缺口:

  • purchaseAsset 只证明本地授权、purchase fact 和 Account projection 写入,不证明真实支付或 Account 读侧 E2E。
  • installMarketplaceAsset 明确不写目标 owner canonical factstargetFactsWritten=false
  • handoff token 只落 hash缺真实目标 owner 消费 token、创建 owner precheck、回写 owner confirm result 或推进 handoff completed 的公开链路。
  • MarketTargetOwnerFacade 当前只生成目标页并做 owner/action 白名单,接口边界明确不消费 token、不写目标 owner facts。
  • getGovernanceImpact 当前主要聚合 Market 自有 authorization / installation / handoff / governance facts不证明 AI / Knowledge / Content 目标 owner 的真实影响闭环。

publish / review / governance

以下 operation 可作为后续强候选,但不推荐直接作为第一批:

  • savePublishDraft
  • runPublishCheck
  • submitPublishRequest
  • withdrawPublishRequest
  • listMyPublishRecords
  • adminListPublishRequests
  • adminApprovePublishRequest
  • adminRejectPublishRequest
  • adminListMarketAssets
  • adminGetMarketAsset
  • adminPreviewGovernanceImpact
  • adminDelistAsset
  • adminRecallAsset

已有证据显示它们具备草稿、检查、提交、审核、上架、治理 preview、delist/recall 和部分 Events outbox 链路。但它们仍不应直接 completed

  • 当前没有 Market Completed Approval 执行版冻结这 13 个 operation 的审批范围和 allowed diff。
  • 仍缺 fresh focused tests、P1R mixed gates、真实 _test、XML 防空跑和必要的 HTTP/API 或跨 owner runtime 验收。
  • MarketEventPublishOutboxService 当前 allowlist 是 delist / recall,不能把所有发布/审核/治理操作都等同于 Events 可见闭环。
  • 该切片不能代表 Market 32/32 domain completed。

appeals / restore / projection

以下 operation 暂不推荐 first batch

  • submitAppeal
  • supplementAppeal
  • withdrawAppeal
  • adminListAppeals
  • adminGetAppeal
  • adminResolveAppeal

主要缺口:

  • submit/supplement/withdraw/resolve 写入的是 muse_market_appeal_event 审计事实,不是统一 Events publish outbox。
  • adminResolveAppeal 的 restore / partially_restored 路径写 actionType=restore,当前 outbox service 会跳过。
  • MarketAccountProjectionProvider 只支持 purchase / license / publish,不覆盖申诉。
  • 因此不能把申诉审计、治理 outbox 和 Account projection 混成一个 completed 闭环。

非目标

  • 不修改 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
  • 不修改 muse-cloud/scripts/p1r-audit-api-coverage.py
  • 不修改 docs/superpowers/reports/p1r-api-coverage.json
  • 不修改 docs/superpowers/reports/p1r-api-coverage.md
  • 不修改 Market 业务实现。
  • 不把 Market 32 个 operation 推进 completed
  • 不把 Market 加入 domain-level completed allowlist。
  • 不推进 Account remaining 23 / Content / 总 P1R completed。
  • 不把 P1R-7d Market governance event propagation evidence 当作 Market 整域 completed 证据。

后续执行版必须包含

  1. Market 32 operation 的完整清单、当前状态和目标审批状态。
  2. 第一批候选 operation 的逐项 evidence mapController、Service、Mapper、权限、版本头、owner/tenant 隔离、幂等、审计、失败路径。
  3. 明确哪些 operation 继续 needs_verification,以及原因。
  4. favoriteAsset / unfavoriteAsset 合同处理方案:要么审批 OpenAPI X-Command-Id 修正,要么从第一批移除。
  5. listMarketplaceRecommendations fallback completed 口径:要么明确接受 fallback 推荐,要么保持 needs_verification
  6. scanner approval 模型:只允许 operation-level allowlist不允许 Market domain-level allowlist。
  7. P1rMarketRealApiGateTest 从禁止 completed 到审批后 partial completed gate 的修改策略。
  8. P1rApiCoverageReportTest summary 期望变更策略,必须只提升用户批准的 Market operation 数。
  9. legacy P1R mixed gate 同步策略:执行版必须枚举所有读取全局 summary 或 Market 状态的 gate至少包括 P1rApiCoverageReportTestP1rMarketRealApiGateTestP1rEventsRealApiGateTestP1rAiRealApiGateTestP1rKnowledgeRealApiGateTest需要同步断言的文件必须列入单独用户批准项、allowed diff 和 required XML 防空跑清单。
  10. Market partial completed 目标值必须公式化:若用户批准 N 个 Market operation则 summary 只能变为 completed=127+NneedsVerification=106-NMarket 只能变为 completed=N / needs_verification=32-NN 只能来自用户批准的 Market operation不能由 Market domain-level allowlist 推导。
  11. Market focused tests 的 required class 清单与最低 XML tests 数;执行版必须 fresh rerun不能只引用历史留痕。
  12. P1R mixed gates必须覆盖 Market gate、coverage report gate、上述 legacy summary/Market gate以及用于证明 Account remaining 23 / Content 不被推进的 gate未列入 allowed diff 的非目标 gate 只允许运行和读取 XML不能顺手改。
  13. 真实 PostgreSQL _test:至少覆盖 V1-V15 clean migrate如新增 Market completed approval Flyway IT应验证 V15 Market 表、索引、约束、trigger、favorite unique 和非法 insert 拒绝。
  14. 真实 HTTP + DB 或等价集成验收覆盖上架资产可见性、publisher-only 非公开可见性、收藏 active/inactive、command replay、missing/invisible asset 拒绝。
  15. protected diff gate7 个 OpenAPI 在批准前必须保持空 diff若执行版要修正 market OpenAPI必须把该文件列入单独用户批准和 allowed diff。
  16. allowed-diff gate覆盖 unstaged、staged、untracked并使用 git -c core.quotePath=false
  17. rollback 策略:撤回 scanner allowlist、coverage report、gate test、可选 OpenAPI 修正和新增 memory恢复目标 operation 为 dedicated / needs_verification

验收标准

本审阅版可以视为完成的条件:

  1. 文件写入 docs/agent-specs/2026-06-11-P1RMarketCompletedApproval审阅版.md
  2. .agent 记录 Market completed approval 审阅版状态。
  3. git diff --check 通过。
  4. OpenAPI、scanner、coverage report 无 diff。
  5. 文档只定义审阅路线,不进入执行版或实现。
  6. fresh spec/scope review PASS。
  7. fresh quality/feasibility review PASS。

待确认项

  1. 是否确认 Market 第一轮不做 domain-level 32/32 completed approval。
  2. 是否确认优先走 operation-level approval并从 Marketplace 浏览/收藏切片开始。
  3. 是否允许后续执行版把 docs/api-contracts/market/openapi.yamlfavoriteAsset / unfavoriteAsset X-Command-Id 合同修正列为单独批准项。
  4. 是否接受 listMarketplaceRecommendations 当前 fallback recommendation 作为 MVP completed 口径;如果不接受,该 operation 第一轮继续 needs_verification
  5. 是否确认 purchase / install / handoff / governanceImpact / appeals 在没有真实跨 owner 闭环前继续保持 needs_verification
  6. 是否确认审阅版 fresh 双 review PASS 后,再写 Market completed approval 执行版。