strikethroo 3.4.2 → 3.6.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 (86) hide show
  1. package/dist/metadata.d.ts +1 -1
  2. package/dist/metadata.js +1 -1
  3. package/dist/skill-scripts/shared/root.js +2 -2
  4. package/dist/skill-scripts/shared/root.js.map +1 -1
  5. package/dist-web/assets/{arc-B2vRTAtp.js → arc-C5tFWQfy.js} +1 -1
  6. package/dist-web/assets/{architectureDiagram-3BPJPVTR-BaE0WZP8.js → architectureDiagram-3BPJPVTR-DgCKGG7t.js} +1 -1
  7. package/dist-web/assets/{blockDiagram-GPEHLZMM-EYPDaLkJ.js → blockDiagram-GPEHLZMM-BCkOJRns.js} +1 -1
  8. package/dist-web/assets/{c4Diagram-AAUBKEIU-fc_1_fJV.js → c4Diagram-AAUBKEIU-CSRTvUCD.js} +1 -1
  9. package/dist-web/assets/channel-BaPw1Rvz.js +1 -0
  10. package/dist-web/assets/{chunk-2J33WTMH-BFdYIb-H.js → chunk-2J33WTMH-ClcerQV2.js} +1 -1
  11. package/dist-web/assets/{chunk-4BX2VUAB-BTnyxNYb.js → chunk-4BX2VUAB-CbmeOs5K.js} +1 -1
  12. package/dist-web/assets/{chunk-55IACEB6-DAnXzn2R.js → chunk-55IACEB6-Bul5AABk.js} +1 -1
  13. package/dist-web/assets/{chunk-727SXJPM-CgGGmYGu.js → chunk-727SXJPM-CgLGtlrF.js} +1 -1
  14. package/dist-web/assets/{chunk-AQP2D5EJ-B-eVBjow.js → chunk-AQP2D5EJ-DL7JPYWy.js} +1 -1
  15. package/dist-web/assets/{chunk-FMBD7UC4-Qn3q5Qhx.js → chunk-FMBD7UC4-CGHZbLY6.js} +1 -1
  16. package/dist-web/assets/{chunk-ND2GUHAM-DDrXpr-b.js → chunk-ND2GUHAM-CvBKPRCq.js} +1 -1
  17. package/dist-web/assets/{chunk-QZHKN3VN-Ib3X1Gaq.js → chunk-QZHKN3VN-DQBIVpdk.js} +1 -1
  18. package/dist-web/assets/classDiagram-4FO5ZUOK-C35Ivx5Q.js +1 -0
  19. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-C35Ivx5Q.js +1 -0
  20. package/dist-web/assets/{cose-bilkent-S5V4N54A-Cc9Pa2Np.js → cose-bilkent-S5V4N54A-eh3JaEY5.js} +1 -1
  21. package/dist-web/assets/{dagre-BM42HDAG-CSZhBLZq.js → dagre-BM42HDAG-EJD5vp_w.js} +1 -1
  22. package/dist-web/assets/{diagram-2AECGRRQ-CbX0S5by.js → diagram-2AECGRRQ-BZ_P79sY.js} +1 -1
  23. package/dist-web/assets/{diagram-5GNKFQAL-DQucEHMA.js → diagram-5GNKFQAL-OQ7nHA8w.js} +1 -1
  24. package/dist-web/assets/{diagram-KO2AKTUF-CSs1kvk3.js → diagram-KO2AKTUF-DdbHiG9U.js} +1 -1
  25. package/dist-web/assets/{diagram-LMA3HP47-CoDfh1_X.js → diagram-LMA3HP47-DtYxc1U-.js} +1 -1
  26. package/dist-web/assets/{diagram-OG6HWLK6-se9DZ4Bb.js → diagram-OG6HWLK6-DiYlNb2D.js} +1 -1
  27. package/dist-web/assets/{erDiagram-TEJ5UH35-cVHBGhT0.js → erDiagram-TEJ5UH35-CfACqBE8.js} +1 -1
  28. package/dist-web/assets/{flowDiagram-I6XJVG4X-pxtIoOED.js → flowDiagram-I6XJVG4X-XjbGJa2k.js} +1 -1
  29. package/dist-web/assets/{ganttDiagram-6RSMTGT7-CLBch1QN.js → ganttDiagram-6RSMTGT7-uEIeokwH.js} +1 -1
  30. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-DJux0GA6.js → gitGraphDiagram-PVQCEYII-nmf5n0DJ.js} +1 -1
  31. package/dist-web/assets/{index-DtUXMh0p.js → index-BDUuRubV.js} +4 -4
  32. package/dist-web/assets/{index-9yA-mDCf.js → index-DNjRW3Nz.js} +1 -1
  33. package/dist-web/assets/{index-DN2M3jFj.js → index-lcDf4NjX.js} +1 -1
  34. package/dist-web/assets/{infoDiagram-5YYISTIA-DsPlHBE7.js → infoDiagram-5YYISTIA-ce27RWm0.js} +1 -1
  35. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-BxbaTVwk.js → ishikawaDiagram-YF4QCWOH-D6Wresga.js} +1 -1
  36. package/dist-web/assets/{journeyDiagram-JHISSGLW-CDwF7CzN.js → journeyDiagram-JHISSGLW-BBl3RVug.js} +1 -1
  37. package/dist-web/assets/{kanban-definition-UN3LZRKU-Caz5DWRS.js → kanban-definition-UN3LZRKU-BR4xuvyK.js} +1 -1
  38. package/dist-web/assets/{linear-BP4pxN-r.js → linear-t7m4QGzs.js} +1 -1
  39. package/dist-web/assets/{mermaid.core-C0ywvB_J.js → mermaid.core-BrBzpjFi.js} +4 -4
  40. package/dist-web/assets/{mindmap-definition-RKZ34NQL-DCrqo_pU.js → mindmap-definition-RKZ34NQL-BtLQxP_O.js} +1 -1
  41. package/dist-web/assets/{pieDiagram-4H26LBE5--wRkF_Wt.js → pieDiagram-4H26LBE5-DRJmqIpA.js} +1 -1
  42. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-N-hXNYsT.js → quadrantDiagram-W4KKPZXB-CE2Oh9Rc.js} +1 -1
  43. package/dist-web/assets/{requirementDiagram-4Y6WPE33-D8-9JKfq.js → requirementDiagram-4Y6WPE33-sG5PEAU3.js} +1 -1
  44. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-nucHWP9c.js → sankeyDiagram-5OEKKPKP-CArsTW6e.js} +1 -1
  45. package/dist-web/assets/{sequenceDiagram-3UESZ5HK-BA3nMsqM.js → sequenceDiagram-3UESZ5HK-CSEbWgF8.js} +1 -1
  46. package/dist-web/assets/{stateDiagram-AJRCARHV-CtGW_5HH.js → stateDiagram-AJRCARHV-CPia1lq4.js} +1 -1
  47. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-CR8eRw1b.js +1 -0
  48. package/dist-web/assets/{timeline-definition-PNZ67QCA-DqvFcHZm.js → timeline-definition-PNZ67QCA-BW5V8Z8D.js} +1 -1
  49. package/dist-web/assets/{vennDiagram-CIIHVFJN-xaOtI74Z.js → vennDiagram-CIIHVFJN-BeCuGgz0.js} +1 -1
  50. package/dist-web/assets/{wardley-L42UT6IY-BHR2vhXn.js → wardley-L42UT6IY-DIy_1BDw.js} +1 -1
  51. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-B_5FPztm.js → wardleyDiagram-YWT4CUSO-DV4cijhj.js} +1 -1
  52. package/dist-web/assets/{xychartDiagram-2RQKCTM6-DW9idD29.js → xychartDiagram-2RQKCTM6-DfIJ29y1.js} +1 -1
  53. package/dist-web/index.html +1 -1
  54. package/package.json +2 -1
  55. package/templates/harness/skills/st-create-plan/SKILL.md +15 -1
  56. package/templates/harness/skills/st-create-plan/scripts/find-strikethroo-root.cjs +1 -1
  57. package/templates/harness/skills/st-create-plan/scripts/get-next-plan-id.cjs +1 -1
  58. package/templates/harness/skills/st-execute-blueprint/SKILL.md +14 -1
  59. package/templates/harness/skills/st-execute-blueprint/scripts/create-feature-branch.cjs +1 -1
  60. package/templates/harness/skills/st-execute-blueprint/scripts/find-strikethroo-root.cjs +1 -1
  61. package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +1 -1
  62. package/templates/harness/skills/st-execute-task/SKILL.md +1 -1
  63. package/templates/harness/skills/st-execute-task/scripts/check-task-dependencies.cjs +1 -1
  64. package/templates/harness/skills/st-execute-task/scripts/find-strikethroo-root.cjs +1 -1
  65. package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +1 -1
  66. package/templates/harness/skills/st-full-workflow/SKILL.md +12 -2
  67. package/templates/harness/skills/st-full-workflow/scripts/create-feature-branch.cjs +1 -1
  68. package/templates/harness/skills/st-full-workflow/scripts/find-strikethroo-root.cjs +1 -1
  69. package/templates/harness/skills/st-full-workflow/scripts/get-next-plan-id.cjs +1 -1
  70. package/templates/harness/skills/st-full-workflow/scripts/get-next-task-id.cjs +1 -1
  71. package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +1 -1
  72. package/templates/harness/skills/st-generate-tasks/SKILL.md +17 -2
  73. package/templates/harness/skills/st-generate-tasks/scripts/find-strikethroo-root.cjs +1 -1
  74. package/templates/harness/skills/st-generate-tasks/scripts/get-next-task-id.cjs +1 -1
  75. package/templates/harness/skills/st-generate-tasks/scripts/validate-plan-blueprint.cjs +1 -1
  76. package/templates/harness/skills/st-refine-plan/SKILL.md +9 -5
  77. package/templates/harness/skills/st-refine-plan/scripts/find-strikethroo-root.cjs +1 -1
  78. package/templates/harness/skills/st-refine-plan/scripts/validate-plan-blueprint.cjs +1 -1
  79. package/templates/strikethroo/config/hooks/PRE_TASK_EXECUTION.md +14 -0
  80. package/templates/strikethroo/config/shared/anti-rationalization.md +3 -0
  81. package/templates/strikethroo/config/shared/clarification-gate.md +7 -0
  82. package/templates/strikethroo/config/shared/verification-gate.md +10 -0
  83. package/dist-web/assets/channel-C1z4NHke.js +0 -1
  84. package/dist-web/assets/classDiagram-4FO5ZUOK-D0BcCPc_.js +0 -1
  85. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-D0BcCPc_.js +0 -1
  86. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-CbmIerZp.js +0 -1
