flower-trellis 0.6.1-beta.0 → 0.6.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/enhancements/0.6/.agents/skills/trellis-check-all/references/full-profile.md +15 -0
  2. package/enhancements/0.6/.agents/skills/trellis-check-all/references/light-profile.md +8 -0
  3. package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md +2 -1
  4. package/enhancements/0.6/.agents/skills/trellis-maven-verify/SKILL.md +101 -0
  5. package/enhancements/0.6/.agents/skills/trellis-maven-verify/agents/openai.yaml +4 -0
  6. package/enhancements/0.6/.agents/skills/trellis-maven-verify/references/evidence-contract.md +65 -0
  7. package/enhancements/0.6/.agents/skills/trellis-maven-verify/references/lifecycle-policy.md +81 -0
  8. package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +14 -14
  9. package/enhancements/0.6/.agents/skills/trellis-push/references/completed-task-recovery.md +19 -0
  10. package/enhancements/0.6/.agents/skills/trellis-push/references/output-templates.md +5 -2
  11. package/enhancements/0.6/.agents/skills/trellis-route/references/check-all-agent-body.md +1 -0
  12. package/enhancements/0.6/.claude/skills/trellis-check-all/references/full-profile.md +15 -0
  13. package/enhancements/0.6/.claude/skills/trellis-check-all/references/light-profile.md +8 -0
  14. package/enhancements/0.6/.claude/skills/trellis-check-all/references/reporting-and-disposition.md +2 -1
  15. package/enhancements/0.6/.claude/skills/trellis-maven-verify/SKILL.md +101 -0
  16. package/enhancements/0.6/.claude/skills/trellis-maven-verify/agents/openai.yaml +4 -0
  17. package/enhancements/0.6/.claude/skills/trellis-maven-verify/references/evidence-contract.md +65 -0
  18. package/enhancements/0.6/.claude/skills/trellis-maven-verify/references/lifecycle-policy.md +81 -0
  19. package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +14 -14
  20. package/enhancements/0.6/.claude/skills/trellis-push/references/completed-task-recovery.md +19 -0
  21. package/enhancements/0.6/.claude/skills/trellis-push/references/output-templates.md +5 -2
  22. package/enhancements/0.6/overrides/bundles/maven-verification.json +11 -0
  23. package/enhancements/0.6/overrides/conflicts.json +13 -13
  24. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/completed-route-content.md +1 -1
  25. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/content.md +3 -3
  26. package/enhancements/0.6/overrides/patches/skills/trellis-finish-work/exact-bookkeeping/content.md +12 -2
  27. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/active-task-lifecycle-content.md +4 -4
  28. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-content.md +1 -1
  29. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-managed-baseline.md +2 -1
  30. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-modification-content.md +1 -1
  31. package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-implement-content.md +2 -0
  32. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-content.md +4 -5
  33. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-content.md +1 -1
  34. package/enhancements/0.6/scripts/maven_verify.py +3122 -0
  35. package/enhancements/MANIFEST.json +6 -2
  36. package/package.json +3 -3
  37. package/src/builtin-plugins/skill-garden/content-adapter.js +13 -2
  38. package/src/constants.js +10 -0
  39. package/src/lib/copy-scripts.js +8 -0
  40. package/src/lib/copy-skills.js +5 -2
  41. package/src/lib/skill-catalog.js +1 -0
@@ -120,6 +120,21 @@ full 提取所有适用条目。每条记录来源位置,实际阅读对应代
120
120
 
121
121
  验证失败时记录命令、退出状态和关键错误到统一问题集合,继续其它独立验证。可能写业务数据或外部系统的验证不直接运行,按真正阻塞规则处理。
122
122
 
123
+ ### Maven Evidence 复用
124
+
125
+ 实际变更位于 Maven reactor 时,按 `maven_verify.py` 的 evidence schema 只读执行:
126
+
127
+ ```bash
128
+ python3 ./.trellis/scripts/maven_verify.py check --latest --require-plan <final-plan.json>
129
+ ```
130
+
131
+ - `reusable`:核对 lifecycle、模块、消费者、测试、附属制品和 skip 项后纳入验证证据。
132
+ - `partial`:记录未覆盖的 module/consumer/test/artifact 或更高 lifecycle 要求。
133
+ - `stale`:记录源码、测试、POM、外部父 POM、Git 或工具链失效原因。
134
+ - `failed` / `blocked`:保留命令退出或证据损坏事实,不把未执行验证写成通过。
135
+
136
+ Check-All 与 dedicated subagent 都是 audit-only:不得调用 `maven_verify.py plan/run`,不得运行任何会写 `target/`、本地仓库或缓存的 Maven goal。缺少可复用 evidence 时,输出由主会话或 implement 路径执行的精确重跑计划需求;不得默认 `clean package/install`、`-amd` 或全 reactor。
137
+
123
138
  所有发现候选按 `references/fallback-findings.md` 先判定 `CHK-*` / `FBK-*`,再分配严重度。严重度不得反向决定通道;不满足三项硬准入的泛化建议不报告,保护收益或验证环境不完整则保留 FBK 并标记报告缺口。
124
139
 
125
140
  ---
@@ -59,6 +59,14 @@ untracked 上下文没有 task artifacts,本维度标记 `N/A`,不得根据
59
59
 
60
60
  在 Check-All 内执行时,`trellis-check` 中任何直接修复、补测试、反复修到通过的指令一律失效。验证失败记录为 `CHK-*` 并继续其它独立验证。
61
61
 
62
+ 实际变更位于 Maven reactor 时,按 `maven_verify.py` 的 evidence schema 只调用:
63
+
64
+ ```bash
65
+ python3 ./.trellis/scripts/maven_verify.py check --latest --require-plan <final-plan.json>
66
+ ```
67
+
68
+ `reusable` 计入定向验证;`partial` / `stale` / `failed` / `blocked` 记录精确验证缺口、原因和所需计划。Check-All 是 audit-only,不得调用 `plan` / `run` 或任何 Maven goal;Maven model/goal 可能写 `target/`、本地仓库或缓存。没有 Maven evidence 时不得无条件全仓构建,报告由主会话或 implement 路径执行的精确重跑需求。
69
+
62
70
  所有发现候选按 `references/fallback-findings.md` 先判定 `CHK-*` / `FBK-*`,再分配严重度。不得因场景极端、修复困难或影响较低改变根因通道;不满足三项硬准入的泛化建议不报告,保护收益或验证环境不完整则保留 FBK 并标记报告缺口。
63
71
 
64
72
  ---
@@ -44,7 +44,7 @@
44
44
 
45
45
  `FBK-*` 分类只由具体位置、可达场景和问题证据三项硬准入决定。保护收益与验证方式属于报告完整度;缺少环境时保留 ID 和已有证据,标记 `部分验证`,不得伪报 strict pass。
46
46
 
47
- `CHK-*` 与 `FBK-*` 分开编号。同一根因的多个位置合并到一个问题;报告按严重度排序,但不得因此重排已经分配的 ID。新根因使用对应通道的下一个 ID。每个问题的处置状态默认为待处理且不加标签,只有 `已接受风险` 才在条目标题行末尾追加 `` `[已接受风险]` `` 标签。`仅保留报告` 不改变处置状态,相关问题仍不加标签。处置状态不改变 ID、通道和严重度。
47
+ `CHK-*` 与 `FBK-*` 分开编号。同一根因的多个位置合并到一个问题;严重度排序只在各自通道内部生效,每个通道内部按 `P0 -> P1 -> P2` 展示,但不得因此重排已经分配的 ID。跨通道报告顺序固定为完整 `CHK-*` 区块在前、完整 `FBK-*` 区块在后;禁止因 FBK 严重度更高、分类时先判断 FBK、发现先后或 ID 分配时机而 FBK-first、交错两类问题或省略分区标题。新根因使用对应通道的下一个 ID。每个问题的处置状态默认为待处理且不加标签,只有 `已接受风险` 才在条目标题行末尾追加 `` `[已接受风险]` `` 标签。`仅保留报告` 不改变处置状态,相关问题仍不加标签。处置状态不改变 ID、通道和严重度。
48
48
 
