@rse/ase 0.9.55 → 0.9.56

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 (78) hide show
  1. package/dst/ase-setup.js +4 -2
  2. package/dst/ase-statusline.js +6 -8
  3. package/dst/ase-task.js +36 -11
  4. package/package.json +5 -5
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/agents/ase-code-analyze.md +1 -1
  9. package/plugin/agents/ase-code-lint.md +4 -4
  10. package/plugin/agents/ase-meta-chat.md +1 -1
  11. package/plugin/agents/ase-meta-proximity.md +1 -1
  12. package/plugin/meta/ase-common-code.md +164 -1
  13. package/plugin/meta/ase-common-task.md +14 -13
  14. package/plugin/meta/ase-constitution.md +3 -3
  15. package/plugin/meta/ase-control.md +7 -7
  16. package/plugin/meta/ase-dialog.md +5 -4
  17. package/plugin/meta/ase-format-arch.md +7 -8
  18. package/plugin/meta/ase-format-spec.md +10 -11
  19. package/plugin/meta/ase-format-task.md +2 -2
  20. package/plugin/meta/ase-getopt.md +1 -1
  21. package/plugin/meta/ase-persona.md +3 -3
  22. package/plugin/meta/ase-skill.md +14 -24
  23. package/plugin/meta/ase-tenets.md +5 -5
  24. package/plugin/package.json +2 -2
  25. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  26. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  27. package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
  28. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  29. package/plugin/skills/ase-code-analyze/help.md +1 -1
  30. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  31. package/plugin/skills/ase-code-craft/help.md +1 -1
  32. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  33. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  35. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  36. package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
  37. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  38. package/plugin/skills/ase-docs-distill/help.md +1 -1
  39. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  40. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  41. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  42. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  43. package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
  44. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  45. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  46. package/plugin/skills/ase-meta-config/help.md +1 -1
  47. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  48. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  49. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  50. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  51. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  52. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  53. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  54. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  55. package/plugin/skills/ase-meta-review/help.md +2 -2
  56. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  57. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  58. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  59. package/plugin/skills/ase-meta-why/help.md +3 -3
  60. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  61. package/plugin/skills/ase-sync-export/help.md +1 -1
  62. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  63. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  64. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  65. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  66. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  67. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  68. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  69. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  70. package/plugin/skills/ase-task-implement/help.md +1 -1
  71. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  72. package/plugin/skills/ase-task-preflight/SKILL.md +13 -7
  73. package/plugin/skills/ase-task-reboot/SKILL.md +18 -61
  74. package/plugin/skills/ase-task-reboot/help.md +1 -1
  75. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  76. package/dst/ase-guidance.js +0 -89
  77. package/dst/ase-persona.js +0 -87
  78. package/dst/ase-stdout.js +0 -18
@@ -51,7 +51,8 @@ Give *insights* into the project through the source code of <getopt-arguments/>.
51
51
 
52
52
  Determine an <abstract/> summary of this project.
53
53
  For this, check a potentially existing `README.*` file
54
- or scan the source files and figure it out indirectly.
54
+ or scan the source files of <getopt-arguments/> and figure it out
55
+ indirectly.
55
56
 
56
57
  Display the results with the following <template/>:
57
58
 
@@ -80,8 +81,8 @@ Give *insights* into the project through the source code of <getopt-arguments/>.
80
81
  </step>
81
82
 
82
83
  3. <step id="STEP 3: SOURCE CHURN">
83
- Display the source files which caused the most churn by
84
- figuring out which source files have the most commits.
84
+ Display the source files of <getopt-arguments/> which caused the
85
+ most churn by figuring out which of them have the most commits.
85
86
  Display the following <template/>:
86
87
 
87
88
  <template>
@@ -91,7 +92,7 @@ Give *insights* into the project through the source code of <getopt-arguments/>.
91
92
  Then run the following command...
92
93
 