@@ -39,7 +39,7 @@ var path4 = __toESM(require("path"));
39
39
  // src/skill-scripts/shared/root.ts
40
40
  var fs = __toESM(require("fs"));
41
41
  var path = __toESM(require("path"));
42
- var EXPECTED_SCHEMA = true ? 1 : 1;
42
+ var EXPECTED_SCHEMA = true ? 2 : 2;
43
43
  var isValidStrikethrooRoot = (strikethrooPath) => {
44
44
  try {
45
45
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: st-full-workflow
3
- description: Execute the complete Strikethroo workflow from plan creation through blueprint execution for this repository. Use when the user asks to run the full end-to-end workflow for a work order discovers the local .ai/strikethroo root, creates a plan, generates atomic tasks, and executes the blueprint, all in a single uninterrupted sequence. Do not use for individual plan creation, task generation, or blueprint execution; use the dedicated skills for those.
3
+ description: Use when the user asks to run the complete end-to-end Strikethroo workflow for a work order in one shot in this repository triggers include full workflow, end-to-end, plan and execute, do everything, run the whole strikethroo workflow. Do not use when the user wants only one stage (create a plan, generate tasks, or execute a blueprint); use the dedicated skill for that stage instead.
4
4
  ---
5
5
 
6
6
  # st-full-workflow
@@ -166,7 +166,9 @@ Each task must be:
166
166
  - **Single-purpose** — one clear deliverable.
167
167
  - **Atomic** — cannot be meaningfully split further.
168
168
  - **Skill-specific** — executable by an agent with 1–2 technical skills.
169
- - **Verifiable** — has explicit acceptance criteria.
169
+ - **Verifiable** — has explicit acceptance criteria that include at least one
170
+ concrete, runnable verification step (a command plus its expected output, or
171
+ another observable signal). Never settle for a vague "works correctly".
170
172
 
171
173
  Skill assignment (kebab-case, automatically inferred from the task's
172
174
  technical requirements):
@@ -266,6 +268,9 @@ Before declaring task generation complete, verify:
266
268
  - Task IDs are unique, sequential, and start from the value returned by
267
269
  `get-next-task-id.cjs`.
268
270
  - Groups are consistent and meaningful.
271
+ - Every task's Acceptance Criteria includes at least one concrete, runnable
272
+ verification step (command + expected output / observable signal), not a
273
+ vague "works correctly".
269
274
  - Every **explicitly stated** deliverable in the plan is covered.
270
275
  - No redundant or overlapping tasks.
271
276
  - Minimization applied (20–30% reduction target).
@@ -334,6 +339,7 @@ Read these files in order:
334
339
  - `<root>/config/STRIKETHROO.md` — directory conventions and project context.
335
340
  - The plan document.
336
341
  - The plan's Execution Blueprint section — this defines the phase groupings and task dispatch order.
342
+ - `<root>/config/shared/verification-gate.md` — apply in the phase loop below.
337
343
 
338
344
  #### 5. Execute phases in order
339
345
 
@@ -357,6 +363,8 @@ Maximize parallelism within each phase. Run every task that is ready at the same
357
363
  ##### 5c. Phase completion verification
358
364
  Ensure every task in the phase has status `completed`. Collect and review all task outputs. Document any issues or exceptions encountered.
359
365
 
366
+ 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.
367
+
360
368
  ##### 5d. Phase post-execution
361
369
  Read `<root>/config/hooks/POST_PHASE.md` and execute its instructions. Do not proceed to the next phase until this hook succeeds.
362
370
 
@@ -368,6 +376,8 @@ Repeat for the next phase until all phases are complete.
368
376
 
369
377
  Read `<root>/config/hooks/POST_EXECUTION.md` and execute its instructions. If validation fails, halt execution. The plan remains in `plans/` for debugging.
370
378
 
379
+ Before declaring execution complete, apply the evidence gate in `<root>/config/shared/verification-gate.md` to the plan's Success Criteria and Self Validation steps.
380
+
371
381
  #### 7. Append execution summary
372
382
 
373
383
  Append an execution summary section to the plan document using the format described in `<root>/config/templates/EXECUTION_SUMMARY_TEMPLATE.md`. Populate:
@@ -54,7 +54,7 @@ var path3 = __toESM(require("path"));
54
54
  // src/skill-scripts/shared/root.ts
55
55
  var fs = __toESM(require("fs"));
56
56
  var path = __toESM(require("path"));
57
- var EXPECTED_SCHEMA = true ? 1 : 1;
57
+ var EXPECTED_SCHEMA = true ? 2 : 2;
58
58
  var isValidStrikethrooRoot = (strikethrooPath) => {
59
59
  try {
60
60
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(find_strikethroo_root_exports);
37
37
  // src/skill-scripts/shared/root.ts
38
38
  var fs = __toESM(require("fs"));
39
39
  var path = __toESM(require("path"));
40
- var EXPECTED_SCHEMA = true ? 1 : 1;
40
+ var EXPECTED_SCHEMA = true ? 2 : 2;
41
41
  var isValidStrikethrooRoot = (strikethrooPath) => {
42
42
  try {
43
43
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(get_next_plan_id_exports);
37
37
  // src/skill-scripts/shared/root.ts
38
38
  var fs = __toESM(require("fs"));
39
39
  var path = __toESM(require("path"));
40
- var EXPECTED_SCHEMA = true ? 1 : 1;
40
+ var EXPECTED_SCHEMA = true ? 2 : 2;
41
41
  var isValidStrikethrooRoot = (strikethrooPath) => {
42
42
  try {
43
43
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -41,7 +41,7 @@ var path3 = __toESM(require("path"));
41
41
  // src/skill-scripts/shared/root.ts
42
42
  var fs = __toESM(require("fs"));
43
43
  var path = __toESM(require("path"));
44
- var EXPECTED_SCHEMA = true ? 1 : 1;
44
+ var EXPECTED_SCHEMA = true ? 2 : 2;
45
45
  var isValidStrikethrooRoot = (strikethrooPath) => {
46
46
  try {
47
47
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -39,7 +39,7 @@ var path4 = __toESM(require("path"));
39
39
  // src/skill-scripts/shared/root.ts
40
40
  var fs = __toESM(require("fs"));
41
41
  var path = __toESM(require("path"));
42
- var EXPECTED_SCHEMA = true ? 1 : 1;
42
+ var EXPECTED_SCHEMA = true ? 2 : 2;
43
43
  var isValidStrikethrooRoot = (strikethrooPath) => {
44
44
  try {
45
45
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: st-generate-tasks
3
- description: Generate atomic Markdown tasks for an existing Strikethroo plan in this repository. Use when the user asks to decompose a specific plan ID into tasks discovers the local .ai/strikethroo root, resolves the plan, runs the project's task-generation hooks, allocates sequential task IDs, and writes one task file per atomic unit conforming to TASK_TEMPLATE.md. Do not use for generic project planning or work outside Strikethroo.
3
+ description: Use when the user asks to decompose, break down, or generate tasks for an existing Strikethroo plan ID in this repository triggers include generate tasks, break down the plan, decompose plan, create the task blueprint. Do not use to create a new plan, to execute tasks, or for generic project planning outside Strikethroo.
4
4
  ---
5
5
 
6
6
  # st-generate-tasks
@@ -56,6 +56,7 @@ Read these files, in order:
56
56
  what tasks must exist.
57
57
  - `<root>/config/templates/TASK_TEMPLATE.md` — every task file you emit must
58
58
  conform to this template's frontmatter schema and section structure.
59
+ - `<root>/config/shared/anti-rationalization.md` — apply in step 4.
59
60
 
60
61
  ### 4. Analyze and decompose the plan
61
62
 
@@ -85,6 +86,15 @@ Decompose each deliverable into atomic tasks only when genuinely needed.
85
86
  not mention.
86
87
  - Comprehensive test suites for trivial functionality.
87
88
 
89
+ Apply `<root>/config/shared/anti-rationalization.md` to this rationalization table:
90
+
91
+ | You catch yourself thinking… | The binding rule |
92
+ | --- | --- |
93
+ | "One extra task won't hurt." | It violates the 20–30% minimization target. Every task traces to an **explicitly stated** deliverable or it does not exist. |
94
+ | "This edge case deserves its own task." | Fold it into the task that owns the behavior. Do not split trivially small operations into separate units. |
95
+ | "I'll add a test suite to be safe." | Comprehensive tests for trivial functionality are gold-plating. Follow the test philosophy — meaningful tests only. |
96
+ | "Future extensibility justifies this task." | YAGNI. The plan does not mention it, so it is not a task. |
97
+
88
98
  ### 5. Apply granularity and skill rules
89
99
 
90
100
  Each task must be:
@@ -92,7 +102,9 @@ Each task must be:
92
102
  - **Single-purpose** — one clear deliverable.
93
103
  - **Atomic** — cannot be meaningfully split further.
94
104
  - **Skill-specific** — executable by an agent with 1–2 technical skills.
95
- - **Verifiable** — has explicit acceptance criteria.
105
+ - **Verifiable** — has explicit acceptance criteria that include at least one
106
+ concrete, runnable verification step (a command plus its expected output, or
107
+ another observable signal). Never settle for a vague "works correctly".
96
108
 
97
109
  Skill assignment (kebab-case, automatically inferred from the task's
98
110
  technical requirements):
@@ -198,6 +210,9 @@ Before declaring task generation complete, verify:
198
210
  - Task IDs are unique, sequential, and start from the value returned by
199
211
  `get-next-task-id.cjs`.
200
212
  - Groups are consistent and meaningful.
213
+ - Every task's Acceptance Criteria includes at least one concrete, runnable
214
+ verification step (command + expected output / observable signal), not a
215
+ vague "works correctly".
201
216
  - Every **explicitly stated** deliverable in the plan is covered.
202
217
  - No redundant or overlapping tasks.
203
218
  - Minimization applied (20–30% reduction target).
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(find_strikethroo_root_exports);
37
37
  // src/skill-scripts/shared/root.ts
38
38
  var fs = __toESM(require("fs"));
39
39
  var path = __toESM(require("path"));
40
- var EXPECTED_SCHEMA = true ? 1 : 1;
40
+ var EXPECTED_SCHEMA = true ? 2 : 2;
41
41
  var isValidStrikethrooRoot = (strikethrooPath) => {
42
42
  try {
43
43
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -41,7 +41,7 @@ var path3 = __toESM(require("path"));
41
41
  // src/skill-scripts/shared/root.ts
42
42
  var fs = __toESM(require("fs"));
43
43
  var path = __toESM(require("path"));
44
- var EXPECTED_SCHEMA = true ? 1 : 1;
44
+ var EXPECTED_SCHEMA = true ? 2 : 2;
45
45
  var isValidStrikethrooRoot = (strikethrooPath) => {
46
46
  try {
47
47
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -39,7 +39,7 @@ var path4 = __toESM(require("path"));
39
39
  // src/skill-scripts/shared/root.ts
40
40
  var fs = __toESM(require("fs"));
41
41
  var path = __toESM(require("path"));
42
- var EXPECTED_SCHEMA = true ? 1 : 1;
42
+ var EXPECTED_SCHEMA = true ? 2 : 2;
43
43
  var isValidStrikethrooRoot = (strikethrooPath) => {
44
44
  try {
45
45
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: st-refine-plan
3
- description: Refine an existing Strikethroo plan in this repository. Use when the user asks to review, improve, interrogate, or update a specific plan ID discovers the local .ai/strikethroo root, resolves the plan, runs the project's plan hooks, pressure-tests the document for gaps and contradictions, gathers clarifications interactively or autonomously, and updates the plan in-place while preserving its identity and structure. Do not use for creating new plans or for generic brainstorming outside Strikethroo.
3
+ description: Use when the user asks to review, refine, improve, interrogate, pressure-test, or update an existing Strikethroo plan by plan ID in this repository triggers include refine plan, improve plan, review plan, red-team the plan, update plan. Do not use to create a new plan, to generate tasks, or for generic brainstorming outside Strikethroo.
4
4
  ---
5
5
 
6
6
  # st-refine-plan
@@ -55,6 +55,7 @@ Read these files, in order:
55
55
  before proceeding.
56
56
  - `<root>/config/templates/PLAN_TEMPLATE.md` — the structural baseline the
57
57
  refined plan must continue to conform to.
58
+ - `<root>/config/shared/clarification-gate.md` — apply in the Clarification Loop.
58
59
 
59
60
  ### 4. Baseline Review
60
61
 
@@ -107,16 +108,19 @@ appropriately.
107
108
  Think harder before interrupting the user — only trigger this loop when you
108
109
  can cite concrete uncertainties.
109
110
 
111
+ Follow the clarification cadence in `<root>/config/shared/clarification-gate.md`.
112
+
110
113
  1. Review the gaps documented in the Baseline Review.
111
114
  2. If no gaps remain, stop here and proceed to Stage 6.
112
- 3. Build a clarification packet grouped by theme.
115
+ 3. Group the open questions by theme, but ask them one at a time per the
116
+ cadence above rather than dumping them as a single batch.
113
117
  4. Prefill each question with the most plausible answer so the user can
114
118
  confirm or deny quickly.
115
119
  5. Always include an "Other / open-ended" option to capture nuances you did
116
120
  not anticipate.
117
- 6. **STOP AND ASK**: Present the clarification packet to the user. You must
118
- halt execution here and await user input. Do not simulate the user's
119
- response. Do not proceed to Stage 6 until you have received explicit answers.
121
+ 6. **STOP AND ASK**: Put each question to the user and halt execution to await
122
+ their input. Do not simulate the user's response. Do not proceed to Stage 6
123
+ until you have received explicit answers and confirmed the resolved scope.
120
124
  7. After receiving answers, record them in the Plan Clarifications table.
121
125
  If the user cannot answer a question, record it as unresolved with
122
126
  mitigation notes so downstream assistants know the risk.
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(find_strikethroo_root_exports);
37
37
  // src/skill-scripts/shared/root.ts
38
38
  var fs = __toESM(require("fs"));
39
39
  var path = __toESM(require("path"));
40
- var EXPECTED_SCHEMA = true ? 1 : 1;
40
+ var EXPECTED_SCHEMA = true ? 2 : 2;
41
41
  var isValidStrikethrooRoot = (strikethrooPath) => {
42
42
  try {
43
43
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -39,7 +39,7 @@ var path4 = __toESM(require("path"));
39
39
  // src/skill-scripts/shared/root.ts
40
40
  var fs = __toESM(require("fs"));
41
41
  var path = __toESM(require("path"));
42
- var EXPECTED_SCHEMA = true ? 1 : 1;
42
+ var EXPECTED_SCHEMA = true ? 2 : 2;
43
43
  var isValidStrikethrooRoot = (strikethrooPath) => {
44
44
  try {
45
45
  if (!fs.existsSync(strikethrooPath)) return false;
@@ -1 +1,15 @@
1
1
  # PRE_TASK_EXECUTION Hook
2
+
3
+ ## Test-Driven Development: RED → GREEN → REFACTOR
4
+
5
+ Before writing production code for this task, follow this cycle for each increment:
6
+
7
+ 1. **RED** — Write one failing test and run it; confirm it fails for the
8
+ expected reason.
9
+ 2. **GREEN** — Write the minimal code to pass it (YAGNI); confirm it passes.
10
+ 3. **REFACTOR** — Clean up with the test green; re-run and confirm still green.
11
+
12
+ Apply this only to the meaningful tests the test philosophy calls for (custom
13
+ logic, critical paths, edge cases) — not to trivial, CRUD, or framework code.
14
+ If a task warrants no new test under that philosophy, state why and implement
15
+ directly.
@@ -0,0 +1,3 @@
1
+ # Anti-rationalization
2
+
3
+ A discipline survives pressure only if you refuse the excuse to skip it. When a thought in the "rationalization" column of the skill's table forms, treat it as a red flag and apply the binding rule instead. There is no "unless it matters" exception.
@@ -0,0 +1,7 @@
1
+ # Clarification Gate — Cadence & Approval
2
+
3
+ When you have questions:
4
+
5
+ - **One at a time.** Ask a single question, wait for the answer, then decide the next from it — do not dump a batch.
6
+ - **Multiple-choice first.** When the question allows, offer options with a recommended default plus an open-ended "Other"; the user confirms in one word.
7
+ - **Approval gate.** Present the resolved scope and get explicit confirmation before you write or update the plan.
@@ -0,0 +1,10 @@
1
+ # Verification Gate — Evidence Before Claims
2
+
3
+ Before stating that anything is complete, passing, or working:
4
+
5
+ 1. **IDENTIFY** the command or signal that proves the claim.
6
+ 2. **RUN** it fresh now — never rely on earlier output or a subagent's report.
7
+ 3. **READ** the full output and exit code.
8
+ 4. **VERIFY** it matches the claim, then state the result.
9
+
10
+ Red-flag words — "should", "probably", "seems to", "looks like", a premature "Done!" — mean you have not run the gate. Run it.
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-C0ywvB_J.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-CgGGmYGu.js";import{b as i}from"./mermaid.core-C0ywvB_J.js";import"./chunk-FMBD7UC4-Qn3q5Qhx.js";import"./chunk-ND2GUHAM-DDrXpr-b.js";import"./chunk-55IACEB6-DAnXzn2R.js";import"./chunk-2J33WTMH-BFdYIb-H.js";import"./index-DtUXMh0p.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-CgGGmYGu.js";import{b as i}from"./mermaid.core-C0ywvB_J.js";import"./chunk-FMBD7UC4-Qn3q5Qhx.js";import"./chunk-ND2GUHAM-DDrXpr-b.js";import"./chunk-55IACEB6-DAnXzn2R.js";import"./chunk-2J33WTMH-BFdYIb-H.js";import"./index-DtUXMh0p.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{b as e,a as r,s as a,S as s}from"./chunk-AQP2D5EJ-B-eVBjow.js";import{b as i}from"./mermaid.core-C0ywvB_J.js";import"./chunk-55IACEB6-DAnXzn2R.js";import"./chunk-2J33WTMH-BFdYIb-H.js";import"./index-DtUXMh0p.js";var u={parser:a,get db(){return new s(2)},renderer:r,styles:e,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{u as diagram};