@rse/ase 0.9.6 → 0.9.8

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 (58) hide show
  1. package/dst/ase-getopt.js +11 -1
  2. package/dst/ase-markdown.js +235 -0
  3. package/dst/ase-service.js +2 -0
  4. package/dst/ase-task.js +22 -20
  5. package/package.json +6 -6
  6. package/plugin/.claude-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/agents/ase-docs-proofread.md +2 -2
  9. package/plugin/meta/ase-constitution.md +7 -0
  10. package/plugin/meta/ase-control.md +24 -3
  11. package/plugin/meta/ase-format-task.md +14 -14
  12. package/plugin/meta/ase-getopt.md +2 -1
  13. package/plugin/meta/ase-skill.md +28 -9
  14. package/plugin/package.json +3 -3
  15. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  16. package/plugin/skills/ase-arch-discover/SKILL.md +18 -9
  17. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  18. package/plugin/skills/ase-code-craft/SKILL.md +47 -40
  19. package/plugin/skills/ase-code-craft/help.md +2 -2
  20. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  21. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  22. package/plugin/skills/ase-code-lint/SKILL.md +16 -8
  23. package/plugin/skills/ase-code-refactor/SKILL.md +47 -40
  24. package/plugin/skills/ase-code-refactor/help.md +2 -2
  25. package/plugin/skills/ase-code-resolve/SKILL.md +48 -40
  26. package/plugin/skills/ase-code-resolve/help.md +2 -2
  27. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  28. package/plugin/skills/ase-docs-distill/help.md +3 -3
  29. package/plugin/skills/ase-docs-proofread/SKILL.md +22 -13
  30. package/plugin/skills/ase-meta-brainstorm/SKILL.md +25 -6
  31. package/plugin/skills/ase-meta-brainstorm/help.md +6 -10
  32. package/plugin/skills/ase-meta-diff/SKILL.md +5 -4
  33. package/plugin/skills/ase-meta-diff/help.md +10 -11
  34. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  35. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  36. package/plugin/skills/ase-meta-review/SKILL.md +3 -3
  37. package/plugin/skills/ase-meta-review/help.md +3 -3
  38. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  39. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  40. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  41. package/plugin/skills/ase-task-condense/SKILL.md +32 -17
  42. package/plugin/skills/ase-task-condense/help.md +1 -1
  43. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  44. package/plugin/skills/ase-task-edit/SKILL.md +58 -36
  45. package/plugin/skills/ase-task-edit/help.md +3 -3
  46. package/plugin/skills/ase-task-grill/SKILL.md +59 -24
  47. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  48. package/plugin/skills/ase-task-implement/SKILL.md +38 -17
  49. package/plugin/skills/ase-task-implement/help.md +1 -1
  50. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  51. package/plugin/skills/ase-task-preflight/SKILL.md +42 -22
  52. package/plugin/skills/ase-task-preflight/help.md +1 -1
  53. package/plugin/skills/ase-task-reboot/SKILL.md +31 -22
  54. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  55. package/plugin/skills/ase-task-view/SKILL.md +19 -8
  56. package/plugin/skills/ase-task-view/help.md +24 -5
  57. package/dst/ase-bash.js +0 -618
  58. package/dst/ase-hello.js +0 -24
@@ -30,7 +30,7 @@ hand-off to implementation or preflight.
30
30
  ignoring *instruction* and stopping skill processing).
31
31
 
32
32
  `--dry`|`-d`:
33
- Generate any *new* plan *without* the `※ VERIFICATION` section.
33
+ Generate any *new* plan *without* the `## VERIFICATION` section.
34
34
  Applies only to freshly generated plans, not to existing plans
35
35
  loaded from disk. When `ase-task-implement` later applies such
36
36
  a plan, it strictly skips the entire verification phase (no
@@ -48,8 +48,8 @@ hand-off to implementation or preflight.
48
48
  `none` (default, interactive answer required), `DONE` (no next
49
49
  step), `GRILL` (hand-over to `ase-task-grill`), `PREFLIGHT`
50
50
  (hand-over to `ase-task-preflight`), or `IMPLEMENT` (hand-over to
51
- `ase-task-implement`). Example: `--next GRILL,DONE` first refines
52
- once, then exits the loop without asking.
51
+ `ase-task-implement`). Example: `--next GRILL,DONE` hands the plan
52
+ off to grilling and forwards `DONE` so grilling exits without asking.
53
53
 
