strikethroo 3.21.2 → 3.22.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 (93) hide show
  1. package/README.md +10 -0
  2. package/dist/cli.js +19 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +50 -15
  7. package/dist/index.js.map +1 -1
  8. package/dist/resolve-init-harnesses.d.ts +30 -0
  9. package/dist/resolve-init-harnesses.d.ts.map +1 -0
  10. package/dist/resolve-init-harnesses.js +44 -0
  11. package/dist/resolve-init-harnesses.js.map +1 -0
  12. package/dist/types.d.ts +32 -1
  13. package/dist/types.d.ts.map +1 -1
  14. package/dist/types.js.map +1 -1
  15. package/dist/update.d.ts +28 -0
  16. package/dist/update.d.ts.map +1 -0
  17. package/dist/update.js +198 -0
  18. package/dist/update.js.map +1 -0
  19. package/dist-web/assets/{arc-Dnj8t_Cg.js → arc-CguPlWfb.js} +1 -1
  20. package/dist-web/assets/{architectureDiagram-3BPJPVTR-7x3i_pmi.js → architectureDiagram-3BPJPVTR-D65RMVqJ.js} +1 -1
  21. package/dist-web/assets/{blockDiagram-GPEHLZMM-Cg2a93ny.js → blockDiagram-GPEHLZMM-CNIwP_yH.js} +1 -1
  22. package/dist-web/assets/{c4Diagram-AAUBKEIU-DMmHyu1B.js → c4Diagram-AAUBKEIU-CuZ4SoKV.js} +1 -1
  23. package/dist-web/assets/channel-BL14r_5w.js +1 -0
  24. package/dist-web/assets/{chunk-2J33WTMH-BarACI5V.js → chunk-2J33WTMH-DM4ZcjVq.js} +1 -1
  25. package/dist-web/assets/{chunk-4BX2VUAB-D1jdtJjC.js → chunk-4BX2VUAB-DI3-zGiF.js} +1 -1
  26. package/dist-web/assets/{chunk-55IACEB6-D3ecVMrb.js → chunk-55IACEB6-DBdh-eer.js} +1 -1
  27. package/dist-web/assets/{chunk-727SXJPM-DXNd005W.js → chunk-727SXJPM-B0HDPh0I.js} +1 -1
  28. package/dist-web/assets/{chunk-AQP2D5EJ-C0VOl8ox.js → chunk-AQP2D5EJ-C0MnLmRm.js} +1 -1
  29. package/dist-web/assets/{chunk-FMBD7UC4-DcTxd98r.js → chunk-FMBD7UC4-CmggDcp1.js} +1 -1
  30. package/dist-web/assets/{chunk-ND2GUHAM-CAMtgZHg.js → chunk-ND2GUHAM-BSIdB1y0.js} +1 -1
  31. package/dist-web/assets/{chunk-QZHKN3VN-DWfV0bq5.js → chunk-QZHKN3VN-BTHsXhgb.js} +1 -1
  32. package/dist-web/assets/classDiagram-4FO5ZUOK-DBkbEi_3.js +1 -0
  33. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DBkbEi_3.js +1 -0
  34. package/dist-web/assets/{cose-bilkent-S5V4N54A-Csc9VNPk.js → cose-bilkent-S5V4N54A-IXUMXU5h.js} +1 -1
  35. package/dist-web/assets/{dagre-BM42HDAG-BnwRiOXb.js → dagre-BM42HDAG-CtwBET_X.js} +1 -1
  36. package/dist-web/assets/{diagram-2AECGRRQ-wPIOyrHK.js → diagram-2AECGRRQ-DRe1AFa_.js} +1 -1
  37. package/dist-web/assets/{diagram-5GNKFQAL-TccsDwtZ.js → diagram-5GNKFQAL-D9IRdgWX.js} +1 -1
  38. package/dist-web/assets/{diagram-KO2AKTUF-DtAJCwJt.js → diagram-KO2AKTUF-CQi7gmRS.js} +1 -1
  39. package/dist-web/assets/{diagram-LMA3HP47-BvMQVWoO.js → diagram-LMA3HP47-B0fp5jh8.js} +1 -1
  40. package/dist-web/assets/{diagram-OG6HWLK6-BPxOm_5c.js → diagram-OG6HWLK6-B2ujFhv2.js} +1 -1
  41. package/dist-web/assets/{erDiagram-TEJ5UH35-CRPnIDwq.js → erDiagram-TEJ5UH35-DcxHh3A8.js} +1 -1
  42. package/dist-web/assets/{flowDiagram-I6XJVG4X-DBLbHpW_.js → flowDiagram-I6XJVG4X-Btsglt1O.js} +1 -1
  43. package/dist-web/assets/{ganttDiagram-6RSMTGT7-gZhN1gnI.js → ganttDiagram-6RSMTGT7-BRaGl6R4.js} +1 -1
  44. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-Dssi43fY.js → gitGraphDiagram-PVQCEYII-Cl1DR87j.js} +1 -1
  45. package/dist-web/assets/{index-CEGCvBkm.js → index-CxXoZ0_J.js} +1 -1
  46. package/dist-web/assets/{index-Nz3QPmKb.js → index-DXt7jz3h.js} +4 -4
  47. package/dist-web/assets/{index-BdDnJAsd.js → index-DZ4QtqqW.js} +1 -1
  48. package/dist-web/assets/{infoDiagram-5YYISTIA-sXzUxho2.js → infoDiagram-5YYISTIA-GMZDkbDI.js} +1 -1
  49. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-BPHTll-A.js → ishikawaDiagram-YF4QCWOH-DC8HBMwN.js} +1 -1
  50. package/dist-web/assets/{journeyDiagram-JHISSGLW-h2TzQwJC.js → journeyDiagram-JHISSGLW-4KT1uAXJ.js} +1 -1
  51. package/dist-web/assets/{kanban-definition-UN3LZRKU-1xkUO8WZ.js → kanban-definition-UN3LZRKU-bBpM_7W0.js} +1 -1
  52. package/dist-web/assets/{linear-D_7aXIXs.js → linear-BzW5Mi4V.js} +1 -1
  53. package/dist-web/assets/{mermaid.core-Bwdbg8D0.js → mermaid.core-BZXehlCp.js} +4 -4
  54. package/dist-web/assets/{mindmap-definition-RKZ34NQL-eAYjLKqV.js → mindmap-definition-RKZ34NQL-B8RhYsaN.js} +1 -1
  55. package/dist-web/assets/{pieDiagram-4H26LBE5-CWfU-OAg.js → pieDiagram-4H26LBE5-DV749i9Y.js} +1 -1
  56. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-CgKKzr9p.js → quadrantDiagram-W4KKPZXB-Cduffe8j.js} +1 -1
  57. package/dist-web/assets/{requirementDiagram-4Y6WPE33-Dx-cDqCB.js → requirementDiagram-4Y6WPE33-C7KngwZn.js} +1 -1
  58. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-B_yYv0Dy.js → sankeyDiagram-5OEKKPKP-CJjwUGG3.js} +1 -1
  59. package/dist-web/assets/{sequenceDiagram-3UESZ5HK--QLtZ1Rs.js → sequenceDiagram-3UESZ5HK-BARiZOtJ.js} +1 -1
  60. package/dist-web/assets/{stateDiagram-AJRCARHV-DVmFu5R7.js → stateDiagram-AJRCARHV-DA1dHBGx.js} +1 -1
  61. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-D4ioaqC3.js +1 -0
  62. package/dist-web/assets/{timeline-definition-PNZ67QCA-BUtZCLUr.js → timeline-definition-PNZ67QCA-ClE6cvJF.js} +1 -1
  63. package/dist-web/assets/{vennDiagram-CIIHVFJN-CiAEMMvF.js → vennDiagram-CIIHVFJN-BLR57Itf.js} +1 -1
  64. package/dist-web/assets/{wardley-L42UT6IY-CzeU7tOS.js → wardley-L42UT6IY-EA8x1UUF.js} +1 -1
  65. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-vvP_uZTz.js → wardleyDiagram-YWT4CUSO-DHktlei-.js} +1 -1
  66. package/dist-web/assets/{xychartDiagram-2RQKCTM6-vSFbOWXi.js → xychartDiagram-2RQKCTM6-DOxQD_Ha.js} +1 -1
  67. package/dist-web/index.html +1 -1
  68. package/package.json +4 -1
  69. package/templates/harness/skills/st-code-review/SKILL.md +3 -7
  70. package/templates/harness/skills/st-create-plan/SKILL.md +33 -44
  71. package/templates/harness/skills/st-create-plan/scripts/check-for-updates.cjs +2502 -0
  72. package/templates/harness/skills/st-execute-blueprint/SKILL.md +37 -63
  73. package/templates/harness/skills/st-execute-blueprint/scripts/check-for-updates.cjs +2502 -0
  74. package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +1 -0
  75. package/templates/harness/skills/st-execute-task/SKILL.md +36 -79
  76. package/templates/harness/skills/st-execute-task/scripts/check-for-updates.cjs +2502 -0
  77. package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +1 -0
  78. package/templates/harness/skills/st-full-workflow/SKILL.md +139 -270
  79. package/templates/harness/skills/st-full-workflow/scripts/check-for-updates.cjs +2502 -0
  80. package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +1 -0
  81. package/templates/harness/skills/st-generate-tasks/SKILL.md +91 -155
  82. package/templates/harness/skills/st-generate-tasks/scripts/check-for-updates.cjs +2502 -0
  83. package/templates/harness/skills/st-refine-plan/SKILL.md +63 -109
  84. package/templates/harness/skills/st-refine-plan/scripts/check-for-updates.cjs +2502 -0
  85. package/templates/strikethroo/config/templates/UPDATE_NOTICE_TEMPLATE.md +1 -0
  86. package/dist-web/assets/channel-Bb0_vDD8.js +0 -1
  87. package/dist-web/assets/classDiagram-4FO5ZUOK-R25Yhm3n.js +0 -1
  88. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-R25Yhm3n.js +0 -1
  89. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DBs8K0hr.js +0 -1
  90. package/templates/harness/skills/st-full-workflow/references/task-frontmatter.md +0 -23
  91. package/templates/harness/skills/st-full-workflow/references/test-philosophy.md +0 -17
  92. package/templates/harness/skills/st-generate-tasks/references/task-frontmatter.md +0 -23
  93. package/templates/harness/skills/st-generate-tasks/references/test-philosophy.md +0 -17