93
94
  ```
94
- git log --format=format: --name-only --since="1 year ago" | grep -v '^$' | sort | uniq -c | sort -nr | head -10
95
+ git log --format=format: --name-only --since="1 year ago" -- <getopt-arguments/> | grep -v '^$' | sort | uniq -c | sort -nr | head -10
95
96
  ```
96
97
 
97
98
  ...and then display its result as a table with a table head and
@@ -106,9 +107,10 @@ Give *insights* into the project through the source code of <getopt-arguments/>.
106
107
  <ase-tpl-bullet-normal/> **MODULE STRUCTURE**:
107
108
  </template>
108
109
 
109
- Find all modules (or OOP classes) and build a Mermaid specification
110
- <mermaid-spec/> for a `flowchart TB` diagram with all modules as
111
- boxes and the imports between modules as the directed edges. Then
110
+ Find all modules (or OOP classes) of <getopt-arguments/> and build a
111
+ Mermaid specification <mermaid-spec/> for a `flowchart TB` diagram
112
+ with all modules as boxes and the imports between modules as the
113
+ directed edges. Then
112
114
  dispatch the rendering to the `ase-meta-diagram` sub-agent by
113
115
  calling the tool `Agent(description: "Diagram Rendering",
114
116
  subagent_type: "ase:ase-meta-diagram", prompt: <mermaid-spec/>,
@@ -276,10 +276,12 @@ related to a set of code quality aspects.
276
276
 
277
277
  Set <old-start/> to the 1-based line number of the
278
278
  *first* old-side hunk line: if <context-before/> is
279
- non-empty, that is its line (one before <line/>);
280
- otherwise it is <line/> itself (the first line of
281
- <old-text/>). For a hunk that *only inserts* new lines
282
- (empty <old-text/> *and* empty context), set it to the
279
+ non-empty, that is the line of its *first* context
280
+ line, i.e. <line/> minus the number of lines in
281
+ <context-before/>; otherwise it is <line/> itself
282
+ (the first line of <old-text/>). For a hunk that
283
+ *only inserts* new lines (empty <old-text/> *and*
284
+ empty context), set it to the
283
285
  line *before* which the insertion happens, clamped to a
284
286
  minimum of `0`, so a top-of-file insertion yields
285
287
  `@@ -0,0 ... @@`.
@@ -341,7 +343,7 @@ related to a set of code quality aspects.
341
343
 
342
344
  </template>
343
345
 
344
- 5. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
346
+ 5. <if condition="<getopt-option-auto/> is not equal `true`">
345
347
 
346
348
  <if condition="<ase-project-boxing/> is equal `grey`">
347
349
 
@@ -138,91 +138,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
138
138
 
139
139
  4. <step id="STEP 4: Choose Refactoring Approaches">
140
140
 
141
- You *MUST* perform the following sub-steps *internally* and *without
142
- any output* until and including the recommendation decision. Only
143
- sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
144
- <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
145
- is *not* equal `black`.
146
-
147
- If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
148
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
149
- perform no output at all) to speed up processing.
150
-
151
- 1. *Propose* a corresponding *refactoring approach*, optionally
152
- including some *alternative* refactoring approaches. Do *not*
153
- output anything in this sub-step.
154
-
155
- 2. *Reflect* on and *critique* the proposed approaches by deriving,
156
- per approach, a small set of concrete *pros* and *cons*. Do
157
- *not* output anything in this sub-step.
158
-
159
- 3. Based on the reflection, *decide* which approach to recommend
160
- and annotate it with an <annotation/> of
161
- ` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
162
- empty <annotation/>. Do *not* output anything in this sub-step.
163
-
164
- 4. Indicate start of reporting by showing the following <template/>:
165
-
166
- <template>
167
- <ase-tpl-head title="APPROACHES"/>
168
- </template>
169
-
170
- 5. Now report each approach with the following <template/>,
171
- inlining its pros/cons derived in sub-step 2, and do not output
172
- anything else in this step:
173
-
174
- <template>
175
- ● **APPROACH A<n/>**<annotation/>: **<summary/>**
176
- ○ [...]
177
- ⊕ *PRO*: [...]
178
- ⊖ *CON*: [...]
179
- </template>
180
-
181
- Hints:
182
-
183
- - Give a short one-sentence <summary/> of the refactoring
184
- approach plus *precise* and *ultra brief and concise*
185
- refactoring information. Try to keep the number of bullet
186
- points (`○ [...]`) in the range of 1-4.
187
-
188
- 6. Indicate end of reporting by showing the following <template/>:
189
-
190
- <template>
191
- <ase-tpl-foot title="APPROACHES"/>
192
- </template>
193
-
194
- 7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
195
-
196
- In the following, you *MUST* *NOT* use your built-in
197
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
198
- custom dialog according to the expanded `custom-dialog`
199
- definition. You *MUST* closely follow this definition.
200
-
201
- Let the user choose the preferred approach A<n/> by raising
202
- a question with the following custom dialog, where per
203
- approach A<n/>, you determine an ultra brief summary
204
- <short-summary/> and then use the answer option `A<n/>:
205
- ⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
206
- recommended approach plus zero or more answer options `A<n/>:
207
- <short-summary/>` for all other approaches:
208
-
209
- <expand name="custom-dialog" arg1="--no-other">
210
- Select Approach: Select your preferred refactoring approach to follow?
211
- A<n/>: <short-summary/>
212
- [...]
213
- </expand>
214
-
215
- </if>
216
- <else>
217
-
218
- Set <n/> to the number of the refactoring approach A<n/> you recommend.
219
- Output a hint with the following <template/>:
220
-
221
- <template>
222
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
223
- </template>
224
-
225
- </else>
141
+ <expand name="code-approaches" arg1="refactoring" arg2="refactoring"></expand>
226
142
 
227
143
  </step>
228
144
 
@@ -265,76 +181,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
265
181
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
266
182
  </template>
267
183
 
268
- 5. Directly pass-through control to the next skill:
269
-
270
- Treat <getopt-option-next/> as a comma-separated chronological
271
- list of pre-selected next-step tokens. *Peek* the *first* token
272
- as <head/> (or `none` if the list is `none`/empty).
273
- Set <args>--int-reuse-task</args>.
274
-
275
- 1. <if condition="<head/> is equal `DONE`">
276
- Consume the head: set <getopt-option-next/> to the remaining
277
- tokens (joined back with `,`, or `none` if empty). `DONE`
278
- means the freshly composed plan is finalized as-is, so do
279
- *not* hand off to `ase-task-edit`. Only output the following
280
- <template/> and then *STOP*. Do *not* implement the plan.
281
-
282
- <template>
283
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
284
- </template>
285
- </if>
286
-
287
- 2. <elseif condition="<head/> is equal `IMPLEMENT`">
288
- Consume the head: set <getopt-option-next/> to the remaining
289
- tokens (joined back with `,`, or `none` if empty).
290
- <if condition="<getopt-option-next/> is not equal `none`">
291
- Set <args><args/> --next <getopt-option-next/></args>
292
- </if>
293
- Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
294
- to *implement* the freshly composed plan, bypassing `ase-task-edit`.
295
- </elseif>
296
-
297
- 3. <elseif condition="<head/> is equal `PREFLIGHT`">
298
- Consume the head: set <getopt-option-next/> to the remaining
299
- tokens (joined back with `,`, or `none` if empty).
300
- <if condition="<getopt-option-next/> is not equal `none`">
301
- Set <args><args/> --next <getopt-option-next/></args>
302
- </if>
303
- Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
304
- to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
305
- </elseif>
306
-
307
- 4. <elseif condition="<head/> is equal `GRILL`">
308
- Consume the head: set <getopt-option-next/> to the remaining
309
- tokens (joined back with `,`, or `none` if empty). `GRILL`
310
- is this skill's own dispatch token, *not* part of
311
- `ase-task-grill`'s `--next` vocabulary, so it must be
312
- stripped here rather than forwarded. All remaining tokens are
313
- `ase-task-grill`'s own vocabulary and are forwarded verbatim.
314
- <if condition="<getopt-option-next/> is not equal `none`">
315
- Set <args><args/> --next <getopt-option-next/></args>
316
- </if>
317
- Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
318
- to *grill* the freshly composed plan, bypassing `ase-task-edit`.
319
- </elseif>
320
-
321
- 5. <else>
322
- Hand off to `ase-task-edit`.
323
- <if condition="<head/> is equal `EDIT`">
324
- Consume the head: set <getopt-option-next/> to the remaining
325
- tokens (joined back with `,`, or `none` if empty). `EDIT`
326
- is this skill's own dispatch token, *not* part of
327
- `ase-task-edit`'s `--next` vocabulary, so it must be
328
- stripped here rather than forwarded.
329
- </if>
330
- All remaining tokens are `ase-task-edit`'s own vocabulary
331
- and are forwarded verbatim, so `ase-task-edit` consumes its
332
- own head itself.
333
- <if condition="<getopt-option-next/> is not equal `none`">
334
- Set <args><args/> --next <getopt-option-next/></args>
335
- </if>
336
- Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
337
- </else>
184
+ 5. Directly pass through control to the next skill:
185
+
186
+ <expand name="code-next-dispatch"></expand>
338
187
 
339
188
  </step>
340
189
 
@@ -151,10 +151,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
151
151
  Try to keep the number of bullet points (●) in the range of 1-4.
152
152
 
153
153
  - In case of a *complex context situation* with complex *structure*
154
- (layout, components, dependencies, etc), complex *control flow*
155
- (branching, concurrency, etc), complex *state machine* (states,
156
- transitions, etc), complex *data flow* (actors, messages, etc), or
157
- complex *data structure* (classes, entities, relationships, etc),
154
+ (layout, components, dependencies, etc.), complex *control flow*
155
+ (branching, concurrency, etc.), complex *state machine* (states,
156
+ transitions, etc.), complex *data flow* (actors, messages, etc.), or
157
+ complex *data structure* (classes, entities, relationships, etc.),
158
158
  visualize it with an optional diagram <optional-diagram/> by
159
159
  building a Mermaid specification <mermaid-spec/> (e.g. `flowchart
