@rse/ase 0.9.55 → 0.9.57

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/dst/ase-config.js +72 -31
  2. package/dst/ase-getopt.js +3 -1
  3. package/dst/ase-hook.js +5 -3
  4. package/dst/ase-markdown.js +7 -4
  5. package/dst/ase-service.js +1 -1
  6. package/dst/ase-setup.js +4 -2
  7. package/dst/ase-statusline.js +6 -8
  8. package/dst/ase-task.js +37 -11
  9. package/package.json +5 -5
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/.github/plugin/plugin.json +1 -1
  13. package/plugin/agents/ase-code-analyze.md +1 -1
  14. package/plugin/agents/ase-code-lint.md +4 -4
  15. package/plugin/agents/ase-meta-chat.md +1 -1
  16. package/plugin/agents/ase-meta-proximity.md +1 -1
  17. package/plugin/meta/ase-common-code.md +168 -1
  18. package/plugin/meta/ase-common-task.md +31 -13
  19. package/plugin/meta/ase-constitution.md +3 -3
  20. package/plugin/meta/ase-control.md +7 -7
  21. package/plugin/meta/ase-dialog.md +5 -4
  22. package/plugin/meta/ase-format-arch.md +6 -21
  23. package/plugin/meta/ase-format-meta.md +15 -2
  24. package/plugin/meta/ase-format-spec.md +9 -24
  25. package/plugin/meta/ase-format-task.md +2 -2
  26. package/plugin/meta/ase-getopt.md +1 -1
  27. package/plugin/meta/ase-persona.md +3 -3
  28. package/plugin/meta/ase-skill.md +14 -24
  29. package/plugin/meta/ase-tenets.md +5 -5
  30. package/plugin/package.json +2 -2
  31. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
  32. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  33. package/plugin/skills/ase-arch-discover/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  35. package/plugin/skills/ase-code-analyze/help.md +1 -1
  36. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  37. package/plugin/skills/ase-code-craft/help.md +1 -1
  38. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  39. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  40. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  41. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  42. package/plugin/skills/ase-code-resolve/SKILL.md +48 -173
  43. package/plugin/skills/ase-code-resolve/help.md +15 -4
  44. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  45. package/plugin/skills/ase-docs-distill/help.md +1 -1
  46. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  47. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  48. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  49. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  50. package/plugin/skills/ase-meta-changelog/SKILL.md +13 -8
  51. package/plugin/skills/ase-meta-chat/SKILL.md +9 -0
  52. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  53. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  54. package/plugin/skills/ase-meta-config/help.md +3 -2
  55. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  56. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  57. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  58. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  59. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  60. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  61. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  63. package/plugin/skills/ase-meta-review/help.md +2 -2
  64. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  65. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  66. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  67. package/plugin/skills/ase-meta-why/help.md +3 -3
  68. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  69. package/plugin/skills/ase-sync-export/help.md +1 -1
  70. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  71. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  72. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  73. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  74. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  75. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  76. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  77. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  78. package/plugin/skills/ase-task-implement/help.md +1 -1
  79. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  80. package/plugin/skills/ase-task-preflight/SKILL.md +17 -33
  81. package/plugin/skills/ase-task-reboot/SKILL.md +24 -100
  82. package/plugin/skills/ase-task-reboot/help.md +1 -1
  83. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  84. package/dst/ase-guidance.js +0 -89
  85. package/dst/ase-persona.js +0 -87
  86. package/dst/ase-stdout.js +0 -18
@@ -13,7 +13,7 @@ Skill Output
13
13
  the value of a placeholder named `xxx`.
14
14
 
15
15
  - *IMPORTANT*: *All* output is *exclusively* requested through
16
- <template/> sections. You *MUST* *NOT* output anything *EXCEPT* it
16
+ <template/> sections. You *MUST* *NOT* output anything *UNLESS* it
17
17
  is explicitly included in such a <template/> section. Especially,
18
18
  you *MUST* *NOT* output any explanations on your own, unless
19
19
  explicitly requested.