49
49
  ## 风险接受
50
50
 
@@ -144,6 +144,7 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
144
144
  - 每个问题的受影响位置合并进 `证据`,不再单列「位置」行。`证据` 写成不带值的 `- **证据**` 后接子项列表,一个受影响 `file:line` 一条子项,不得用 `;` 把多个位置堆进一行,也不得只写概括性描述。
145
145
  - 没有 `DOC-*` 自动修复时省略“自动修复”区。
146
146
  - 没有 `CHK-*` 时省略“主路径问题”区;没有 `FBK-*` 时省略“兜底问题”区。
147
+ - 同时存在两类问题时,`### 主路径问题` 及其全部 `CHK-*` 必须完整出现在 `### 兜底问题` 及其全部 `FBK-*` 之前;不得按全局严重度排序反转或交错两个区块。
147
148
  - 存在未处置 `CHK-*` 或 `FBK-*` 时展示“修复批次”,并只在报告末尾提供一次处置选择,不再逐项提问。
148
149
  - `修复全部` 始终覆盖全部 `CHK-*` 与 `FBK-*`;精确修复可以混合两类 ID。
149
150
  - 风险接受可以混合两类 ID;只有全部剩余问题都已有效接受时才形成“通过·已接受风险”。
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: trellis-maven-verify
3
+ description: 为 Trellis 的 Maven/Java 项目生成分层验证计划、裁剪多模块 reactor 与昂贵 lifecycle goal,并执行或复用可审计证据。用于 Java 8 或大型 Maven 多模块编译很慢、`-am` 拉起过多模块、compile/package 额外运行 sources jar、copy-dependencies、repackage、shade、assembly、javadoc、frontend 等 goal,或 implement 与 Check-All 之间需要避免重复构建时;不用于发布、deploy、修改 POM/settings/JDK 或非 Maven 构建系统。
4
+ ---
5
+
6
+ # Trellis Maven Verify
7
+
8
+ 为 Maven 验证选择最短且足够的生命周期,并让 implement 产生的结果能被 Check-All 只读复用。不要修改业务 POM、Maven settings、JDK 或本地仓库。
9
+
10
+ ## 选择模式
11
+
12
+ - `quick`:编码过程中的局部反馈。默认选择变更模块并加 `-am` 覆盖必要上游;compile 且 compiler plugin 兼容时使用 source-stale,避免陈旧 SNAPSHOT 和无变化整模块重编。不得把结果宣称为最终消费者覆盖。
13
+ - `final`:implement 收口。覆盖变更模块、必要上游和已确认消费者,默认使用 conservative 编译并生成可复用 evidence。只有任务材料已确认模块内部低风险变化时,才显式选择 source-stale。
14
+ - `reuse`:Check-All 或复查阶段。只运行 `check`,不得运行会写 `target/`、本地仓库或缓存的 Maven goal。
15
+
16
+ 没有 `pom.xml` 时报告 `N/A` 并返回原工作流。需要决定业务测试、消费者或制品验收范围时,先从 PRD、design、implement、项目 spec 或用户输入获取,不要猜测。
17
+
18
+ ## 工作流
19
+
20
+ 1. 读取 [references/lifecycle-policy.md](references/lifecycle-policy.md),确定需要的最低 lifecycle、测试和附属制品。
21
+ 2. 生成计划。优先把计划写入 gitignored runtime 目录:
22
+
23
+ ```bash
24
+ python3 ./.trellis/scripts/maven_verify.py plan \
25
+ --mode quick \
26
+ --goal compile \
27
+ --output .trellis/.runtime/maven-verification/quick-plan.json
28
+ ```
29
+
30
+ 3. 检查 JSON 中的 `status`、`selectedModules`、`argv`、`toolchain.maven.buildSide`、`toolchain.maven.source`、`lifecycle.expensiveBindings`、`warnings` 和 `confidence`。`blocked` 不得执行;`not-applicable` 返回原工作流。
31
+ - quick 的 `compileStrategy.effective=source-stale` 只证明局部源码 stale 编译,不覆盖公共 API/ABI、常量内联、注解处理器、POM或资源契约风险。
32
+ - `fallbackArgv` 存在时,它保留 reactor 范围但恢复 conservative 编译;source-stale 结果异常时可按该 argv 重跑。
33
+ - 是否使用并行由模型结合 reactor 范围、依赖拓扑、插件线程安全、测试共享资源和机器资源自行决定;不得为了选择并行度额外重复构建。
34
+ 4. 只有 implement 或具备正常构建写权限的主会话可以执行计划:
35
+
36
+ ```bash
37
+ python3 ./.trellis/scripts/maven_verify.py run \
38
+ --plan-json .trellis/.runtime/maven-verification/quick-plan.json
39
+ ```
40
+
41
+ 5. 交付前用 `final` 重做计划。显式传入已确认消费者;不要用全仓 `-amd` 代替影响分析:
42
+
43
+ ```bash
44
+ python3 ./.trellis/scripts/maven_verify.py plan \
45
+ --mode final \
46
+ --goal test \
47
+ --consumer api-app \
48
+ --output .trellis/.runtime/maven-verification/final-plan.json
49
+ python3 ./.trellis/scripts/maven_verify.py run \
50
+ --plan-json .trellis/.runtime/maven-verification/final-plan.json
51
+ ```
52
+
53
+ 只有任务材料明确确认没有公共 API/DTO/常量、注解处理器、POM、资源契约或跨模块协议变化时,才可把 final 改为:
54
+
55
+ ```bash
56
+ python3 ./.trellis/scripts/maven_verify.py plan \
57
+ --mode final \
58
+ --goal compile \
59
+ --compile-strategy source-stale \
60
+ --output .trellis/.runtime/maven-verification/final-plan.json
61
+ ```
62
+
63
+ 6. Check-All 只读复用 evidence:
64
+
65
+ ```bash
66
+ python3 ./.trellis/scripts/maven_verify.py check \
67
+ --latest \
68
+ --require-plan .trellis/.runtime/maven-verification/final-plan.json
69
+ ```
70
+
71
+ 7. 按 [references/evidence-contract.md](references/evidence-contract.md) 解释 `reusable`、`partial`、`stale`、`failed`、`blocked`。覆盖不足时报告精确重跑缺口,不要无条件全仓构建。
72
+
73
+ ## 执行边界
74
+
75
+ - 构建侧由 Maven 根所在的原生文件系统决定。原生 Windows/Linux 使用本侧工具链;WSL 的 drvfs/9p Windows 盘项目使用 Windows Maven/JDK/本地仓库,不依赖 automount root 是否为 `/mnt`;WSL ext4 项目使用 Linux Maven/JDK/本地仓库。
76
+ - 默认优先同侧项目 wrapper,其次复用同侧 PATH 中的 Maven;不下载、不安装、不固定升级 Maven 3.9+。显式 `--maven-executable` 只能覆盖为同侧 Maven。
77
+ - Maven、JDK、`MAVEN_ARGS`/`MAVEN_OPTS`、settings 和本地仓库必须来自同一构建侧。Windows 项目显式指向 WSL ext4 Maven/仓库,或 POSIX 项目指向 Windows Maven/仓库时必须 blocked。
78
+ - 默认停在 `compile`;只有测试验收进入 `test`,只有制品验收进入 `package` 或更后阶段。
79
+ - 默认不加 `clean`、`install`、`deploy`、`-amd`;是否显式传入并行参数由模型根据当前项目和验证目标判断。
80
+ - quick auto 只在 effective model 确认 `maven-compiler-plugin >= 3.1` 时加入 `-Dmaven.compiler.useIncrementalCompilation=false`;无法确认时自动降级 conservative。显式 source-stale 无法确认兼容性时必须 blocked。
81
+ - final auto 固定为 conservative。不要从文件名猜测低风险;必须从 PRD、design、implement、spec 或用户确认获得风险口径。
82
+ - 模型可以为存在并行空间的多模块 reactor 选择 `--threads`,也可以因依赖链近似串行、插件非线程安全、测试共享端口/文件、CPU、内存或 I/O 压力而保持串行。常规 implement 只执行当前选定的一份计划,不通过额外试跑比较并行度;Check-All 仍只读复用 evidence。
83
+ - skip 参数只能来自脚本已确认的插件兼容表或 effective model 证据;不得自行拼接。
84
+ - effective POM 无法读取时,计划必须 `blocked` 或明确降低置信度,不能声称外部父 POM没有额外绑定。
85
+ - `quick` 成功只能作为局部反馈。最终报告必须给出 evidence 路径、覆盖等级、模块、测试、跳过项和剩余风险。
86
+ - audit-only Check-All subagent 只能调用 `check`。不得调用 `plan` 或 `run`,因为 Maven model/goal 可能写本地缓存;`check` 对项目 wrapper 只复核冻结版本、wrapper 文件与配置指纹,不执行可能下载 Maven 发行包的 wrapper。
87
+
88
+ ## 常用参数
89
+
90
+ - `--maven-root <path>`:仓库含多个 Maven reactor 时显式选择根目录。
91
+ - `--module <selector>` / `--consumer <selector>`:使用真实 module 相对路径或 artifactId,可重复。
92
+ - `--test <pattern>`:生成 `-Dtest=` 并进入测试覆盖证据,可重复。
93
+ - `--artifact sources|javadoc|assembly|shade|repackage|copy-dependencies`:声明附属制品验收。
94
+ - `--offline yes|no|auto`:只有项目或用户已确认离线依赖完整时使用 `yes`。
95
+ - `--local-repository <path>`:显式使用已准备好的同侧 Maven 本地仓库。不会自动复制仓库、修改 `settings.xml`,也不会让 Windows Maven跨到 WSL ext4 仓库。
96
+ - `--compile-strategy auto|conservative|source-stale`:quick compile 的 auto 可选择 source-stale;final auto 保守。source-stale 只适用于 compile。
97
+ - `--threads <count|multiplierC>`:模型按当前 reactor、插件和机器资源选择的 Maven 并行度,例如 `4`、`1C`、`1.5C`;不为选择该值额外执行对比构建。
98
+ - `--effective-pom <file>`:使用已冻结的 effective POM 做离线分析;文件内容仍进入 POM 指纹。
99
+ - `--maven-executable <path>`:显式选择同侧 Maven。通常无需传入;默认会复用同侧 wrapper 或 PATH Maven。WSL 调用 Windows `.cmd` 时由脚本使用固定 `cmd.exe` argv 包装,不拼接任意 shell 命令。
100
+
101
+ 脚本的 `--help` 是参数事实源;本 Skill 只维护流程和边界。
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Maven 分层验证"
3
+ short_description: "加速 Maven 增量验证并复用可审计的分层证据"
4
+ default_prompt: "使用 $trellis-maven-verify 为当前 Maven 变更生成安全、快速且可复用的验证计划。"
@@ -0,0 +1,65 @@
1
+ # Maven Evidence Contract
2
+
3
+ ## 目录
4
+
5
+ 1. 状态
6
+ 2. 新鲜度
7
+ 3. 覆盖关系
8
+ 4. Check-All 边界
9
+
10
+ ## 状态
11
+
12
+ - `reusable`:证据成功、新鲜,且覆盖全部当前要求。
13
+ - `partial`:证据仍新鲜,但 lifecycle、模块、消费者、测试或附属制品覆盖不足。
14
+ - `stale`:源码、测试、POM、effective model、Git HEAD、JDK 主版本或 Maven 版本发生变化。
15
+ - `failed`:原 Maven 命令非零退出或被中断。
16
+ - `blocked`:证据损坏、schema 不支持,或当前 Git/POM/工具链无法读取。
17
+
18
+ ## 新鲜度
19
+
20
+ 证据至少绑定:
21
+
22
+ - Git HEAD、Maven 根下 staged/unstaged/untracked 内容指纹;
23
+ - reactor 全部 POM 与使用的 effective POM内容指纹;
24
+ - 完整 argv、工作目录、module/consumer/test/artifact 选择;
25
+ - `.mvn/jvm.config`、`.mvn/maven.config`、`MAVEN_ARGS`、`MAVEN_OPTS` 中影响覆盖的参数,包括测试跳过属性;
26
+ - Java 主版本、Maven 版本、项目 `buildSide`、执行 runner 与可确认的本地仓库构建侧/宿主路径;
27
+ - 退出码、耗时、日志路径与内容摘要、测试统计。
28
+
29
+ runtime evidence 位于 `.trellis/.runtime/maven-verification/`,不得提交。证据损坏时不要删除或覆盖;报告 `blocked` 并保留现场。
30
+
31
+ - 计划同时记录可跨等价工作区比较的语义指纹,以及绑定本机绝对路径和全部执行字段的完整性指纹;`run` 和 `check --require-plan` 必须同时重算并拒绝不一致计划。
32
+ - Maven 模型输入中的绝对路径仅用于诊断;跨工作区语义指纹只绑定稳定输入 ID 与内容摘要,不能因用户名或 checkout 路径不同而漂移。
33
+ - evidence 必须有完整内容指纹,`check` 在读取状态或覆盖前先校验,不能信任被修改的顶层 coverage。
34
+ - quick/final mode、compile strategy 和显式 threads 都属于计划语义;任一变化必须改变 plan fingerprint。Check-All 使用 `--require-plan` 时,source-stale quick 不得冒充 conservative final。
35
+ - `buildSide`、runner、Maven executable 和本地仓库侧是本机完整性与新鲜度条件。计划生成、effective POM、run 或 check 任一步发生跨侧切换时 evidence 必须 `stale` 或 `blocked`。
36
+ - 命令日志必须记录内容摘要;日志缺失、截断或被改写时 evidence 为 `stale`,不能只检查路径存在。
37
+ - `run` 分别捕获执行前和执行后输入;源码、POM或工具链在 Maven 执行窗口内变化时,保留日志但把 evidence 标为 `stale`。
38
+ - `check --latest` 以 evidence 文件命名顺序选择最新候选;最新文件损坏时直接 `blocked`,不得静默回退旧成功 evidence。
39
+
40
+ ## 覆盖关系
41
+
42
+ - 高 lifecycle 可以覆盖同模块的低 lifecycle,但不能反向覆盖。
43
+ - `compile` 不能满足 `test` 或 `package`。
44
+ - 跳过测试的 `test/package` 命令不能满足测试通过要求。
45
+ - 附属制品逐项匹配。跳过 sources 的 package 不能满足 sources artifact 要求。
46
+ - evidence 的 module/consumer 集合必须包含全部要求;额外模块不抵消缺失模块。
47
+ - 测试模式按计划中的明确 pattern 匹配;未声明 pattern 的普通 test 只证明计划范围内的默认测试集。
48
+
49
+ ## Check-All 边界
50
+
51
+ Check-All 调用:
52
+
53
+ ```bash
54
+ python3 ./.trellis/scripts/maven_verify.py check --latest --require-plan <plan.json>
55
+ ```
56
+
57
+ `check` 只读取 Git、POM、evidence 和工具链指纹。普通已安装 Maven 可做只读版本探测;项目 wrapper 只复用冻结版本并校验 wrapper 文件与配置指纹,不执行可能下载发行包的 wrapper。它不执行 Maven goal、不创建 target、不下载依赖、不写本地仓库。
58
+
59
+ 当结果不是 `reusable` 时:
60
+
61
+ - 报告状态和每个 `reason.code`;
62
+ - 引用 `required` 与 `actual`;
63
+ - 给出原计划或重新生成计划的精确命令;
64
+ - audit-only subagent 停止在报告,不自行重跑;
65
+ - 主会话只有在当前请求允许写构建缓存时才进入 `plan` / `run`。
@@ -0,0 +1,81 @@
1
+ # Maven Lifecycle Policy
2
+
3
+ ## 目录
4
+
5
+ 1. 生命周期覆盖
6
+ 2. 昂贵绑定
7
+ 3. 模块范围
8
+ 4. 编译策略与并行
9
+ 5. 计划升级条件
10
+
11
+ ## 生命周期覆盖
12
+
13
+ 按以下偏序判断普通 Maven lifecycle 覆盖:
14
+
15
+ ```text
16
+ validate < compile < test < package < verify < install < deploy
17
+ ```
18
+
19
+ 附属 goal 独立判断,不能从普通 lifecycle 自动推出:
20
+
21
+ - `sources`、`javadoc`、`assembly`、`shade`、`repackage`、`copy-dependencies` 分别记录。
22
+ - `-DskipTests` 不产生测试通过证据。
23
+ - `-Dmaven.test.skip=true` 同时跳过 test compilation,不能满足测试编译或测试运行要求。
24
+ - `-Dmaven.source.skip=true` 不影响普通 compile 证据,但不能满足 sources 制品验收。
25
+ - `-Dmaven.compiler.useIncrementalCompilation=false` 在已确认兼容的 compiler plugin 上按源文件/class stale 判断;它只用于 compile 局部反馈,不能自动满足 conservative final。
26
+
27
+ ## 昂贵绑定
28
+
29
+ | 插件/goal | 常见阶段 | 默认处理 |
30
+ | --- | --- | --- |
31
+ | `maven-source-plugin:jar*` | compile/package | 非 sources 验证可在确认参数后跳过 |
32
+ | `maven-dependency-plugin:copy-dependencies` | prepare-package | compile/test 不进入;package 明示复制成本 |
33
+ | `spring-boot:repackage` | package | 只在可运行制品验收时进入 |
34
+ | `maven-shade-plugin:shade` | package | 只在 shaded artifact 验收时进入 |
35
+ | `maven-assembly-plugin:*` | package | 只在 assembly 验收时进入 |
36
+ | `maven-javadoc-plugin:*` | package/verify | 非文档制品验收优先停在更早阶段 |
37
+ | frontend install/build goal | generate-resources 等 | 不自动跳过;报告绑定、阶段和项目风险 |
38
+
39
+ 插件绑定来自 effective POM;只扫描仓库原始 POM不能排除外部父 POM继承。
40
+
41
+ - execution 没有显式 `<phase>` 时,只能使用脚本内已确认的 plugin goal 默认阶段兼容表。
42
+ - 已识别为昂贵 goal、但默认阶段仍未知时,计划必须降低 `confidence` 并报告 `binding-phase-unknown`;不得当成“当前 lifecycle 不会执行”。
43
+ - 只有全部命中的 `maven-source-plugin` 版本都在兼容表覆盖范围内时,才可自动添加 `-Dmaven.source.skip=true`;版本缺失或过旧时报告 `sources-skip-unsupported`。
44
+ - 只有全部命中的主源码 `maven-compiler-plugin:compile` 版本都为 3.1 或更高时,quick auto 才可添加 `-Dmaven.compiler.useIncrementalCompilation=false`。无法确认时降级 conservative;显式 source-stale 失败关闭。
45
+
46
+ ## 模块范围
47
+
48
+ - 构建侧由 Maven 根所在的原生文件系统决定:原生 Windows/Linux 使用本侧工具链;WSL Windows 挂载项目使用 Windows Maven/JDK/settings/本地仓库,WSL ext4 项目使用 Linux 工具链。不得因 Codex 运行在 WSL 就强制所有项目使用 Linux Maven。
49
+ - 自动 Maven 选择顺序是同侧项目 wrapper、同侧 PATH Maven;不自动安装或升级 Maven。Maven 3.9+ 的 `MAVEN_ARGS` 等能力只在当前已选 Maven 实际支持时生效。
50
+ - Windows 与 WSL 路径可在 evidence 中双表示,但 Maven、JDK、环境、settings 和本地仓库不能跨侧混搭。显式参数无法映射到项目构建侧时失败关闭。
51
+ - 把变更文件映射到最近的 reactor module POM。
52
+ - 根 POM以及 `.mvn/maven.config`、`jvm.config`、extensions、wrapper 配置变化按全 reactor 风险处理。
53
+ - `MAVEN_ARGS` 只在 Maven 3.9+ 计入有效参数;旧版本保留诊断信息,但不能据此判断测试、制品或本地仓库覆盖。
54
+ - Maven 从 Linux 侧访问位于 `9p`、`drvfs`、CIFS/NFS 等高延迟小文件文件系统的本地仓库时,计划必须报告 `local-repository-high-latency-filesystem`。Windows Maven 原生访问 Windows 盘时不得仅因 WSL 宿主视图是 `9p` 就误报。只有调用方已准备同侧完整仓库时,才通过 `--local-repository` 显式切换;不得自动复制仓库、修改 `settings.xml` 或把不完整仓库用于离线验证。
55
+ - `quick` 选择变更模块并默认加 `-am`,覆盖必要上游而不读取陈旧本地 SNAPSHOT。source-stale 的 `fallbackArgv` 保持相同 reactor 范围,但恢复 conservative 编译。
56
+ - `final` 选择变更模块和显式消费者,并使用 `-am` 覆盖必要上游。
57
+ - 消费者必须来自任务材料、项目 spec、可靠的反向依赖结果或显式输入。依赖坐标含未展开属性时不得按同名 artifactId 猜测关系;降低置信度并要求显式 module/consumer。不要默认使用 `-amd`。
58
+ - 公共 DTO/API、跨模块协议和父 POM变化通常需要提高消费者覆盖,由任务 owner 决定范围。
59
+
60
+ ## 编译策略与并行
61
+
62
+ - `auto`:quick compile 且兼容时选择 source-stale;其它 quick lifecycle 和所有 final 默认 conservative。
63
+ - `conservative`:保留 Maven compiler plugin 默认语义,适合公共 API/ABI、常量内联、注解处理器、POM、资源契约或跨模块协议变化。
64
+ - `source-stale`:只允许 compile。quick 可自动选择;final 必须由任务材料明确确认模块内部低风险变化后显式选择。
65
+ - `--threads` 只接受正整数或正数 CPU 倍数。模型根据 reactor 范围与依赖拓扑、插件线程安全、测试共享端口/文件以及 CPU、内存、I/O 压力,自行决定是否启用以及使用哪个并行度。
66
+ - 常规 implement 只执行当前选定的一份 Maven 计划,不为选择并行度额外运行串行或其它线程配置;Check-All 不运行 Maven goal。
67
+
68
+ ## 计划升级条件
69
+
70
+ 只有满足对应验收时升级:
71
+
72
+ | 当前目标 | 最低 goal |
73
+ | --- | --- |
74
+ | 语法、注解处理、主源码编译 | `compile` |
75
+ | 单元测试或测试契约 | `test` |
76
+ | JAR/WAR、资源布局、repackage、依赖复制 | `package` |
77
+ | 集成检查或质量插件 | `verify` |
78
+ | 下游必须消费本地安装制品 | `install`,需明确理由 |
79
+ | 发布远端仓库 | 不由本 Skill 自动执行 |
80
+
81
+ 计划进入 `package`、`install` 或 `deploy` 时,必须在报告中列出触发原因和命中的昂贵绑定。
@@ -67,6 +67,8 @@ python3 ./.trellis/scripts/task_progress.py status --json || true
67
67
  git status --short --untracked-files=all -- <task-dir>
