27 KiB
P1R Content Admin RiskAction Completed Approval 执行版
For agentic workers: REQUIRED SUB-SKILL: Use
superpowers:subagent-driven-developmentto implement this plan task-by-task only after fresh execution review double PASS and explicit user approval. Steps use checkbox syntax for tracking.
日期:2026-06-13
结论
本执行版只锁定 Content 管理后台治理写命令 1 个 operation-level completed approval:
content:adminRiskAction
本轮不把 content 加入 domain-level completed allowlist,不推进 Content 51/51 completed,不修改 OpenAPI,不修改 Content 业务实现,不修改 SQL migration。
获批后目标 coverage summary 为:
total=233
completed=145
needsVerification=88
incomplete=0
genericPersistence=0
ssePlaceholder=0
Content 域目标状态为:
content total=51
completed=14
needsVerification=37
当前阶段只允许写执行方案并进入 fresh execution review。执行版 review 双 PASS 后,仍必须由用户再次明确批准审批清单、operation-level 边界、allowed diff 和 mixed gate 同步范围,才允许实施。
flowchart TB
Current["当前 Content<br/>13 completed / 38 needs_verification"] --> Exec["执行版<br/>锁定 adminRiskAction 1 op"]
Exec --> Review["fresh execution spec/scope review<br/>fresh execution quality/testing review"]
Review --> Approval{"用户明确批准<br/>1 op / operation-level / allowed diff / mixed gates"}
Approval -->|否| Stay["保持当前 coverage<br/>233/144/89"]
Approval -->|是| Red["TDD RED<br/>先改 gate 期望<br/>旧 report 必须失败"]
Red --> Runtime["HTTP + real DB _test<br/>RBAC + tenant + command + audit + rollback"]
Runtime --> Green["scanner operation allowlist<br/>regenerate report"]
Green --> Verify["focused tests + P1R mixed gates<br/>XML 防空跑 + protected diff"]
Verify --> FreshReview["fresh implementation review"]
当前事实
正确 worktree:
/Users/qingse/.config/superpowers/worktrees/oh-my-muse/dev-1.0.0
当前 HEAD:
b0b4b2c test(p1r): 收口 Content Admin Read completed approval 门禁
当前分支:
dev/1.0.0...origin/dev/1.0.0
当前 coverage summary:
233 144 89 0 0 0
当前 domain 状态:
account completed=10 needsVerification=23
content completed=13 needsVerification=38
market completed=4 needsVerification=28
meta completed=16 needsVerification=0
当前目标 operation 状态:
adminRiskAction dedicated needs_verification true POST /admin-api/muse/content/works/{workId}/risk-actions
已验证的只读实现事实:
- OpenAPI
RiskActionRequest.required已包含commandId、action、reason、expectedVersion。 AdminContentController.adminRiskAction使用@PreAuthorize("@ss.hasPermission('muse:content:risk-action')"),并调用requireApiVersion()。- Controller-local mapping 为
/muse/content/works/{workId}/risk-actions;对外 OpenAPI 路径为/admin-api/muse/content/works/{workId}/risk-actions。 ContentAdminServiceImpl.adminRiskAction使用@Transactional(rollbackFor = Exception.class)。- Service 先通过
ContentCommandService.reserveCommand(...)处理 commandId 和 replay,再通过WorkMapper.selectByIdForUpdate(workId, tenantId)锁定作品行。 - Service 在锁定作品行后校验
expectedVersion、action、targetScope、targetIds,并校验 chapter / block target 归属 URL work。 - 成功路径插入
muse_content_governance_action,并通过ContentCommandAuditService.recordSucceededWithAudit(...)写 command/audit/result snapshot。 - 当前实现不写
muse_content_event_publish_outbox;本切片不证明 Events propagation。 - 现有
AdminContentControllerTest/ContentAdminServiceTest只能作为 focused 辅助证据,不能替代 completed-grade HTTP + real PostgreSQL_test。
执行边界
必须先获用户明确批准
实现前必须同时获得以下 4 项批准:
- 批准本轮只审批
content:adminRiskAction一个 operation。 - 批准继续使用 operation-level approval,不把
content加入 domain-level completed allowlist。 - 批准按本执行版修改 scanner、coverage report、P1R gates、新增 Admin RiskAction HTTP+DB
_test、memory 和.agent。 - 批准同步 mixed gate 的 summary / Content / 非目标域防回退断言,目标为
233/145/88/0/0/0与 Content14 completed / 37 needs_verification。
未获上述批准前,不得实施本执行版。
本轮允许变更
获批后只允许修改以下路径:
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/P1rContentAdminRiskActionCompletedApprovalIT.javamuse-cloud/muse-module-content/muse-module-content-server/src/test/java/cn/iocoder/muse/module/content/application/ContentAdminServiceTest.java,仅限补充本执行版缺失的 focused behavior 证据。muse-cloud/muse-module-content/muse-module-content-server/src/test/java/cn/iocoder/muse/module/content/controller/admin/AdminContentControllerTest.java,仅限补充本执行版缺失的 controller contract 证据。docs/agent-specs/.agentdocs/agent-specs/2026-06-13-P1RContentAdminRiskActionCompletedApproval审阅版.mddocs/agent-specs/2026-06-13-P1RContentAdminRiskActionCompletedApproval执行版.mddocs/memorys/2026-06-13-P1RContentAdminRiskAction状态推进.md
如 implementation 发现必须修改 Content 业务实现、OpenAPI、SQL migration、非批准 gate 或其它文件,必须停下说明原因并重新取得用户批准。
本轮禁止变更
- 不修改 7 个 OpenAPI。
- 不修改 Content main/java 业务实现来掩盖 coverage 缺口。
- 不新增或修改 SQL migration。
- 不把
content加入 domain-level completed allowlist。 - 不推进 Content 51/51 completed。
- 不推进 Account remaining 23、Market remaining 28、Content remaining 37 或总 P1R completed。
- 不推进 admin import/export task、Content CRUD 写命令、AI planning candidate、style check、Meta projection、dynamic fields、FileService、import/export/parse operation。
- 不把 Admin Read 的 riskFlag 聚合证据当成
adminRiskActioncompleted 证据。 - 不把 dedicated gate PASS、review PASS、文档结论或已有 Mockito 单测直接等同 completed。
审批清单
| operation key | Method | Path | 目标状态 | 完成证据边界 |
|---|---|---|---|---|
content:adminRiskAction |
POST |
/admin-api/muse/content/works/{workId}/risk-actions |
dedicated / completed |
MockMvc HTTP + 真实 PostgreSQL _test,覆盖 API version、method security RBAC、commandId、replay、command conflict、expectedVersion、row lock、targetScope / targetIds 归属、governance action、command/audit snapshot、tenant 隔离、schema gate、no-write / rollback |
保持 needs_verification 的 Content operation
以下 37 个 operation 必须保持 dedicated / needs_verification:
content:adminListExportTasks
content:adminListImportTasks
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
证据分层
| Evidence | 文件 / 测试 | 目的 |
|---|---|---|
| Operation inventory / coverage gate | P1rApiCoverageReportTest、P1rContentRealApiGateTest 和 mixed gates |
证明只推进获批 1 个 operation,非目标 domain 不回退 |
Admin RiskAction HTTP+DB _test |
新增 P1rContentAdminRiskActionCompletedApprovalIT |
证明 adminRiskAction 经 MockMvc HTTP 入口访问真实 service / mapper / PostgreSQL _test 数据 |
| Tenant / schema gate | P1rContentAdminRiskActionCompletedApprovalIT 内验证 V1-V21 clean migrate 与 governance action 依赖 schema |
证明 Work / Chapter / Block / GovernanceAction / CommandLog / Outbox schema 和 tenant interceptor 真实可用 |
| Method security gate | P1rContentAdminRiskActionCompletedApprovalIT 内启用 method security 与 ss bean |
证明 admin RBAC 缺权限拒绝不是注解反射假证据 |
| Command / audit gate | P1rContentAdminRiskActionCompletedApprovalIT 内读取 muse_content_command_log.result_snapshot |
证明 operationId、side、target、requestSummary、result snapshot 和 replay 语义真实落库 |
| Focused unit/controller tests | ContentAdminServiceTest、AdminContentControllerTest |
支撑 service/controller contract,不替代 HTTP+DB _test |
TDD / 实施步骤
Task 1:Preflight 与 RED gate
- 确认当前 worktree:
git -c core.quotePath=false status --short --branch
期望:
## dev/1.0.0...origin/dev/1.0.0
允许存在本执行版和审阅版文档 diff;不得存在 OpenAPI、业务实现、SQL、scanner、coverage report 或 gate test 的未授权 diff。
- 确认当前 coverage:
jq -r '.summary | [.totalOperations,.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
jq -r '.operations[] | select(.domain=="content" and .operationId=="adminRiskAction") | [.operationId,.implementationStatus,.completionStatus,(.requiresCommandId|tostring),.method,.path] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
期望:
233 144 89 0 0 0
adminRiskAction dedicated needs_verification true POST /admin-api/muse/content/works/{workId}/risk-actions
- TDD RED:先修改 P1R gate 期望值和
adminRiskActioncompleted 断言,但不修改 scanner/report。
RED 目标:
P1rApiCoverageReportTest期望 summarycompleted=145 / needsVerification=88。P1rContentRealApiGateTest期望 Content14 completed / 37 needs_verification,adminRiskActioncompleted。- 7 个 mixed gate 中所有硬编码 Content
13/38或 summary144/89的断言同步为14/37或145/88。
RED 命令:
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \
mvn -o test -pl muse-server -am \
-Dtest=P1rApiCoverageReportTest,P1rContentRealApiGateTest,P1rEventsRealApiGateTest,P1rAiRealApiGateTest,P1rKnowledgeRealApiGateTest,P1rMarketRealApiGateTest,P1rAccountRealApiGateTest,P1rMetaRealApiGateTest \
-Dsurefire.failIfNoSpecifiedTests=false
期望:BUILD FAILURE。失败点必须来自旧 report 仍是 233/144/89 或 adminRiskAction 仍为 needs_verification;不得来自编译错误或无关测试失败。
Task 2:新增 Admin RiskAction HTTP+DB _test
- 新增:
muse-cloud/muse-server/src/test/java/cn/iocoder/muse/server/framework/api/P1rContentAdminRiskActionCompletedApprovalIT.java
测试上下文要求:
- 使用
@SpringBootTest(webEnvironment = MOCK)+WebApplicationContext+MockMvcBuilders.webAppContextSetup(...)。 - 真实
/admin-api/muse/**前缀进入AdminContentController。 - 导入
MuseWebAutoConfiguration,并提供 test-localApiErrorLogCommonApistub,返回CommonResult.success(true),满足GlobalExceptionHandler依赖。 - 启用
@EnableMethodSecurity(securedEnabled = true),并提供@Bean("ss")的 test-localSecurityFrameworkService,权限点必须是muse:content:risk-action。 - 使用真实
ContentAdminServiceImpl、ContentCommandServiceImpl、ContentAuditServiceImpl、真实 mapper 和真实 PostgreSQL_test数据库。 - 注册真实 MyBatis tenant interceptor:
TenantLineInnerInterceptor+TenantDatabaseInterceptor(new TenantProperties())。 - 所有
ContentAdminServiceImpl的@Resource依赖必须可启动;不得只注册 Work/Chapter/Block/GovernanceAction mapper 后让上下文靠 mock 补洞。 - Configuration 必须导入所有 ContentAdminServiceImpl 字段依赖需要的 mapper / service / facade stub;如果某个 facade 不属于本切片,应提供 fail-fast stub,并证明本切片未调用它。
TARGET_VERSION="21",执行 V1-V21 clean migrate。- 数据库密码只能来自环境变量,禁止 JVM system property 或 JDBC query 参数传入。
- 保存并在
@AfterAll恢复p1r.flyway.url/p1r.flyway.usersystem property,避免污染同一 Surefire JVM 后续 Flyway 测试。
建议测试库:
muse_p1r_content_admin_risk_action_completed_approval_test
建议环境变量优先级:
P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_PASSWORD
P1R_CONTENT_COMPLETED_PASSWORD
P1R_FLYWAY_PASSWORD
MUSE_POSTGRES_PASSWORD
standalone 建库与运行前置:
source ~/.config/muse-repo/infra.env
export P1R_FLYWAY_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_COMPLETED_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_APPROVAL_TEST_DB=muse_p1r_content_admin_risk_action_completed_approval_test
PGPASSWORD="$MUSE_POSTGRES_PASSWORD" psql \
-h "$MUSE_POSTGRES_HOST" \
-p "$MUSE_POSTGRES_PORT" \
-U "$MUSE_POSTGRES_USERNAME" \
-d postgres \
-tc "SELECT 1 FROM pg_database WHERE datname = '$P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_APPROVAL_TEST_DB'" | grep -q 1 || \
PGPASSWORD="$MUSE_POSTGRES_PASSWORD" psql \
-h "$MUSE_POSTGRES_HOST" \
-p "$MUSE_POSTGRES_PORT" \
-U "$MUSE_POSTGRES_USERNAME" \
-d postgres \
-c "CREATE DATABASE $P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_APPROVAL_TEST_DB"
执行版 implementation 必须显式拒绝非 _test 数据库名;如果建库变量不是 _test 后缀,测试必须在连接前失败。
- 新增基础 seed 与快照工具。
seed 要求:
- 当前 tenant 的 work,revision 固定为
7。 - 当前 tenant 下属于该 work 的 chapter / block。
- 当前 tenant 下另一个 work、另一个 chapter / block,用于 cross-work target 拒绝。
- 另一个 tenant 的 work / chapter / block,用于 tenant 隔离。
- 当前 login user 为 admin user,tenant 与 visitTenant 都设置为当前 tenant。
错误路径 no-write 快照必须覆盖:
muse_content_work
muse_content_chapter
muse_content_block
muse_content_governance_action
muse_content_command_log
muse_content_event_publish_outbox
快照必须用 row_to_json(t)::text 或等价关键字段快照,不能只比对行数。
- mandatory test matrix。
最低测试类行为:
- 拒绝 unsafe DB 配置:非
_test数据库、JVM password system property、JDBC credential query。 - 验证 schema:V1-V21 clean migrate;
muse_content_governance_action表、关键列、JSONBtarget_ids、unique command 约束、work 索引、updated_at trigger 存在;duplicate(tenant_id, command_id)返回 SQLState23505。 - API version / RBAC:缺或不支持
X-API-Versionno-write;缺muse:content:risk-action权限返回 403 CommonResult 且 no-write;成功请求必须证明ss.hasPermission("muse:content:risk-action")被调用。 - work scope happy path:成功写 1 条 governance action 和 1 条 command/audit envelope,返回
actionId/status/affectedScope/auditLogId;affectedScope=work:{workId};outbox不写。 - chapter / block scope happy path:targetIds 属于 URL work 才能成功;chapter 与 block affectedScope 正确。
- action status:
notify_owner返回pending_notification;warn/restrict/block_content/force_archive返回executed。 - command replay:同 commandId 同请求返回同一
resultSnapshot,不重复插入 governance action、command/audit 或 outbox。 - command conflict:同 commandId 不同 action、reason、targetScope、targetIds、workId 或 expectedVersion 返回 command conflict,且 no-write。
- revision conflict:
expectedVersion与 work revision 不一致返回CONTENT_REVISION_CONFLICT,且 no-write。 - validation / unsupported:缺 commandId、缺 expectedVersion、unsupported action、unsupported targetScope 均拒绝并 no-write。
- targetIds invalid:chapter / block targetIds 为空、含 null、missing、cross-work、cross-tenant、block -> chapter -> work 链路不匹配,均拒绝并 no-write。
- missing / cross tenant work:返回 not found 或不可见语义,不泄露其它 tenant 数据,且 no-write。
- row-lock proxy:至少用
WorkMapper.selectByIdForUpdate源码 / mapper SQL 断言包含FOR UPDATE,并用真实 DB stale expectedVersion 场景证明锁后 revision 校验会拒绝并 rollback。若要做真实并发事务测试,必须保证可重复、无 sleep 竞态和可诊断日志。 - command/audit row fact:断言
muse_content_command_log行级字段tenant_id、command_id、command_type=adminRiskAction、owner_user_id=admin user、target_type=work、target_id=workId、request_hash非空且 replay 时稳定。 - governance action row fact:断言
muse_content_governance_action行级字段tenant_id、work_id、operator_user_id=admin user、command_id、audit_log_id、action、reason、target_scope、target_ids、expected_version、status。 - command/audit snapshot:解析
muse_content_command_log.result_snapshot,断言operationId=adminRiskAction、side=admin、targetType=work、targetId=workId、status=succeeded、reason、requestSummary.action、requestSummary.targetScope、requestSummary.targetIds、requestSummary.expectedVersion、result.actionId/status/affectedScope/auditLogId。
Task 3:Focused tests
- 运行 Content focused tests:
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \
mvn -o test -pl muse-module-content/muse-module-content-server,muse-server -am \
-Dtest=ContentAdminServiceTest,AdminContentControllerTest \
-Dsurefire.failIfNoSpecifiedTests=false
期望:
ContentAdminServiceTest: pass
AdminContentControllerTest: pass
BUILD SUCCESS
如执行版实现发现 focused tests 缺少审阅版硬门槛,可只在允许范围内补充测试,不得改 main/java。
Task 4:GREEN scanner / report
- scanner 只追加 operation-level key:
content:adminRiskAction
禁止修改:
APPROVED_COMPLETED_DOMAINS
- 重新生成 coverage report:
python3 muse-cloud/scripts/p1r-audit-api-coverage.py --check
期望 summary:
233 145 88 0 0 0
期望 Content:
completed=14
needsVerification=37
期望 operation:
adminRiskAction dedicated completed true
仍必须抽样断言这些非目标 operation 保持 needs_verification:
adminListImportTasks
adminListExportTasks
createWork
updateWork
createChapter
mergeBlockSuggestion
exportWork
listPlanningCandidates
createStyleCheck
getStyleCheckResult
Task 5:P1R mixed gates
- 运行 P1R mixed gates:
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \
mvn -o test -pl muse-server -am \
-Dtest=P1rApiCoverageReportTest,P1rContentRealApiGateTest,P1rEventsRealApiGateTest,P1rAiRealApiGateTest,P1rKnowledgeRealApiGateTest,P1rMarketRealApiGateTest,P1rAccountRealApiGateTest,P1rMetaRealApiGateTest \
-Dsurefire.failIfNoSpecifiedTests=false
期望:
P1rApiCoverageReportTestsummary 为233/145/88/0/0/0。P1rContentRealApiGateTestContent 为14/37,adminRiskActioncompleted。P1rEventsRealApiGateTest、P1rAiRealApiGateTest、P1rKnowledgeRealApiGateTest、P1rMarketRealApiGateTest、P1rAccountRealApiGateTest、P1rMetaRealApiGateTest内所有 Content partial approval 防回退断言同步为14/37。- AI 41、Knowledge 59、Events 1、Meta 16、Account 10、Market 4 状态不回退。
Task 6:Content combined DB gate
- 使用独立
_test库组合运行 Content completed approval DB gates:
source ~/.config/muse-repo/infra.env
export P1R_FLYWAY_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_COMPLETED_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_ADMIN_RISK_ACTION_COMPLETED_PASSWORD="$MUSE_POSTGRES_PASSWORD"
export P1R_CONTENT_ADMIN_RISK_ACTION_COMBINED_TEST_DB=muse_p1r_content_admin_risk_action_combined_test
PGPASSWORD="$MUSE_POSTGRES_PASSWORD" psql \
-h "$MUSE_POSTGRES_HOST" \
-p "$MUSE_POSTGRES_PORT" \
-U "$MUSE_POSTGRES_USERNAME" \
-d postgres \
-tc "SELECT 1 FROM pg_database WHERE datname = '$P1R_CONTENT_ADMIN_RISK_ACTION_COMBINED_TEST_DB'" | grep -q 1 || \
PGPASSWORD="$MUSE_POSTGRES_PASSWORD" psql \
-h "$MUSE_POSTGRES_HOST" \
-p "$MUSE_POSTGRES_PORT" \
-U "$MUSE_POSTGRES_USERNAME" \
-d postgres \
-c "CREATE DATABASE $P1R_CONTENT_ADMIN_RISK_ACTION_COMBINED_TEST_DB"
cd muse-cloud
JAVA_HOME=$(/usr/libexec/java_home -v 21) PATH="$JAVA_HOME/bin:$PATH" \
mvn -o test -pl muse-server -am \
-Dtest=P1rContentAdminRiskActionCompletedApprovalIT,P1rContentAdminReadCompletedApprovalIT,P1rContentPlanningCompletedApprovalIT,P1rContentCoreCompletedApprovalIT,P1rContentEventsPublishFlywayMigrationIT \
-Dflyway.postgresql.transactional.lock=false \
-Dp1r.flyway.locations=filesystem:sql/muse \
-Dp1r.flyway.url="jdbc:postgresql://$MUSE_POSTGRES_HOST:$MUSE_POSTGRES_PORT/$P1R_CONTENT_ADMIN_RISK_ACTION_COMBINED_TEST_DB" \
-Dp1r.flyway.user="$MUSE_POSTGRES_USERNAME" \
-Djava.net.useSystemProxies=false \
-DsocksProxyHost= -DsocksProxyPort= \
-Dhttp.proxyHost= -Dhttp.proxyPort= \
-Dhttps.proxyHost= -Dhttps.proxyPort= \
-Dsurefire.failIfNoSpecifiedTests=false
要求:
- 所有类 tests > 0。
- failures=0、errors=0、skipped=0。
- 证明新增 Admin RiskAction IT 不污染同 JVM 的 Flyway system properties。
- 如 first run 暴露 password env 缺失或 system property 污染,必须修复后重跑,并记录失败根因与修复。
Task 7:XML 防空跑
- 检查以下 XML 必须存在、mtime 在本轮验证窗口内、tests > 0、failures/errors/skipped 均为 0:
P1rContentAdminRiskActionCompletedApprovalIT
P1rContentAdminReadCompletedApprovalIT
P1rContentPlanningCompletedApprovalIT
P1rContentCoreCompletedApprovalIT
P1rContentEventsPublishFlywayMigrationIT
ContentAdminServiceTest
AdminContentControllerTest
P1rApiCoverageReportTest
P1rContentRealApiGateTest
P1rEventsRealApiGateTest
P1rAiRealApiGateTest
P1rKnowledgeRealApiGateTest
P1rMarketRealApiGateTest
P1rAccountRealApiGateTest
P1rMetaRealApiGateTest
防空跑脚本可用 shell / awk / xmllint / existing local pattern,但不得把 XML 旧产物当 fresh evidence。
Task 8:Protected diff / final checks
- 运行:
git diff --check
- 确认 protected diff 为空:
git diff --name-only -- docs/api-contracts muse-cloud/muse-module-content/muse-module-content-server/src/main/java muse-cloud/sql/muse
期望:无输出。
- 确认 scanner/report 目标:
jq -r '.summary | [.totalOperations,.completedOperations,.needsVerificationOperations,.incompleteOperations,.genericPersistenceOperations,.ssePlaceholderOperations] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
jq -r '.operations[] | select(.domain=="content" and (.operationId=="adminRiskAction" or .operationId=="adminListExportTasks" or .operationId=="adminListImportTasks" or .operationId=="createWork" or .operationId=="exportWork" or .operationId=="createStyleCheck")) | [.operationId,.implementationStatus,.completionStatus,(.requiresCommandId|tostring)] | @tsv' docs/superpowers/reports/p1r-api-coverage.json
期望:
233 145 88 0 0 0
adminRiskAction dedicated completed true
adminListExportTasks dedicated needs_verification false
adminListImportTasks dedicated needs_verification false
createWork dedicated needs_verification false
exportWork dedicated needs_verification false
createStyleCheck dedicated needs_verification true
Review gate
本执行版写完后必须先进行 fresh execution review:
-
fresh execution spec/scope review:
- 确认只覆盖
content:adminRiskAction。 - 确认不夹带 admin import/export task、Content CRUD 写命令、Content domain-level completed 或其它 domain。
- 确认目标值
233/145/88与 Content14/37能从当前233/144/89与 Content13/38加 1 个 operation 机械推导。 - 确认 allowed / prohibited diff 自洽。
- 确认只覆盖
-
fresh execution quality/feasibility/testing review:
- 确认 HTTP+DB
_testharness 可复用现有 Admin Read / Planning 模式落地。 - 确认 method security、tenant interceptor、command replay/conflict、expectedVersion/row lock、targetScope / targetIds、governance action、command/audit snapshot、no-write / rollback、schema gate、XML 防空跑和 mixed gate 同步都可验证。
- 确认不需要改 OpenAPI、Content main/java 或 SQL migration。
- 确认 HTTP+DB
双 PASS 后,仍不代表 adminRiskAction completed。必须由用户明确批准执行边界后才允许进入 implementation。
Rollback
如果实现后需要回滚本切片:
- 从
APPROVED_COMPLETED_OPERATIONS删除content:adminRiskAction。 - 重新运行 scanner,恢复 report summary 到
233/144/89/0/0/0。 - 恢复
P1rApiCoverageReportTest、P1rContentRealApiGateTest和 mixed gates 的 summary / Content count /adminRiskAction断言。 - 删除
P1rContentAdminRiskActionCompletedApprovalIT。 - 删除或修订对应 memory /
.agent状态推进记录。 - 保留 OpenAPI、Content main/java、SQL migration 无 diff。
完成条件
只有同时满足以下条件,才允许汇报本切片具备提交候选条件:
- 用户已批准执行版四项前置条件。
- RED gate 先失败且失败点正确。
P1rContentAdminRiskActionCompletedApprovalITfresh pass,且 XML 防空跑通过。- Content focused tests fresh pass。
- scanner
--checkfresh pass,summary 为233/145/88/0/0/0。 - P1R mixed gates fresh pass。
- Content combined DB gate fresh pass。
- protected OpenAPI / Content main/java / SQL diff 为空。
git diff --check通过。.agent和docs/memorys留痕明确说明 Content 仍不是 51/51 completed。- fresh implementation spec/correctness review + fresh quality/data-integrity/testing review 双 PASS。