@@ -95,8 +95,8 @@ Skill Output
95
95
 
96
96
  - *Fix conflicts with documented priority*: the
97
97
  recommendation would violate a documented priority
98
- (hot-path, allocation-free, lock-free, latency-
99
- sensitive, sub-µs budget). Either weaken the
98
+ (hot-path, allocation-free, lock-free,
99
+ latency-sensitive, sub-µs budget). Either weaken the
100
100
  recommendation, convert it to a tradeoff, or mark
101
101
  severity `ACCEPTED` with note "priority-conflict
102
102
  accepted".
@@ -113,7 +113,7 @@ Skill Sequential Processing
113
113
  Each `<step id="xxx" [...]>...</step>` corresponds to a
114
114
  `TaskCreate({ subject: "xxx", description: "xxx" })`. In other
115
115
  words, use the text of the `id` attribute of <step/> exactly
116
- *as-is* for both the `subject`, and the `description` fields of
116
+ *as-is* for both the `subject` and the `description` fields of
117
117
  `TaskCreate`.
118
118
 
119
119
  For speed, emit *all* `TaskCreate` calls together in a *single* turn
@@ -121,7 +121,7 @@ Skill Sequential Processing
121
121
  rely on the call order to establish the step order, as the parallel
122
122
  results carry no guaranteed ordering.
123
123
 
124
- Instead, in the *immediately single following* turn, first
124
+ Instead, in the *single immediately following* turn, first
125
125
  reconstruct the step-id-to-taskId mapping: because each task's
126
126
  `subject` equals the originating <step/> `id` (and <step/> ids are
127
127
  unique), match every created task back to its <step/> by comparing
@@ -138,7 +138,7 @@ Skill Sequential Processing
138
138
  predecessor step (with `taskId` <prev/>).
139
139
 
140
140
  - *IMPORTANT*: For each <step/> you *MUST* use the `TaskUpdate` tool
141
- for updating its status *during* processing, once a <step/> finished.
141
+ for updating its status *during* processing, once a <step/> has finished.
142
142
 
143
143
  - *IMPORTANT*: Whenever a skill *stops early* -- because a <step/>
