oh-my-muse/docs/memorys/2026-06-13-P1RContentAdminRead状态推进.md

10 KiB
Raw Blame History

P1R Content Admin Read 状态推进

日期2026-06-13

结论

本轮只推进 Content Admin Read 3 个 operation-level completed approval

  • content:adminListWorks
  • content:adminGetWork
  • content: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.py
  • docs/superpowers/reports/p1r-api-coverage.json
  • docs/superpowers/reports/p1r-api-coverage.md
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rApiCoverageReportTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rEventsRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAiRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rKnowledgeRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rMarketRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rAccountRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rMetaRealApiGateTest.java
  • muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentAdminReadCompletedApprovalIT.java
  • docs/agent-specs/.agent
  • docs/agent-specs/2026-06-13-P1RContentAdminReadCompletedApproval审阅版.md
  • docs/agent-specs/2026-06-13-P1RContentAdminReadCompletedApproval执行版.md
  • docs/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 失败点来自 adminListWorksadminGetWorkadminListChapters 仍为 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 ss bean 验证 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确认 ss bean 被调用,不泄露正文且不写入。
  • no-write 不是只看行数:测试用 row_to_json(t)::textmuse_content_workmuse_content_chaptermuse_content_blockmuse_content_governance_actionmuse_content_command_logmuse_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/13AdminContentControllerTest 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 等本机信息,外发前需要清洗。