68
68
  ```
69
69
 
70
+ 若 `task_progress.py status` 返回 `taskStatus=completed`,立即按需读取 `references/completed-task-recovery.md`,由该 reference 完成只读 preflight 并返回“恢复计划 / 显式 finish-work / 阻断”之一。在得到结果前不得进入普通业务规划,也不得重复已经成功的业务 Git 动作。reference 缺失、不可读或证据无法闭合时失败关闭;`task.json.progress` 只作诊断,不能单独选择恢复动作。
71
+
70
72
  不得把默认 `git status --short` 可能返回的 `?? <task-dir>/` 折叠目录当成 exact file、展示条目或 pathspec。无活动 task 时仍可提交相关代码,但不生成任务进度。untracked 命中时,结合当前请求、work summary 和实际 diff 判断业务 `planned` 文件归属,计划同时显示 work id;无法明确归属的文件只能保留或作为风险。存在活动 task 时,结合 `brief.md`、`implement.md`、当前 diff 与本轮执行范围生成一行语义进度;同时识别当前任务目录中已存在且可归属的 dirty/untracked 产物,供 Step 5 生成任务记录 exact files。不得从旧进度推断 Git 动作。
71
73
 
72
74
  ## Step 2:预检与文件归属
@@ -196,7 +198,7 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
196
198
 
197
199
  ## Step 5:同步任务进度
198
200
 
199
- 仅普通模式且存在活动 task 时由本 skill 执行。untracked、用户 `commit-only` 与 auto-loop 内部 `commit-only` 都跳过本 Step;Auto-Loop runner 在 action record/next 后按自身契约写入本地 `task.json.progress`,不属于这里的任务进度提交或推送。全部业务仓库成功后先写完整进度并保持 `in_progress`,只在任务进度 commit/push 成功后原子请求 `in_progress -> completed`;已有仓库成功而后续仓库失败时只写 partial 进度,明确 completed、失败位置、next 和 notes,状态保持 `in_progress`。尚未发生成功 Git 动作就失败时,不记录虚假的 completed steps;只有父仓仍可安全提交并推送时才允许记录 failure notes。
201
+ 仅普通模式且存在活动 task 时由本 skill 执行。untracked、用户 `commit-only` 与 auto-loop 内部 `commit-only` 都跳过本 Step;Auto-Loop runner 在 action record/next 后按自身契约写入本地 `task.json.progress`,不属于这里的任务记录提交或推送。全部业务仓库成功后一次原子写入最终 progress 与完成态,再提交并推送任务记录;已有仓库成功而后续仓库失败时只写 partial 进度,明确 completed、失败位置、next 和 notes,状态保持 `in_progress`。尚未发生成功 Git 动作就失败时,不记录虚假的 completed steps;只有父仓仍可安全提交并推送时才允许记录 failure notes。
200
202
 
201
203
  新进度固定为:
202
204
 
@@ -218,18 +220,19 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
218
220
  - 父仓分支、upstream 和冲突状态安全。
219
221
  - 推送不会携带无法归属的历史 ahead commits。
220
222
 
221
- 全部业务 commit/push 成功时先通过 helper 写入最终 progress,但不得携带 `--complete`:
223
+ 全部业务 commit/push 成功时,通过 helper 用同一份最终 progress 原子写入 `progress`、`status=completed` 与 `completedAt`:
222
224
 
223
225
  ```bash