144
144
  instructed you to *STOP* processing (on an error, a cancelled
@@ -151,12 +151,12 @@ Skill Sequential Processing
151
151
 
152
152
  - *IMPORTANT*: You *MUST* *strictly sequentially* execute every <step/> in
153
153
  a <flow/>. You *MUST* not implicitly skip any <step/> during
154
- processing, except you were explicitly requested to do this or the
154
+ processing, unless you were explicitly requested to do this or the
155
155
  step is configured to be a conditional step!
156
156
 
157
157
  - *IMPORTANT*: You *MUST* *strictly sequentially* execute every numbered
158
158
  item in a <step/>. You *MUST* not implicitly skip any numbered item during
159
- processing, except you were explicitly requested to do this!
159
+ processing, unless you were explicitly requested to do this!
160
160
 
161
161
  - *IMPORTANT*: For any <step/> that specifies an *agent* in its
162
162
  `agent="[...]"` XML attribute, you *MUST* use the specified
@@ -252,7 +252,7 @@ Skill Identification
252
252
 
253
253
  - *IMPORTANT*:
254
254
  You *MUST* *NOT* output any summaries, explanations, or next
255
- steps at the end of a skill beside the explicit outputs via any
255
+ steps at the end of a skill besides the explicit outputs via any
256
256
  <template/>.
257
257
 
258
258
  Artifact Boxing Transparency
@@ -291,7 +291,7 @@ Artifact Boxing Transparency
291
291
  - Findings surfaced: *none* (report only the *outcome*)
292
292
  - Internals exposed: *none* (no diffs, no code, no per-artifact explanation)
293
293
 
294
- - *IMPORTANT*: Precedence rule: skill's *explicit* `black` branches
294
+ - *IMPORTANT*: Precedence rule: a skill's *explicit* `black` branches
295
295
  deterministically skip or suppress and *win* over the implicit decisions
296
296
  above. Where no such branches exist, the decisions above apply.
297
297
 
@@ -458,19 +458,6 @@ Template Patterns
458
458
  Do not output anything.
459
459
  </else>
460
460
 
461
- - When `<ase-tpl-boxline><line/></ase-tpl-boxline>` should be expanded, use:
462
-
463
- <if condition="<line/> is not empty">
464
- <template>
465
- │ <line/>
466
- </template>
467
- </if>
468
- <else>
469
- <template>
470
-
471
- </template>
472
- </else>
473
-
474
461
  - When `<ase-tpl-boxed title="<title/>"[ subtitle="<subtitle/>"]><content/></ase-tpl-boxed>`
475
462
  should be expanded use the following helper placeholders and then
476
463
  the following <template/>:
@@ -487,7 +474,10 @@ Template Patterns
487
474
  un-styled text <raw-title/>.
488
475
  - Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
489
476
  times -- clamped to zero so an over-long title never yields a negative count.
490
- - Set <body/> to <content/> with all line-starts prefixed with `│ `.
477
+ - Set <body/> to <content/> with all non-empty lines prefixed with
478
+ `│ ` and all empty lines prefixed with just `│` (so no trailing
479
+ whitespace is produced). Do *not* prefix any line twice -- the
480
+ <content/> itself *MUST* *NOT* contain any `│` prefixes already.
491
481
 
492
482
  <template>
493
483
 
@@ -37,9 +37,9 @@ you *MUST* honor the following so-called **GENERIC TENETS**:
37
37
  - Handle obvious or expected errors near the origin.
38
38
  - Handle theoretical or unexpected errors in parent scopes.
39
39
  - Avoid introducing dedicated state variables for individual error cases.
40
- - If state variables are needed to detect error cases, use minimum
40
+ - If state variables are needed to detect error cases, use the minimum
41
41
  number of those variables only.
42
- - Use minimum number of state variables to span the maximum of error space.
42
+ - Use the minimum number of state variables to span the maximum of error space.
43
43
 
44
44
  - **Surgical Changes**:
45
45
  *Keep changes as small as possible.*
@@ -61,7 +61,7 @@ you *MUST* honor the following so-called **GENERIC TENETS**:
61
61
  - When one concern changes, the change should not ripple into unrelated ones.
62
62
 
63
63
  - **Code Base Alignment**:
64
- *Blend in. New aspect should read as if the existing aspects wrote it.*
64
+ *Blend in. A new aspect should read as if the existing aspects wrote it.*
65
65
  - Follow the established coding style, formatting, and idioms exactly.
66
66
  - Mirror the existing structure, layering, and file organization.
67
67
  - Reuse the prevailing naming conventions, patterns, and libraries.
@@ -150,12 +150,12 @@ you *MUST* honor the following so-called **RECONCILIATION TENETS**:
150
150
  Re-express source facts at the *target's* level of abstraction and
151
151
  altitude; do not copy verbatim across artifact levels. A SPEC states
152
152
  intent, an ARCH states structure, CODE states realization, DOCS
153
- states facts, etc -- align the *meaning*, not the wording.
153
+ states facts, etc. -- align the *meaning*, not the wording.
154
154
 
155
155
  - **Format Conformance**:
156
156
  Keep every formatted target (SPEC, ARCH, TASK) conformant to its
157
157
  format contract (headings, structure, identifiers). Treat CODE,
158
- DOCS, INFR, and OTHR kinds of artifacts as foreign defined, but not
158
+ DOCS, INFR, and OTHR kinds of artifacts as foreign-defined, but not
159
159
  as free-form.
160
160
 
161
161
  - **Alignment Traceability**:
@@ -6,7 +6,7 @@
6
6
  "homepage": "https://ase.tools",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "https://github.com/rse/ase/issues" },
9
- "version": "0.9.55",
9
+ "version": "0.9.57",
10
10
  "license": "Apache-2.0",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -19,7 +19,7 @@
19
19
  "markdownlint-cli2": "0.23.2",
20
20
  "eslint": "10.8.0",
21
21
  "@eslint/markdown": "8.0.3",
