7.2 KiB
7.2 KiB
P1R6 Market 规格计划
日期:2026-06-03
背景
本次进入 P1R-6 Market Real API 的规格、计划和 review gate 阶段,只完成事实盘点、规格、执行计划、review 修订和阶段留痕,不进入代码实现。
真实工作面:
/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0
分支:
dev/1.0.0
开始前已执行:
git status --short --branch
git log --oneline -5
git pull --ff-only origin dev/1.0.0
结果:
## dev/1.0.0...origin/dev/1.0.0
48c750b test(p1r): 补齐 AI 与 Knowledge 外部端到端验收
Already up to date.
已验证事实
当前 coverage summary:
completedOperations 100
needsVerificationOperations 100
incompleteOperations 33
genericPersistenceOperations 32
ssePlaceholderOperations 1
当前按域状态:
account 33 dedicated / needs_verification
ai 41 dedicated / completed
content 51 dedicated / needs_verification
events 1 sse_placeholder / incomplete
knowledge 59 dedicated / completed
market 32 generic_persistence / incomplete
meta 16 dedicated / needs_verification
Market 32 个 operation 当前全部为:
generic_persistence / incomplete
当前 Market 实现事实:
docs/api-contracts/market/openapi.yaml声明 32 个 Market operation。muse-module-market-server当前合同入口仍是AdminMuseMarketContractController和AppMuseMarketContractController。- 当前 Market 合同入口统一委托
MuseContractPersistenceService,不能作为真实 API 完成证据。 muse-module-market-server当前只依赖muse-module-market-api、security、mybatis。muse-server当前同时装配muse-module-market-server和muse-module-member-server。muse-module-member-server已有MarketAccountProjectionFacade、默认 fail-closedUnavailableMarketAccountProjectionFacade、muse_account_record_projectionDO/Mapper 和 V11 DDL。
当前 DDL 事实:
- V6 已有 Market 初始资产、版本、安装、发布申请、申诉和 handoff 表。
- V8 已有 workflow task、favorite、purchase 表。
- V11 已有 Account 查询读模型
muse_account_record_projection。 - P1R-5 已使用 V14;P1R-6 如新增迁移,推荐使用
V15__extend_market_real_api_schema.sql。
本阶段产物
- 规格:
docs/superpowers/specs/2026-06-03-P1R-6-market-real-api-design.md - 计划:
docs/superpowers/plans/2026-06-03-P1R-6-market-real-api.md - 留痕:
docs/memorys/2026-06-03-P1R6Market规格计划.md
Review 结果
本阶段按要求执行 fresh review gate。
Spec compliance review:
PASS_WITH_WARNINGS
已修复首轮阻塞点:
- 计划开头错误写成只允许执行
Task 1-12,但正文实际包含 Task 13。已修为Task 1-13。
Spec review 非阻塞提醒:
- handoff token 业务状态里的
completed不能和 coveragecompletionStatus=completed混淆。计划已补充消歧说明。
Quality / feasibility review:
PASS_WITH_WARNINGS
已修复阻塞点:
- Task 5 不再要求 Market 模块另建同名
MarketAccountProjectionFacade/UnavailableMarketAccountProjectionFacade。 - 已明确 P1R-6 Account 投影采用最小可执行接线方案:
muse-module-market-server显式依赖muse-module-member-server,复用 member 侧既有MarketAccountProjectionFacade、AccountRecordProjectionDO、AccountRecordProjectionMapper。 - 已明确
muse_market_account_projection只表达 Market 侧 projection sync / outbox 状态,不是 Account 查询读模型。 - 已明确 Account 查询读模型只能是 V11 已有
muse_account_record_projection。 - 已要求实现阶段用 Maven reactor 或 dependency-tree 验证不形成 Maven 循环,并用 Spring context 测试证明真实 provider 替换默认 unavailable bean。
Quality review 非阻塞提醒:
- 当前 worktree 仍有 P1R-4 / P1R-5 coverage/test/script 未提交 diff,P1R-6 spec/plan/memory 也是未跟踪文件。进入 P1R-6 实现前必须先提交或明确保留这些 diff,避免阶段混账。
关键设计结论
- P1R-6 目标状态只能是
dedicated / needs_verification,不能写成completed。 - Market owner 是
muse-module-market,负责市场来源侧事实、授权、安装、handoff、发布、治理和申诉。 - Market 不直接写 AI / Knowledge / Content canonical facts。
- 购买只产生授权,不等于安装;安装只进入账户可用列表,不等于绑定目标 owner。
- Account 只消费 Market 写入的投影;Account 查询读模型为
muse_account_record_projection。 needs_recheck不能作为 MarketSourceStatus值,只能表达为 action policy / recheck reasons。- P1R-7 统一 Events SSE 不属于 P1R-6。
- 不修改
docs/api-contracts/market/openapi.yaml,不修改 scanner 掩盖缺口。
验证命令与结果
coverage audit:
python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check
结果:
Generated docs/superpowers/reports/p1r-api-coverage.json
Generated docs/superpowers/reports/p1r-api-coverage.md
coverage 对账:
jq -r '.summary | [.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
jq -r '.operations[] | select(.domain == "market") | [.implementationStatus,.completionStatus] | @tsv' docs/superpowers/reports/p1r-api-coverage.json | sort | uniq -c
结果:
100 100 33 32 1
32 generic_persistence incomplete
文档结构检查:
python3 - <<'PY'
import re, pathlib
plan=pathlib.Path('docs/superpowers/plans/2026-06-03-P1R-6-market-real-api.md').read_text()
spec=pathlib.Path('docs/superpowers/specs/2026-06-03-P1R-6-market-real-api-design.md').read_text()
print('plan_tasks', re.findall(r'^## Task (\d+):', plan, re.M))
print('spec_operation_rows', len(re.findall(r'^\| `[^`]+` \| (GET|POST|DELETE|PUT|PATCH) \| `/', spec, re.M)))
print('plan_operation_lines', len(re.findall(r'^[A-Za-z].+ (GET|POST|DELETE|PUT|PATCH) /', plan, re.M)))
PY
结果:
plan_tasks ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']
spec_operation_rows 32
plan_operation_lines 32
diff hygiene:
git diff --check
结果:无输出。
OpenAPI diff 检查:
git status --short -- docs/api-contracts/market/openapi.yaml docs/api-contracts/ai/openapi.yaml docs/api-contracts/knowledge/openapi.yaml
结果:无输出。
当前阶段边界
本阶段只完成 P1R-6 规格、计划、review 修订和 memory 留痕,没有实现代码。
当前不应把任何 Market operation 标为 completed。
下一步
进入 P1R-6 实现前必须先处理工作面:
- 提交或明确保留 P1R-4 / P1R-5 coverage completed 推进 diff。
- 提交或明确保留 P1R-6 spec / plan / memory 文档 diff。
- 再按
docs/superpowers/plans/2026-06-03-P1R-6-market-real-api.mdTask 1-13 执行。
实现阶段执行规则:
- 同一实现 Task 内复用最近 implementer。
- 新 Task 才 fresh implementer。
- 每个 Task 完成后仍必须 fresh spec review 和 fresh quality / feasibility review。
- review 结论不能替代真实运行态验收或 coverage
completed批准。