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.
- package/README.md +10 -0
- package/dist/cli.js +19 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -15
- package/dist/index.js.map +1 -1
- package/dist/resolve-init-harnesses.d.ts +30 -0
- package/dist/resolve-init-harnesses.d.ts.map +1 -0
- package/dist/resolve-init-harnesses.js +44 -0
- package/dist/resolve-init-harnesses.js.map +1 -0
- package/dist/types.d.ts +32 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts +28 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +198 -0
- package/dist/update.js.map +1 -0
- package/dist-web/assets/{arc-Dnj8t_Cg.js → arc-CguPlWfb.js} +1 -1
- package/dist-web/assets/{architectureDiagram-3BPJPVTR-7x3i_pmi.js → architectureDiagram-3BPJPVTR-D65RMVqJ.js} +1 -1
- package/dist-web/assets/{blockDiagram-GPEHLZMM-Cg2a93ny.js → blockDiagram-GPEHLZMM-CNIwP_yH.js} +1 -1
- package/dist-web/assets/{c4Diagram-AAUBKEIU-DMmHyu1B.js → c4Diagram-AAUBKEIU-CuZ4SoKV.js} +1 -1
- package/dist-web/assets/channel-BL14r_5w.js +1 -0
- package/dist-web/assets/{chunk-2J33WTMH-BarACI5V.js → chunk-2J33WTMH-DM4ZcjVq.js} +1 -1
- package/dist-web/assets/{chunk-4BX2VUAB-D1jdtJjC.js → chunk-4BX2VUAB-DI3-zGiF.js} +1 -1
- package/dist-web/assets/{chunk-55IACEB6-D3ecVMrb.js → chunk-55IACEB6-DBdh-eer.js} +1 -1
- package/dist-web/assets/{chunk-727SXJPM-DXNd005W.js → chunk-727SXJPM-B0HDPh0I.js} +1 -1
- package/dist-web/assets/{chunk-AQP2D5EJ-C0VOl8ox.js → chunk-AQP2D5EJ-C0MnLmRm.js} +1 -1
- package/dist-web/assets/{chunk-FMBD7UC4-DcTxd98r.js → chunk-FMBD7UC4-CmggDcp1.js} +1 -1
- package/dist-web/assets/{chunk-ND2GUHAM-CAMtgZHg.js → chunk-ND2GUHAM-BSIdB1y0.js} +1 -1
- package/dist-web/assets/{chunk-QZHKN3VN-DWfV0bq5.js → chunk-QZHKN3VN-BTHsXhgb.js} +1 -1
- package/dist-web/assets/classDiagram-4FO5ZUOK-DBkbEi_3.js +1 -0
- package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DBkbEi_3.js +1 -0
- package/dist-web/assets/{cose-bilkent-S5V4N54A-Csc9VNPk.js → cose-bilkent-S5V4N54A-IXUMXU5h.js} +1 -1
- package/dist-web/assets/{dagre-BM42HDAG-BnwRiOXb.js → dagre-BM42HDAG-CtwBET_X.js} +1 -1
- package/dist-web/assets/{diagram-2AECGRRQ-wPIOyrHK.js → diagram-2AECGRRQ-DRe1AFa_.js} +1 -1
- package/dist-web/assets/{diagram-5GNKFQAL-TccsDwtZ.js → diagram-5GNKFQAL-D9IRdgWX.js} +1 -1
- package/dist-web/assets/{diagram-KO2AKTUF-DtAJCwJt.js → diagram-KO2AKTUF-CQi7gmRS.js} +1 -1
- package/dist-web/assets/{diagram-LMA3HP47-BvMQVWoO.js → diagram-LMA3HP47-B0fp5jh8.js} +1 -1
- package/dist-web/assets/{diagram-OG6HWLK6-BPxOm_5c.js → diagram-OG6HWLK6-B2ujFhv2.js} +1 -1
- package/dist-web/assets/{erDiagram-TEJ5UH35-CRPnIDwq.js → erDiagram-TEJ5UH35-DcxHh3A8.js} +1 -1
- package/dist-web/assets/{flowDiagram-I6XJVG4X-DBLbHpW_.js → flowDiagram-I6XJVG4X-Btsglt1O.js} +1 -1
- package/dist-web/assets/{ganttDiagram-6RSMTGT7-gZhN1gnI.js → ganttDiagram-6RSMTGT7-BRaGl6R4.js} +1 -1
- package/dist-web/assets/{gitGraphDiagram-PVQCEYII-Dssi43fY.js → gitGraphDiagram-PVQCEYII-Cl1DR87j.js} +1 -1
- package/dist-web/assets/{index-CEGCvBkm.js → index-CxXoZ0_J.js} +1 -1
- package/dist-web/assets/{index-Nz3QPmKb.js → index-DXt7jz3h.js} +4 -4
- package/dist-web/assets/{index-BdDnJAsd.js → index-DZ4QtqqW.js} +1 -1
- package/dist-web/assets/{infoDiagram-5YYISTIA-sXzUxho2.js → infoDiagram-5YYISTIA-GMZDkbDI.js} +1 -1
- package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-BPHTll-A.js → ishikawaDiagram-YF4QCWOH-DC8HBMwN.js} +1 -1
- package/dist-web/assets/{journeyDiagram-JHISSGLW-h2TzQwJC.js → journeyDiagram-JHISSGLW-4KT1uAXJ.js} +1 -1
- package/dist-web/assets/{kanban-definition-UN3LZRKU-1xkUO8WZ.js → kanban-definition-UN3LZRKU-bBpM_7W0.js} +1 -1
- package/dist-web/assets/{linear-D_7aXIXs.js → linear-BzW5Mi4V.js} +1 -1
- package/dist-web/assets/{mermaid.core-Bwdbg8D0.js → mermaid.core-BZXehlCp.js} +4 -4
- package/dist-web/assets/{mindmap-definition-RKZ34NQL-eAYjLKqV.js → mindmap-definition-RKZ34NQL-B8RhYsaN.js} +1 -1
- package/dist-web/assets/{pieDiagram-4H26LBE5-CWfU-OAg.js → pieDiagram-4H26LBE5-DV749i9Y.js} +1 -1
- package/dist-web/assets/{quadrantDiagram-W4KKPZXB-CgKKzr9p.js → quadrantDiagram-W4KKPZXB-Cduffe8j.js} +1 -1
- package/dist-web/assets/{requirementDiagram-4Y6WPE33-Dx-cDqCB.js → requirementDiagram-4Y6WPE33-C7KngwZn.js} +1 -1
- package/dist-web/assets/{sankeyDiagram-5OEKKPKP-B_yYv0Dy.js → sankeyDiagram-5OEKKPKP-CJjwUGG3.js} +1 -1
- package/dist-web/assets/{sequenceDiagram-3UESZ5HK--QLtZ1Rs.js → sequenceDiagram-3UESZ5HK-BARiZOtJ.js} +1 -1
- package/dist-web/assets/{stateDiagram-AJRCARHV-DVmFu5R7.js → stateDiagram-AJRCARHV-DA1dHBGx.js} +1 -1
- package/dist-web/assets/stateDiagram-v2-BHNVJYJU-D4ioaqC3.js +1 -0
- package/dist-web/assets/{timeline-definition-PNZ67QCA-BUtZCLUr.js → timeline-definition-PNZ67QCA-ClE6cvJF.js} +1 -1
- package/dist-web/assets/{vennDiagram-CIIHVFJN-CiAEMMvF.js → vennDiagram-CIIHVFJN-BLR57Itf.js} +1 -1
- package/dist-web/assets/{wardley-L42UT6IY-CzeU7tOS.js → wardley-L42UT6IY-EA8x1UUF.js} +1 -1
- package/dist-web/assets/{wardleyDiagram-YWT4CUSO-vvP_uZTz.js → wardleyDiagram-YWT4CUSO-DHktlei-.js} +1 -1
- package/dist-web/assets/{xychartDiagram-2RQKCTM6-vSFbOWXi.js → xychartDiagram-2RQKCTM6-DOxQD_Ha.js} +1 -1
- package/dist-web/index.html +1 -1
- package/package.json +4 -1
- package/templates/harness/skills/st-code-review/SKILL.md +3 -7
- package/templates/harness/skills/st-create-plan/SKILL.md +33 -44
- package/templates/harness/skills/st-create-plan/scripts/check-for-updates.cjs +2502 -0
- package/templates/harness/skills/st-execute-blueprint/SKILL.md +37 -63
- package/templates/harness/skills/st-execute-blueprint/scripts/check-for-updates.cjs +2502 -0
- package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +1 -0
- package/templates/harness/skills/st-execute-task/SKILL.md +36 -79
- package/templates/harness/skills/st-execute-task/scripts/check-for-updates.cjs +2502 -0
- package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +1 -0
- package/templates/harness/skills/st-full-workflow/SKILL.md +139 -270
- package/templates/harness/skills/st-full-workflow/scripts/check-for-updates.cjs +2502 -0
- package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +1 -0
- package/templates/harness/skills/st-generate-tasks/SKILL.md +91 -155
- package/templates/harness/skills/st-generate-tasks/scripts/check-for-updates.cjs +2502 -0
- package/templates/harness/skills/st-refine-plan/SKILL.md +63 -109
- package/templates/harness/skills/st-refine-plan/scripts/check-for-updates.cjs +2502 -0
- package/templates/strikethroo/config/templates/UPDATE_NOTICE_TEMPLATE.md +1 -0
- package/dist-web/assets/channel-Bb0_vDD8.js +0 -1
- package/dist-web/assets/classDiagram-4FO5ZUOK-R25Yhm3n.js +0 -1
- package/dist-web/assets/classDiagram-v2-Q7XG4LA2-R25Yhm3n.js +0 -1
- package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DBs8K0hr.js +0 -1
- package/templates/harness/skills/st-full-workflow/references/task-frontmatter.md +0 -23
- package/templates/harness/skills/st-full-workflow/references/test-philosophy.md +0 -17
- package/templates/harness/skills/st-generate-tasks/references/task-frontmatter.md +0 -23
- 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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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`.
|
|
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
|
|
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`
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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`
|
|
154
|
-
absolute path
|
|
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
|
|
166
|
-
|
|
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
|
|
170
|
-
|
|
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
|
-
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
176
|
+
**Write tests for:**
|
|
232
177
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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
|
-
|
|
238
|
-
what deserves a test and what does not.
|
|
184
|
+
**Do not write tests for:**
|
|
239
185
|
|
|
240
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
249
|
-
|
|
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
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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 →
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
282
|
-
re-score the adjusted tasks. Repeat
|
|
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>`
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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`.
|
|
305
|
-
`
|
|
306
|
-
|
|
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
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
-
|
|
319
|
-
|
|
320
|
-
- Dependencies form an acyclic graph
|
|
321
|
-
-
|
|
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
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
2.
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
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
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
|
378
|
-
|
|
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
|
-
|
|
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`
|
|
413
|
-
absolute path
|
|
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
|
-
|
|
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
|
-
-
|
|
325
|
+
- Re-run the `planFile`, `planDir`, `taskCount`, and `blueprintExists` queries to refresh the resolved paths and counts.
|
|
435
326
|
|
|
436
|
-
If
|
|
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.
|
|
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
|
-
|
|
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`
|
|
449
|
-
- The plan document at the path
|
|
450
|
-
-
|
|
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
|
|
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.
|
|
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` |
|
|
383
|
+
| `infrastructure-failure` | Handle exactly as the preceding row. |
|
|
498
384
|
|
|
499
|
-
Handoff
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|