22
- "eslint-markdown": "0.12.1"
22
+ "eslint-markdown": "0.13.0"
23
23
  },
24
24
  "engines": {
25
25
  "npm": ">=10.0.0",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-arch-analyze
3
- argument-hint: "[--help|-h] <source-reference>"
3
+ argument-hint: "[--help|-h] [--prefix|-P=<prefix>] <source-reference>"
4
4
  description: Review software architecture, including package cohesion and inter-package coupling
5
5
  user-invocable: true
6
6
  disable-model-invocation: false
@@ -130,7 +130,7 @@ interface quality, quality attributes, and architecture governance.
130
130
  surfaced. *Skip* the entire investigation and reporting: do *not*
131
131
  invoke any `Agent` tool and do *not* read any source, only output
132
132
  the following <template/> and then *SKIP* the remaining steps STEP 2
133
- through STEP 4:
133
+ and STEP 3:
134
134
 
135
135
  <template>
136
136
  <ase-tpl-bullet-normal/> **ARCHITECTURE ANALYSIS**: *suppressed* (`project.boxing` is `black`)
@@ -54,7 +54,7 @@ Analyze a specific module:
54
54
  ❯ /ase-arch-analyze src/core
55
55
  ```
56
56
 
57
- Analyze a module under an own id namespace, yielding `core-P1`, `core-T1`, ...:
57
+ Analyze a module under its own id namespace, yielding `core-P1`, `core-T1`, ...:
58
58
 
59
59
  ```text
60
60
  ❯ /ase-arch-analyze --prefix core src/core
@@ -9,7 +9,7 @@ disable-model-invocation: false
9
9
  effort: high
10
10
  allowed-tools:
11
11
  - "Bash(npm search --json *)"
12
- - "Bash(curl -s https://search.maven.org/*)"
12
+ - "Bash(curl -s *)"
13
13
  - "Skill"
14
14
  - "Agent"
15
15
  ---
@@ -78,8 +78,9 @@ for the technology stack to *provide* the *needed functionality*
78
78
  2. Else, if a file `package.json` is found in the top-level directory
79
79
  of the project, then <stack>JavaScript</stack>.
80
80
 
81
- 3. Else, if a file `build.gradle.kts` or `settings.gradle.kts`
82
- is found in the top-level directory, then <stack>Kotlin</stack>.
81
+ 3. Else, if a file `build.gradle.kts` is found in the top-level directory and
82
+ is applying `kotlin`, `org.jetbrains.kotlin.jvm`, `kotlin-android`,
83
+ or `kotlin-multiplatform` plugins, then <stack>Kotlin</stack>.
83
84
 
84
85
  4. Else, if a file `build.gradle` is found in the top-level directory and
85
86
  is applying `kotlin`, `org.jetbrains.kotlin.jvm`, `kotlin-android`,
@@ -89,8 +90,8 @@ for the technology stack to *provide* the *needed functionality*
89
90
  contains `kotlin-maven-plugin` or `kotlin-stdlib` dependencies, then
90
91
  <stack>Kotlin</stack>.
91
92
 
92
- 6. Else, if a file `pom.xml` or `build.gradle` is found in the top-level directory
93
- of the project, then <stack>Java</stack>.
93
+ 6. Else, if a file `pom.xml`, `build.gradle`, or `build.gradle.kts` is found
94
+ in the top-level directory of the project, then <stack>Java</stack>.
94
95
 
95
96
  7. Else, use <stack>Unknown</stack>.
96
97
 
@@ -123,7 +124,7 @@ for the technology stack to *provide* the *needed functionality*
123
124
  (which alone is governed by <getopt-option-limit/>) has a
124
125
  meaningful set to choose from.
125
126
 
126
- In the to be discovered candidate set of components <component-K/>
127
+ In the to-be-discovered candidate set of components <component-K/>
127
128
  (K=1-C, where C is the merged and deduplicated candidate count),
128
129
  remember the component name as <name-K/>, the
129
130
  official package name as <package-K/>, the latest version as
@@ -178,7 +179,8 @@ for the technology stack to *provide* the *needed functionality*
178
179
  and fetches all metadata in maximum parallel and returns an array
179
180
  of objects `{ name, version, created, updated, repository, stars,
180
181
  downloads, deps, rank }`. For each component <component-K/>
181
- (K=1-C) read from its corresponding entry: <version-K/> from
182
+ (K=1-C) read from its corresponding entry: <name-K/> from `name`
183
+ (unless already known from the discovery above), <version-K/> from
182
184
  `version`, <updated-K/> from `updated`, <created-K/> from
183
185
  `created`, <repository-K/> from `repository`, <stars-K/> from
184
186
  `stars` (numeric or `N.A.`), <downloads-K/> from `downloads`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-analyze
3
- argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(LOW|MEDIUM|HIGH)] <source-reference>"
3
+ argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(LOW|MEDIUM|HIGH)] [--prefix|-P=<prefix>] <source-reference>"
4
4
  description: >
