只推进 Market 4 个 operation-level completed approval,保持 market domain-level allowlist 关闭,并保留剩余 28 个 Market operation 为 needs_verification。
19 KiB
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:
AppMuseMarketplaceAssetControllerAppMuseMarketLicenseControllerAppMuseMarketHandoffControllerAppMuseMarketPublishControllerAppMuseMarketAppealControllerAdminMuseMarketAssetControllerAdminMuseMarketReviewControllerAdminMuseMarketAppealController
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 pass,P1R 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 outbox;restore治理 action 当前不进入 MarketEventPublishOutbox;MarketAccountProjectionProvider 不覆盖申诉。
推荐第一候选
推荐第一批候选限定为 Marketplace 浏览/收藏切片:
listMarketplaceAssets
getMarketplaceAsset
listMarketplaceCategories
listMarketplaceRecommendations
favoriteAsset
unfavoriteAsset
推荐理由:
- Controller / Service / Mapper 链路相对短,主要停留在 Market 本域。
- 浏览读侧依赖资产、版本、收藏状态和可见性,不需要真实支付、安装、handoff 或目标 owner 消费。
- 收藏写侧已有 command replay、owner 登录校验、可见资产校验、
muse_market_favoriteactive/inactive 审计事实。 - 风险面小于 purchase/install/handoff、publish/review/governance、appeal/projection 切片。
但该候选不能直接批准。执行版必须先解决以下硬条件:
favoriteAsset/unfavoriteAsset的X-Command-Id合同不一致:实现和 controller test 要求 header,OpenAPI 与 coverage report 仍显示requiresCommandId=false。listMarketplaceRecommendations当前是可解释 fallback 排序,不是独立推荐系统读模型;执行版必须明确 MVP completed 口径接受 fallback,或把该 operation 留在needs_verification。- 缺少真实 Spring context + 测试数据库的 HTTP/DB 闭环:上架资产种子、列表/详情/分类/推荐、收藏/取消、DB 状态、回放、冲突和不可见资产拒绝。
- 列表/推荐当前存在逐项取 currentVersion / favorite 的 N+1 查询形态;执行版必须给出分页上限、SQL/mapper 验证或明确的 MVP 接受边界。
- 当前
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:
purchaseAssetinstallMarketplaceAssetcreateBindPrecheckcreateMarketplaceHandoffgetHandoffStatuscancelHandoffgetGovernanceImpact
主要缺口:
purchaseAsset只证明本地授权、purchase fact 和 Account projection 写入,不证明真实支付或 Account 读侧 E2E。installMarketplaceAsset明确不写目标 owner canonical facts,targetFactsWritten=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 可作为后续强候选,但不推荐直接作为第一批:
savePublishDraftrunPublishChecksubmitPublishRequestwithdrawPublishRequestlistMyPublishRecordsadminListPublishRequestsadminApprovePublishRequestadminRejectPublishRequestadminListMarketAssetsadminGetMarketAssetadminPreviewGovernanceImpactadminDelistAssetadminRecallAsset
已有证据显示它们具备草稿、检查、提交、审核、上架、治理 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:
submitAppealsupplementAppealwithdrawAppealadminListAppealsadminGetAppealadminResolveAppeal
主要缺口:
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.yamldocs/api-contracts/ai/openapi.yamldocs/api-contracts/content/openapi.yamldocs/api-contracts/events/openapi.yamldocs/api-contracts/knowledge/openapi.yamldocs/api-contracts/market/openapi.yamldocs/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 证据。
后续执行版必须包含
- Market 32 operation 的完整清单、当前状态和目标审批状态。
- 第一批候选 operation 的逐项 evidence map:Controller、Service、Mapper、权限、版本头、owner/tenant 隔离、幂等、审计、失败路径。
- 明确哪些 operation 继续
needs_verification,以及原因。 favoriteAsset/unfavoriteAsset合同处理方案:要么审批 OpenAPIX-Command-Id修正,要么从第一批移除。listMarketplaceRecommendationsfallback completed 口径:要么明确接受 fallback 推荐,要么保持needs_verification。- scanner approval 模型:只允许 operation-level allowlist,不允许 Market domain-level allowlist。
P1rMarketRealApiGateTest从禁止 completed 到审批后 partial completed gate 的修改策略。P1rApiCoverageReportTestsummary 期望变更策略,必须只提升用户批准的 Market operation 数。- legacy P1R mixed gate 同步策略:执行版必须枚举所有读取全局 summary 或 Market 状态的 gate,至少包括
P1rApiCoverageReportTest、P1rMarketRealApiGateTest、P1rEventsRealApiGateTest、P1rAiRealApiGateTest、P1rKnowledgeRealApiGateTest;需要同步断言的文件必须列入单独用户批准项、allowed diff 和 required XML 防空跑清单。 - Market partial completed 目标值必须公式化:若用户批准
N个 Market operation,则 summary 只能变为completed=127+N、needsVerification=106-N,Market 只能变为completed=N / needs_verification=32-N;N只能来自用户批准的 Market operation,不能由 Market domain-level allowlist 推导。 - Market focused tests 的 required class 清单与最低 XML tests 数;执行版必须 fresh rerun,不能只引用历史留痕。
- P1R mixed gates:必须覆盖 Market gate、coverage report gate、上述 legacy summary/Market gate,以及用于证明 Account remaining 23 / Content 不被推进的 gate;未列入 allowed diff 的非目标 gate 只允许运行和读取 XML,不能顺手改。
- 真实 PostgreSQL
_test:至少覆盖 V1-V15 clean migrate;如新增 Market completed approval Flyway IT,应验证 V15 Market 表、索引、约束、trigger、favorite unique 和非法 insert 拒绝。 - 真实 HTTP + DB 或等价集成验收:覆盖上架资产可见性、publisher-only 非公开可见性、收藏 active/inactive、command replay、missing/invisible asset 拒绝。
- protected diff gate:7 个 OpenAPI 在批准前必须保持空 diff;若执行版要修正 market OpenAPI,必须把该文件列入单独用户批准和 allowed diff。
- allowed-diff gate:覆盖 unstaged、staged、untracked,并使用
git -c core.quotePath=false。 - rollback 策略:撤回 scanner allowlist、coverage report、gate test、可选 OpenAPI 修正和新增 memory,恢复目标 operation 为
dedicated / needs_verification。
验收标准
本审阅版可以视为完成的条件:
- 文件写入
docs/agent-specs/2026-06-11-P1RMarketCompletedApproval审阅版.md。 .agent记录 Market completed approval 审阅版状态。git diff --check通过。- OpenAPI、scanner、coverage report 无 diff。
- 文档只定义审阅路线,不进入执行版或实现。
- fresh spec/scope review PASS。
- fresh quality/feasibility review PASS。
待确认项
- 是否确认 Market 第一轮不做 domain-level 32/32 completed approval。
- 是否确认优先走 operation-level approval,并从 Marketplace 浏览/收藏切片开始。
- 是否允许后续执行版把
docs/api-contracts/market/openapi.yaml的favoriteAsset/unfavoriteAssetX-Command-Id合同修正列为单独批准项。 - 是否接受
listMarketplaceRecommendations当前 fallback recommendation 作为 MVP completed 口径;如果不接受,该 operation 第一轮继续needs_verification。 - 是否确认 purchase / install / handoff / governanceImpact / appeals 在没有真实跨 owner 闭环前继续保持
needs_verification。 - 是否确认审阅版 fresh 双 review PASS 后,再写 Market completed approval 执行版。