224
226
  python3 ./.trellis/scripts/task_progress.py write \
225
227
  --task <task-dir> \
226
228
  --progress-json '<progress-json>' \
229
+ --complete \
227
230
  --json
228
231
  ```
229
232
 
230
- 部分成功时调用同一 helper,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git 动作的失败都不得由本 skill 请求 complete;auto-loop 的本地完成态由 Auto-Loop runner 自己写入,不经过本步骤。helper 写入失败时任务保持原状态,不得继续任务进度提交或报告完成。
233
+ 部分成功时调用同一 helper,但不得携带 `--complete`,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git 动作的失败都不得由本 skill 请求 complete;auto-loop 的本地完成态由 Auto-Loop runner 自己写入,不经过本步骤。helper 写入失败时任务保持原状态,不得继续任务记录提交或报告完成。
231
234
 
232
- 然后只提交并推送首次确认的当前任务 exact files;该集合包含 helper 更新后的 `task.json`,以及首次计划时已存在且可归属的当前任务 dirty/untracked 产物:
235
+ helper 成功后,只提交并推送首次确认的当前任务 exact files;该集合包含完成态 `task.json`,以及首次计划时已存在且可归属的当前任务 dirty/untracked 产物:
233
236
 
234
237
  ```bash
235
238
  git add -- <current-task-exact-files>