160
160
  TB`, `stateDiagram-v2`, `sequenceDiagram`, `classDiagram`, or
@@ -192,91 +192,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
192
192
 
193
193
  4. <step id="STEP 4: Choose Problem Resolution Approaches">
194
194
 
195
- You *MUST* perform the following sub-steps *internally* and *without
196
- any output* until and including the recommendation decision. Only
197
- sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
198
- <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
199
- is *not* equal `black`.
200
-
201
- If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
202
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
203
- perform no output at all) to speed up processing.
204
-
205
- 1. *Propose* a corresponding *resolution approach*, optionally including
206
- some *alternative* resolution approaches. Do *not* output anything
207
- in this sub-step.
208
-
209
- 2. *Reflect* on and *critique* the proposed approaches by deriving,
210
- per approach, a small set of concrete *pros* and *cons*. Do
211
- *not* output anything in this sub-step.
212
-
213
- 3. Based on the reflection, *decide* which approach to recommend
214
- and annotate it with an <annotation/> of
215
- ` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
216
- empty <annotation/>. Do *not* output anything in this sub-step.
217
-
218
- 4. Indicate start of reporting by showing the following <template/>:
219
-
220
- <template>
221
- <ase-tpl-head title="APPROACHES"/>
222
- </template>
223
-
224
- 5. Now report each approach with the following <template/>,
225
- inlining its pros/cons derived in sub-step 2, and do not output
226
- anything else in this step:
227
-
228
- <template>
229
- ● **APPROACH A<n/>**<annotation/>: **<summary/>**
230
- ○ [...]
231
- ⊕ *PRO*: [...]
232
- ⊖ *CON*: [...]
233
- </template>
234
-
235
- Hints:
236
-
237
- - Give a short one-sentence <summary/> of the resolution
238
- approach plus *precise* and *ultra brief and concise*
239
- resolution information. Try to keep the number of bullet points
240
- (`○ [...]`) in the range of 1-4.
241
-
242
- 6. Indicate end of reporting by showing the following <template/>:
243
-
244
- <template>
245
- <ase-tpl-foot title="APPROACHES"/>
246
- </template>
247
-
248
- 7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
249
-
250
- In the following, you *MUST* *NOT* use your built-in
251
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
252
- custom dialog according to the expanded `custom-dialog`
253
- definition. You *MUST* closely follow this definition.
254
-
255
- Let the user choose the preferred approach A<n/> by raising
256
- a question with the following custom dialog, where per
257
- approach A<n/>, you determine an ultra brief summary
258
- <short-summary/> and then use the answer option `A<n/>:
259
- ⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
260
- recommended approach plus zero or more answer options `A<n/>:
261
- <short-summary/>` for all other approaches:
262
-
263
- <expand name="custom-dialog" arg1="--no-other">
264
- Select Approach: Select your preferred resolution approach to follow?
265
- A<n/>: <short-summary/>
266
- [...]
267
- </expand>
268
-
269
- </if>
270
- <else>
271
-
272
- Set <n/> to the number of the resolution approach A<n/> you recommend.
273
- Output a hint with the following <template/>:
274
-
275
- <template>
276
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
277
- </template>
278
-
279
- </else>
195
+ <expand name="code-approaches" arg1="resolution" arg2="resolution"></expand>
280
196
 
281
197
  </step>
282
198
 
@@ -326,76 +242,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
326
242
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
327
243
  </template>
328
244
 
329
- 6. Directly pass-through control to the next skill:
330
-
331
- Treat <getopt-option-next/> as a comma-separated chronological
332
- list of pre-selected next-step tokens. *Peek* the *first* token
333
- as <head/> (or `none` if the list is `none`/empty).
334
- Set <args>--int-reuse-task</args>.
335
-
336
- 1. <if condition="<head/> is equal `DONE`">
337
- Consume the head: set <getopt-option-next/> to the remaining
338
- tokens (joined back with `,`, or `none` if empty). `DONE`
339
- means the freshly composed plan is finalized as-is, so do
340
- *not* hand off to `ase-task-edit`. Only output the following
341
- <template/> and then *STOP*. Do *not* implement the plan.
342
-
343
- <template>
344
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
345
- </template>
346
- </if>
347
-
348
- 2. <elseif condition="<head/> is equal `IMPLEMENT`">
349
- Consume the head: set <getopt-option-next/> to the remaining
350
- tokens (joined back with `,`, or `none` if empty).
351
- <if condition="<getopt-option-next/> is not equal `none`">
352
- Set <args><args/> --next <getopt-option-next/></args>
353
- </if>
354
- Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
355
- to *implement* the freshly composed plan, bypassing `ase-task-edit`.
356
- </elseif>
357
-
358
- 3. <elseif condition="<head/> is equal `PREFLIGHT`">
359
- Consume the head: set <getopt-option-next/> to the remaining
360
- tokens (joined back with `,`, or `none` if empty).
361
- <if condition="<getopt-option-next/> is not equal `none`">
362
- Set <args><args/> --next <getopt-option-next/></args>
363
- </if>
364
- Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
365
- to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
366
- </elseif>
367
-
368
- 4. <elseif condition="<head/> is equal `GRILL`">
369
- Consume the head: set <getopt-option-next/> to the remaining
370
- tokens (joined back with `,`, or `none` if empty). `GRILL`
371
- is this skill's own dispatch token, *not* part of
372
- `ase-task-grill`'s `--next` vocabulary, so it must be
373
- stripped here rather than forwarded. All remaining tokens are
374
- `ase-task-grill`'s own vocabulary and are forwarded verbatim.
375
- <if condition="<getopt-option-next/> is not equal `none`">
376
- Set <args><args/> --next <getopt-option-next/></args>
377
- </if>
378
- Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
379
- to *grill* the freshly composed plan, bypassing `ase-task-edit`.
380
- </elseif>
381
-
382
- 5. <else>
383
- Hand off to `ase-task-edit`.
384
- <if condition="<head/> is equal `EDIT`">
385
- Consume the head: set <getopt-option-next/> to the remaining
386
- tokens (joined back with `,`, or `none` if empty). `EDIT`
387
- is this skill's own dispatch token, *not* part of
388
- `ase-task-edit`'s `--next` vocabulary, so it must be
389
- stripped here rather than forwarded.
390
- </if>
391
- All remaining tokens are `ase-task-edit`'s own vocabulary
392
- and are forwarded verbatim, so `ase-task-edit` consumes its
393
- own head itself.
394
- <if condition="<getopt-option-next/> is not equal `none`">
395
- Set <args><args/> --next <getopt-option-next/></args>
396
- </if>
397
- Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
398
- </else>
245
+ 6. Directly pass through control to the next skill:
246
+
247
+ <expand name="code-next-dispatch"></expand>
399
248
 
400
249
  </step>
401
250
 
@@ -77,7 +77,7 @@ Procedure
77
77
 
78
78
  </if>
79
79
 
80
- You *MUST* *NOT* output anything in this STEP 1.
80
+ You *MUST* *NOT* output anything else in this STEP 1.
81
81
 
82
82
  </step>
83
83
 
@@ -141,7 +141,7 @@ Procedure
141
141
 
142
142
  </template>
143
143
 
144
- In the <location/>, markup the line-range reference as
144
+ In the <location/>, mark up the line-range reference as
145
145
  code (with backticks) and prepend it with `▢ `.
146
146
 
147
147
  Keep the overall report *concise* and *brief*. Do *not* output any
@@ -15,7 +15,7 @@
15
15
  The `ase-docs-distill` skill reads a *provided document* and distills it
16
16
  into a *flat*, *importance-ranked* list of its *key points*. The
17
17
  *document-reference* is resolved *probe-as-file-first*: if the argument names
18
- a *readable file* it is read from disk, otherwise the argument is taken
18
+ a *readable file* it is read from disk; otherwise the argument is taken
19
19
  *verbatim* as *pasted text*. The document is read *silently* - only the
20
20
  final ranked list is shown - so even a large document does not flood the
21
21
  transcript.
@@ -217,7 +217,8 @@ Analyze documents for spelling, punctuation, or grammar errors
217
217
 
218
218
  Set <old-start/> to the 1-based line number of the *first*
219
219
  old-side hunk line: if <context-before/> is non-empty, that is
220
- its line (one before <line/>); otherwise it is <line/> itself
220
+ the line of its *first* context line, i.e. <line/> minus the
221
+ number of lines in <context-before/>; otherwise it is <line/> itself
221
222
  (the first line of <old-text/>). For a hunk that *only inserts*
222
223
  new lines (empty <old-text/> *and* empty context), set it to the
223
224
  line *before* which the insertion happens, clamped to a minimum
@@ -288,8 +289,11 @@ Analyze documents for spelling, punctuation, or grammar errors
288
289
  proposal (<old-text/> stays anchored to the existing text
289
290
  at <file/>:<line/>; <new-text/> and <description/> carry the
290
291
  refinement) so the subsequent rendering and any `Edit` use
291
- the new proposal rather than the original. Then *go back* to
292
- substep 2 of this `for`-iteration. There is *no* cap on
292
+ the new proposal rather than the original. Then *re-apply*
293
+ the minimal-form normalization of substep 1 to the refined
294
+ <old-text/> and <new-text/> (so the re-rendered diff again
295
+ shows exactly the changed lines) and *go back* to substep 2
296
+ of this `for`-iteration. There is *no* cap on
293
297
  refinement rounds - keep refining until the user picks
294
298
  `ACCEPT` or `REJECT`.
295
299
 
@@ -81,14 +81,18 @@ catalog you match <intent/> against:
81
81
  - Set <rationale/> to a *very brief*, single-sentence
82
82
  justification of why the selected skill and its options match
83
83
  <intent/>.
84
+ - Set <matched>yes</matched>.
84
85
 
85
86
  2. *Guard No Match*:
86
87
 
87
88
  <if condition="no skill in <corpus/> adequately matches <intent/>">
88
- Output the following <template/> and then *continue* the *loop*
89
- at sub-step 4 to prompt the user for a refined or clearer intent
90
- via the dialog's free-text channel (do *not* stop and do *not*
91
- render a command):
89
+ Set <matched>no</matched> and discard the inadequate selection of
90
+ sub-step 1 by setting <name></name>, <arguments></arguments>, and
91
+ <command></command> (all set to empty), so that no stale command
92
+ can survive into the dialog of sub-step 4. Then output the
93
+ following <template/> and *continue* the *loop* at sub-step 4 to
94
+ prompt the user for a refined or clearer intent via the dialog's
95
+ free-text channel (do *not* stop and do *not* render a command):
92
96
 
93
97
  <template>
94
98
  <ase-tpl-bullet-secondary/> **WARNING**: no confident match for the intent -- please refine or clarify it.
@@ -116,16 +120,27 @@ catalog you match <intent/> against:
116
120
  dialog according to the expanded `custom-dialog` definition. You
117
121
  *MUST* closely follow this definition.
118
122
 
119
- Let the user decide what to do with the generated command by
120
- raising a question with the following custom dialog (invoked with
121
- `--other`, so that any free-text instruction is accepted as an
122
- intent refinement):
123
+ Let the user decide how to proceed by raising a question with the
124
+ following custom dialog (invoked with `--other`, so that any
125
+ free-text instruction is accepted as an intent refinement). Which
126
+ dialog is raised depends on <matched/>, so that `EXECUTE` is
127
+ offered *only* when a command was actually generated in sub-step 1
128
+ *and* rendered in sub-step 3:
123
129
 
130
+ <if condition="<matched/> is `no`">
131
+ <expand name="custom-dialog" arg1="--other">
132
+ Dispatch: What would you like to do with the unmatched intent?
133
+ REFINE: Refine or clarify the intent.
134
+ CANCEL: Cancel this dialog.
135
+ </expand>
136
+ </if>
137
+ <else>
124
138
  <expand name="custom-dialog" arg1="--other">
125
139
  Dispatch: What would you like to do with the generated command?
126
140
  EXECUTE: Execute the generated command now.
127
141
  CANCEL: Cancel this dialog.
128
142
  </expand>
143
+ </else>
129
144
 
130
145
  Check the tool <result/> and dispatch accordingly:
131
146
 
@@ -133,7 +148,16 @@ catalog you match <intent/> against:
133
148
  *Break* out of the *loop* and stop processing without any
134
149
  further output.
135
150
 
136
- - If <result/> is `EXECUTE`:
151
+ - If <result/> is `REFINE`, or <result/> is `EXECUTE` while
152
+ <matched/> is `no`: do *not* execute anything -- output the
153
+ following <template/> and *continue* the *loop* at sub-step 4
154
+ to obtain a refined intent via the dialog's free-text channel:
155
+
156
+ <template>
157
+ <ase-tpl-bullet-secondary/> **HINT**: please enter a refined or clearer intent as free text.
158
+ </template>
159
+
160
+ - If <result/> is `EXECUTE` (which implies <matched/> is `yes`):
137
161
  *Break* out of the *loop*, output the following <template/>,
138
162
  and then call the tool `Skill(skill: "ase:<name/>", args:
139
163
  "<arguments/>")` to *execute* the generated command:
@@ -35,7 +35,7 @@ skill name, abbreviation of it, or description of its purpose:
35
35
  <skill-ref><getopt-arguments/></skill-ref>
36
36
  </objective>
37
37
 
38
- The following <catalog/> is index of all ASE skills -- one
38
+ The following <catalog/> is the index of all ASE skills -- one
39
39
  `⎈ **<group/>**` entry per skill group and one
40
40
  ``○ `<name/>`: <purpose/>`` entry per skill -- and this is
41
41
  the *sole* index <skill-ref/> is resolved against:
@@ -78,6 +78,15 @@ Honor the following tenets throughout the brainstorming:
78
78
 
79
79
  1. <step id="STEP 1: Restate Topic">
80
80
 
81
+ <if condition="<topic/> is empty">
82
+ Only output the following <template/> and then immediately *STOP*
83
+ processing the entire current skill:
84
+
85
+ <template>
86
+ ⧉ **ASE**: ✪ skill: **ase-meta-brainstorm**, ▶ ERROR: expected a `<topic>` argument
87
+ </template>
88
+ </if>
89
+
81
90
  Restate the topic to be brainstormed by outputting the following <template/>:
82
91
 
83
92
  <template>
@@ -99,7 +108,7 @@ Honor the following tenets throughout the brainstorming:
99
108
  1..<getopt-option-max-clarify/> unknowns, as too much upfront intent
100
109
  clarification kills the brainstorming of ideas later. So, you *MUST*
101
110
  reduce the clarifications of the unknowns to the absolute minimum in
102
- general and cap it at <getopt-option-max-clarify/>!
111
+ general and cap them at <getopt-option-max-clarify/>!
103
112
 
104
113
  For each essential unknown to clarify, derive a short 1-3 word facet
105
114
  <facet-M/> and a corresponding question <question-M/> whose answer
@@ -185,7 +194,7 @@ Honor the following tenets throughout the brainstorming:
185
194
  the unconventional/wildcard angle - because variety in origin yields
186
195
  variety in outcome.
187
196
 
188
- Do still *not* judge, rank, or prune ideas in this step. Generate
197
+ Still do *not* judge, rank, or prune ideas in this step. Generate
189
198
  ideas until you either reach at least <getopt-option-min-ideas/> distinct
190
199
  candidate ideas or have clearly exhausted the meaningfully distinct
191
200
  space.
@@ -106,14 +106,18 @@ Processing
106
106
  correct baseline Git tag. Take the `N.M.K` from the *first* (most
107
107
  recent) level-2 header in the *ChangeLog* file and check whether a
108
108
  corresponding Git tag already exists with the command `git tag --list