@@ -3642,6 +3642,7 @@ var import_child_process2 = require("child_process");
3642
3642
  var taskPrompt = (request) => `Strikethroo external task dispatch \u2014 Plan ${request.planId}, Task ${request.taskId}.
3643
3643
  Workspace: ${request.workspace}
3644
3644
  Task file: ${request.taskFile}
3645
+ You are a delegated execution worker. Do not run check-for-updates.cjs or emit update notices.
3645
3646
  Before implementation, read and execute ${path2.join(
3646
3647
  request.workspace,
3647
3648
  ".ai/strikethroo/config/hooks/PRE_TASK_EXECUTION.md"
@@ -5,9 +5,6 @@ description: Use when the user asks to decompose, break down, or generate tasks
5
5
 
6
6
  # st-generate-tasks
7
7
 
8
- Drive the end-to-end decomposition of an existing Strikethroo plan into
9
- atomic Markdown task files.
10
-
11
8
  ## Inputs
12
9
 
13
10
  The user supplies the numeric plan ID conversationally.
@@ -16,20 +13,22 @@ The user supplies the numeric plan ID conversationally.
16
13
 
17
14
  ### 1. Locate the strikethroo root
18
15
 
19
- Run `scripts/find-strikethroo-root.cjs` from the user's working directory.
16
+ Run `scripts/find-strikethroo-root.cjs` from the user's working directory. If
17
+ it exits non-zero, stop and ask the user to run `npx strikethroo init`.
18
+
19
+ Treat the path it prints as `<root>` for every subsequent step.
20
20
 
21
- If the script exits non-zero, the working directory is not inside an
22
- initialized strikethroo workspace. Stop and ask the user to run the project
23
- initializer (e.g. `npx strikethroo init`) before continuing. Do
24
- not attempt to generate tasks outside of a valid root.
21
+ Delegated execution workers skip this step and do not emit update notices.
25
22
 
26
- For every subsequent step, treat the path printed by this script as `<root>`.
23
+ Run `scripts/check-for-updates.cjs "<root>"` as a separate command using this
24
+ skill's script path. Keep the user's working directory. Read the one JSON line
25
+ on stdout. When `notice` is present, retain its exact text for the final
26
+ user-facing response. Never pause for permission and never run an update.
27
27
 
28
28
  ### 2. Resolve the plan
29
29
 
30
- Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` to obtain the
31
- absolute path of the plan file. Passing a different field name prints that
32
- field alone.
30
+ Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` for the plan
31
+ file's absolute path. Another field name prints that field instead.
33
32
 
34
33
  If the script exits non-zero, stop and ask the user to confirm the plan ID.
35
34
  Do not guess a different ID.
@@ -38,12 +37,11 @@ Do not guess a different ID.
38
37
 
39
38
  Read these files, in order:
40
39
 
41
- - `<root>/config/STRIKETHROO.md` — directory conventions for plans, tasks,
42
- and the archive layout.
43
- - The plan body at the path returned by step 2 — this is the contract for
40
+ - `<root>/config/STRIKETHROO.md` — project and directory conventions.
41
+ - The plan body at the path returned by step 2 — the contract for
44
42
  what tasks must exist.
45
- - `<root>/config/templates/TASK_TEMPLATE.md` — every task file you emit must
46
- conform to this template's frontmatter schema and section structure.
43
+ - `<root>/config/templates/TASK_TEMPLATE.md` — the schema every task file
44
+ must match.
47
45
  - `<root>/config/shared/anti-rationalization.md` — apply in step 4.
48
46
 
49
47
  ### 4. Analyze and decompose the plan
@@ -56,23 +54,10 @@ Decompose each deliverable into atomic tasks only when genuinely needed.
56
54
  - Create only the minimum number of tasks necessary. Target a 20–30%
57
55
  reduction from comprehensive lists by questioning the necessity of each
58
56
  candidate.
59
- - **Direct Implementation Only**: a task corresponds to an explicit
60
- requirement, not a "nice-to-have".
61
- - **DRY Task Principle**: each task has a unique, non-overlapping purpose.
62
- - **Question Everything**: for each task, ask "Is this absolutely necessary
63
- to meet the plan objectives?"
64
- - **Avoid Gold-plating**: resist comprehensive features the plan does not
65
- require.
66
-
67
- **Antipatterns to avoid:**
68
-
69
- - Separating "error handling" from the main implementation when it can be
70
- inline.
71
- - Splitting trivially small operations into multiple tasks (e.g. "validate
72
- input" + "process input" as separate units).
73
- - Adding tasks for "future extensibility" or "best practices" the plan does
74
- not mention.
75
- - Comprehensive test suites for trivial functionality.
57
+ - Every task corresponds to an explicit requirement, never a nice-to-have, a
58
+ "best practice", or future extensibility the plan does not mention.
59
+ - Each task has a unique, non-overlapping purpose.
60
+ - Keep error handling inside the task that owns the behavior it guards.
76
61
 
77
62
  Apply `<root>/config/shared/anti-rationalization.md` to this rationalization table:
78
63
 
@@ -94,80 +79,68 @@ Each task must be:
94
79
  concrete, runnable verification step (a command plus its expected output, or
95
80
  another observable signal). Never settle for a vague "works correctly".
96
81
 
97
- Skill assignment (kebab-case, automatically inferred from the task's
98
- technical requirements):
99
-
100
- - 1 skill — single-domain task (e.g. `["css"]`, `["vitest"]`).
101
- - 2 skills — complementary domains (e.g. `["api-endpoints", "database"]`,
102
- `["react-components", "vitest"]`).
103
- - 3+ skills indicates the task should be broken down further.
82
+ Infer skills in kebab-case from the task's technical requirements. Use one
83
+ skill for a single-domain task and two for complementary domains, such as
84
+ `["api-endpoints", "database"]`. Three or more means the task must be broken
85
+ down further.
104
86
 
105
87
  ### 6. Test philosophy: "write a few tests, mostly integration"
106
88
 
107
- When generating test tasks, keep this constraint:
89
+ **Write tests for:**
108
90
 
109
- **Definition.** Meaningful tests verify custom business logic, critical paths,
110
- and edge cases specific to this application. Test *your* code, not the
111
- framework or library.
91
+ - Custom business logic and algorithms.
92
+ - Critical user workflows and data transformations.
93
+ - Edge cases and error conditions in core functionality.
94
+ - Integration points between components.
95
+ - Complex validation or calculation logic.
112
96
 
113
- Before writing any test task, read `references/test-philosophy.md`; it lists
114
- what deserves a test and what does not.
97
+ **Do not write tests for:**
115
98
 
116
- **Test task creation rules:**
99
+ - Third-party library and framework functionality.
100
+ - Simple CRUD without custom logic.
101
+ - Trivial getters/setters and static configuration.
102
+ - Obvious functionality that would break immediately if incorrect.
117
103
 
118
- - Combine related test scenarios into a single task (e.g. "Test user
119
- authentication flow" not separate tasks for login, logout, validation).
120
- - Favor integration and critical-path coverage over per-method unit tests.
121
- - Avoid one test task per CRUD operation.
122
- - Question whether simple functions need a dedicated test task.
104
+ Combine related test scenarios into one task ("Test user authentication flow",
105
+ not separate tasks for login, logout, and validation). Favor integration and
106
+ critical-path coverage over per-method unit tests. Never create one test task
107
+ per CRUD operation.
123
108
 
124
- If any test task is generated, restate this section and the reference file
125
- verbatim or near-verbatim in that task's "Implementation Notes" so the
126
- executing agent applies them.
109
+ Copy these rules into the "Implementation Notes" of every test task you
110
+ generate.
127
111
 
128
112
  ### 7. Dependency analysis
129
113
 
130
- For each task, identify:
131
-
132
- - **Hard dependencies**: tasks that MUST complete before this one can start.
133
- - **Soft dependencies**: tasks that SHOULD complete for optimal execution.
134
-
135
- A task B depends on A if B requires A's output or artifacts, modifies code
136
- created by A, or tests functionality implemented by A. Validate that the
137
- final dependency graph is acyclic.
114
+ Task B depends on task A when B requires A's output or artifacts, modifies
115
+ code created by A, or tests functionality implemented by A. Record it as a
116
+ **hard dependency** when B cannot start before A completes and as a **soft
117
+ dependency** when B merely runs better after A. Validate that the final
118
+ dependency graph is acyclic.
138
119
 
139
120
  ### 8. Complexity analysis
140
121
 
141
122
  For every candidate task, assign a `complexity_score` (integer 1–10) before
142
123
  writing any file. Read `references/complexity-rubric.md` before scoring; it
143
- defines the four dimensions each band is judged on.
144
-
145
- **Pre-emission sanity rules** — apply these before any task is written:
124
+ defines the four dimensions each band is judged on. Then apply these rules:
146
125
 
147
- - 3+ skills assigned → split the task into smaller tasks, each with 1–2 skills.
148
- - Vague acceptance criteria → sharpen them until they include at least one
149
- concrete, runnable verification step.
150
- - Trivially small adjacent tasks → merge them into a single task.
151
126
  - Score ≥ 8 → decompose further; do not emit as-is.
152
- - Score 6–7 → either sharpen criteria or split; do not emit without an
153
- explicit reason.
127
+ - Score 6–7 → sharpen or split; do not emit without an explicit reason.
128
+ - Vague acceptance criteria → sharpen them into a concrete, runnable
129
+ verification step.
130
+ - Trivially small adjacent tasks → merge them.
154
131
 
155
- **Loop-back rule:**
156
-
157
- After applying split, sharpen, or merge, re-run dependency analysis and
158
- re-score the adjusted tasks. Repeat this loop no more than three times. If
132
+ **Loop-back rule:** after applying split, sharpen, or merge, re-run dependency
133
+ analysis and re-score the adjusted tasks. Repeat no more than three times. If
159
134
  complexity is still unresolved after three passes, stop and surface the
160
135
  blocker to the user.
161
136
 
162
137
  ### 9. Allocate task IDs
163
138
 
164
- Run `scripts/get-next-task-id.cjs <plan-id>` to obtain the first available
165
- task ID. Allocate subsequent IDs by incrementing in-process; do not invoke
166
- the script repeatedly. Use the unpadded integer in the task frontmatter `id`
167
- field and the zero-padded form (`{padded-id}--{slug}`) for the filename.
168
-
169
- The slug derives from a short task title: lowercase, alphanumeric and
170
- hyphens only, collapsed, trimmed.
139
+ Run `scripts/get-next-task-id.cjs <plan-id>` once for the first available task
140
+ ID, then allocate the rest by incrementing in-process. Use the unpadded
141
+ integer in the task frontmatter `id` field and the zero-padded form in the
142
+ filename. The slug derives from a short task title: lowercase, alphanumeric
143
+ and hyphens only, collapsed, trimmed.
171
144
 
172
145
  ### 10. Emit the task files
173
146
 
@@ -177,34 +150,23 @@ Write each task to:
177
150
  <root>/plans/<plan-dir-name>/tasks/{padded-id}--{slug}.md
178
151
  ```