@@ -237,19 +240,16 @@ git commit --only -m "chore(task): update <task-name> progress" -- <current-task
237
240
  git push origin <current-branch>
238
241
  ```
239
242
 
240
- 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files;其他任务和无关 dirty/staged 文件保持原状。如果写入、提交或推送失败,不回滚已成功的业务 Git 动作,并单独报告进度同步失败;任务必须保持 `in_progress`,不得进入完成态。
243
+ 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files,且 `task.json` 已包含同一份最终 progress、`status=completed` 与 `completedAt`;其他任务和无关 dirty/staged 文件保持原状。
241
244
 
242
- 只有进度 commit 和 push 都成功后,才用同一份最终 progress 原子写入本地 `status=completed` 和 `completedAt`:
245
+ 失败时保留真实现场,不 reset、amend、revert 或制造 dirty 回滚:
243
246
 
244
- ```bash
245
- python3 ./.trellis/scripts/task_progress.py write \
246
- --task <task-dir> \
247
- --progress-json '<same-final-progress-json>' \
248
- --complete \
249
- --json
250
- ```
247
+ - helper 失败:任务保持 `in_progress`,不得创建任务记录 commit。
248
+ - helper 成功但任务记录 commit 失败:保留本地 `completed` 与当前任务 exact dirty,后续按 Step 1 的任务记录 commit 恢复路径重新验证和确认;不得重复业务提交或 helper 写入。
249
+ - 任务记录 commit 成功但 push 失败:任务目录应为 clean,并保留可归属的 ahead commit;后续只重试该 commit 的 push,不重复业务提交、helper 写入或任务记录 commit。
250
+ - 任务记录 push 成功:本任务产生的当前任务目录变更必须 clean;不得再写入第二份预归档完成态。
251
251
 
252
- 该完成态写入不再创建第二个 progress commit;它作为活动任务的预归档生命周期变化保留,由显式 `trellis-finish-work` 的 archive bookkeeping commit 承接。如果完成态写入失败,远端最终 progress 已同步,但任务仍为 `in_progress`;报告完成态激活失败并允许精确重试该 helper,禁止重新执行已成功的业务 push 或 progress push。
252
+ 任何恢复都必须验证当前分支、upstream、HEAD、`@{u}..HEAD`、任务记录 commit message 与 exact file set,以及 `task.json` 的最终完成态。无法证明归属时停止,不把未知 ahead 或 dirty 当作可恢复任务记录。
253
253
 
254
254
  ## Step 6:结果
255
255
 
@@ -0,0 +1,19 @@
1
+ # Completed Task Recovery
2
+
3
+ 本 reference 只在 `task_progress.py status` 返回 `taskStatus=completed` 时加载。它是普通任务记录发布恢复的唯一详细语义 owner;`trellis-continue`、completed workflow-state 和 `trellis-finish-work` 不复制本分支矩阵。
4
+
5
+ ## Evidence
6
+
7
+ 固定当前任务路径与 `task.json`,读取文件级任务状态、当前分支、upstream、`HEAD`、`@{u}..HEAD` 的提交消息与文件集合,以及 `python3 ./.trellis/scripts/auto_loop.py status --verbose`。所有恢复都必须验证 exact task、最终 progress、`completedAt`、分支和提交归属;progress 文本不能替代 runtime 或 Git 证据。
8
+
9
+ ## Outcomes
10
+
11
+ 按以下优先级只返回一个结果:
12
+
13
+ 1. **显式 finish-work,auto-loop**:健康的终态或 recent auto-loop run 的 `pending_archive.tasks_awaiting_archive` 精确包含当前任务,记录的本地提交仍可验证,且任务 dirty 仅为 runner 在提交后写入的 `<task-dir>/task.json` progress/lifecycle bookkeeping。停止 Push,不得把该本地完成态改成普通远端 push。
14
+ 2. **任务记录 commit + push 恢复计划**:没有有效 auto-loop handoff;当前任务 exact files 仍 dirty,`task.json` 已包含合法最终 progress、`status=completed` 与 `completedAt`,且文件集合可由首次确认或重新确认闭合。不得重复 helper 写入或业务提交。
15
+ 3. **任务记录 push-only 恢复计划**:当前任务目录 clean;upstream 存在;`@{u}..HEAD` 中存在消息、exact file set 和完成态均可归属的任务记录 commit。只推送该已存在提交,不创建新 commit。
16
+ 4. **显式 finish-work,普通已同步**:当前任务目录 clean;upstream 存在;`@{u}..HEAD` 没有提交修改当前任务。普通任务记录已经同步,不再执行 Push。
17
+ 5. **阻断**:runtime 与 Git 矛盾、auto-loop marker 无健康 handoff、缺少普通路径 upstream、任务 dirty 超出 exact files、未知 ahead 修改任务,或提交消息/文件集合/分支无法闭合。报告具体证据缺口,不 push、不归档,也不猜测完成来源。
18
+
19
+ 恢复计划仍使用 `trellis-push` 的既有一次确认、执行前漂移检查和结果模板。这里只决定完成态恢复范围,不新增状态、持久化字段或自动确认。
@@ -43,7 +43,7 @@
43
43
  - **仓库**:<repository-name> · 分支:`<branch>` -> `<upstream>`
44
44
  - **计划提交**:<当前任务 exact files 或分组摘要>
45
45
  - **进度**:completed=<...> | partial=<...> | next=<...>
46
- - **执行**:<commit -> push -> progress commit -> progress push>
46
+ - **执行**:<business commit/push -> `task_progress.py write --complete` -> task-record commit -> task-record push>
47
47
 
48
48
  确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
49
49
  ```