109
- N.M.K`. If this command produces *no* output, the first section is
110
- still in-progress/untagged, so use the `N.M.K` from the *second*
111
- level-2 header as the baseline tag instead. If *no* second level-2
112
- header exists (very first, still untagged release), skip the baseline
113
- tag and check *all* Git commits with the command `git log HEAD
114
- --numstat --pretty=format:'%h: %s'` instead. If this command *does*
115
- produce output, the first section is already released/tagged, so use
116
- the `N.M.K` from the *first* level-2 header as the baseline tag. Then
109
+ N.M.K`. If this command *does* produce output, the first section is
110
+ already released/tagged, so use the `N.M.K` from the *first* level-2
111
+ header as the baseline tag and *insert* a new, still-unreleased
112
+ level-2 section (next patch version, current date) *above* it, which
113
+ then becomes the *first* (most recent) section all subsequent steps
114
+ operate on - the already released section *MUST* *NOT* be modified.
115
+ If this command produces *no* output, the
116
+ first section is still in-progress/untagged, so use the `N.M.K` from
117
+ the *second* level-2 header as the baseline tag instead. If *no*
118
+ second level-2 header exists (very first, still untagged release),
119
+ skip the baseline tag and check *all* Git commits with the command
120
+ `git log HEAD --numstat --pretty=format:'%h: %s'` instead. Then
117
121
  check all Git commits between `HEAD` and this baseline tag with the
118
122
  command `git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`.
119
123