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.
- package/README.md +2 -2
- package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +18 -4
- package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +12 -8
- package/enhancements/0.6/.agents/skills/trellis-route/references/check-all-agent-body.md +23 -0
- package/enhancements/0.6/.agents/skills/trellis-route/references/platform-dispatch.json +154 -0
- package/enhancements/0.6/.agents/skills/trellis-task-brief/SKILL.md +18 -7
- package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +18 -4
- package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +12 -8
- package/enhancements/0.6/.claude/skills/trellis-task-brief/SKILL.md +18 -7
- package/enhancements/0.6/overrides/compatibility.json +1 -1
- package/enhancements/0.6/overrides/conflicts.json +461 -32
- package/enhancements/0.6/overrides/patches/agents/untracked-context/channel-check-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/agents/untracked-context/check-all-guard.md +4 -0
- package/enhancements/0.6/overrides/patches/agents/untracked-context/kiro-check-content.txt +1 -0
- package/enhancements/0.6/overrides/patches/agents/untracked-context/omp-check-selector.md +2 -0
- package/enhancements/0.6/overrides/patches/agents/untracked-context/omp-implement-selector.md +2 -0
- package/enhancements/0.6/overrides/patches/agents/untracked-context/patch.json +82 -4
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/breadcrumb-content.py +29 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/breadcrumb-selector.py +22 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/codex-session-start-content.py +30 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/codex-session-start-selector.py +3 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/main-content.py +78 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/main-selector.py +65 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/patch.json +99 -24
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/stale-task-content.py +1 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/stale-task-selector.py +1 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/untracked-helper-content.py +26 -0
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/untracked-helper-selector.py +1 -0
- package/enhancements/0.6/overrides/patches/scripts/runtime-state-integrity/active-task-resolution-content.py +12 -4
- package/enhancements/0.6/overrides/patches/scripts/runtime-state-integrity/active-task-resolution-selector.py +14 -6
- package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/helpers-selector.py +1 -1
- package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/imports-content.py +1 -0
- package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/imports-selector.py +1 -0
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/archive-guard-content.py +12 -1
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/archive-write-content.py +1 -5
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/patch.json +7 -7
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/set-meta-content.py +5 -0
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/set-meta-selector.py +3 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-before-dev/project-knowledge-discovery/patch.json +3 -2
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/auto-task-create/patch.json +3 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-authorization/patch.json +3 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/content.md +18 -2
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/patch.json +94 -9
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/planning-contract-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/planning-contract-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/quality-bar-baseline.md +4 -3
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/readiness-content.md +2 -3
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/readiness-selector.md +2 -3
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/review-content.md +3 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/review-selector.md +3 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/summary-shape-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/summary-shape-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/completed-route-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/completed-route-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/content.md +11 -2
- package/enhancements/0.6/overrides/patches/skills/trellis-continue/task-progress-recovery/patch.json +33 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-finish-work/exact-bookkeeping/content.md +22 -8
- package/enhancements/0.6/overrides/patches/skills/trellis-finish-work/exact-bookkeeping/patch.json +4 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/patch.json +52 -6
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-baseline.md +26 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-content.md +36 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/common-paths-baseline.md +20 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/common-paths-content.md +24 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/patch.json +83 -7
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/shared-skill-consumers-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-customization-routing/shared-skill-consumers-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-mode-precedence/patch.json +20 -8
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-mode-precedence/scope-selector.md +1 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/active-task-lifecycle-baseline.md +11 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/active-task-lifecycle-content.md +25 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/check-all-agent-route-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/check-all-agent-route-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-baseline.md +16 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-content.md +12 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-managed-baseline.md +18 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-entry-baseline.md +20 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-entry-content.md +25 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-modification-baseline.md +7 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/lifecycle-modification-content.md +8 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/owner-routing-content.md +5 -5
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/patch.json +236 -4
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-artifacts-baseline.md +25 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-artifacts-content.md +27 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-readiness-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/task-readiness-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-change-map-content.md +7 -3
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-notes-content.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/workflow-notes-selector.md +1 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-start/no-task-routing/patch.json +3 -7
- package/enhancements/0.6/overrides/patches/skills/trellis-update-spec/autonomous-evaluation/patch.json +6 -4
- package/enhancements/0.6/overrides/patches/workflow/hub/content.md +1 -1
- package/enhancements/0.6/overrides/patches/workflow/intent-routing/request-triage/content.md +6 -14
- package/enhancements/0.6/overrides/patches/workflow/phase-ownership/active-task-routing-baseline.md +2 -2
- package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-check-baseline.md +3 -3
- package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-implement-baseline.md +6 -5
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-content.md +10 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-selector.md +11 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-baseline.md +63 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-content.md +63 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/customizing-trellis-managed-baseline.md +67 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/patch.json +15 -0
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/state-contract-comment-content.md +8 -9
- package/enhancements/0.6/overrides/patches/workflow/state-missing-task/active-task-clear-fallback-selector.py +5 -2
- package/enhancements/0.6/overrides/patches/workflow/state-no-task/content.md +3 -2
- package/enhancements/0.6/overrides/patches/workflow/state-untracked/content.md +2 -2
- package/enhancements/0.6/scripts/task_progress.py +86 -2
- package/enhancements/MANIFEST.json +55 -9
- package/package.json +4 -4
- package/src/builtin-plugins/skill-garden/content-adapter.js +318 -1
- package/src/builtin-plugins/skill-garden/provider.js +3 -0
- package/src/builtin-plugins/skill-garden/runtime.js +10 -7
- package/src/cli.js +2 -1
- package/src/commands/plugin.js +4 -1
- package/src/commands/update.js +162 -36
- package/src/constants.js +21 -6
- package/src/lib/codex-tweaks.js +6 -5
- package/src/lib/platform-patch-adapters.js +68 -4
- package/src/lib/telemetry.js +2 -1
- package/src/lib/update-transaction.js +351 -0
- package/src/patches/conflicts.json +37 -0
- package/src/patches/platforms/codex/dispatch-mode/config-content.json.txt +30 -0
- package/src/patches/platforms/codex/dispatch-mode/hook-content.py +53 -0
- package/src/patches/platforms/codex/dispatch-mode/hook-selector.py +71 -0
- package/src/patches/platforms/codex/dispatch-mode/patch.json +13 -1
- package/src/plugin/application-service.js +17 -2
- package/src/plugin/install/platform-detector.js +16 -2
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-beta2.py +0 -443
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-pre-untracked.py +0 -443
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/baseline-flower-stale-task.py +0 -443
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/content.py +0 -489
- package/enhancements/0.6/overrides/patches/hooks/inject-workflow-state/shared-runtime/selector.py +0 -408
- package/enhancements/0.6/overrides/patches/scripts/task-store-write-integrity/create-active-content.py +0 -17
- 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.
|
|
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
|
|
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
|
-
|
|
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
|
-
状态:<✓
|
|
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
|
|
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` | `
|
|
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` |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
状态:<✓
|
|
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
|
|
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` | `
|
|
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` |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|