54
54
  ## ARGUMENTS
55
55
 
@@ -22,7 +22,7 @@ Iteratively Grill a Task Plan
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-task-grill"
25
- arg2="--next|-n=(none|DONE|EDIT)...">
25
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -36,9 +36,15 @@ task plan until reaching a shared understanding.
36
36
  Procedure
37
37
  ---------
38
38
 
39
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
40
+ You *MUST* not skip any numbered item during processing!
41
+
42
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
43
+ explicitly requested by this procedure via outputs based on a <template/>!
44
+
39
45
  1. **Determine Task:**
40
46
 
41
- 1. Set <id>$ARGUMENTS</id> initially.
47
+ 1. Set <id><getopt-arguments/></id> initially.
42
48
  Inherit the always existing <ase-task-id/> from the current context.
43
49
  Inherit the always existing <ase-session-id/> from the current context.
44
50
  Do not output anything.
@@ -59,22 +65,34 @@ Procedure
59
65
  </template>
60
66
  </if>
61
67
 
62
- 2. else <if condition="<id/> is NOT empty">
68
+ 2. <elseif condition="<id/> is NOT empty">
63
69
  The argument is neither empty nor a valid task id. As this
64
70
  skill only accepts an optional `[<id>]` argument and *never*
65
71
  a free-text instruction, only output the following <template/>
66
72
  and then immediately *STOP* processing the entire current skill:
67
73
 
68
74
  <template>
69
- ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **ERROR**: expected single `[<id>]` argument
75
+ ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: expected single `[<id>]` argument
70
76
  </template>
71
- </if>
77
+ </elseif>
72
78
 
73
79
  2. **Determine Task Plan:**
74
80
 
75
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
76
- server to load the current task plan content and set <text/> to
77
- the `text` output field of the `ase_task_load` tool call.
81
+ 1. Determine the current task plan content:
82
+
83
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
84
+ Set <text/> to the `text` argument of the most recent
85
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
86
+ *without* calling `ase_task_load` again. Set <status>plan
87
+ reused</status>. Do not output anything.
88
+ </if>
89
+ <else>
90
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
91
+ `ase` MCP server to load the current task plan content and
92
+ set <text/> to the `text` output field of this `ase_task_load`
93
+ tool call. Do not output anything related to this MCP tool
94
+ call. Set <status>plan loaded</status>.
95
+ </else>
78
96
 
79
97
  - If <text/> starts with `ERROR:` or `WARNING:`:
80
98
  Output the following <template/> and then immediately *STOP*
@@ -91,7 +109,7 @@ Procedure
91
109
  Output the following <template/>:
92
110
 
93
111
  <template>
94
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
112
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
95
113
  </template>
96
114
 
97
115
  2. <if condition="<plan/> is empty">
@@ -107,6 +125,11 @@ Procedure
107
125
  *essential aspect* of the task plan in <plan/> *until* reaching a
108
126
  shared understanding and no decisions/questions are left open.
109
127
 
128
+ This especially means, you *MUST* clarify as many aspects as
129
+ necessary to ensure that for at least the most important decisions,
130
+ during a subsequent implementation, no essential freedom of choices
131
+ exist any longer.
132
+
110
133
  For this process, determine the <n/> essential aspects <aspect-N/>
111
134
  (a one or two word long short identifier like `Foo` or `Bar-Baz`)
112
135
  and the corresponding decision/question <question-N/> where a shared
@@ -138,7 +161,7 @@ Procedure
138
161
  decisions one-by-one. Ask the questions <question-N/> and determine
139
162
  corresponding answer <answer-N/>, one at a time.
140
163
 
141
- 1. For each question <question-N/> in the iteration circle <N/>:
164
+ 1. For each question <question-N/> in the iteration cycle <N/>:
142
165
 
143
166
  1. Output the following <template/>:
144
167
 
@@ -167,7 +190,12 @@ Procedure
167
190
  <ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