179
152
 
180
- Each file must conform to `<root>/config/templates/TASK_TEMPLATE.md`. Read
181
- `references/task-frontmatter.md` when filling the frontmatter; it lists every
182
- field, its type, and when the optional ones apply.
153
+ Each file must conform to `<root>/config/templates/TASK_TEMPLATE.md`. Add
154
+ `complexity_notes` only when the score needs justification. Never write
155
+ `execution_profile`; the routing helper writes it.
183
156
 
184
- The body sections (Objective, Skills Required, Acceptance Criteria, Technical
185
- Requirements, Input Dependencies, Output Artifacts, Implementation Notes)
186
- must be filled with task-specific content. Place detailed implementation
187
- guidance inside a `<details>` block under "Implementation Notes" — write it
188
- so a non-thinking LLM could execute the task from that section alone.
157
+ Fill every body section with task-specific content. Place detailed
158
+ implementation guidance inside a `<details>` block under "Implementation
159
+ Notes", written so a non-thinking LLM could execute the task from that
160
+ section alone.
189
161
 
190
162
  ### 11. Validation checklist
191
163
 
192
164
  Before declaring task generation complete, verify:
193
165
 
194
- - Each task has 1–2 appropriate technical skills assigned and inferred from
195
- its objectives.
196
- - Dependencies form an acyclic graph; no orphan or circular references.
197
- - Task IDs are unique, sequential, and start from the value returned by
198
- `get-next-task-id.cjs`.
199
- - Groups are consistent and meaningful.
200
- - Every task's Acceptance Criteria includes at least one concrete, runnable
201
- verification step (command + expected output / observable signal), not a
202
- vague "works correctly".
203
- - Every **explicitly stated** deliverable in the plan is covered.
204
- - No redundant or overlapping tasks.
205
- - Minimization applied (20–30% reduction target).
206
- - Test tasks focus on business logic, not framework functionality.
207
- - No gold-plating: only plan requirements are addressed.
166
+ - Every **explicitly stated** deliverable in the plan is covered by a task.
167
+ - No two tasks overlap in purpose.
168
+ - Dependencies form an acyclic graph, with no orphan or circular references.
169
+ - Groups are consistent across the plan.
208
170
  - After writing the task files, run