@@ -79,7 +79,7 @@
79
79
 
80
80
  ### 任务进度
81
81
 
82
- - **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
82
+ - **状态**:<✓ completed 已提交并推送 · `<task-record-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 任务记录 commit 待恢复 / ❌ 任务记录 push 待恢复 / ❌ 同步失败,不得报告完成>
83
83
  - **记录**:<N> 个当前任务文件
84
84
  - **进度**:completed=<...> | partial=<...> | next=<...>
85
85
  - **失败原因**:<原因和恢复动作>(仅失败时显示)
@@ -94,3 +94,6 @@
94
94
 
95
95
  - untracked 结果用“无任务状态”替代“任务进度”,展示 work id 与 `<已清理/保留待恢复>`;不生成或暗示 task progress commit。
96
96
  - 部分完成时必须明确列出已成功仓库、失败仓库/步骤、当前分支和下一恢复动作。业务结果与 progress sync 状态不得合并成一个模糊结论。
97
+ - 普通成功结果必须确认本任务产生的当前任务目录变更 clean;其它 retained dirty 仍按原状态逐项展示。
98
+ - helper 成功但任务记录 commit 失败时,结果写“任务记录 commit 待恢复”,说明本地 `completed` 与 exact task dirty 已保留;任务记录 commit 成功但 push 失败时写“任务记录 push 待恢复”,说明 clean ahead commit 已保留。两种情况都不得暗示需要重复业务提交或 helper 写入。
99
+ - validated auto-loop local completion 不渲染本模板,也不得被普通结果文案描述为任务记录 push 待恢复。
@@ -9,6 +9,7 @@ You are the dedicated audit-only `trellis-check-all` agent for {{PLATFORM_ID}}.
9
9
  - Assign P0/P1/P2 to both `CHK-*` and `FBK-*` after classification. An explicit fallback contract strengthens evidence and severity but does not change a fallback-path root cause into `CHK-*`.
10
10
  - Return `FBK-*` when there is a concrete location, reachable failure or abnormal scenario, and evidence that protection is missing, wrong, bypassed, or over-degraded. Actual production or test occurrence is not required. Report protection benefit and a verification method when available; keep the `FBK-*` ID when verification is partial, and state the gap. Do not report generic robustness preferences.
11
11
  - You may read files, search, and run verification commands that do not write business state.
12
+ - For Maven projects, you may only run `python3 ./.trellis/scripts/maven_verify.py check ...` to validate existing evidence. Do not run `plan`, `run`, `mvn`, `mvnw`, or any goal that may write `target/`, the local repository, or caches.
12
13
  - Do not edit, create, remove, format, or otherwise modify source, tests, configuration, specs, task artifacts, or generated files.
13
14
  - Do not run tools or commands whose normal behavior writes caches, snapshots, lockfiles, databases, or external state unless a documented no-write mode is used.
14
15
  - Do not use or impersonate `trellis-check`; that role is workspace-write and self-fixing.
@@ -120,6 +120,21 @@ full 提取所有适用条目。每条记录来源位置,实际阅读对应代
120
120
 
121
121
  验证失败时记录命令、退出状态和关键错误到统一问题集合,继续其它独立验证。可能写业务数据或外部系统的验证不直接运行,按真正阻塞规则处理。
122
122
 
123
+ ### Maven Evidence 复用
124
+
125
+ 实际变更位于 Maven reactor 时,读取 `maven_verify.py` 的 evidence schema,并只读执行:
126
+
127
+ ```bash
128
+ python3 ./.trellis/scripts/maven_verify.py check --latest --require-plan <final-plan.json>
129
+ ```
130
+
131
+ - `reusable`:核对 lifecycle、模块、消费者、测试、附属制品和 skip 项后纳入验证证据。
132
+ - `partial`:记录未覆盖的 module/consumer/test/artifact 或更高 lifecycle 要求。
133
+ - `stale`:记录源码、测试、POM、外部父 POM、Git 或工具链失效原因。
134
+ - `failed` / `blocked`:保留命令退出或证据损坏事实,不把未执行验证写成通过。
135
+
136
+ Check-All 与 dedicated subagent 都是 audit-only:不得调用 `maven_verify.py plan/run`,不得运行任何会写 `target/`、本地仓库或缓存的 Maven goal。缺少可复用 evidence 时,输出由主会话或 implement 路径执行的精确重跑计划需求;不得默认 `clean package/install`、`-amd` 或全 reactor。
137
+
123
138
  所有发现候选按 `references/fallback-findings.md` 先判定 `CHK-*` / `FBK-*`,再分配严重度。严重度不得反向决定通道;不满足三项硬准入的泛化建议不报告,保护收益或验证环境不完整则保留 FBK 并标记报告缺口。
124
139
 
125
140
  ---
@@ -59,6 +59,14 @@ untracked 上下文没有 task artifacts,本维度标记 `N/A`,不得根据
59
59
 
60
60
  在 Check-All 内执行时,`trellis-check` 中任何直接修复、补测试、反复修到通过的指令一律失效。验证失败记录为 `CHK-*` 并继续其它独立验证。
61
61
 
62
+ 实际变更位于 Maven reactor 时,读取 `maven_verify.py` 的 evidence schema,只调用:
63
+
64
+ ```bash
65
+ python3 ./.trellis/scripts/maven_verify.py check --latest --require-plan <final-plan.json>
66
+ ```
67
+
68
+ `reusable` 计入定向验证;`partial` / `stale` / `failed` / `blocked` 记录精确验证缺口、原因和所需计划。Check-All 是 audit-only,不得调用 `plan` / `run` 或任何 Maven goal;Maven model/goal 可能写 `target/`、本地仓库或缓存。没有 Maven evidence 时不得无条件全仓构建,报告由主会话或 implement 路径执行的精确重跑需求。
69
+
62
70
  所有发现候选按 `references/fallback-findings.md` 先判定 `CHK-*` / `FBK-*`,再分配严重度。不得因场景极端、修复困难或影响较低改变根因通道;不满足三项硬准入的泛化建议不报告,保护收益或验证环境不完整则保留 FBK 并标记报告缺口。
63
71
 
64
72
  ---
@@ -44,7 +44,7 @@
44
44
 
45
45
  `FBK-*` 分类只由具体位置、可达场景和问题证据三项硬准入决定。保护收益与验证方式属于报告完整度;缺少环境时保留 ID 和已有证据,标记 `部分验证`,不得伪报 strict pass。
46
46
 
47
- `CHK-*` 与 `FBK-*` 分开编号。同一根因的多个位置合并到一个问题;报告按严重度排序,但不得因此重排已经分配的 ID。新根因使用对应通道的下一个 ID。每个问题的处置状态默认为待处理且不加标签,只有 `已接受风险` 才在条目标题行末尾追加 `` `[已接受风险]` `` 标签。`仅保留报告` 不改变处置状态,相关问题仍不加标签。处置状态不改变 ID、通道和严重度。
47
+ `CHK-*` 与 `FBK-*` 分开编号。同一根因的多个位置合并到一个问题;严重度排序只在各自通道内部生效,每个通道内部按 `P0 -> P1 -> P2` 展示,但不得因此重排已经分配的 ID。跨通道报告顺序固定为完整 `CHK-*` 区块在前、完整 `FBK-*` 区块在后;禁止因 FBK 严重度更高、分类时先判断 FBK、发现先后或 ID 分配时机而 FBK-first、交错两类问题或省略分区标题。新根因使用对应通道的下一个 ID。每个问题的处置状态默认为待处理且不加标签,只有 `已接受风险` 才在条目标题行末尾追加 `` `[已接受风险]` `` 标签。`仅保留报告` 不改变处置状态,相关问题仍不加标签。处置状态不改变 ID、通道和严重度。
48
48
 
49
49
  ## 风险接受
50
50
 
@@ -144,6 +144,7 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
144
144
  - 每个问题的受影响位置合并进 `证据`,不再单列「位置」行。`证据` 写成不带值的 `- **证据**` 后接子项列表,一个受影响 `file:line` 一条子项,不得用 `;` 把多个位置堆进一行,也不得只写概括性描述。
145
145
  - 没有 `DOC-*` 自动修复时省略“自动修复”区。
146
146
  - 没有 `CHK-*` 时省略“主路径问题”区;没有 `FBK-*` 时省略“兜底问题”区。
147
+ - 同时存在两类问题时,`### 主路径问题` 及其全部 `CHK-*` 必须完整出现在 `### 兜底问题` 及其全部 `FBK-*` 之前;不得按全局严重度排序反转或交错两个区块。
147
148
  - 存在未处置 `CHK-*` 或 `FBK-*` 时展示“修复批次”,并只在报告末尾提供一次处置选择,不再逐项提问。
