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,68 +5,46 @@ description: Use when the user asks to run the complete end-to-end Strikethroo w
5
5
 
6
6
  # st-full-workflow
7
7
 
8
- Drive the complete end-to-end Strikethroo workflow from initial plan creation through final blueprint execution and archival.
9
-
10
8
  ## Critical Rule
11
9
 
12
- Execute all three steps sequentially without waiting for user input between them. This is a fully automated orchestration workflow. Progress indicators are for user visibility only and do not pause execution.
10
+ Execute all three steps sequentially without waiting for user input between them.
13
11
 
14
12
  ## Inputs
15
13
 
16
14
  The user supplies the work order conversationally.
17
15
 
18
- ## Context Passing Between Steps
19
-
20
- Information flows through the workflow via structured output parsing:
21
-
22
- 1. **Step 1 → Step 2**: Extract the numeric `Plan ID` from the Step 1 structured summary output. Use this exact ID to drive Step 2.
23
- 2. **Step 2 → Step 3**: Extract the `Tasks` count from the Step 2 structured summary output. Use this count for progress tracking during Step 3.
24
-
25
- Do not proceed to the next step until the structured output from the current step has been successfully parsed.
26
-
27
- ## Progress Indicators
28
-
29
- Display progress indicators at key transition points to provide visual feedback without interrupting execution:
30
-
31
- - `⬛⬜⬜ 33%` — Step 1: Plan Creation Complete
32
- - `⬛⬛⬜ 66%` — Step 2: Task Generation Complete
33
- - `⬛⬛⬛ 100%` — Step 3: Blueprint Execution Complete
34
-
35
- These indicators are purely informational. Do not pause or wait for user input when displaying them.
36
-
37
16
  ## Operating Procedure
38
17
 
39
18
  ### Step 1: Plan Creation
40
19
 
41
- **Progress**: `⬛⬜⬜ 33% - Step 1/3: Starting Plan Creation`
42
-
43
20
  #### 1. Locate the strikethroo root
44
21
 
45
- Run `scripts/find-strikethroo-root.cjs` from the user's working directory.
22
+ Run `scripts/find-strikethroo-root.cjs` from the user's working directory. If
23
+ it exits non-zero, stop and ask the user to run `npx strikethroo init`.
24
+
25
+ Treat the path it prints as `<root>` for every subsequent step.
46
26
 
47
- If the script exits non-zero, the working directory is not inside an
48
- initialized strikethroo workspace. Stop and ask the user to run the project
49
- initializer (e.g. `npx strikethroo init`) before continuing. Do
50
- not attempt to execute the full workflow outside of a valid root.
27
+ Delegated execution workers skip this step and do not emit update notices.
51
28
 
52
- For every subsequent step, treat the path printed by this script as `<root>`.
29
+ Run `scripts/check-for-updates.cjs "<root>"` as a separate command using this
30
+ skill's script path. Keep the user's working directory. Read the one JSON line
31
+ on stdout. When `notice` is present, retain its exact text for the final
32
+ user-facing response. Never pause for permission and never run an update.
53
33
 
54
34
  #### 2. Load project context
55
35
 
56
- Read `<root>/config/STRIKETHROO.md` for the directory structure conventions
57
- this project uses. Read `<root>/config/hooks/PRE_PLAN.md` and execute the
58
- instructions it contains before proceeding. Read
59
- `<root>/config/templates/PLAN_TEMPLATE.md` so the plan you emit conforms
60
- to its structure.
36
+ Read `<root>/config/STRIKETHROO.md` for this project's directory conventions.
37
+ Read `<root>/config/hooks/PRE_PLAN.md` and execute its instructions before
38
+ proceeding. Read `<root>/config/templates/PLAN_TEMPLATE.md`; the plan must
39
+ conform to it.
61
40
 
62
- Also read `<root>/config/shared/anti-rationalization.md`. The steps below
63
- require you to apply it.
41
+ Also read `<root>/config/shared/anti-rationalization.md`.
64
42
 
65
43
  #### 3. Analyze the work order
66
44
 
67
45
  Identify:
68
46
 
69
- - Objective and end goal.
47
+ - Objective.
70
48
  - Scope and explicit boundaries.
71
49
  - Success criteria.
72
50
  - Dependencies, prerequisites, blockers.
@@ -92,41 +70,28 @@ Apply `<root>/config/shared/anti-rationalization.md` to this rationalization tab
92
70
 
93
71
  #### 5. Allocate the next plan ID
94
72
 
