flower-trellis 0.5.6-beta.0 → 0.6.0-beta.0

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 (133) hide show
  1. package/README.md +2 -2
  2. package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +18 -4
  3. package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +12 -8
  4. package/enhancements/0.6/.agents/skills/trellis-route/references/check-all-agent-body.md +23 -0
  5. package/enhancements/0.6/.agents/skills/trellis-route/references/platform-dispatch.json +154 -0
  6. package/enhancements/0.6/.agents/skills/trellis-task-brief/SKILL.md +18 -7
  7. package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +18 -4
  8. package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +12 -8
  9. package/enhancements/0.6/.claude/skills/trellis-task-brief/SKILL.md +18 -7
  10. package/enhancements/0.6/overrides/compatibility.json +1 -1
  11. package/enhancements/0.6/overrides/conflicts.json +461 -32
  12. package/enhancements/0.6/overrides/patches/agents/untracked-context/channel-check-selector.md +1 -0
  13. package/enhancements/0.6/overrides/patches/agents/untracked-context/check-all-guard.md +4 -0
  14. package/enhancements/0.6/overrides/patches/agents/untracked-context/kiro-check-content.txt +1 -0
  15. package/enhancements/0.6/overrides/patches/agents/untracked-context/omp-check-selector.md +2 -0
  16. package/enhancements/0.6/overrides/patches/agents/untracked-context/omp-implement-selector.md +2 -0
  17. package/enhancements/0.6/overrides/patches/agents/untracked-context/patch.json +82 -4
  18. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/breadcrumb-content.py +29 -0
  19. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/breadcrumb-selector.py +22 -0
  20. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/codex-session-start-content.py +30 -0
  21. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/codex-session-start-selector.py +3 -0
  22. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/main-content.py +78 -0
  23. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/main-selector.py +65 -0
  24. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/patch.json +99 -24
  25. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/stale-task-content.py +1 -0
  26. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/stale-task-selector.py +1 -0
  27. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/untracked-helper-content.py +26 -0
  28. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/untracked-helper-selector.py +1 -0
  29. package/enhancements/0.6/overrides/patches/scripts/runtime-state-integrity/active-task-resolution-content.py +12 -4
  30. package/enhancements/0.6/overrides/patches/scripts/runtime-state-integrity/active-task-resolution-selector.py +14 -6
  31. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/helpers-selector.py +1 -1
  32. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/imports-content.py +1 -0
  33. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/imports-selector.py +1 -0
  34. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/archive-guard-content.py +12 -1
  35. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/archive-write-content.py +1 -5
  36. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/patch.json +7 -7
  37. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/set-meta-content.py +5 -0
  38. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/set-meta-selector.py +3 -0
  39. package/enhancements/0.6/overrides/patches/skills/trellis-before-dev/project-knowledge-discovery/patch.json +3 -2
  40. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/auto-task-create/patch.json +3 -1
  41. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-authorization/patch.json +3 -1
  42. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/content.md +18 -2
  43. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/patch.json +94 -9
  44. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/planning-contract-content.md +1 -0
  45. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/planning-contract-selector.md +1 -0
  46. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/quality-bar-baseline.md +4 -3
  47. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/readiness-content.md +2 -3
  48. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/readiness-selector.md +2 -3
  49. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/review-content.md +3 -0
  50. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/review-selector.md +3 -0
  51. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/summary-shape-content.md +1 -0
  52. package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/summary-shape-selector.md +1 -0
  53. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/completed-route-content.md +1 -0
  54. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/completed-route-selector.md +1 -0
  55. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/content.md +11 -2
  56. package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/patch.json +33 -0
  57. package/enhancements/0.6/overrides/patches/skills/trellis-finish-work/exact-bookkeeping/content.md +22 -8
  58. package/enhancements/0.6/overrides/patches/skills/trellis-finish-work/exact-bookkeeping/patch.json +4 -1
  59. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/patch.json +52 -6
  60. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-baseline.md +26 -0
  61. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-content.md +36 -0
  62. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/common-paths-baseline.md +20 -0
  63. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/common-paths-content.md +24 -0
  64. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/patch.json +83 -7
  65. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/shared-skill-consumers-content.md +1 -0
  66. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/shared-skill-consumers-selector.md +1 -0
  67. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-mode-precedence/patch.json +20 -8
  68. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-mode-precedence/scope-selector.md +1 -1
  69. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/active-task-lifecycle-baseline.md +11 -0
  70. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/active-task-lifecycle-content.md +25 -0
  71. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/check-all-agent-route-content.md +1 -0
  72. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/check-all-agent-route-selector.md +1 -0
  73. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-baseline.md +16 -0
  74. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-content.md +12 -0
  75. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-managed-baseline.md +18 -0
  76. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-entry-baseline.md +20 -0
  77. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-entry-content.md +25 -0
  78. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-modification-baseline.md +7 -0
  79. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-modification-content.md +8 -0
  80. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/owner-routing-content.md +5 -5
  81. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/patch.json +236 -4
  82. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-artifacts-baseline.md +25 -0
  83. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-artifacts-content.md +27 -0
  84. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-readiness-content.md +1 -0
  85. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-readiness-selector.md +1 -0
  86. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-change-map-content.md +7 -3
  87. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-notes-content.md +1 -0
  88. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-notes-selector.md +1 -0
  89. package/enhancements/0.6/overrides/patches/skills/trellis-start/no-task-routing/patch.json +3 -7
  90. package/enhancements/0.6/overrides/patches/skills/trellis-update-spec/autonomous-evaluation/patch.json +6 -4
  91. package/enhancements/0.6/overrides/patches/workflow/hub/content.md +1 -1
  92. package/enhancements/0.6/overrides/patches/workflow/intent-routing/request-triage/content.md +6 -14
  93. package/enhancements/0.6/overrides/patches/workflow/phase-ownership/active-task-routing-baseline.md +2 -2
  94. package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-check-baseline.md +3 -3
  95. package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-implement-baseline.md +6 -5
  96. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-content.md +10 -0
  97. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-selector.md +11 -0
  98. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-baseline.md +63 -0
  99. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-content.md +63 -0
  100. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-managed-baseline.md +67 -0
  101. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/patch.json +15 -0
  102. package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/state-contract-comment-content.md +8 -9
  103. package/enhancements/0.6/overrides/patches/workflow/state-missing-task/active-task-clear-fallback-selector.py +5 -2
  104. package/enhancements/0.6/overrides/patches/workflow/state-no-task/content.md +3 -2
  105. package/enhancements/0.6/overrides/patches/workflow/state-untracked/content.md +2 -2
  106. package/enhancements/0.6/scripts/task_progress.py +86 -2
  107. package/enhancements/MANIFEST.json +55 -9
  108. package/package.json +4 -4
  109. package/src/builtin-plugins/skill-garden/content-adapter.js +318 -1
  110. package/src/builtin-plugins/skill-garden/provider.js +3 -0
  111. package/src/builtin-plugins/skill-garden/runtime.js +10 -7
  112. package/src/cli.js +2 -1
  113. package/src/commands/plugin.js +4 -1
  114. package/src/commands/update.js +162 -36
  115. package/src/constants.js +21 -6
  116. package/src/lib/codex-tweaks.js +6 -5
  117. package/src/lib/platform-patch-adapters.js +68 -4
  118. package/src/lib/telemetry.js +2 -1
  119. package/src/lib/update-transaction.js +351 -0
  120. package/src/patches/conflicts.json +37 -0
  121. package/src/patches/platforms/codex/dispatch-mode/config-content.json.txt +30 -0
  122. package/src/patches/platforms/codex/dispatch-mode/hook-content.py +53 -0
  123. package/src/patches/platforms/codex/dispatch-mode/hook-selector.py +71 -0
  124. package/src/patches/platforms/codex/dispatch-mode/patch.json +13 -1
  125. package/src/plugin/application-service.js +17 -2
  126. package/src/plugin/install/platform-detector.js +16 -2
  127. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-beta2.py +0 -443
  128. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-pre-untracked.py +0 -443
  129. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-stale-task.py +0 -443
  130. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/content.py +0 -489
  131. package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/selector.py +0 -408
  132. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/create-active-content.py +0 -17
  133. package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/create-active-selector.py +0 -10