5
5
  Analyze the source code for problems in either the logic and
6
6
  semantics and its related control flow, performance and efficiency,
@@ -92,7 +92,7 @@ Analyze a directory, reporting only `MEDIUM` and `HIGH` problems:
92
92
  ❯ /ase-code-analyze -S MEDIUM src/handlers/
93
93
  ```
94
94
 
95
- Analyze a directory under an own id namespace, yielding `auth-P1`, `auth-P2`, ...:
95
+ Analyze a directory under its own id namespace, yielding `auth-P1`, `auth-P2`, ...:
96
96
 
97
97
  ```text
98
98
  ❯ /ase-code-analyze --prefix auth src/auth/
@@ -138,91 +138,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
138
138
 
139
139
  4. <step id="STEP 4: Choose Feature Crafting 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 *feature approach*, optionally including
152
- some *alternative* feature approaches. Do *not* output anything
153
- 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 feature
184
- approach plus *precise* and *ultra brief and concise*
185
- feature information. Try to keep the number of bullet points
186
- (`○ [...]`) 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 crafting 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 feature 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="feature" arg2="crafting"></expand>
226
142
 
227
143
  </step>
228
144
 
@@ -267,74 +183,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
267
183
 
268
184
  5. Directly pass-through control to the next skill:
269
185
 
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>
186
+ <expand name="code-next-dispatch"></expand>
338
187
 
339
188
  </step>
340
189
 
@@ -56,7 +56,7 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
56
56
  skill. For all other head tokens, the *entire* list is forwarded
57
57
  to `ase-task-edit`, which consumes its head itself. This lets an
58
58
  entire pipeline be pre-scripted in one shot. Recognized tokens at
59
- this skill: `none` (default, hand-off to `ase-task-edit`
59
+ this skill: `none` (default, hand off to `ase-task-edit`
60
60
  interactively), `DONE` (stop), `EDIT` (hand off to
61
61
  `ase-task-edit`), `GRILL` (hand off to `ase-task-grill`),
62
62
  `PREFLIGHT` (hand off to `ase-task-preflight`),
@@ -25,7 +25,7 @@ Explain Source Code
25
25
 
26
26
  <objective>
27
27
  *Analyze* the source code of <getopt-arguments/>, and its directly related source
28
- code and *explain* it in a *brief*, *standardized*, and *concise* way.
28
+ code, and *explain* it in a *brief*, *standardized*, and *concise* way.
29
29
  </objective>
30
30
 
31
31
  <flow>
@@ -126,10 +126,10 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
126
126
  4. <step id="STEP 4: CRUXES and GOTCHAS">
127
127
  **Highlight CRUXES and GOTCHAS**.
128
128
 
129
- First, tell what are the *cruxes* of the code.
129
+ First, tell what the *cruxes* of the code are.
130
130
  Is there something one should really *notice*?
131
131
 
132
- Second, tell what are the gotchas of the code.
132
+ Second, tell what the gotchas of the code are.
133
133
  Is there something one could really *stumble over*?
134
134
 
135
135
  Keep your explanation *brief* and *concise*.
@@ -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