209
171
  `scripts/validate-plan-blueprint.cjs <plan-id> complexityScoresValid`. Stop
210
172
  unless it prints `yes`; if it prints `no`, run
@@ -216,62 +178,36 @@ Before declaring task generation complete, verify:
216
178
  Read `<root>/config/hooks/TASK_EXECUTION_ROUTING.md` and follow its
217
179
  instructions together with this procedure:
218
180
 
219
- 1. Run `scripts/route-task-execution.cjs profiles <plan-id>` and interpret
220
- its JSON result. On `no-config` or `disabled`, routing is off: skip the
221
- remaining routing steps and continue. On `invalid-config`, stop and
222
- surface the errors to the user — do not generate the blueprint.
223
- 2. Classify every task in the plan's `tasks/` directory against the
224
- configured profile descriptions. For tasks generated in this run, use the
225
- task content already in your context — objective, acceptance criteria,
226
- technical requirements, `skills`, and `complexity_score`; do not reread
227
- the emitted task files to reconstruct information you already hold. If
228
- the plan carried task files from an earlier generation run, read those
229
- files (and only those) to classify them — the mapping must cover every
230
- task in the plan. Assign each task ID exactly one configured profile
231
- name. Never invent a profile name, model, or harness.
181
+ 1. Run `scripts/route-task-execution.cjs profiles <plan-id>`. On `no-config`
182
+ or `disabled`, routing is off; skip the remaining routing steps and
183
+ continue. On `invalid-config`, stop and surface the errors to the user; do
184
+ not generate the blueprint.
185
+ 2. Assign every task in the plan's `tasks/` directory exactly one configured
186
+ profile name. Classify the tasks generated in this run from the content
187
+ already in your context. If the plan carried task files from an earlier
188
+ generation run, read those files to classify them.
232
189
  3. Write the complete task-ID-to-profile mapping as a JSON object to a