168
191
  </template>
169
192
 
170
- 3. Finally, update the plan in <plan/> based on all answers <answer-N/>.
193
+ 2. Finally, update the plan in <plan/> based on all answers <answer-N/>.
194
+
195
+ 3. <if condition="<plan/> contains 'Created: <text/>'">
196
+ Set <timestamp-created><text/></timestamp-created> (set
197
+ timestamp-created to extracted text)
198
+ </if>
171
199
 
172
200
  4. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
173
201
  `ase` MCP server and use the `text` field of its response for
@@ -224,20 +252,20 @@ Procedure
224
252
  2. Check the tool <result/> and dispatch accordingly:
225
253
 
226
254
  - If <result/> is `DONE` or `CANCEL`:
227
- Only output the following <template/> and then *STOP*.
255
+ Only output the following <template/> and then *STOP*,
256
+ without output of any further information.
228
257
 
229
258
  <template>
230
259
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
231
260
  </template>
232
261
 
233
262
  - If <result/> is `EDIT`:
234
- Set <args></args> (empty).
263
+ Set <args>--int-reuse-task</args>.
235
264
  <if condition="<getopt-option-next/> is not equal `none`">
236
- Set <args>--next <getopt-option-next/></args> (forward
237
- remaining list tokens to the downstream skill).
265
+ Set <args><args/> --next <getopt-option-next/></args>
238
266
  </if>
239
267
  Only output the following <template/> and then call the
240
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
268
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
241
269
  to invoke the `ase:ase-task-edit` skill in order to *edit*
242
270
  the updated plan. Immediately stop processing the current
243
271
  skill once the `Skill` tool was used.
@@ -247,13 +275,12 @@ Procedure
247
275
  </template>
248
276
 
249
277
  - If <result/> is `PREFLIGHT`:
250
- Set <args></args> (empty).
278
+ Set <args>--int-reuse-task</args>.
251
279
  <if condition="<getopt-option-next/> is not equal `none`">
252
- Set <args>--next <getopt-option-next/></args> (forward
253
- remaining list tokens to the downstream skill).
280
+ Set <args><args/> --next <getopt-option-next/></args>
254
281
  </if>
255
282
  Only output the following <template/> and then call the
256
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
283
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
257
284
  to *apply* the plan.
258
285
 
259
286
  <template>
@@ -261,15 +288,23 @@ Procedure
261
288
  </template>
262
289
 
263
290
  - If <result/> is `IMPLEMENT`:
264
- Set <args></args> (empty).
291
+ Set <args>--int-reuse-task</args>.
265
292
  <if condition="<getopt-option-next/> is not equal `none`">
266
- Set <args>--next <getopt-option-next/></args> (forward
267
- remaining list tokens to the downstream skill).
293
+ Set <args><args/> --next <getopt-option-next/></args>
268
294
  </if>
269
295
  Only output the following <template/> and then call the
270
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
296
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
271
297
  to *apply* the plan.
272
298
 
273
299
  <template>
274
300
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
275
301
  </template>
302
+
303
+ - If <result/> matches `OTHER: <text/>` or is any other
304
+ unrecognized value:
305
+ Treat it as `DONE` (the updated plan is already saved):
306
+ only output the following <template/> and then *STOP*.
307
+
308
+ <template>
309
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
310
+ </template>
@@ -24,7 +24,16 @@ Configure Task Id
24
24
  1. Determine request:
25
25
  <request>$ARGUMENTS</request>
26
26
 
27
- 2. <if condition="<request/> is empty">
27
+ 2. <if condition="<request/> is NOT empty AND <request/> does NOT match the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`">
28
+ Only output the following <template/> and then immediately
29
+ *STOP* processing the entire current skill:
30
+
31
+ <template>
32
+ ⧉ **ASE**: ☻ skill: **ase-task-id**, ▶ ERROR: given task id `<request/>` is not a valid id
33
+ </template>
34
+ </if>
35
+
36
+ 3. <if condition="<request/> is empty">
28
37
  - Call the `ase_task_id(session: "<ase-session-id/>")`
29
38
  tool from the `ase` MCP server and set