148
149
  - `修复全部` 始终覆盖全部 `CHK-*` 与 `FBK-*`;精确修复可以混合两类 ID。
149
150
  - 风险接受可以混合两类 ID;只有全部剩余问题都已有效接受时才形成“通过·已接受风险”。
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: trellis-maven-verify
3
+ description: 为 Trellis 的 Maven/Java 项目生成分层验证计划、裁剪多模块 reactor 与昂贵 lifecycle goal,并执行或复用可审计证据。用于 Java 8 或大型 Maven 多模块编译很慢、`-am` 拉起过多模块、compile/package 额外运行 sources jar、copy-dependencies、repackage、shade、assembly、javadoc、frontend 等 goal,或 implement 与 Check-All 之间需要避免重复构建时;不用于发布、deploy、修改 POM/settings/JDK 或非 Maven 构建系统。
4
+ ---
5
+
6
+ # Trellis Maven Verify
7
+
8
+ 为 Maven 验证选择最短且足够的生命周期,并让 implement 产生的结果能被 Check-All 只读复用。不要修改业务 POM、Maven settings、JDK 或本地仓库。
9
+
10
+ ## 选择模式
11
+
12
+ - `quick`:编码过程中的局部反馈。默认选择变更模块并加 `-am` 覆盖必要上游;compile 且 compiler plugin 兼容时使用 source-stale,避免陈旧 SNAPSHOT 和无变化整模块重编。不得把结果宣称为最终消费者覆盖。
13
+ - `final`:implement 收口。覆盖变更模块、必要上游和已确认消费者,默认使用 conservative 编译并生成可复用 evidence。只有任务材料已确认模块内部低风险变化时,才显式选择 source-stale。
14
+ - `reuse`:Check-All 或复查阶段。只运行 `check`,不得运行会写 `target/`、本地仓库或缓存的 Maven goal。
15
+
16
+ 没有 `pom.xml` 时报告 `N/A` 并返回原工作流。需要决定业务测试、消费者或制品验收范围时,先从 PRD、design、implement、项目 spec 或用户输入获取,不要猜测。
17
+
18
+ ## 工作流
19
+
20
+ 1. 读取 [references/lifecycle-policy.md](references/lifecycle-policy.md),确定需要的最低 lifecycle、测试和附属制品。
21
+ 2. 生成计划。优先把计划写入 gitignored runtime 目录:
22
+
23
+ ```bash
24
+ python3 ./.trellis/scripts/maven_verify.py plan \
25
+ --mode quick \
26
+ --goal compile \
27
+ --output .trellis/.runtime/maven-verification/quick-plan.json
28
+ ```
29
+
30
+ 3. 检查 JSON 中的 `status`、`selectedModules`、`argv`、`toolchain.maven.buildSide`、`toolchain.maven.source`、`lifecycle.expensiveBindings`、`warnings` 和 `confidence`。`blocked` 不得执行;`not-applicable` 返回原工作流。
31
+ - quick 的 `compileStrategy.effective=source-stale` 只证明局部源码 stale 编译,不覆盖公共 API/ABI、常量内联、注解处理器、POM或资源契约风险。
32
+ - `fallbackArgv` 存在时,它保留 reactor 范围但恢复 conservative 编译;source-stale 结果异常时可按该 argv 重跑。
33
+ - 是否使用并行由模型结合 reactor 范围、依赖拓扑、插件线程安全、测试共享资源和机器资源自行决定;不得为了选择并行度额外重复构建。
34
+ 4. 只有 implement 或具备正常构建写权限的主会话可以执行计划:
35
+
36
+ ```bash
37
+ python3 ./.trellis/scripts/maven_verify.py run \
38
+ --plan-json .trellis/.runtime/maven-verification/quick-plan.json
39
+ ```
40
+
41
+ 5. 交付前用 `final` 重做计划。显式传入已确认消费者;不要用全仓 `-amd` 代替影响分析:
42
+
43
+ ```bash
44
+ python3 ./.trellis/scripts/maven_verify.py plan \
45
+ --mode final \
46
+ --goal test \
47
+ --consumer api-app \
48
+ --output .trellis/.runtime/maven-verification/final-plan.json
49
+ python3 ./.trellis/scripts/maven_verify.py run \
50
+ --plan-json .trellis/.runtime/maven-verification/final-plan.json
51
+ ```
52
+
53
+ 只有任务材料明确确认没有公共 API/DTO/常量、注解处理器、POM、资源契约或跨模块协议变化时,才可把 final 改为:
54
+
55
+ ```bash
56
+ python3 ./.trellis/scripts/maven_verify.py plan \
57
+ --mode final \
58
+ --goal compile \
59
+ --compile-strategy source-stale \
60
+ --output .trellis/.runtime/maven-verification/final-plan.json
61
+ ```
62
+
63
+ 6. Check-All 只读复用 evidence:
64
+
65
+ ```bash
66
+ python3 ./.trellis/scripts/maven_verify.py check \
67
+ --latest \
68
+ --require-plan .trellis/.runtime/maven-verification/final-plan.json
69
+ ```
70
+
71
+ 7. 按 [references/evidence-contract.md](references/evidence-contract.md) 解释 `reusable`、`partial`、`stale`、`failed`、`blocked`。覆盖不足时报告精确重跑缺口,不要无条件全仓构建。
72
+
73
+ ## 执行边界
74
+
75
+ - 构建侧由 Maven 根所在的原生文件系统决定。原生 Windows/Linux 使用本侧工具链;WSL 的 drvfs/9p Windows 盘项目使用 Windows Maven/JDK/本地仓库,不依赖 automount root 是否为 `/mnt`;WSL ext4 项目使用 Linux Maven/JDK/本地仓库。
76
+ - 默认优先同侧项目 wrapper,其次复用同侧 PATH 中的 Maven;不下载、不安装、不固定升级 Maven 3.9+。显式 `--maven-executable` 只能覆盖为同侧 Maven。
77
+ - Maven、JDK、`MAVEN_ARGS`/`MAVEN_OPTS`、settings 和本地仓库必须来自同一构建侧。Windows 项目显式指向 WSL ext4 Maven/仓库,或 POSIX 项目指向 Windows Maven/仓库时必须 blocked。
78
+ - 默认停在 `compile`;只有测试验收进入 `test`,只有制品验收进入 `package` 或更后阶段。
79
+ - 默认不加 `clean`、`install`、`deploy`、`-amd`;是否显式传入并行参数由模型根据当前项目和验证目标判断。
80
+ - quick auto 只在 effective model 确认 `maven-compiler-plugin >= 3.1` 时加入 `-Dmaven.compiler.useIncrementalCompilation=false`;无法确认时自动降级 conservative。显式 source-stale 无法确认兼容性时必须 blocked。
81
+ - final auto 固定为 conservative。不要从文件名猜测低风险;必须从 PRD、design、implement、spec 或用户确认获得风险口径。
82
+ - 模型可以为存在并行空间的多模块 reactor 选择 `--threads`,也可以因依赖链近似串行、插件非线程安全、测试共享端口/文件、CPU、内存或 I/O 压力而保持串行。常规 implement 只执行当前选定的一份计划,不通过额外试跑比较并行度;Check-All 仍只读复用 evidence。
83
+ - skip 参数只能来自脚本已确认的插件兼容表或 effective model 证据;不得自行拼接。
84
+ - effective POM 无法读取时,计划必须 `blocked` 或明确降低置信度,不能声称外部父 POM没有额外绑定。
85
+ - `quick` 成功只能作为局部反馈。最终报告必须给出 evidence 路径、覆盖等级、模块、测试、跳过项和剩余风险。
86
+ - audit-only Check-All subagent 只能调用 `check`。不得调用 `plan` 或 `run`,因为 Maven model/goal 可能写本地缓存;`check` 对项目 wrapper 只复核冻结版本、wrapper 文件与配置指纹,不执行可能下载 Maven 发行包的 wrapper。
87
+
88
+ ## 常用参数
89
+
90
+ - `--maven-root <path>`:仓库含多个 Maven reactor 时显式选择根目录。
91
+ - `--module <selector>` / `--consumer <selector>`:使用真实 module 相对路径或 artifactId,可重复。
92
+ - `--test <pattern>`:生成 `-Dtest=` 并进入测试覆盖证据,可重复。
93
+ - `--artifact sources|javadoc|assembly|shade|repackage|copy-dependencies`:声明附属制品验收。
94
+ - `--offline yes|no|auto`:只有项目或用户已确认离线依赖完整时使用 `yes`。
95
+ - `--local-repository <path>`:显式使用已准备好的同侧 Maven 本地仓库。不会自动复制仓库、修改 `settings.xml`,也不会让 Windows Maven跨到 WSL ext4 仓库。
96
+ - `--compile-strategy auto|conservative|source-stale`:quick compile 的 auto 可选择 source-stale;final auto 保守。source-stale 只适用于 compile。
97
+ - `--threads <count|multiplierC>`:模型按当前 reactor、插件和机器资源选择的 Maven 并行度,例如 `4`、`1C`、`1.5C`;不为选择该值额外执行对比构建。
98
+ - `--effective-pom <file>`:使用已冻结的 effective POM 做离线分析;文件内容仍进入 POM 指纹。
99
+ - `--maven-executable <path>`:显式选择同侧 Maven。通常无需传入;默认会复用同侧 wrapper 或 PATH Maven。WSL 调用 Windows `.cmd` 时由脚本使用固定 `cmd.exe` argv 包装,不拼接任意 shell 命令。
100
+
101
+ 脚本的 `--help` 是参数事实源;本 Skill 只维护流程和边界。
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Maven 分层验证"
3
+ short_description: "加速 Maven 增量验证并复用可审计的分层证据"
4
+ default_prompt: "使用 $trellis-maven-verify 为当前 Maven 变更生成安全、快速且可复用的验证计划。"