package/README.md CHANGED
@@ -105,7 +105,7 @@ flower-trellis -v
105
105
  | `--no-update-check` | 本次跳过 flower-trellis 新版本检测(等价环境变量 `FLOWER_NO_UPDATE_CHECK=1`) |
106
106
  | `--backup-retention <n>` | `update` 成功后保留最近 n 份 `.trellis/.backup-<timestamp>` 快照(默认 3,`0` 表示本次不清理) |
107
107
 
108
- 未指定平台时,交互模式会弹出多选菜单(默认勾选 Claude Code + Codex);也可直接传 `--claude` / `--codex` / `--cursor` / `--devin` / `--zcode` / `--trae` 等指定,或用 `-y` 跳过菜单。`--windsurf` 仍作为 Devin 的旧别名透传给 Trellis。其余未识别的 flag(如 `-u`、`-f`、`--template`、`--with-statusline`)一律透传给 Trellis。
108
+ 未指定平台时,交互模式会弹出多选菜单(默认勾选 Claude Code + Codex);也可直接传 `--claude` / `--codex` / `--cursor` / `--devin` / `--zcode` / `--trae` / `--omp` / `--grok` / `--kimi` / `--snow` 等指定,或用 `-y` 跳过菜单。`--windsurf` 仍作为 Devin 的旧别名透传给 Trellis。其余未识别的 flag(如 `-u`、`-f`、`--template`、`--with-statusline`)一律透传给 Trellis。
109
109
 
110
110
  ## Flower Plugin
111
111
 