233
190
  temporary file, for example `{"1": "routine", "2": "demanding"}`.
234
- 4. Run
235
- `scripts/route-task-execution.cjs apply <plan-id> <mapping-file>`. The
236
- helper validates the mapping (every task exactly once, only configured
237
- profiles), writes one `execution_profile` frontmatter field per task, and
238
- verifies the written files. Target selection and resolver execution happen
239
- later at task dispatch, never during generation.
240
- 5. On `routed`, delete the temporary mapping file and continue. On any
241
- failure result (`invalid-assignments`, `invalid-tasks`,
242
- `routing-failure`, `infrastructure-failure`), stop
243
- and surface the JSON errors to the user. Never proceed to blueprint
244
- generation with partially routed tasks.
245
-
246
- Profile names are durable routing labels. Persist them only through the
247
- helper's `execution_profile` field; never hand-write a concrete `execution`
248
- target into task frontmatter or task bodies.
191
+ 4. Run `scripts/route-task-execution.cjs apply <plan-id> <mapping-file>`.
192
+ Target selection happens later at task dispatch, never during generation.
193
+ 5. On `routed`, delete the temporary mapping file and continue. On any failure
194
+ result (`invalid-assignments`, `invalid-tasks`, `routing-failure`,
195
+ `infrastructure-failure`), stop and surface the JSON errors to the user.
196
+ Never continue to blueprint generation with partially routed tasks.
197
+
198
+ Never hand-write a concrete execution target into task frontmatter or task
199
+ bodies.
249
200
 