30
39
  <ase-task-id/> to its `text` output.
@@ -35,7 +44,7 @@ Configure Task Id
35
44
  </template>
36
45
  </if>
37
46
 
38
- 3. <if condition="<request/> is NOT empty">
47
+ 4. <if condition="<request/> is NOT empty">
39
48
  - Set <ase-task-id><request/></ase-task-id> and
40
49
  call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")`
41
50
  tool from the `ase` MCP server.
@@ -21,7 +21,7 @@ Implement a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-implement"
24
- arg2="--next|-n=(none|DONE|DELETE)...">
24
+ arg2="--next|-n=(none|DONE|DELETE)... --int-reuse-task">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
65
65
  </template>
66
66
  </if>
67
67
 
68
- 2. else <if condition="
68
+ 2. <elseif condition="
69
69
  <instruction/> has the format `<id/>: <text/>` where
70
70
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
71
71
  <text/> is *empty*
@@ -80,9 +80,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
  <template>
81
81
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
82
82
  </template>
83
- </if>
83
+ </elseif>
84
84
 
85
- 3. else <if condition="<instruction/> is NOT empty">
85
+ 3. <elseif condition="<instruction/> is NOT empty">
86
86
  The argument is neither empty nor a valid task id. As this
87
87
  skill only accepts an optional `[<id>]` argument and *never*
88
88
  a free-text instruction, only output the following <template/>
@@ -91,13 +91,25 @@ explicitly requested by this procedure via outputs based on a <template/>!
91
91
  <template>
92
92
  ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: expected single `[<id>]` argument
93
93
  </template>
94
- </if>
94
+ </elseif>
95
95
 
96
96
  2. **Determine Operation**:
97
97
 
98
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
99
- server to load the current task plan content and set <text/> to
100
- the `text` output field of the `ase_task_load` tool call.
98
+ 1. Determine the current task plan content:
99
+
100
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
101
+ Set <text/> to the `text` argument of the most recent
102
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
+ *without* calling `ase_task_load` again. Set <status>plan
104
+ reused</status>. Do not output anything.
105
+ </if>
106
+ <else>
107
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
108
+ `ase` MCP server to load the current task plan content and
109
+ set <text/> to the `text` output field of this `ase_task_load`
110
+ tool call. Do not output anything related to this MCP tool
111
+ call. Set <status>plan loaded</status>.
112
+ </else>
101
113
 
102
114
  - If <text/> starts with `ERROR:` or `WARNING:`:
103
115
  Set <content></content> (set content to empty).
@@ -110,12 +122,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
110
122
  Only output the following <template/>:
111
123
 
112
124
  <template>
113
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
125
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
114
126
  </template>
115
127
 
116
128
  2. If the <content/> is still empty, complain and tell the user to
117
129
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
118
- or `ase-task-edit` skills first to create a task plan.
130
+ or `ase-task-edit` skills first to create a task plan. Then
131
+ immediately stop processing this skill.
119
132
 
120
133
  3. **Create Implementation:**
121
134
 
@@ -131,8 +144,8 @@ explicitly requested by this procedure via outputs based on a <template/>!
131
144
  overrules the implementation draft in the `IMPLEMENTATION DRAFT`
132
145
  section of <content/>.
133
146
 
134
- <if condition="<content/> does NOT contain a `##VERIFICATION` section heading">
135
- The task plan deliberately *omits* the `##VERIFICATION`
147
+ <if condition="<content/> does NOT contain a `## VERIFICATION` section heading">
148
+ The task plan deliberately *omits* the `## VERIFICATION`
136
149
  section. You *MUST* therefore *strictly skip* the entire
137
150
  verification phase after modifying the source files: do *NOT*
138
151
  run any build, do *NOT* run any tests, do *NOT* run any linter,
@@ -189,11 +202,10 @@ explicitly requested by this procedure via outputs based on a <template/>!
189
202
  </template>
190
203
 
191
204
  - If <result/> is `DELETE`:
192
- Set <args></args> (empty).
193
- <if condition="<getopt-option-next/> is not equal `none`">
194
- Set <args>--next <getopt-option-next/></args> (forward
195
- remaining list tokens to the downstream skill).
196
- </if>
205
+ Set <args></args> (empty). Do *not* forward any remaining
206
+ `--next` list tokens, because the `ase:ase-task-delete`
207
+ skill accepts only an optional `[<id>]` argument and no
208
+ `--next` option; remaining tokens are intentionally discarded.
197
209
  Only output the following <template/> and then call the
198
210
  tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
199
211
  to invoke the `ase:ase-task-delete` skill in order to
@@ -204,3 +216,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
204
216
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
205
217
  </template>
206
218
 
219
+ - If <result/> matches `OTHER: <text/>` or is any other
220
+ unrecognized value:
221
+ Treat it as `DONE` (the plan is already implemented):
222
+ only output the following <template/> and then *STOP*.
223
+
224
+ <template>
225
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
226
+ </template>
227
+
@@ -18,7 +18,7 @@ a task plan by modifying the corresponding *artifacts* with a complete
18
18
  section produced by `ase-task-preflight` is used as a hint - the plain
19
19
  plan content always overrules the draft.
20
20
 
21
- If the task plan deliberately *omits* the `※ VERIFICATION` section
21
+ If the task plan deliberately *omits* the `## VERIFICATION` section
22
22
  (as produced by `ase-code-craft`, `ase-code-refactor`,
23
23
  `ase-code-resolve`, or `ase-task-edit` when invoked with `--dry`),
24
24
  the entire verification phase is strictly skipped: no build, tests,
@@ -27,7 +27,7 @@ List Task Plans
27
27
  *List* all available *task plans* of the current project.
28
28
  </objective>
29
29
 
30
- 1. Call the `ase_task_list(verbose: "<getopt-option-verbose/>")` tool from
30
+ 1. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
31
31
  the `ase` MCP server. The result is a structured object with a
32
32
  `tasks` array where each entry has an `id` field, and -- if
33
33
  <getopt-option-verbose/> is `true` -- additionally an `mtime` field
@@ -21,7 +21,7 @@ Preflight a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-preflight"
24
- arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)...">
24
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)... --int-reuse-task">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
65
65
  </template>
66
66
  </if>
67
67
 
68
- 2. else <if condition="
68
+ 2. <elseif condition="
69
69
  <instruction/> has the format `<id/>: <text/>` where
70
70
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
71
71
  <text/> is *empty*
@@ -80,9 +80,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
  <template>
81
81
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
82
82
  </template>
83
- </if>
83
+ </elseif>
84
84
 
85
- 3. else <if condition="<instruction/> is NOT empty">
85
+ 3. <elseif condition="<instruction/> is NOT empty">
86
86
  The argument is neither empty nor a valid task id. As this
87
87
  skill only accepts an optional `[<id>]` argument and *never*
88
88
  a free-text instruction, only output the following <template/>
@@ -91,13 +91,25 @@ explicitly requested by this procedure via outputs based on a <template/>!
91
91
  <template>
92
92
  ⧉ **ASE**: ☻ skill: **ase-task-preflight**, ▶ ERROR: expected single `[<id>]` argument
93
93
  </template>
94
- </if>
94
+ </elseif>
95
95
 
96
96
  2. **Determine Operation:**
97
97
 
98
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
99
- server to load the current task plan content and set <text/> to
100
- the `text` output field of the `ase_task_load` tool call.
98
+ 1. Determine the current task plan content:
99
+
100
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
101
+ Set <text/> to the `text` argument of the most recent
102
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
+ *without* calling `ase_task_load` again. Set <status>plan
104
+ reused</status>. Do not output anything.
105
+ </if>
106
+ <else>
107
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
108
+ `ase` MCP server to load the current task plan content and
109
+ set <text/> to the `text` output field of this `ase_task_load`
110
+ tool call. Do not output anything related to this MCP tool
111
+ call. Set <status>plan loaded</status>.
112
+ </else>
101
113
 
102
114
  - If <text/> starts with `ERROR:` or `WARNING:`:
103
115
  Set <content></content> (set content to empty).
@@ -110,12 +122,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
110
122
  Only output the following <template/>:
111
123
 
112
124
  <template>
113
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
125
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
114
126
  </template>
115
127
 