@@ -305,7 +305,7 @@ flower banner → 平台多选菜单 → Trellis 原生交互(模板 / monorepo
305
305
  npm i -g flower-trellis@latest && flower-trellis update
306
306
  ```
307
307
 
308
- - **0.6 兼容门禁**:当前强化快照已登记 Trellis `0.6.5`。未登记的同一 `0.6.x` 会显示 `untested-upstream` 警告,并在完整 Patch/冲突检查通过后继续;`0.7+` / `1.x` 不会自动复用 0.6 baseline。遇到未支持的新版本时,先升级 flower-trellis,或使用 `--no-enhance` 只运行纯上游 Trellis。
308
+ - **0.6 兼容门禁**:当前强化快照已登记 Trellis `0.6.12`。未登记的同一 `0.6.x` 会显示 `untested-upstream` 警告,并在完整 Patch/冲突检查通过后继续;`0.7+` / `1.x` 不会自动复用 0.6 baseline。遇到未支持的新版本时,先升级 flower-trellis,或使用 `--no-enhance` 只运行纯上游 Trellis。
309
309
 
310
310
  - **通用技能**:`flower-trellis update` 会用新版快照覆盖仓库中已经启用的 common skill,
311
311
  未启用项不会自动安装;若某个已安装 common skill 已从新版快照移除,更新会精确删除其
@@ -245,7 +245,7 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
245
245
 
246
246
  ## Step 5:同步任务进度
247
247
 
248
- 仅普通模式且存在活动 task 时由本 skill 执行。untracked、用户 `commit-only` 与 auto-loop 内部 `commit-only` 都跳过本 Step;Auto-Loop runner 在 action record/next 后按自身契约写入本地 `task.json.progress`,不属于这里的任务进度提交或推送。全部业务仓库成功后写完整进度;已有仓库成功而后续仓库失败时写 partial 进度,明确 completed、失败位置、next 和 notes。尚未发生成功 Git 动作就失败时,不记录虚假的 completed steps;只有父仓仍可安全提交并推送时才允许记录 failure notes。
248
+ 仅普通模式且存在活动 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。
249
249
 
250
250
  新进度固定为:
251
251
 
@@ -267,7 +267,7 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
267
267
  - 父仓分支、upstream 和冲突状态安全。
268
268
  - 推送不会携带无法归属的历史 ahead commits。
269
269
 
270
- 通过 helper 写入:
270
+ 全部业务 commit/push 成功时先通过 helper 写入最终 progress,但不得携带 `--complete`:
271
271
 
272
272
  ```bash
273
273
  python3 ./.trellis/scripts/task_progress.py write \
@@ -276,6 +276,8 @@ python3 ./.trellis/scripts/task_progress.py write \
276
276
  --json
277
277
  ```
278
278
 
279
+ 部分成功时调用同一 helper,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git 动作的失败都不得请求 complete。helper 写入失败时任务保持原状态,不得继续任务进度提交或报告完成。
280
+
279
281
  然后只提交并推送首次确认的当前任务 exact files;该集合包含 helper 更新后的 `task.json`,以及首次计划时已存在且可归属的当前任务 dirty/untracked 产物:
280
282
 
281
283
  ```bash
@@ -284,7 +286,19 @@ git commit --only -m "chore(task): update <task-name> progress" -- <current-task
284
286
  git push origin <current-branch>
285
287
  ```
286
288
 
287
- 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files;其他任务和无关 dirty/staged 文件保持原状。如果写入、提交或推送失败,不回滚已成功的业务 Git 动作,并单独报告进度同步失败。
289
+ 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files;其他任务和无关 dirty/staged 文件保持原状。如果写入、提交或推送失败,不回滚已成功的业务 Git 动作,并单独报告进度同步失败;任务必须保持 `in_progress`,不得进入完成态。
290
+
291
+ 只有进度 commit 和 push 都成功后,才用同一份最终 progress 原子写入本地 `status=completed` 和 `completedAt`:
292
+
293
+ ```bash
294
+ python3 ./.trellis/scripts/task_progress.py write \
295
+ --task <task-dir> \
296
+ --progress-json '<same-final-progress-json>' \
297
+ --complete \
298
+ --json
299
+ ```
300
+
301
+ 该完成态写入不再创建第二个 progress commit;它作为活动任务的预归档生命周期变化保留,由显式 `trellis-finish-work` 的 archive bookkeeping commit 承接。如果完成态写入失败,远端最终 progress 已同步,但任务仍为 `in_progress`;报告完成态激活失败并允许精确重试该 helper,禁止重新执行已成功的业务 push 或 progress push。
288
302
 
289
303
  ## Step 6:结果
290
304
 
@@ -307,7 +321,7 @@ untracked 的全部已确认 Git 动作成功后,最后运行 `python3 ./.trel
307
321
 
308
322
  ### 任务进度
309
323
 
310
- 状态:<✓ 已同步 · `<progress-hash>` / · 已跳过 / ❌ 同步失败>
324
+ 状态:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
311
325
  记录:<N> 个当前任务文件
312
326
  进度:completed=<...> | partial=<...> | next=<...>
313
327
  [失败时追加:原因和恢复动作]
@@ -35,7 +35,7 @@ task 的合法 route 决策必须能追溯到 `trellis-route`、同编号 fallba
35
35
 
36
36
  当前上下文内已有 target 匹配、task 等于当前任务路径、且来源合法的 route 决策时,后续实现、check 发现问题、用户指出刚检查过的实现有问题、修复后重检、提交前复查均默认复用最近 implement/check 路由;除非用户明确要求重选/临时改/清除默认,不再调用本 skill。当前上下文没有 route 决策但 runtime state 命中时,本 skill 恢复该决策并输出同样的结构化 `route_decision`。如果上下文里只有上一个任务的 `route_decision`,必须忽略并重新解析当前任务。
37
37
 
38
- Codex inline mode 只表示主会话默认直接执行,不是 route 选项过滤器。即使当前上下文出现 `<codex-mode>inline...do not dispatch...</codex-mode>` 或 `workflow-state:in_progress-inline`,也不能推断“只能 inline”或跳过 subagent 选项;仍必须通过 helper resolve runtime/prefs,或在无有效配置时展示正常 inline/subagent 选项。若本 skill 的紧邻路由决定是 subagent,本步骤允许主 agent dispatch 对应 implement/check sub-agent;禁止的是绕过 `trellis-route` 直接 dispatch。
38
+ Codex 的 `<codex-mode>` 与 `workflow-state:*-inline` 只描述上游原生上下文/readiness 能力,不是 route 决策或选项过滤器。实际执行位置只读取本 skill 的 runtime/prefs/本轮选择;若紧邻路由决定是 subagent,主 agent 按 catalog dispatch 对应角色。禁止绕过 `trellis-route` 直接从 Codex banner 推导执行模式。
39
39
 
40
40
  先判断本次路由目标:
41
41
 
@@ -51,8 +51,6 @@ Codex inline mode 只表示主会话默认直接执行,不是 route 选项过
51
51
 
52
52
  如果命中上述覆盖意图,即使 `.trellis/.route-prefs.tmp` 存在,也不能直接使用配置;必须进入 Step 2 展示对应选项。
53
53
 
54
- ---
55
-
56
54
  ## Step 0.5: 解析已有 route state
57
55
 
58
56
  task 仅在没有覆盖意图、当前上下文没有 target + 当前 task 匹配的合法 `route_decision` 时调用 `resolve`,解析顺序固定为 runtime -> prefs -> auto-loop。untracked 不调用 `resolve`,每次直接调用 `read-pref`;命中即可执行,miss 才进入 Step 2。
@@ -200,19 +198,25 @@ helper 写入规则:保留另一个 target 的 runtime 决策和偏好;覆
200
198
  | 路由决定 | 主 agent 应执行 |
201
199
  |---------|----------------|
202
200
  | `inline implement` | `Skill({skill: "trellis-before-dev"})` 加载 spec;task 再读任务文档,untracked 读取 helper 状态与实际 scope → 主线程实施 → 跑必要验证 → 回到 Phase 2.1 completion contract |
203
- | `subagent implement` | `Agent({subagent_type: "trellis-implement"})`;task 使用 `Active task:`,untracked 使用下方自包含 `Untracked work:` 契约;主 agent 收到结果后回到 Phase 2.1 completion contract |
201
+ | `subagent implement` | 按下方当前平台执行配方调用 `trellis-implement`;task 使用 `Active task:`,untracked 使用下方自包含 `Untracked work:` 契约;主 agent 收到结果后回到 Phase 2.1 completion contract |
204
202
  | `inline check-all` | `Skill({skill: "trellis-check-all"})` |
205
- | `subagent check-all` | 优先使用明确 audit-only 的 `trellis-check-all` agent;不存在时使用平台通用 subagent,并用下方 dispatch 契约执行本地 `trellis-check-all`。subagent 只返回 `DOC-*` 文档漂移候选,不写文件;主会话负责允许的文档自修。禁止 fallback 到会直接修改工作区的 `trellis-check` agent;无兼容 subagent 时停止并请用户改选 inline |
203
+ | `subagent check-all` | 读取 catalog 当前平台条目,只调用 `checkAll.target` 声明的专用 audit-only `trellis-check-all` 角色,并按 `checkAll.launch` 启动;subagent 只返回 `CHK-*` / `DOC-*` 候选,不写文件。目标缺失、host 未发现或资格不成立时停止并请用户改选 inline;禁止通用 agent 与 `trellis-check` fallback |
206
204
 
207
205
  implement 路由只决定执行位置,不拥有实现后的停止策略。无论 inline 或 subagent,focused validation 完成后都必须返回 workflow Phase 2.1 的 completion contract;由该 owner 处理 auto-loop、用户显式继续/暂缓、已有 hold 和默认立即 Check-All 的优先级。
208
206
 
207
+ ### 平台 Dispatch Catalog
208
+
209
+ `references/platform-dispatch.json` 是平台启动契约的唯一事实源。当前条目提供稳定 `id`、`implement.launch/target`、`checkAll.launch/target/format/verification` 和 `inlineOnlyReason`。仅当 route 已选中 subagent 时,主 agent 才从当前运行平台上下文确定稳定平台 ID,读取 catalog 对应条目,并把 `launch` 字段翻译成当前 host 的工具调用。inline 路径不读取 catalog,也不预先过滤 route 选项。
210
+
211
+ dispatch prompt 第一行始终遵守当前 task/untracked 契约。agent 文件存在只证明项目产物已投影;实际 dispatch 时还必须确认当前 host 暴露 catalog 声明的 launch 能力。目标、launcher 或资格不可用时停止并让用户改选 inline,不得静默降级、发明替代 agent 或使用上游 workspace-write `trellis-check`。`verification` 只说明该角色如何证明只读资格,不放宽 Check-All 边界;`eligible=false` 时同时展示 `inlineOnlyReason`。
212
+
209
213
  ### Untracked Subagent Dispatch 契约
210
214
 
211
215
  untracked 的 implement/check subagent prompt 第一行固定为 `Untracked work: <work-id>`,并包含事项摘要、stage、scope、baseline 仓库摘要、current fingerprint、已有验证证据、相关 spec 路径和本轮明确职责。不得写 `Active task:`,不得要求 `prd.md`、`implement.jsonl` 或 `check.jsonl`。agent 必须直接执行,不得递归 dispatch implement/check agent。
212
216
 
213
217
  ### Subagent Check-All Dispatch 契约
214
218
 
215
- 使用专用或通用 subagent 时,dispatch prompt 第一行必须是当前任务路径,并包含以下完整边界:
219
+ 使用 catalog 声明的专用 subagent 时,dispatch prompt 第一行必须是当前任务路径,并包含以下完整边界:
216
220
 
217
221
  ```text
218
222
  Active task: <task path from task.py current>
@@ -229,7 +233,7 @@ Active task: <task path from task.py current>
229
233
  返回:统一 Check-All 结果、`DOC-*` 候选、已执行验证和剩余风险。不要输出 commit/push 计划。
230
234
  ```
231
235
 
232
- 平台存在专用 `trellis-check-all` agent 时,也必须先确认其角色说明明确 audit-only:允许识别 `DOC-*` 候选,但不得写文件。名称相同但会直接自修复代码、测试、配置或普通 `CHK-*` 的 agent 不可使用。平台没有专用或通用 subagent 时,不得静默改成 inline,也不得使用 `trellis-check` 代替;停止并让用户重新选择 check route。
236
+ 必须确认 catalog 目标内容明确 audit-only:允许识别 `DOC-*` 候选,但不得写文件。名称相同但会直接自修复代码、测试、配置或普通 `CHK-*` 的 agent 不可使用。平台没有合格专用角色时,不得静默改成 inline,也不得使用通用 agent 或 `trellis-check` 代替;停止并让用户重新选择 check route。
233
237
 
234
238
  ### 输出模板
235
239
 
@@ -274,7 +278,7 @@ route_decision:
274
278
  9. **check-all subagent 保持只读**:不得 fallback 到强制自修复的 `trellis-check` agent;不兼容时显式阻塞并让用户重选。
275
279
  10. **决策与执行分离**:本 skill 只输出指令,下一轮由主 agent 调工具。
276
280
  11. **严格执行用户选择**:路由结论一旦输出,主 agent 必须按指令执行,不可“出于谨慎”再换路径。
277
- 12. **Codex inline 不裁剪选项**:Codex inline 是默认执行模式,不是只能 inline 的强制模式;route 明确选中 subagent 时,本步骤可按 subagent 路径执行。
281
+ 12. **Codex capability 不裁剪选项**:Codex mode banner 只描述原生上下文/readiness 能力;route 明确选中 subagent 时,按 catalog 路径执行。
278
282
 
279
283
  ---
280
284
 
@@ -0,0 +1,23 @@
1
+ # Check-All Agent
2
+
3
+ You are the dedicated audit-only `trellis-check-all` agent for {{PLATFORM_ID}}. The main session dispatches you only after `trellis-route(target=check)` selects the subagent route.
4
+
5
+ ## Hard Boundary
6
+
7
+ - Read and execute `{{SKILL_PATH}}` locally.
8
+ - Collect all ordinary findings as stable `CHK-*` items and low-risk document drift as `DOC-*` candidates.
9
+ - You may read files, search, and run verification commands that do not write business state.
10
+ - Do not edit, create, remove, format, or otherwise modify source, tests, configuration, specs, task artifacts, or generated files.
11
+ - 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.
12
+ - Do not use or impersonate `trellis-check`; that role is workspace-write and self-fixing.
13
+ - Do not commit, push, merge, dispatch another implement/check agent, or choose a repair scope for the user.
14
+
15
+ If the dispatch prompt requests self-fixes or any workspace write, stop and report the role mismatch to the main session.
16
+
17
+ ## Context
18
+
19
+ The first dispatch line must be `Active task: <path>` for task work or `Untracked work: <work-id>` for untracked work. Load the matching Check-All context exactly as the local skill requires; never guess another session's task.
20
+
21
+ ## Return
22
+
23
+ Return the complete Check-All report, `check_profile`, all `CHK-*` findings, all `DOC-*` candidates, verification evidence, blocked checks, and residual risk. Do not output a commit or push plan.
@@ -0,0 +1,154 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "platforms": [
4
+ {
5
+ "id": "claude-code",
6
+ "runtimePlatforms": ["claude"],
7
+ "detectPath": ".claude",
8
+ "implement": { "eligible": true, "target": ".claude/agents/trellis-implement.md", "launch": "Task/Agent: trellis-implement" },
9
+ "checkAll": { "eligible": true, "target": ".claude/agents/trellis-check-all.md", "format": "markdown-claude", "launch": "Task/Agent: trellis-check-all", "skillPath": ".claude/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
10
+ "inlineOnlyReason": null
11
+ },
12
+ {
13
+ "id": "cursor",
14
+ "detectPath": ".cursor",
15
+ "implement": { "eligible": true, "target": ".cursor/agents/trellis-implement.md", "launch": "Task/Subagent: trellis-implement" },
16
+ "checkAll": { "eligible": true, "target": ".cursor/agents/trellis-check-all.md", "format": "markdown-claude", "launch": "Task/Subagent: trellis-check-all", "skillPath": ".cursor/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
17
+ "inlineOnlyReason": null
18
+ },
19
+ {
20
+ "id": "opencode",
21
+ "detectPath": ".opencode",
22
+ "implement": { "eligible": true, "target": ".opencode/agents/trellis-implement.md", "launch": "task tool: trellis-implement" },
23
+ "checkAll": { "eligible": true, "target": ".opencode/agents/trellis-check-all.md", "format": "markdown-opencode", "launch": "task tool: trellis-check-all", "skillPath": ".opencode/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
24
+ "inlineOnlyReason": null
25
+ },
26
+ {
27
+ "id": "codex",
28
+ "detectPath": ".codex",
29
+ "implement": { "eligible": true, "target": ".codex/agents/trellis-implement.toml", "launch": "native subagent_type=trellis-implement" },
30
+ "checkAll": { "eligible": true, "target": ".codex/agents/trellis-check-all.toml", "format": "codex-toml", "launch": "native subagent_type=trellis-check-all", "skillPath": ".agents/skills/trellis-check-all/SKILL.md", "verification": "read-only-sandbox" },
31
+ "inlineOnlyReason": null
32
+ },
33
+ {
34
+ "id": "kilo",
35
+ "detectPath": ".kilocode",
36
+ "implement": { "eligible": false, "target": null, "launch": null },
37
+ "checkAll": { "eligible": false, "target": null, "format": null, "launch": null, "skillPath": ".kilocode/skills/trellis-check-all/SKILL.md", "verification": "inline-only" },
38
+ "inlineOnlyReason": "host has no verified project-subagent launcher"
39
+ },
40
+ {
41
+ "id": "kiro",
42
+ "detectPath": ".kiro",
43
+ "implement": { "eligible": true, "target": ".kiro/agents/trellis-implement.json", "launch": "agent spawn: trellis-implement" },
44
+ "checkAll": { "eligible": true, "target": ".kiro/agents/trellis-check-all.json", "format": "kiro-json", "launch": "agent spawn: trellis-check-all", "skillPath": ".kiro/skills/trellis-check-all/SKILL.md", "verification": "read-only-tool-list" },
45
+ "inlineOnlyReason": null
46
+ },
47
+ {
48
+ "id": "gemini",
49
+ "detectPath": ".gemini",
50
+ "implement": { "eligible": true, "target": ".gemini/agents/trellis-implement.md", "launch": "discovered agent tool: trellis-implement" },
51
+ "checkAll": { "eligible": true, "target": ".gemini/agents/trellis-check-all.md", "format": "markdown-plain", "launch": "discovered agent tool: trellis-check-all", "skillPath": ".agents/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
52
+ "inlineOnlyReason": null
53
+ },
54
+ {
55
+ "id": "antigravity",
56
+ "detectPath": ".agent",
57
+ "implement": { "eligible": false, "target": null, "launch": null },
58
+ "checkAll": { "eligible": false, "target": null, "format": null, "launch": null, "skillPath": ".agent/skills/trellis-check-all/SKILL.md", "verification": "inline-only" },
59
+ "inlineOnlyReason": "host has no verified project-subagent launcher"
60
+ },
61
+ {
62
+ "id": "devin",
63
+ "runtimePlatforms": ["devin", "windsurf"],
64
+ "detectPath": ".devin",
65
+ "implement": { "eligible": false, "target": null, "launch": null },
66
+ "checkAll": { "eligible": false, "target": null, "format": null, "launch": null, "skillPath": ".devin/skills/trellis-check-all/SKILL.md", "verification": "inline-only" },
67
+ "inlineOnlyReason": "host has no verified project-subagent launcher"
68
+ },
69
+ {
70
+ "id": "qoder",
71
+ "detectPath": ".qoder",
72
+ "implement": { "eligible": true, "target": ".qoder/agents/trellis-implement.md", "launch": "Task/Agent: trellis-implement" },
73
+ "checkAll": { "eligible": true, "target": ".qoder/agents/trellis-check-all.md", "format": "markdown-claude", "launch": "Task/Agent: trellis-check-all", "skillPath": ".qoder/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
74
+ "inlineOnlyReason": null
75
+ },
76
+ {
77
+ "id": "codebuddy",
78
+ "detectPath": ".codebuddy",
79
+ "implement": { "eligible": true, "target": ".codebuddy/agents/trellis-implement.md", "launch": "Task/Agent: trellis-implement" },
80
+ "checkAll": { "eligible": true, "target": ".codebuddy/agents/trellis-check-all.md", "format": "markdown-claude", "launch": "Task/Agent: trellis-check-all", "skillPath": ".codebuddy/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
81
+ "inlineOnlyReason": null
82
+ },
83
+ {
84
+ "id": "copilot",
85
+ "detectPath": ".github",
86
+ "implement": { "eligible": true, "target": null, "launch": "task tool with audit prompt" },
87
+ "checkAll": { "eligible": false, "target": null, "format": null, "launch": null, "skillPath": ".github/skills/trellis-check-all/SKILL.md", "verification": "inline-only" },
88
+ "inlineOnlyReason": "no dedicated read-only project agent definition"
89
+ },
90
+ {
91
+ "id": "droid",
92
+ "detectPath": ".factory",
93
+ "implement": { "eligible": true, "target": ".factory/droids/trellis-implement.md", "launch": "Task/Agent: trellis-implement" },
94
+ "checkAll": { "eligible": true, "target": ".factory/droids/trellis-check-all.md", "format": "markdown-lower", "launch": "Task/Agent: trellis-check-all", "skillPath": ".factory/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
95
+ "inlineOnlyReason": null
96
+ },
97
+ {
98
+ "id": "pi",
99
+ "detectPath": ".pi",
100
+ "implement": { "eligible": true, "target": ".pi/agents/trellis-implement.md", "launch": "trellis_subagent agent=trellis-implement mode=single" },
101
+ "checkAll": { "eligible": true, "target": ".pi/agents/trellis-check-all.md", "format": "markdown-lower", "launch": "trellis_subagent agent=trellis-check-all mode=single", "skillPath": ".agents/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
102
+ "inlineOnlyReason": null
103
+ },
104
+ {
105
+ "id": "reasonix",
106
+ "detectPath": ".reasonix",
107
+ "implement": { "eligible": true, "target": ".reasonix/skills/trellis-implement/SKILL.md", "launch": "dispatch runAs=subagent skill trellis-implement" },
108
+ "checkAll": { "eligible": true, "target": ".reasonix/skills/trellis-check-all/SKILL.md", "format": "markdown-reasonix", "launch": "dispatch runAs=subagent skill trellis-check-all", "skillPath": ".reasonix/skills/trellis-check-all/SKILL.md", "verification": "read-only-tool-list" },
109
+ "inlineOnlyReason": null
110
+ },
111
+ {
112
+ "id": "zcode",
113
+ "detectPath": ".zcode",
114
+ "implement": { "eligible": true, "target": ".zcode/agents/trellis-implement.md", "launch": "project agent: trellis-implement" },
115
+ "checkAll": { "eligible": true, "target": ".zcode/agents/trellis-check-all.md", "format": "markdown-plain", "launch": "project agent: trellis-check-all", "skillPath": ".zcode/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
116
+ "inlineOnlyReason": null
117
+ },
118
+ {
119
+ "id": "trae",
120
+ "detectPath": ".trae",
121
+ "implement": { "eligible": true, "target": ".trae/agents/trellis-implement.md", "launch": "Task/Agent: trellis-implement" },
122
+ "checkAll": { "eligible": true, "target": ".trae/agents/trellis-check-all.md", "format": "markdown-claude", "launch": "Task/Agent: trellis-check-all", "skillPath": ".trae/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
123
+ "inlineOnlyReason": null
124
+ },
125
+ {
126
+ "id": "omp",
127
+ "detectPath": ".omp",
128
+ "implement": { "eligible": true, "target": ".omp/agents/trellis-implement.md", "launch": "task tool: trellis-implement" },
129
+ "checkAll": { "eligible": true, "target": ".omp/agents/trellis-check-all.md", "format": "markdown-lower", "launch": "task tool: trellis-check-all", "skillPath": ".omp/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
130
+ "inlineOnlyReason": null
131
+ },
132
+ {
133
+ "id": "grok",
134
+ "detectPath": ".grok",
135
+ "implement": { "eligible": true, "target": ".grok/agents/trellis-implement.md", "launch": "spawn_subagent subagent_type=trellis-implement" },
136
+ "checkAll": { "eligible": true, "target": ".grok/agents/trellis-check-all.md", "format": "markdown-plain", "launch": "spawn_subagent subagent_type=trellis-check-all", "skillPath": ".grok/skills/trellis-check-all/SKILL.md", "verification": "native-agent-discovery" },
137
+ "inlineOnlyReason": null
138
+ },
139
+ {
140
+ "id": "kimi",
141
+ "detectPath": ".kimi-code",
142
+ "implement": { "eligible": true, "target": ".kimi-code/skills/trellis-implement/SKILL.md", "launch": "Agent built-in coder with local skill" },
143
+ "checkAll": { "eligible": true, "target": ".kimi-code/skills/trellis-check-all/SKILL.md", "format": "markdown-kimi", "launch": "Agent built-in explore with local skill", "skillPath": ".kimi-code/skills/trellis-check-all/SKILL.md", "verification": "built-in-read-only-agent" },
144
+ "inlineOnlyReason": null
145
+ },
146
+ {
147
+ "id": "snow",
148
+ "detectPath": ".snow",
149
+ "implement": { "eligible": true, "target": ".snow/agents/trellis-implement.md", "launch": "project-agent launcher: trellis-implement" },
150
+ "checkAll": { "eligible": true, "target": ".snow/agents/trellis-check-all.md", "format": "markdown-snow", "launch": "project-agent launcher: trellis-check-all", "skillPath": ".snow/skills/trellis-check-all/SKILL.md", "verification": "read-only-tool-list" },
151
+ "inlineOnlyReason": null
152
+ }
153
+ ]
154
+ }
@@ -12,7 +12,7 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
12
12
  - 每次运行都重新读取最新 `prd.md`、`design.md if present`、`implement.md if present`。
13
13
  - 已存在的 `brief.md` 不能作为跳过同步的理由。
14
14
  - `brief.md` 必须以三件套为准覆盖旧内容;无法从三件套追溯的旧内容不能保留为事实。
15
- - 不要在 `brief.md` 里发明三件套没有表达的新需求。缺失字段写“未明确”,并提示应补充三件套。
15
+ - 不要在 `brief.md` 里发明三件套没有表达的新需求。必填字段缺失时写“未明确”,并提示应补充三件套;没有相关内容时直接省略 `Risks / Deferred` 整节。
16
16
  - 写回 `brief.md` 后,必须在当前对话中展示 brief 正文;不要只给文件路径。
17
17
  - Phase 1.4 前必须展示完整 brief。默认等待用户确认后再运行 `task.py start`;只有用户明确把当前任务或最终 Brief 与“展示后直接开始 / 不用再次确认 / 视为已确认”绑定时,才可在范围未变化的前提下免除第二次确认。
18
18
  - “开始做吧”“按你建议来”“可以创建任务”等普通实现或建任务意图不是 Brief 预授权,不能据此跳过确认。
@@ -39,9 +39,11 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
39
39
  - `Goal`:任务目标一句话。
40
40
  - `Scope`:本轮实现范围。
41
41
  - `Non-Goals`:明确不做的范围。
42
- - `Key Context`:关键文件、模块、入口、约束或风险。
42
+ - `Key Decisions`:已经收敛、存在实质方案分叉且会改变产品行为、范围、UX、兼容性、风险或核心架构的决定;只提炼最终选择及其影响,不复制完整决策台账。
43
+ - `Key Context`:关键文件、模块、入口和约束。
44
+ - `Risks / Deferred`:仍需在实现或验证中关注的风险,以及明确延后的事项;没有内容时不生成该 section。
43
45
  - `Acceptance`:主要验收标准。
44
- - `Next Step`:进入实现后的下一步。
46
+ - `Next Step`:只写进入下一阶段后的一个直接动作,不展开完整实施计划。
45
47
  6. 写回 `<task>/brief.md`。如果文件已存在,仍用最新三件套派生内容覆盖旧正文。
46
48
  7. 在对话中展示 brief 正文,并说明来源文件:
47
49
  - 无有效预授权:展示后结束当前回合,等待用户确认。
@@ -64,9 +66,17 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
64
66
 
65
67
  - <本轮明确不做的事情>
66
68
 
69
+ ## Key Decisions
70
+
71
+ - <已经收敛且影响实施批准的关键决定>
72
+
67
73
  ## Key Context
68
74
 
69
- - <关键文件、模块、入口、约束或风险>
75
+ - <关键文件、模块、入口和约束>
76
+
77
+ ## Risks / Deferred
78
+
79
+ - <仅在存在相关风险或明确延后事项时生成;否则省略整个 section>
70
80
 
71
81
  ## Acceptance
72
82
 
@@ -86,7 +96,7 @@ Phase 1.4 review 前:
86
96
 
87
97
  <brief.md 正文>
88
98
 
89
- 请确认 planning artifacts 和上述 brief;确认后才运行 `task.py start <task>`。
99
+ 请确认上述 brief;确认后才运行 `task.py start <task>`。
90
100
  ```
91
101
 
92
102
  存在有效预授权时:
@@ -103,14 +113,15 @@ Phase 1.4 review 前:
103
113
 
104
114
  ```markdown
105
115
  当前任务 brief:<目标一句话>
106
- 范围/约束:<不失真的压缩要点>
116
+ 范围/决定/上下文/约束:<不失真的压缩要点>
117
+ 风险/延后:<存在时展示;没有则省略>
107
118
  验收:<不失真的压缩要点>
108
119
  完整摘要:<task>/brief.md
109
120
 
110
121
  下一步:进入 `trellis-route(implement)`。
111
122
  ```
112
123
 
113
- 压缩重述不能丢掉会影响实现判断的范围、约束、风险和验收条件。
124
+ 压缩重述不能丢掉会影响实现判断的范围、关键决定、约束、风险和验收条件。
114
125
 
115
126
  ## 不要做
116
127
 
@@ -245,7 +245,7 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
245
245
 
246
246
  ## Step 5:同步任务进度
247
247
 
248
- 仅普通模式且存在活动 task 时由本 skill 执行。untracked、用户 `commit-only` 与 auto-loop 内部 `commit-only` 都跳过本 Step;Auto-Loop runner 在 action record/next 后按自身契约写入本地 `task.json.progress`,不属于这里的任务进度提交或推送。全部业务仓库成功后写完整进度;已有仓库成功而后续仓库失败时写 partial 进度,明确 completed、失败位置、next 和 notes。尚未发生成功 Git 动作就失败时,不记录虚假的 completed steps;只有父仓仍可安全提交并推送时才允许记录 failure notes。
248
+ 仅普通模式且存在活动 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。
249
249
 
250
250
  新进度固定为:
251
251
 
@@ -267,7 +267,7 @@ auto-loop 内部链失败时向调用方返回全部已完成仓库提交和失
267
267
  - 父仓分支、upstream 和冲突状态安全。
268
268
  - 推送不会携带无法归属的历史 ahead commits。
269
269
 
270
- 通过 helper 写入:
270
+ 全部业务 commit/push 成功时先通过 helper 写入最终 progress,但不得携带 `--complete`:
271
271
 
272
272
  ```bash
273
273
  python3 ./.trellis/scripts/task_progress.py write \
@@ -276,6 +276,8 @@ python3 ./.trellis/scripts/task_progress.py write \
276
276
  --json
277
277
  ```
278
278
 
279
+ 部分成功时调用同一 helper,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git 动作的失败都不得请求 complete。helper 写入失败时任务保持原状态,不得继续任务进度提交或报告完成。
280
+
279
281
  然后只提交并推送首次确认的当前任务 exact files;该集合包含 helper 更新后的 `task.json`,以及首次计划时已存在且可归属的当前任务 dirty/untracked 产物:
280
282
 
281
283
  ```bash
@@ -284,7 +286,19 @@ git commit --only -m "chore(task): update <task-name> progress" -- <current-task
284
286
  git push origin <current-branch>
285
287
  ```
286
288
 
287
- 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files;其他任务和无关 dirty/staged 文件保持原状。如果写入、提交或推送失败,不回滚已成功的业务 Git 动作,并单独报告进度同步失败。
289
+ 该动作属于用户已确认的普通 push 计划,不增加第二次确认。提交后必须验证 commit 只包含首次确认的当前任务 exact files;其他任务和无关 dirty/staged 文件保持原状。如果写入、提交或推送失败,不回滚已成功的业务 Git 动作,并单独报告进度同步失败;任务必须保持 `in_progress`,不得进入完成态。
290
+
291
+ 只有进度 commit 和 push 都成功后,才用同一份最终 progress 原子写入本地 `status=completed` 和 `completedAt`:
292
+
293
+ ```bash
294
+ python3 ./.trellis/scripts/task_progress.py write \
295
+ --task <task-dir> \
296
+ --progress-json '<same-final-progress-json>' \
297
+ --complete \
298
+ --json
299
+ ```
300
+
301
+ 该完成态写入不再创建第二个 progress commit;它作为活动任务的预归档生命周期变化保留,由显式 `trellis-finish-work` 的 archive bookkeeping commit 承接。如果完成态写入失败,远端最终 progress 已同步,但任务仍为 `in_progress`;报告完成态激活失败并允许精确重试该 helper,禁止重新执行已成功的业务 push 或 progress push。
288
302
 
289
303
  ## Step 6:结果
290
304
 
@@ -307,7 +321,7 @@ untracked 的全部已确认 Git 动作成功后,最后运行 `python3 ./.trel
307
321
 
308
322
  ### 任务进度
309
323
 
310
- 状态:<✓ 已同步 · `<progress-hash>` / · 已跳过 / ❌ 同步失败>
324
+ 状态:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
311
325
  记录:<N> 个当前任务文件
312
326
  进度:completed=<...> | partial=<...> | next=<...>
313
327
  [失败时追加:原因和恢复动作]
@@ -35,7 +35,7 @@ task 的合法 route 决策必须能追溯到 `trellis-route`、同编号 fallba
35
35
 
36
36
  当前上下文内已有 target 匹配、task 等于当前任务路径、且来源合法的 route 决策时,后续实现、check 发现问题、用户指出刚检查过的实现有问题、修复后重检、提交前复查均默认复用最近 implement/check 路由;除非用户明确要求重选/临时改/清除默认,不再调用本 skill。当前上下文没有 route 决策但 runtime state 命中时,本 skill 恢复该决策并输出同样的结构化 `route_decision`。如果上下文里只有上一个任务的 `route_decision`,必须忽略并重新解析当前任务。
37
37
 
38
- Codex inline mode 只表示主会话默认直接执行,不是 route 选项过滤器。即使当前上下文出现 `<codex-mode>inline...do not dispatch...</codex-mode>` 或 `workflow-state:in_progress-inline`,也不能推断“只能 inline”或跳过 subagent 选项;仍必须通过 helper resolve runtime/prefs,或在无有效配置时展示正常 inline/subagent 选项。若本 skill 的紧邻路由决定是 subagent,本步骤允许主 agent dispatch 对应 implement/check sub-agent;禁止的是绕过 `trellis-route` 直接 dispatch。
38
+ Codex 的 `<codex-mode>` 与 `workflow-state:*-inline` 只描述上游原生上下文/readiness 能力,不是 route 决策或选项过滤器。实际执行位置只读取本 skill 的 runtime/prefs/本轮选择;若紧邻路由决定是 subagent,主 agent 按 catalog dispatch 对应角色。禁止绕过 `trellis-route` 直接从 Codex banner 推导执行模式。
39
39
 
40
40
  先判断本次路由目标:
41
41
 
@@ -51,8 +51,6 @@ Codex inline mode 只表示主会话默认直接执行,不是 route 选项过
51
51
 
52
52
  如果命中上述覆盖意图,即使 `.trellis/.route-prefs.tmp` 存在,也不能直接使用配置;必须进入 Step 2 展示对应选项。
53
53
 
54
- ---
55
-
56
54
  ## Step 0.5: 解析已有 route state
57
55
 
58
56
  task 仅在没有覆盖意图、当前上下文没有 target + 当前 task 匹配的合法 `route_decision` 时调用 `resolve`,解析顺序固定为 runtime -> prefs -> auto-loop。untracked 不调用 `resolve`,每次直接调用 `read-pref`;命中即可执行,miss 才进入 Step 2。
@@ -200,19 +198,25 @@ helper 写入规则:保留另一个 target 的 runtime 决策和偏好;覆
200
198
  | 路由决定 | 主 agent 应执行 |
201
199
  |---------|----------------|
202
200
  | `inline implement` | `Skill({skill: "trellis-before-dev"})` 加载 spec;task 再读任务文档,untracked 读取 helper 状态与实际 scope → 主线程实施 → 跑必要验证 → 回到 Phase 2.1 completion contract |
203
- | `subagent implement` | `Agent({subagent_type: "trellis-implement"})`;task 使用 `Active task:`,untracked 使用下方自包含 `Untracked work:` 契约;主 agent 收到结果后回到 Phase 2.1 completion contract |
201
+ | `subagent implement` | 按下方当前平台执行配方调用 `trellis-implement`;task 使用 `Active task:`,untracked 使用下方自包含 `Untracked work:` 契约;主 agent 收到结果后回到 Phase 2.1 completion contract |
204
202
  | `inline check-all` | `Skill({skill: "trellis-check-all"})` |
205
- | `subagent check-all` | 优先使用明确 audit-only 的 `trellis-check-all` agent;不存在时使用平台通用 subagent,并用下方 dispatch 契约执行本地 `trellis-check-all`。subagent 只返回 `DOC-*` 文档漂移候选,不写文件;主会话负责允许的文档自修。禁止 fallback 到会直接修改工作区的 `trellis-check` agent;无兼容 subagent 时停止并请用户改选 inline |
203
+ | `subagent check-all` | 读取 catalog 当前平台条目,只调用 `checkAll.target` 声明的专用 audit-only `trellis-check-all` 角色,并按 `checkAll.launch` 启动;subagent 只返回 `CHK-*` / `DOC-*` 候选,不写文件。目标缺失、host 未发现或资格不成立时停止并请用户改选 inline;禁止通用 agent 与 `trellis-check` fallback |
206
204
 
207
205
  implement 路由只决定执行位置,不拥有实现后的停止策略。无论 inline 或 subagent,focused validation 完成后都必须返回 workflow Phase 2.1 的 completion contract;由该 owner 处理 auto-loop、用户显式继续/暂缓、已有 hold 和默认立即 Check-All 的优先级。
208
206
 
207
+ ### 平台 Dispatch Catalog
208
+
209
+ `references/platform-dispatch.json` 是平台启动契约的唯一事实源。当前条目提供稳定 `id`、`implement.launch/target`、`checkAll.launch/target/format/verification` 和 `inlineOnlyReason`。仅当 route 已选中 subagent 时,主 agent 才从当前运行平台上下文确定稳定平台 ID,读取 catalog 对应条目,并把 `launch` 字段翻译成当前 host 的工具调用。inline 路径不读取 catalog,也不预先过滤 route 选项。
210
+
211
+ dispatch prompt 第一行始终遵守当前 task/untracked 契约。agent 文件存在只证明项目产物已投影;实际 dispatch 时还必须确认当前 host 暴露 catalog 声明的 launch 能力。目标、launcher 或资格不可用时停止并让用户改选 inline,不得静默降级、发明替代 agent 或使用上游 workspace-write `trellis-check`。`verification` 只说明该角色如何证明只读资格,不放宽 Check-All 边界;`eligible=false` 时同时展示 `inlineOnlyReason`。
212
+
209
213
  ### Untracked Subagent Dispatch 契约
210
214
 
211
215
  untracked 的 implement/check subagent prompt 第一行固定为 `Untracked work: <work-id>`,并包含事项摘要、stage、scope、baseline 仓库摘要、current fingerprint、已有验证证据、相关 spec 路径和本轮明确职责。不得写 `Active task:`,不得要求 `prd.md`、`implement.jsonl` 或 `check.jsonl`。agent 必须直接执行,不得递归 dispatch implement/check agent。
212
216
 
213
217
  ### Subagent Check-All Dispatch 契约
214
218
 
215
- 使用专用或通用 subagent 时,dispatch prompt 第一行必须是当前任务路径,并包含以下完整边界:
219
+ 使用 catalog 声明的专用 subagent 时,dispatch prompt 第一行必须是当前任务路径,并包含以下完整边界:
216
220
 
217
221
  ```text
218
222
  Active task: <task path from task.py current>
@@ -229,7 +233,7 @@ Active task: <task path from task.py current>
229
233
  返回:统一 Check-All 结果、`DOC-*` 候选、已执行验证和剩余风险。不要输出 commit/push 计划。
230
234
  ```
231
235
 
232
- 平台存在专用 `trellis-check-all` agent 时,也必须先确认其角色说明明确 audit-only:允许识别 `DOC-*` 候选,但不得写文件。名称相同但会直接自修复代码、测试、配置或普通 `CHK-*` 的 agent 不可使用。平台没有专用或通用 subagent 时,不得静默改成 inline,也不得使用 `trellis-check` 代替;停止并让用户重新选择 check route。
236
+ 必须确认 catalog 目标内容明确 audit-only:允许识别 `DOC-*` 候选,但不得写文件。名称相同但会直接自修复代码、测试、配置或普通 `CHK-*` 的 agent 不可使用。平台没有合格专用角色时,不得静默改成 inline,也不得使用通用 agent 或 `trellis-check` 代替;停止并让用户重新选择 check route。
233
237
 
234
238
  ### 输出模板
235
239
 
@@ -274,7 +278,7 @@ route_decision:
274
278
  9. **check-all subagent 保持只读**:不得 fallback 到强制自修复的 `trellis-check` agent;不兼容时显式阻塞并让用户重选。
275
279
  10. **决策与执行分离**:本 skill 只输出指令,下一轮由主 agent 调工具。
276
280
  11. **严格执行用户选择**:路由结论一旦输出,主 agent 必须按指令执行,不可“出于谨慎”再换路径。
277
- 12. **Codex inline 不裁剪选项**:Codex inline 是默认执行模式,不是只能 inline 的强制模式;route 明确选中 subagent 时,本步骤可按 subagent 路径执行。
281
+ 12. **Codex capability 不裁剪选项**:Codex mode banner 只描述原生上下文/readiness 能力;route 明确选中 subagent 时,按 catalog 路径执行。
278
282
 
279
283
  ---
280
284
 
@@ -12,7 +12,7 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
12
12
  - 每次运行都重新读取最新 `prd.md`、`design.md if present`、`implement.md if present`。
13
13
  - 已存在的 `brief.md` 不能作为跳过同步的理由。
14
14
  - `brief.md` 必须以三件套为准覆盖旧内容;无法从三件套追溯的旧内容不能保留为事实。
15
- - 不要在 `brief.md` 里发明三件套没有表达的新需求。缺失字段写“未明确”,并提示应补充三件套。
15
+ - 不要在 `brief.md` 里发明三件套没有表达的新需求。必填字段缺失时写“未明确”,并提示应补充三件套;没有相关内容时直接省略 `Risks / Deferred` 整节。
16
16
  - 写回 `brief.md` 后,必须在当前对话中展示 brief 正文;不要只给文件路径。
17
17
  - Phase 1.4 前必须展示完整 brief。默认等待用户确认后再运行 `task.py start`;只有用户明确把当前任务或最终 Brief 与“展示后直接开始 / 不用再次确认 / 视为已确认”绑定时,才可在范围未变化的前提下免除第二次确认。
18
18
  - “开始做吧”“按你建议来”“可以创建任务”等普通实现或建任务意图不是 Brief 预授权,不能据此跳过确认。
@@ -39,9 +39,11 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
39
39
  - `Goal`:任务目标一句话。
40
40
  - `Scope`:本轮实现范围。
41
41
  - `Non-Goals`:明确不做的范围。
42
- - `Key Context`:关键文件、模块、入口、约束或风险。
42
+ - `Key Decisions`:已经收敛、存在实质方案分叉且会改变产品行为、范围、UX、兼容性、风险或核心架构的决定;只提炼最终选择及其影响,不复制完整决策台账。
43
+ - `Key Context`:关键文件、模块、入口和约束。
44
+ - `Risks / Deferred`:仍需在实现或验证中关注的风险,以及明确延后的事项;没有内容时不生成该 section。
43
45
  - `Acceptance`:主要验收标准。
44
- - `Next Step`:进入实现后的下一步。
46
+ - `Next Step`:只写进入下一阶段后的一个直接动作,不展开完整实施计划。
45
47
  6. 写回 `<task>/brief.md`。如果文件已存在,仍用最新三件套派生内容覆盖旧正文。
46
48
  7. 在对话中展示 brief 正文,并说明来源文件:
47
49
  - 无有效预授权:展示后结束当前回合,等待用户确认。
@@ -64,9 +66,17 @@ description: "从最新 prd.md、design.md、implement.md 生成、刷新、校
64
66
 
65
67
  - <本轮明确不做的事情>
66
68
 
69
+ ## Key Decisions
70
+
71
+ - <已经收敛且影响实施批准的关键决定>
72
+
67
73
  ## Key Context
68
74
 
69
- - <关键文件、模块、入口、约束或风险>
75
+ - <关键文件、模块、入口和约束>
76
+
77
+ ## Risks / Deferred
78
+
79
+ - <仅在存在相关风险或明确延后事项时生成;否则省略整个 section>
70
80
 
71
81
  ## Acceptance
72
82
 
@@ -86,7 +96,7 @@ Phase 1.4 review 前:
86
96
 
87
97
  <brief.md 正文>
88
98
 
89
- 请确认 planning artifacts 和上述 brief;确认后才运行 `task.py start <task>`。
99
+ 请确认上述 brief;确认后才运行 `task.py start <task>`。
90
100
  ```
91
101
 
92
102
  存在有效预授权时:
@@ -103,14 +113,15 @@ Phase 1.4 review 前:
103
113
 
104
114
  ```markdown
105
115
  当前任务 brief:<目标一句话>
106
- 范围/约束:<不失真的压缩要点>
116
+ 范围/决定/上下文/约束:<不失真的压缩要点>
117
+ 风险/延后:<存在时展示;没有则省略>
107
118
  验收:<不失真的压缩要点>
108
119
  完整摘要:<task>/brief.md
109
120
 
110
121
  下一步:进入 `trellis-route(implement)`。
111
122
  ```
112
123
 
113
- 压缩重述不能丢掉会影响实现判断的范围、约束、风险和验收条件。
124
+ 压缩重述不能丢掉会影响实现判断的范围、关键决定、约束、风险和验收条件。
114
125
 
115
126
  ## 不要做
116
127
 
@@ -6,7 +6,7 @@
6
6
  "minor": 6
7
7
  },
8
8
  "testedVersions": [
9
- "0.6.5"
9
+ "0.6.12"
10
10
  ],
11
11
  "untestedPatchPolicy": "warning",
12
12
  "newLinePolicy": "error"