10 KiB
P1R Content Admin Read 状态推进
日期:2026-06-13
结论
本轮只推进 Content Admin Read 3 个 operation-level completed approval:
content:adminListWorkscontent:adminGetWorkcontent:adminListChapters
Content 仍不是整域 completed。其余 38 个 Content operation 继续 dedicated/needs_verification。
本轮未修改 OpenAPI,未修改 Content 业务实现,未修改 SQL migration,未把 content 加入 domain-level completed allowlist。
工作区与基线
工作区:
/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0
基线 HEAD:
2692af3 test(p1r): 收口 Content Planning completed approval 门禁
实施前 coverage summary:
233 141 92 0 0 0
实施后 coverage summary:
233 144 89 0 0 0
实施后 Content 状态:
completed=13
needs_verification=38
目标 operation 状态:
adminListWorks dedicated completed false
adminGetWork dedicated completed false
adminListChapters dedicated completed false
明确保留的 admin 非目标 operation:
adminListExportTasks dedicated needs_verification false
adminListImportTasks dedicated needs_verification false
adminRiskAction dedicated needs_verification true
继续 needs_verification 的 Content operation
content:adminListExportTasks
content:adminListImportTasks
content:adminRiskAction
content:confirmChapterParseResult
content:rejectChapterParseResult
content:downloadExportPackage
content:getExportTask
content:getImportTask
content:getParseJob
content:listParseJobChapters
content:batchConfirmChapters
content:retryParseJob
content:createWork
content:deleteWork
content:updateWork
content:deleteBlock
content:mergeBlocks
content:splitBlock
content:mergeBlockSuggestion
content:createChapter
content:deleteChapter
content:updateChapter
content:createBlock
content:reorderChapters
content:validateDynamicFields
content:exportWork
content:createExportTask
content:createImportTask
content:listMetaProjections
content:getMetaProjection
content:createParseJob
content:listPlanningCandidates
content:createPlanningCandidate
content:getPlanningCandidate
content:confirmPlanningCandidate
content:discardPlanningCandidate
content:createStyleCheck
content:getStyleCheckResult
修改范围
本轮修改:
muse-cloud/scripts/p1r-audit-api-coverage.pydocs/superpowers/reports/p1r-api-coverage.jsondocs/superpowers/reports/p1r-api-coverage.mdmuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rApiCoverageReportTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rEventsRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAiRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rKnowledgeRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rMarketRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAccountRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rMetaRealApiGateTest.javamuse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentAdminReadCompletedApprovalIT.javadocs/agent-specs/.agentdocs/agent-specs/2026-06-13-P1RContentAdminReadCompletedApproval审阅版.mddocs/agent-specs/2026-06-13-P1RContentAdminReadCompletedApproval执行版.mddocs/memorys/2026-06-13-P1RContentAdminRead状态推进.md
未修改:
- 7 个 OpenAPI。
- Content 业务实现。
- SQL migration。
- Content domain-level completed allowlist。
TDD evidence
RED 阶段先修改 P1R gate 期望值和 Content Admin Read 3 个 operation 断言,在旧 scanner/report 下运行 focused P1R gates,预期失败已出现:
P1rApiCoverageReportTest失败点来自旧 report 仍为completed=141 / needsVerification=92。P1rContentRealApiGateTest失败点来自adminListWorks、adminGetWork、adminListChapters仍为needs_verification。
GREEN 阶段完成 scanner operation-level allowlist、report 重新生成、Admin Read HTTP+DB _test evidence 和 focused gates 后,目标验证通过。
MockMvc HTTP 入口 + DB 证据
新增:
muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentAdminReadCompletedApprovalIT.java
验证方式:
- 使用 Spring Mock web context +
MockMvc。 - 使用真实 mapper / service。
- 使用真实 PostgreSQL
_test数据库。 - 使用 Flyway clean/migrate V1-V21。
- 启用 method security,并用 test-local
ssbean 验证muse:content:query权限门禁。 - 注册真实 tenant SQL interceptor,证明 admin read 的 tenant 边界来自后端 SQL 层。
- 密码只从环境变量读取,禁止通过 JVM system property 或 JDBC query 传入。
说明:这里的 HTTP 入口证据是执行版要求的 WebApplicationContext + MockMvc 请求路径证据,不是启动真实 socket 端口的 live servlet container 证据。
单类验证数据库:
muse_p1r_content_admin_read_completed_approval_test
通过结果:
P1rContentAdminReadCompletedApprovalIT: tests=5, failures=0, errors=0, skipped=0
覆盖内容:
- 拒绝 JVM password system property、JDBC credential query 和非
_test数据库。 adminListWorks覆盖 status、keyword、riskFlag=true、治理摘要、tenant 隔离、正文不泄露和 no-write。adminListWorks覆盖治理动作为空时riskFlag=true返回空页。adminGetWork覆盖作品详情、章节摘要、exception summary、governance history、same-tenant different owner admin 可读、missing/cross tenant、正文不泄露和 no-write。adminListChapters覆盖章节排序、blockCount、wordCount、governance target scope、missing/cross tenant、正文不泄露和 no-write。X-API-Version不支持时返回CONTENT_API_VERSION_UNSUPPORTED,不泄露正文且不写入。- 缺
muse:content:query权限时由 method security 返回 403 CommonResult,确认ssbean 被调用,不泄露正文且不写入。 - no-write 不是只看行数:测试用
row_to_json(t)::text对muse_content_work、muse_content_chapter、muse_content_block、muse_content_governance_action、muse_content_command_log、muse_content_event_publish_outbox做请求前后全表快照比对,能发现新增、删除和 UPDATE。 - riskFlag 空结果场景在测试自身删除治理事实后重新采样快照,避免测试 DML 遮蔽前置 admin read 的写污染。
组合验证
组合验证使用真实 PostgreSQL _test 库:
muse_p1r_content_admin_read_combined_test
通过结果:
P1rContentAdminReadCompletedApprovalIT: tests=5, failures=0, errors=0, skipped=0
P1rContentPlanningCompletedApprovalIT: tests=11, failures=0, errors=0, skipped=0
P1rContentCoreCompletedApprovalIT: tests=12, failures=0, errors=0, skipped=0
P1rContentEventsPublishFlywayMigrationIT: tests=4, failures=0, errors=0, skipped=0
combined: tests=32, failures=0, errors=0, skipped=0
fresh review 修复
Lorentz correctness review:
PASS
findings=0
Hegel testing/data-integrity review:
FAIL
P1: no-write 证据会被测试自身 deleteGovernanceActions() 掩盖。
P2: no-write 只比对行数,不能证明读路径没有 UPDATE。
修复:
- 每个 admin read 请求前后执行
ContentFactSnapshot全表快照比对。 - riskFlag 空结果场景在测试自身 DML 后重新采样 no-write baseline。
- 删除旧的行数式
assertNoAdminReadWrites断言。
修复后验证:
P1rContentAdminReadCompletedApprovalIT: tests=5, failures=0, errors=0, skipped=0
P1rContentAdminReadCompletedApprovalIT + Planning + Core + Flyway combined: tests=32, failures=0, errors=0, skipped=0
fresh re-review:
Peirce correctness/spec re-review: PASS, findings=0
Carver testing/data-integrity re-review: PASS, findings=0
Carver P3 residual:
focused ContentAdminServiceTest/AdminContentControllerTest XML 时间早于最后一次 Admin Read no-write 修复源码时间。
处理结果:
- 这两个 focused 测试源码本轮未改,但为消除 XML 新鲜度残余,已重新运行 focused Content tests。
- fresh focused 结果为
ContentAdminServiceTest 13/13、AdminContentControllerTest 8/8,合计21/21 pass。
focused Content tests
执行版 focused tests 已单独运行,并确认 XML 为本轮 fresh 产物:
ContentAdminServiceTest: tests=13, failures=0, errors=0, skipped=0
AdminContentControllerTest: tests=8, failures=0, errors=0, skipped=0
focused total=21
P1R mixed gates
P1R mixed gates fresh 运行:
P1rApiCoverageReportTest: tests=6, failures=0, errors=0, skipped=0
P1rContentRealApiGateTest: tests=5, failures=0, errors=0, skipped=0
P1rEventsRealApiGateTest: tests=7, failures=0, errors=0, skipped=0
P1rAiRealApiGateTest: tests=7, failures=0, errors=0, skipped=0
P1rKnowledgeRealApiGateTest: tests=8, failures=0, errors=0, skipped=0
P1rMarketRealApiGateTest: tests=6, failures=0, errors=0, skipped=0
P1rAccountRealApiGateTest: tests=5, failures=0, errors=0, skipped=0
P1rMetaRealApiGateTest: tests=5, failures=0, errors=0, skipped=0
mixed total=49
最终边界检查
已运行:
python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check
git diff --check
git -c core.quotePath=false diff -- docs/api-contracts
git -c core.quotePath=false diff -- muse-cloud/muse-module-content/muse-module-content-server/src/main/java muse-cloud/sql/muse
结果:
- scanner
--check通过并重生成 report。 - coverage summary 为
233/144/89/0/0/0。 git diff --check无输出。- OpenAPI protected diff 为空。
- Content main/java diff 为空。
- SQL migration diff 为空。
注意事项
- 当前状态只代表 3 个 Admin Read operation-level completed approval 的 implementation 已完成本轮本地验证。
- fresh implementation review 双 PASS 前,不得提交、push 或宣称本轮收口。
- 不得把本轮结果外推为 Content 51/51 completed。
content:adminRiskAction是治理写命令,仍需单独 completed approval;不能用 admin read 的 riskFlag 聚合证据替代。- admin import/export task 仍需单独证明任务状态、产物和 work 关联;不能夹入本轮。
- raw Surefire XML 可能包含本地 classpath、user.dir、测试 DB URL 等本机信息,外发前需要清洗。