250
201
  ### 13. Run the POST_TASK_GENERATION_ALL hook
251
202
 
252
203
  Read `<root>/config/hooks/POST_TASK_GENERATION_ALL.md` and follow its
253
- instructions. Run it only after routing succeeded or reported routing off.
254
- This typically requires:
255
-
256
- - Appending an Execution Blueprint section to the plan document, including a
257
- Mermaid dependency diagram and explicit phase groupings (Phase 1 contains
258
- zero-dependency tasks; each subsequent phase contains tasks whose
259
- dependencies all live in earlier phases). Use
260
- `<root>/config/templates/BLUEPRINT_TEMPLATE.md` for structure.
261
-
262
- ### 14. Emit the structured summary
263
-
264
- Conclude with exactly this block as the final output:
265
-
266
- ```
267
- ---
268
- Task Generation Summary:
269
- - Plan ID: [numeric-id]
270
- - Tasks: [count]
271
- - Status: Ready for execution
272
- ```
204
+ instructions, using `<root>/config/templates/BLUEPRINT_TEMPLATE.md` for the
205
+ Execution Blueprint structure. Run the hook only after routing succeeded or
206
+ reported routing off.
273
207
 
274
- The summary is consumed by downstream automation; keep the format exact.
208
+ When the retained update `notice` is present, append that exact sentence after
209
+ the structured summary block, or after your final response when this skill emits
210
+ no summary block. Nothing may follow the notice.
275
211
 
276
212
  ## Failure Modes
277
213