95
- Run `scripts/get-next-plan-id.cjs` to obtain the next available plan ID.
96
- Pass `<root>` as the first argument when invoking the script from a working
97
- directory that is not inside the project, otherwise no argument is required.
98
- The script prints a single integer.
99
-
100
- Compute the zero-padded form for directory naming (`{padded-id}--{slug}`)
101
- and use the unpadded integer in the plan frontmatter and the final summary.
73
+ Run `scripts/get-next-plan-id.cjs` for the next available plan ID. Compute its
74
+ zero-padded form for the directory name (`{padded-id}--{slug}`) and use the
75
+ unpadded integer in the plan frontmatter.
102
76
 
103
77
  #### 6. Emit the plan
104
78
 
105
- Write the plan to:
79
+ Write the plan to
80
+ `<root>/plans/{padded-id}--{slug}/plan-{padded-id}--{slug}.md`, conforming to
81
+ `<root>/config/templates/PLAN_TEMPLATE.md` in both frontmatter and sections.
82
+ Include no time estimates, task lists, or code samples; those belong to the
83
+ task-generation step.
106
84
 
107
- ```
108
- <root>/plans/{padded-id}--{slug}/plan-{padded-id}--{slug}.md
109
- ```
110
-
111
- The output must:
112
-
113
- - Conform to `<root>/config/templates/PLAN_TEMPLATE.md`, including required
114
- YAML frontmatter fields (at minimum `id`, `summary`, `created`).
115
- - Contain the standard sections from the template body.
116
- - Use Markdown, not free-form prose.
117
- - Avoid time estimates, task lists, or code samples — those belong to the
118
- later task-generation step.
119
-
120
- The `<slug>` is derived from the plan summary: lowercase, alphanumeric and
121
- hyphens only, collapsed, trimmed.
85
+ Derive `<slug>` from the plan summary: lowercase, alphanumeric and hyphens
86
+ only, collapsed, trimmed.
122
87
 
123
88
  #### 7. Run post-plan hook
124
89
 
125
- Execute `<root>/config/hooks/POST_PLAN.md` after the plan file is written.
90
+ Execute `<root>/config/hooks/POST_PLAN.md`.
126
91
 
127
92
  #### 8. Emit the Step 1 structured summary
128
93
 