116
128
  2. If the <content/> is still empty, complain and tell the user to
117
129
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
118
- or `ase-task-edit` skills first to create a task plan.
130
+ or `ase-task-edit` skills first to create a task plan. Then
131
+ immediately stop processing this skill.
119
132
 
120
133
  3. **Create Implementation Draft:**
121
134
 
@@ -126,13 +139,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
126
139
 
127
140
  2. Append this artifact change set <unified-diff/> to the end
128
141
  of the <content/> with the following <template/>. If a section
129
- named `##IMPLEMENTATION DRAFT` already exists from a
142
+ named `## IMPLEMENTATION DRAFT` already exists from a
130
143
  previous run of this skill, *replace* this entire existing
131
144
  section.
132
145
 
133
146
  <template>
134
147
 
135
- ##IMPLEMENTATION DRAFT
148
+ ## IMPLEMENTATION DRAFT
136
149
 
137
150
  ```text
138
151
  <unified-diff/>
@@ -140,12 +153,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
140
153
 
141
154
  </template>
142
155
 
143
- 3. <if condition="<content/> contains '✎ modified:'">
156
+ 3. <if condition="<content/> contains '⚙ Modified:'">
144
157
  Update <timestamp-modified/> with the current time in
145
158
  ISO-style format, which has to be determined by calling the
146
159
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
147
160
  MCP server and use the `text` field of its response. Update
148
- <content/> with the new `✎ modified: **<timestamp-modified/>**`.
161
+ <content/> with the new `Modified: <timestamp-modified/>`.
149
162
  Do not output anything.
150
163
  </if>
151
164
 
@@ -202,13 +215,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
202
215
  </template>
203
216
 
204
217
  - If <result/> is `EDIT`:
205
- Set <args></args> (empty).
218
+ Set <args>--int-reuse-task</args>.
206
219
  <if condition="<getopt-option-next/> is not equal `none`">
207
- Set <args>--next <getopt-option-next/></args> (forward
208
- remaining list tokens to the downstream skill).
220
+ Set <args><args/> --next <getopt-option-next/></args>
209
221
  </if>
210
222
  Only output the following <template/> and then call the
211
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
223
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
212
224
  to invoke the `ase:ase-task-edit` skill in order to *edit*
213
225
  the updated plan. Immediately stop processing the current
214
226
  skill once the `Skill` tool was used.
@@ -218,13 +230,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
218
230
  </template>
219
231
 
220
232
  - If <result/> is `IMPLEMENT`:
221
- Set <args></args> (empty).
233
+ Set <args>--int-reuse-task</args>.
222
234
  <if condition="<getopt-option-next/> is not equal `none`">
223
- Set <args>--next <getopt-option-next/></args> (forward
224
- remaining list tokens to the downstream skill).
235
+ Set <args><args/> --next <getopt-option-next/></args>
225
236
  </if>
226
237
  Only output the following <template/> and then call the
227
- tool `Skill(skill: "ase:ase-task-implement", args: <args/>)`
238
+ tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
228
239
  to invoke the `ase:ase-task-implement` skill in order to
229
240
  *implement* the updated plan. Immediately stop processing
230
241
  the current skill once the `Skill` tool was used.
@@ -233,3 +244,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
233
244
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implement**
234
245
  </template>
235
246
 
247
+ - If <result/> matches `OTHER: <text/>` or is any other
248
+ unrecognized value:
249
+ Treat it as `DONE` (the plan is already preflighted):
250
+ only output the following <template/> and then *STOP*.
251
+
252
+ <template>
253
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
254
+ </template>
255
+
@@ -16,7 +16,7 @@ The `ase-task-preflight` skill performs a *preflight* (dry-run,
16
16
  test-drive) of the *implementation* of a task plan by creating a
17
17
  draft for a corresponding, complete *artifact change set* in
18
18
  *unified diff* format. The draft is appended to the task plan as
19
- a `※ IMPLEMENTATION DRAFT` section (replacing any previous draft).
19
+ an `IMPLEMENTATION DRAFT` section (replacing any previous draft).
20
20
  No source files are modified.
21
21
 
22
22
  After the preflight, the user is asked whether to stop, hand