10 KiB
P1R6 Market 真实 API 收口
日期:2026-06-05
结论
P1R-6 Market Task 13 已完成最终验证、coverage 报告对账、真实 PostgreSQL / Flyway _test 迁移验收与 memory 留痕。
本次只把 Market 32 个 operation 收口到 dedicated / needs_verification,没有把 Market 标记为 completed。
P1R coverage 当前关键数字为:
completedOperations 100
needsVerificationOperations 132
incompleteOperations 1
genericPersistenceOperations 0
ssePlaceholderOperations 1
统一 Events SSE 仍只有 P1R-7 streamEvents,状态为 sse_placeholder / incomplete;本次没有进入 P1R-7。
已验证事实
工作区与边界
本次验证在指定 worktree 执行:
/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0
当前分支:
dev/1.0.0
当前远端:
origin ssh://git@100.64.0.8:2222/admin/oh-my-muse.git
本次没有在 /Users/qingse/Sync/local-git/oh-my-muse 写文件。
本次没有清理、回退当前 dirty / untracked baseline。
coverage 重新生成
执行命令:
tmpvenv=$(mktemp -d /tmp/p1r6-py.XXXXXX)
/opt/homebrew/bin/python3.12 -m venv "$tmpvenv"
"$tmpvenv/bin/python" -m pip install --quiet PyYAML
"$tmpvenv/bin/python" muse-cloud/scripts/p1r-audit-api-coverage.py --check
code=$?
rm -rf "$tmpvenv"
echo scanner_exit=$code
exit $code
结果:
Generated docs/superpowers/reports/p1r-api-coverage.json
Generated docs/superpowers/reports/p1r-api-coverage.md
scanner_exit=0
补充事实:本轮默认 python3 指向的 Framework Python 3.12 在导入标准库 dataclasses -> inspect -> dis -> opcode 阶段卡住,timeout 60 python3 -u muse-cloud/scripts/p1r-audit-api-coverage.py --check 返回 scanner_exit=124。使用 Homebrew Python 3.12 临时 venv 安装 PyYAML 后,同一 scanner 脚本通过;这不是 coverage 逻辑失败。
coverage 对账
执行命令:
jq -r '.operations | group_by(.domain)[] | [.[0].domain, (length|tostring), ([group_by(.implementationStatus + "/" + .completionStatus)[] | (.[0].implementationStatus + "/" + .[0].completionStatus + ":" + (length|tostring))] | join(", "))] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
结果:
account 33 dedicated/needs_verification:33
ai 41 dedicated/completed:41
content 51 dedicated/needs_verification:51
events 1 sse_placeholder/incomplete:1
knowledge 59 dedicated/completed:59
market 32 dedicated/needs_verification:32
meta 16 dedicated/needs_verification:16
执行命令:
jq -r '.summary | [.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
结果:
100 132 1 0 1
执行命令:
jq -r '.operations[] | select(.domain == "market") | [.operationId,.implementationStatus,.completionStatus] | @tsv' docs/superpowers/reports/p1r-api-coverage.json | sort
结果:Market 32 个 operation 全部为 dedicated / needs_verification。
额外核验:
jq -r '[.operations[] | select(.domain=="market" and (.completionStatus=="completed" or .implementationStatus!="dedicated" or .completionStatus!="needs_verification"))] | length' docs/superpowers/reports/p1r-api-coverage.json
jq -r '[.operations[] | select(.domain=="market")] | length' docs/superpowers/reports/p1r-api-coverage.json
结果:
0
32
Maven gate
执行命令:
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) mvn -pl muse-server -Dtest=P1rApiCoverageReportTest,P1rMarketRealApiGateTest,P1rMarketRouteOwnershipTest,P1rMarketMigrationSqlTest test
结果:
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
本次计划指定的 -pl muse-server 命令没有触发 reactor 依赖或无匹配测试模块失败,因此没有执行 fallback 复跑。
Market focused tests
先发现 Market 测试类:
rg --files muse-cloud/muse-module-market/muse-module-market-server/src/test muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api | sort
发现 muse-module-market-server/src/test 下 21 个 Market 测试类,覆盖 service、controller 和 mapper。
执行聚合测试:
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) mvn -pl muse-module-market/muse-module-market-server -am -Dtest='*Market*Test' -Dsurefire.failIfNoSpecifiedTests=false test
结果:
Tests run: 191, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Surefire XML 交叉汇总结果:
market_server_xml_classes 21
market_server_xml_totals 191 0 0 0
Task 12 Flyway IT
执行命令:
cd muse-cloud
set -a
. ~/.config/muse-repo/infra.env
set +a
export P1R_FLYWAY_PASSWORD="$MUSE_POSTGRES_PASSWORD"
P1R6_TEST_DB="${P1R6_TEST_DB:-muse_local_p1r6_test}"
JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \
timeout 180 mvn -o test -pl muse-server \
-Dtest=P1rMarketFlywayMigrationIT \
-Dflyway.postgresql.transactional.lock=false \
-Dp1r.flyway.url="jdbc:postgresql://${MUSE_POSTGRES_HOST}:${MUSE_POSTGRES_PORT}/${P1R6_TEST_DB}" \
-Dp1r.flyway.user="$MUSE_POSTGRES_USERNAME" \
-Dp1r.flyway.locations="filesystem:sql/muse"
结果:
flyway_success=true
flyway_url=jdbc:postgresql://<host>:5433/muse_local_p1r6_test
flyway_locations_requested=filesystem:sql/muse
flyway_locations_effective=filesystem:/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0/muse-cloud/sql/muse
migrations_executed=15
successful_migration_count=15
target_schema_version=15
flyway_latest=15:extend market real api schema
schema_version=15
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Task 12 真实 Flyway IT 当前保持通过:P1rMarketFlywayMigrationIT 3 tests,验收到 V15,且 V1-V15 共 15 条 SQL migration 成功。
补充事实:不带 -Dflyway.postgresql.transactional.lock=false 的同一 Flyway IT 两次在 PostgreSQLAdvisoryLockTemplate / flyway.migrate() 路径卡住,必须终止 Maven/Surefire 进程;独立 psql 在临时 _test 探针库按 V1-V15 顺序执行全部 SQL 成功,证明 V15 SQL 本身可执行。加上 Flyway PostgreSQL 非事务 advisory lock 参数后,独立探针库和计划默认 muse_local_p1r6_test 均通过;探针库已清理。
diff hygiene
执行命令:
git diff --check
结果:无输出。
执行命令:
git status --short -- docs/api-contracts/market/openapi.yaml docs/api-contracts/ai/openapi.yaml docs/api-contracts/knowledge/openapi.yaml muse-cloud/scripts/p1r-audit-api-coverage.py
结果:无输出。
因此,本次没有修改 Market / AI / Knowledge OpenAPI。
本次也没有修改 muse-cloud/scripts/p1r-audit-api-coverage.py 来掩盖缺口。
review gate 记录
P1R-6 Market 实现阶段本轮 fresh review gate 结论为:
Spec compliance review: PASS_WITH_WARNINGS
Quality / feasibility review: PASS_WITH_WARNINGS
reviewer:
spec compliance reviewer: 019e9576-b387-7671-8e4b-06573003b705
quality / feasibility reviewer: 019e957c-b7d3-7170-bdbd-64e99176970e
这些 review 结论只证明 P1R-6 实现边界与质量可行性通过带警告评审,不能替代真实运行态 / 端到端验收,也不能作为把 Market coverage 推进到 completed 的依据。
推断
基于 coverage scanner、route ownership gate、Market focused tests、muse-server gate 与真实 Flyway IT 的组合证据,可以判断 P1R-6 Market 已具备 dedicated 入口、Market owner 路由归属、核心服务/controller/mapper 测试覆盖和 V15 数据库迁移验收基础。
由于本次没有做真实运行态 / 端到端用户流验收,不能推断 Market 已达到业务完成态。
假设
本次假设 ~/.config/muse-repo/infra.env 中的 PostgreSQL 连接配置仍是项目允许用于 P1R _test Flyway 验收的本地/内网测试配置。
本次假设当前 dirty / untracked baseline 来自 Tasks 3-12 或用户已有工作,因此只在 Task 13 指定范围内新增 memory、重新生成 coverage 报告,不做清理或回退。
剩余 warnings
recordFailed仍未被业务写路径使用,失败命令审计和重放语义仍弱;本轮 quality review 判定为 P2 warning,不阻塞dedicated / needs_verification。- 并发首购覆盖是 Mockito 分支测试,不是真实 PostgreSQL 双事务竞争测试;若后续申请 Market
completed,应补真实 DB 并发 / HTTP 幂等验收。 P1rMarketRouteOwnershipTest仍是源码扫描 gate,只能证明当前源码静态匹配结果,不能替代运行态路由注册和真实 HTTP 调用验收。P1rApiCoverageReportTest/ coverage gate 读取生成后的 JSON 报告,能防止报告状态回退,但不能单独证明运行态 API 行为。- 当前环境默认
python3导入标准库会卡住;后续复跑 scanner 建议显式使用可工作的 Homebrew Python 3.12 临时 venv,或先修复默认 Python 运行时。 - 当前环境 Flyway PostgreSQL transactional advisory lock 会卡住;后续复跑
P1rMarketFlywayMigrationIT建议带-Dflyway.postgresql.transactional.lock=false。 P1rMarketFlywayMigrationIT会通过System.setProperty把p1r.flyway.url和p1r.flyway.user改成脱敏值;这是为了减少 Surefire XML 泄露,但仍属于 JVM 全局属性副作用。- Surefire XML 可能包含本地绝对路径,例如 worktree 路径和 Flyway effective locations;外发测试报告前应清洗本地路径。
后续建议
如要把 Market 从 needs_verification 推进到 completed,需要用户单独批准,并补充真实运行态 / 端到端验收:HTTP 层真实请求、权限边界、幂等重放、失败路径、数据库落库、投影/outbox、审计日志和跨 owner 传播证据。
P1R-7 Events SSE 应另起任务,不应混入 P1R-6 Market Task 13。
本次改动文件
docs/superpowers/reports/p1r-api-coverage.jsondocs/superpowers/reports/p1r-api-coverage.mddocs/memorys/2026-06-04-P1R6Market真实API收口.md