129
- Conclude Step 1 with exactly this block:
94
+ Conclude Step 1 with exactly this block (a retained update notice, when present, follows after the workflow's final summary):
130
95
 
131
96
  ```
132
97
  ---
@@ -138,21 +103,18 @@ Plan Summary:
138
103
 
139
104
  Parse the `Plan ID` value from this output and pass it to Step 2.
140
105
 
141
- **Progress**: `⬛⬜⬜ 33% - Step 1/3: Plan Creation Complete`
142
106
 
143
- ---
144
107
 
145
108
  ### Step 2: Task Generation
146
109
 
147
- **Progress**: `⬛⬜⬜ 33% - Step 2/3: Starting Task Generation`
110
+ Using the plan ID from Step 1:
111
+
148
112
 
149
- Using the Plan ID extracted from Step 1:
150
113
 
151
114
  #### 1. Resolve the plan
152
115
 
153
- Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` to obtain the
154
- absolute path of the plan file. Passing a different field name prints that
155
- field alone.
116
+ Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` for the plan
117
+ file's absolute path. Another field name prints that field instead.
156
118
 
157
119
  If the script exits non-zero, surface its stderr to the user and stop the
158
120
  workflow.
@@ -162,12 +124,11 @@ Do not guess a different ID.
162
124
 
163
125
  Read these files, in order:
164
126
 
165
- - `<root>/config/STRIKETHROO.md` — directory conventions for plans, tasks,
166
- and the archive layout.
167
- - The plan body at the path returned by step 1 — this is the contract for
127
+ - `<root>/config/STRIKETHROO.md` — project and directory conventions.
128
+ - The plan body at the path returned by step 1 — the contract for
168
129
  what tasks must exist.
169
- - `<root>/config/templates/TASK_TEMPLATE.md` — every task file you emit must
170
- conform to this template's frontmatter schema and section structure.
130
+ - `<root>/config/templates/TASK_TEMPLATE.md` — the schema every task file
131
+ must match.
171
132
  - `<root>/config/shared/anti-rationalization.md` — apply in step 3.
172
133
 
173
134
  #### 3. Analyze and decompose the plan
@@ -180,23 +141,10 @@ Decompose each deliverable into atomic tasks only when genuinely needed.
180
141
  - Create only the minimum number of tasks necessary. Target a 20–30%
181
142
  reduction from comprehensive lists by questioning the necessity of each
182
143
  candidate.
183
- - **Direct Implementation Only**: a task corresponds to an explicit
184
- requirement, not a "nice-to-have".
185
- - **DRY Task Principle**: each task has a unique, non-overlapping purpose.
186
- - **Question Everything**: for each task, ask "Is this absolutely necessary
187
- to meet the plan objectives?"
188
- - **Avoid Gold-plating**: resist comprehensive features the plan does not
189
- require.
190
-
191
- **Antipatterns to avoid:**
192
-
193
- - Separating "error handling" from the main implementation when it can be
194
- inline.
195
- - Splitting trivially small operations into multiple tasks (e.g. "validate
196
- input" + "process input" as separate units).
197
- - Adding tasks for "future extensibility" or "best practices" the plan does
198
- not mention.
199
- - Comprehensive test suites for trivial functionality.
144
+ - Every task corresponds to an explicit requirement, never a nice-to-have, a
145
+ "best practice", or future extensibility the plan does not mention.
146
+ - Each task has a unique, non-overlapping purpose.
147
+ - Keep error handling inside the task that owns the behavior it guards.
200
148
 
201
149
  Apply `<root>/config/shared/anti-rationalization.md` to this rationalization table:
202
150
 
@@ -218,80 +166,68 @@ Each task must be:
218
166
  concrete, runnable verification step (a command plus its expected output, or
219
167
  another observable signal). Never settle for a vague "works correctly".
220
168
 
221
- Skill assignment (kebab-case, automatically inferred from the task's
222
- technical requirements):
223
-
224
- - 1 skill — single-domain task (e.g. `["css"]`, `["vitest"]`).
225
- - 2 skills — complementary domains (e.g. `["api-endpoints", "database"]`,
226
- `["react-components", "vitest"]`).
227
- - 3+ skills indicates the task should be broken down further.
169
+ Infer skills in kebab-case from the task's technical requirements. Use one
170
+ skill for a single-domain task and two for complementary domains, such as
171
+ `["api-endpoints", "database"]`. Three or more means the task must be broken
172
+ down further.
228
173
 
229
174
  #### 5. Test philosophy: "write a few tests, mostly integration"
230
175
 
231
- When generating test tasks, keep this constraint:
176
+ **Write tests for:**
232
177
 
233
- **Definition.** Meaningful tests verify custom business logic, critical paths,
234
- and edge cases specific to this application. Test *your* code, not the
235
- framework or library.
178
+ - Custom business logic and algorithms.
179
+ - Critical user workflows and data transformations.
180
+ - Edge cases and error conditions in core functionality.
181
+ - Integration points between components.
182
+ - Complex validation or calculation logic.
236
183
 
237
- Before writing any test task, read `references/test-philosophy.md`; it lists
238
- what deserves a test and what does not.
184
+ **Do not write tests for:**
239
185
 
240
- **Test task creation rules:**
186
+ - Third-party library and framework functionality.
187
+ - Simple CRUD without custom logic.
188
+ - Trivial getters/setters and static configuration.
189
+ - Obvious functionality that would break immediately if incorrect.
241
190
 
242
- - Combine related test scenarios into a single task (e.g. "Test user
243
- authentication flow" not separate tasks for login, logout, validation).
244
- - Favor integration and critical-path coverage over per-method unit tests.
245
- - Avoid one test task per CRUD operation.
246
- - Question whether simple functions need a dedicated test task.
191
+ Combine related test scenarios into one task ("Test user authentication flow",
192
+ not separate tasks for login, logout, and validation). Favor integration and
193
+ critical-path coverage over per-method unit tests. Never create one test task
194
+ per CRUD operation.
247
195
 
248
- If any test task is generated, restate this section and the reference file
249
- verbatim or near-verbatim in that task's "Implementation Notes" so the
250
- executing agent applies them.
196
+ Copy these rules into the "Implementation Notes" of every test task you
197
+ generate.
251
198
 
252
199
  #### 6. Dependency analysis
253
200
 
254
- For each task, identify:
255
-
256
- - **Hard dependencies**: tasks that MUST complete before this one can start.
257
- - **Soft dependencies**: tasks that SHOULD complete for optimal execution.
258
-
259
- A task B depends on A if B requires A's output or artifacts, modifies code
260
- created by A, or tests functionality implemented by A. Validate that the
261
- final dependency graph is acyclic.
201
+ Task B depends on task A when B requires A's output or artifacts, modifies
202
+ code created by A, or tests functionality implemented by A. Record it as a
203
+ **hard dependency** when B cannot start before A completes and as a **soft
204
+ dependency** when B merely runs better after A. Validate that the final
205
+ dependency graph is acyclic.
262
206
 
263
207
  #### 7. Complexity analysis
264
208
 
265
209
  For every candidate task, assign a `complexity_score` (integer 1–10) before
266
210
  writing any file. Read `references/complexity-rubric.md` before scoring; it
267
- defines the four dimensions each band is judged on.
268
-
269
- **Pre-emission sanity rules** — apply these before any task is written:
211
+ defines the four dimensions each band is judged on. Then apply these rules:
270
212
 
271
- - 3+ skills assigned → split the task into smaller tasks, each with 1–2 skills.
272
- - Vague acceptance criteria → sharpen them until they include at least one
273
- concrete, runnable verification step.
274
- - Trivially small adjacent tasks → merge them into a single task.
275
213
  - Score ≥ 8 → decompose further; do not emit as-is.
276
- - Score 6–7 → either sharpen criteria or split; do not emit without an
277
- explicit reason.
278
-
279
- **Loop-back rule:**
214
+ - Score 6–7 → sharpen or split; do not emit without an explicit reason.
215
+ - Vague acceptance criteria → sharpen them into a concrete, runnable
216
+ verification step.
217
+ - Trivially small adjacent tasks → merge them.
280
218
 
281
- After applying split, sharpen, or merge, re-run dependency analysis and
282
- re-score the adjusted tasks. Repeat this loop no more than three times. If
219
+ **Loop-back rule:** after applying split, sharpen, or merge, re-run dependency
220
+ analysis and re-score the adjusted tasks. Repeat no more than three times. If
283
221
  complexity is still unresolved after three passes, stop and surface the
284
222
  blocker to the user.
285
223
 
286
224
  #### 8. Allocate task IDs
287
225
 
288
- Run `scripts/get-next-task-id.cjs <plan-id>` to obtain the first available
289
- task ID. Allocate subsequent IDs by incrementing in-process; do not invoke
290
- the script repeatedly. Use the unpadded integer in the task frontmatter `id`
291
- field and the zero-padded form (`{padded-id}--{slug}`) for the filename.
292
-
293
- The slug derives from a short task title: lowercase, alphanumeric and
294
- hyphens only, collapsed, trimmed.
226
+ Run `scripts/get-next-task-id.cjs <plan-id>` once for the first available task
227
+ ID, then allocate the rest by incrementing in-process. Use the unpadded
228
+ integer in the task frontmatter `id` field and the zero-padded form in the
229
+ filename. The slug derives from a short task title: lowercase, alphanumeric
230
+ and hyphens only, collapsed, trimmed.
295
231
 
296
232
  #### 9. Emit the task files
297
233
 
@@ -301,34 +237,23 @@ Write each task to:
301
237
  <root>/plans/<plan-dir-name>/tasks/{padded-id}--{slug}.md
302
238
  ```
303
239
 
304
- Each file must conform to `<root>/config/templates/TASK_TEMPLATE.md`. Read
305
- `references/task-frontmatter.md` when filling the frontmatter; it lists every
306
- field, its type, and when the optional ones apply.
240
+ Each file must conform to `<root>/config/templates/TASK_TEMPLATE.md`. Add
241
+ `complexity_notes` only when the score needs justification. Never write
242
+ `execution_profile`; the routing helper writes it.
307
243
 
308
- The body sections (Objective, Skills Required, Acceptance Criteria, Technical
309
- Requirements, Input Dependencies, Output Artifacts, Implementation Notes)
310
- must be filled with task-specific content. Place detailed implementation
311
- guidance inside a `<details>` block under "Implementation Notes" — write it
312
- so a non-thinking LLM could execute the task from that section alone.
244
+ Fill every body section with task-specific content. Place detailed
245
+ implementation guidance inside a `<details>` block under "Implementation
246
+ Notes", written so a non-thinking LLM could execute the task from that
247
+ section alone.
313
248
 
314
249
  #### 10. Validation checklist
315
250
 
316
251
  Before declaring task generation complete, verify:
317
252
 
318
- - Each task has 1–2 appropriate technical skills assigned and inferred from
319
- its objectives.
320
- - Dependencies form an acyclic graph; no orphan or circular references.
321
- - Task IDs are unique, sequential, and start from the value returned by
322
- `get-next-task-id.cjs`.
323
- - Groups are consistent and meaningful.
324
- - Every task's Acceptance Criteria includes at least one concrete, runnable
325
- verification step (command + expected output / observable signal), not a
326
- vague "works correctly".
327
- - Every **explicitly stated** deliverable in the plan is covered.
328
- - No redundant or overlapping tasks.
329
- - Minimization applied (20–30% reduction target).
330
- - Test tasks focus on business logic, not framework functionality.
331
- - No gold-plating: only plan requirements are addressed.
253
+ - Every **explicitly stated** deliverable in the plan is covered by a task.
254
+ - No two tasks overlap in purpose.
255
+ - Dependencies form an acyclic graph, with no orphan or circular references.
256
+ - Groups are consistent across the plan.
332
257
  - After writing the task files, run
333
258
  `scripts/validate-plan-blueprint.cjs <plan-id> complexityScoresValid`. Stop
334
259
  unless it prints `yes`; if it prints `no`, run
@@ -340,78 +265,43 @@ Before declaring task generation complete, verify:
340
265
  Read `<root>/config/hooks/TASK_EXECUTION_ROUTING.md` and follow its
341
266
  instructions together with this procedure:
342
267
 
343
- 1. Run `scripts/route-task-execution.cjs profiles <plan-id>` and interpret
344
- its JSON result. On `no-config` or `disabled`, routing is off: skip the
345
- remaining routing steps and continue. On `invalid-config`, stop and
346
- surface the errors to the user — do not generate the blueprint.
347
- 2. Classify every task in the plan's `tasks/` directory against the
348
- configured profile descriptions. For tasks generated in this run, use the
349
- task content already in your context — objective, acceptance criteria,
350
- technical requirements, `skills`, and `complexity_score`; do not reread
351
- the emitted task files to reconstruct information you already hold. If
352
- the plan carried task files from an earlier generation run, read those
353
- files (and only those) to classify them — the mapping must cover every
354
- task in the plan. Assign each task ID exactly one configured profile
355
- name. Never invent a profile name, model, or harness.
268
+ 1. Run `scripts/route-task-execution.cjs profiles <plan-id>`. On `no-config`
269
+ or `disabled`, routing is off; skip the remaining routing steps and
270
+ continue. On `invalid-config`, stop and surface the errors to the user; do
271
+ not generate the blueprint.
272
+ 2. Assign every task in the plan's `tasks/` directory exactly one configured
273
+ profile name. Classify the tasks generated in this run from the content
274
+ already in your context. If the plan carried task files from an earlier
275
+ generation run, read those files to classify them.
356
276
  3. Write the complete task-ID-to-profile mapping as a JSON object to a
357
277
  temporary file, for example `{"1": "routine", "2": "demanding"}`.
358
- 4. Run
359
- `scripts/route-task-execution.cjs apply <plan-id> <mapping-file>`. The
360
- helper validates the mapping (every task exactly once, only configured
361
- profiles), writes one `execution_profile` frontmatter field per task, and
362
- verifies the written files. Target selection and resolver execution happen
363
- later at task dispatch, never during generation.
364
- 5. On `routed`, delete the temporary mapping file and continue. On any
365
- failure result (`invalid-assignments`, `invalid-tasks`,
366
- `routing-failure`, `infrastructure-failure`), stop
367
- and surface the JSON errors to the user. Never proceed to blueprint
368
- generation with partially routed tasks.
369
-
370
- Profile names are durable routing labels. Persist them only through the
371
- helper's `execution_profile` field; never hand-write a concrete `execution`
372
- target into task frontmatter or task bodies.
278
+ 4. Run `scripts/route-task-execution.cjs apply <plan-id> <mapping-file>`.
279
+ Target selection happens later at task dispatch, never during generation.
280
+ 5. On `routed`, delete the temporary mapping file and continue. On any failure
281
+ result (`invalid-assignments`, `invalid-tasks`, `routing-failure`,
282
+ `infrastructure-failure`), stop and surface the JSON errors to the user.
283
+ Never continue to blueprint generation with partially routed tasks.
284
+
285
+ Never hand-write a concrete execution target into task frontmatter or task
286
+ bodies.
373
287
 
374
288
  #### 12. Run the POST_TASK_GENERATION_ALL hook
375
289
 
376
290
  Read `<root>/config/hooks/POST_TASK_GENERATION_ALL.md` and follow its
377
- instructions. Run it only after routing succeeded or reported routing off.
378
- This typically requires:
379
-
380
- - Appending an Execution Blueprint section to the plan document, including a
381
- Mermaid dependency diagram and explicit phase groupings (Phase 1 contains
382
- zero-dependency tasks; each subsequent phase contains tasks whose
383
- dependencies all live in earlier phases). Use
384
- `<root>/config/templates/BLUEPRINT_TEMPLATE.md` for structure.
385
-
386
- #### 13. Emit the Step 2 structured summary
387
-
388
- Conclude Step 2 with exactly this block:
389
-
390
- ```
391
- ---
392
- Task Generation Summary:
393
- - Plan ID: [numeric-id]
394
- - Tasks: [count]
395
- - Status: Ready for execution
396
- ```
397
-
398
- Parse the `Tasks` count from this output and pass it to Step 3 for progress tracking.
399
-
400
- **Progress**: `⬛⬛⬜ 66% - Step 2/3: Task Generation Complete`
401
-
402
- ---
291
+ instructions, using `<root>/config/templates/BLUEPRINT_TEMPLATE.md` for the
292
+ Execution Blueprint structure. Run the hook only after routing succeeded or
293
+ reported routing off.
403
294
 
404
295
  ### Step 3: Blueprint Execution
405
296
 
406
- **Progress**: `⬛⬛⬜ 66% - Step 3/3: Starting Blueprint Execution`
297
+ Using the plan ID from Step 1:
298
+
407
299
 
408
- Using the Plan ID from the previous phases:
409
300
 
410
301
  #### 1. Resolve the plan
411
302
 
412
- Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` to obtain the
413
- absolute path of the plan file. Passing a different field name prints that
414
- field alone.
303
+ Run `scripts/validate-plan-blueprint.cjs <plan-id> planFile` for the plan
304
+ file's absolute path. Another field name prints that field instead.
415
305
 
416
306
  If the script exits non-zero, surface its stderr to the user and stop the
417
307
  workflow.
@@ -429,26 +319,26 @@ Run `scripts/validate-plan-blueprint.cjs <plan-id> taskCount` and
429
319
 
430
320
  If `taskCount` is 0 or `blueprintExists` is `no`:
431
321
 
432
- - Notify the user: "Tasks or execution blueprint not found. Generating tasks automatically..."
322
+ Notify the user: "Tasks or execution blueprint not found. Generating tasks automatically..."
323
+
433
324
  - Execute the full task generation procedure from Step 2 for this plan ID.
434
- - After generation completes, re-run the `planFile`, `planDir`, `taskCount`, and `blueprintExists` queries to refresh the resolved paths and counts.
325
+ - Re-run the `planFile`, `planDir`, `taskCount`, and `blueprintExists` queries to refresh the resolved paths and counts.
435
326
 
436
- If generation still leaves the plan without tasks or a blueprint, stop and report failure. Do not attempt execution without a valid blueprint.
327
+ If the plan still has no tasks or no blueprint, stop and report failure.
437
328
 
438
329
  #### 4. Optionally create a feature branch
439
330
 
440
- Run `scripts/create-feature-branch.cjs <plan-id>` once before phase execution. Branch creation is best-effort: when the script reports that it skipped creation (for example, not on `main`/`master`), continue on the current branch and do not retry or create a branch manually. Uncommitted or untracked changes are permitted only when every change is inside the repository-root `.ai/strikethroo` subtree. When the script exits with an error—including changes anywhere outside that subtree or an inability to inspect Git status on `main`/`master`—halt and report the error. Do not treat a skipped branch as a failure or spend effort working around a skip.
331
+ Run `scripts/create-feature-branch.cjs <plan-id>` once before phase execution. A skip is not a failure. Continue on the current branch, and never create the branch by hand. Uncommitted or untracked changes are permitted only inside the repository-root `.ai/strikethroo` subtree. An error result halts execution; report it.
441
332
 
442
- After the branch step, run `scripts/capture-base-commit.cjs <plan-id>` once. It records the commit the review gate diffs against. A `skipped` result is not a failure — continue execution and note that the review gate will skip. Only an `error` result halts.
333
+ Then run `scripts/capture-base-commit.cjs <plan-id>` once to record the commit the review gate diffs against. A `skipped` result continues execution and means the review gate will skip. Only an `error` result halts.
443
334
 
444
335
  #### 5. Load project context and execution blueprint
445
336
 
446
337
  Read these files, in order:
447
338
 
448
- - `<root>/config/STRIKETHROO.md` — directory conventions and project context.
449
- - The plan document at the path returned by step 1.
450
- - The plan's Execution Blueprint section — this defines the phase groupings and task dispatch order.
451
- - `<root>/config/shared/verification-gate.md` and `<root>/config/shared/anti-rationalization.md` — apply in the phase loop below.
339
+ - `<root>/config/STRIKETHROO.md`
340
+ - The plan document at the path from step 1, including its Execution Blueprint section, which defines the phase groupings and task dispatch order.
341
+ - `<root>/config/shared/verification-gate.md` and `<root>/config/shared/anti-rationalization.md`, both applied in the phase loop below.
452
342
 
453
343
  #### 6. Execute phases in order
454
344
 
@@ -470,17 +360,13 @@ scripts/dispatch-task-execution.cjs resolve <task-file> <current-harness> <works
470
360
  ```
471
361
 
472
362
  Resolvers never launch external processes. After interpreting all route results, issue
473
- every external execution and every native Task-tool agent **together in one parallel
363
+ every external execution and every sub-agent **together in one parallel
474
364
  tool operation**. External execution uses:
475
365
 
476
366
  ```text
477
367
  scripts/dispatch-task-execution.cjs execute <handoff> <task-file> <current-harness> <workspace> <plan-id> <task-id>
478
368
  ```
479
369
 
480
- This two-step protocol is mandatory: do not execute external tasks during route
481
- resolution, do not serialize external commands, and do not wait for external completion
482
- before launching ready native agents.
483
-
484
370
  `<current-harness>` is the exact supported harness identifier running this
485
371
  skill; `<workspace>` is the project working directory.
486
372
 
@@ -491,29 +377,20 @@ Interpret the one-line JSON result and act on its `kind` exactly once:
491
377
  | `native-default` | Dispatch natively with no execution-setting prose. |
492
378
  | `native-override` | Dispatch natively, explicitly requiring the exact returned `model`. Require the returned `reasoningEffort` only when that property is present. |
493
379
  | `external-override` | Run the `execute` command with the returned `handoff`, then read its result against this same table. |
494
- | `fallback` | Nothing launched. Record the returned `reason` and `detail` visibly, then dispatch natively with no execution-setting prose. Either command can return it. |
380
+ | `fallback` | Nothing launched. Record the returned `reason` and `detail` visibly, then dispatch natively with no execution-setting prose. |
495
381
  | `launched-success` | The external process exited zero. Do not dispatch natively; review status and evidence as you would for a native agent. |
496
382
  | `launched-failure` | A failed task. Set its status to `failed` and run `<root>/config/hooks/POST_ERROR_DETECTION.md`. Never retry it natively. |
497
- | `infrastructure-failure` | A failed task. Set its status to `failed` and run `<root>/config/hooks/POST_ERROR_DETECTION.md`. Never retry it natively. |
383
+ | `infrastructure-failure` | Handle exactly as the preceding row. |
498
384
 
499
- Handoff and exit rules:
385
+ Handoff rules:
500
386
 
501
387
  - Pass the exact opaque `handoff` string the resolver returned for that task. Never reconstruct one.
502
388
  - Never reuse a handoff for another task, and never rerun resolution after launches begin.
503
- - `execute` validates the handoff and does not reread routing configuration.
504
- - The command emits exactly one JSON line. Exit code `2` is an infrastructure failure; exit code `1` is a launched task failure.
505
-
506
- Deploy all remaining native agents simultaneously using your internal Task tool. Each agent MUST:
507
389
 
508
- 1. Read and execute `<root>/config/hooks/PRE_TASK_EXECUTION.md` before starting any implementation work.
509
- 2. Execute the task according to its requirements.
510
- 3. Monitor execution progress and capture outputs and artifacts.
511
- 4. Update task status in real-time.
390
+ Deploy all remaining native sub-agents simultaneously. Each sub-agent must read and execute `<root>/config/hooks/PRE_TASK_EXECUTION.md` before any implementation work, then execute the task and update its status. Do not run `scripts/check-for-updates.cjs`; delegated workers do not consume update notices.
512
391
 
513
392
  ##### 6c. Phase completion verification
514
- Ensure every task in the phase has status `completed`. Collect and review all task outputs. Document any issues or exceptions encountered.
515
-
516
- Do not accept a subagent's report of success as proof. Apply the evidence gate in `<root>/config/shared/verification-gate.md` before marking the phase complete. Do not mark a phase complete on an unverified claim.
393
+ Ensure every task in the phase has status `completed` and collect its outputs. Do not accept a subagent's report of success as proof. Apply the evidence gate in `<root>/config/shared/verification-gate.md` before marking the phase complete.
517
394
 
518
395
  ##### 6d. Phase post-execution
519
396
  Read `<root>/config/hooks/POST_PHASE.md` and execute its instructions. Do not proceed to the next phase until this hook succeeds.
@@ -544,17 +421,15 @@ After `POST_EXECUTION.md` reports green, follow the `st-code-review` skill and r
544
421
  code-review.cjs <plan-id> <current-harness>
545
422
  ```
546
423
 
547
- Resolve `code-review.cjs` from the `st-code-review` skill's sibling `scripts` directory. Pass the exact supported harness identifier running this skill. The command emits exactly one JSON line on stdout; reviewer output goes to stderr.
548
-
549
- If the `st-code-review` skill is not installed, record that outcome in the execution summary and continue to summary and archival.
424
+ Resolve `code-review.cjs` from the `st-code-review` skill's sibling `scripts` directory and pass the exact supported harness identifier running this skill. If the `st-code-review` skill is not installed, record that outcome in the execution summary and continue to summary and archival.
550
425
 
551
- Handle the JSON line in this order:
426
+ Handle the one JSON line it prints on stdout, in this order:
552
427
 
553
428
  1. Copy it verbatim into the execution summary's review outcome. Do not reformat it or omit fields.
554
- 2. Follow its top-level `action`. If it is `halt`, stop and report the top-level `detail`; execution is incomplete. If it is `continue`, proceed to the execution summary and archival.
429
+ 2. Follow its top-level `action`. If it is `halt`, stop and report the top-level `detail`. If it is `continue`, proceed to the execution summary and archival.
555
430
  3. Only when `verdict.kind` is `review-recorded`, read `<plan-dir>/review/review.xml` and `<plan-dir>/review/findings.json`, then decide which findings to act on. `severity` and `confidence` are advisory labels, not instructions.
556
431
 
557
- The compiled top-level `action` and exit status control the decision. Do not re-derive `action` from another field. Never report an uncertified review as clean.
432
+ Never report an uncertified review as clean.
558
433
 
559
434
  Hard rules:
560
435
 
@@ -564,21 +439,11 @@ Hard rules:
564
439
 
565
440
  #### 8. Append execution summary
566
441
 
567
- Append an execution summary section to the plan document using the format described in `<root>/config/templates/EXECUTION_SUMMARY_TEMPLATE.md`. Populate:
568
-
569
- - **Status**: Completed Successfully
570
- - **Completed Date**: current date
571
- - **Results**: brief summary of deliverables
572
- - **Noteworthy Events**: all decisions, issues, and outcomes encountered during execution. Always record the review gate's outcome here: the gate's JSON line verbatim, then which findings you acted on versus ignored and why. If nothing else occurred, state "No significant issues encountered." after the review outcome.
573
- - **Necessary follow-ups**: any follow-up actions or optimizations
442
+ Append an execution summary section to the plan document, filling every field of `<root>/config/templates/EXECUTION_SUMMARY_TEMPLATE.md`. Under Noteworthy Events, always record the review gate's JSON line verbatim, then which findings you acted on versus ignored and why.
574
443
 
575
444
  #### 9. Archive the plan
576
445
 
577
- Move the completed plan directory from `<root>/plans/<plan-folder>` to `<root>/archive/<plan-folder>`.
578
-
579
- Preserve the entire folder structure, including all tasks and subdirectories. If the move fails, log the error but do not fail the overall execution.
580
-
581
- **Progress**: `⬛⬛⬛ 100% - Step 3/3: Blueprint Execution Complete`
446
+ Move the completed plan directory from `<root>/plans/<plan-folder>` to `<root>/archive/<plan-folder>`, preserving the entire folder structure. If the move fails, log the error but do not fail the overall execution.
582
447
 
583
448
  ## Failure Modes
584
449
 
@@ -587,7 +452,7 @@ Preserve the entire folder structure, including all tasks and subdirectories. If
587
452
 
588
453
  ## Execution Summary
589
454
 
590
- Conclude with exactly this block as the final output:
455
+ Conclude with exactly this block (a retained update notice, when present, follows separately):
591
456
 
592
457
  ```
593
458
  ---
@@ -599,3 +464,7 @@ Execution Summary:
599
464
  ```
600
465
 
601
466
  The summary is consumed by downstream automation; keep the format exact.
467
+
468
+ When the retained update `notice` is present, append that exact sentence after
469
+ the structured summary block, or after your final response when this skill emits
470
+ no summary block. Nothing may follow the notice.