@rse/ase 0.9.61 → 0.9.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-code-lint.md +47 -3
- package/plugin/meta/ase-common-grill.md +89 -0
- package/plugin/meta/ase-dialog.md +6 -0
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/help.md +2 -1
- package/plugin/skills/ase-code-edit/SKILL.md +139 -142
- package/plugin/skills/ase-code-lint/SKILL.md +5 -5
- package/plugin/skills/ase-code-lint/help.md +23 -8
- package/plugin/skills/ase-task-grill/SKILL.md +119 -59
- package/plugin/skills/ase-task-grill/help.md +42 -12
package/package.json
CHANGED
|
@@ -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.
|
|
9
|
+
"version": "0.9.62",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -15,7 +15,7 @@ Workflow
|
|
|
15
15
|
1. Set the requested context: <context>$ARGUMENTS</context>.
|
|
16
16
|
The *first* whitespace-separated token of <context/> is the
|
|
17
17
|
comma-separated *aspect set* <aspects/> (a non-empty subset of the
|
|
18
|
-
aspect ids `A01`...`
|
|
18
|
+
aspect ids `A01`...`A21`). The *remaining* tokens are the source
|
|
19
19
|
code files to check.
|
|
20
20
|
|
|
21
21
|
2. Use the `Read` tool to read all source code files referenced by
|
|
@@ -28,7 +28,7 @@ Workflow
|
|
|
28
28
|
|
|
29
29
|
4. Set <problems/> to empty.
|
|
30
30
|
Then check the read source code for the following aspects (each
|
|
31
|
-
aspect is uniquely identified by its `aspect` id `A01 - XXX`...`
|
|
31
|
+
aspect is uniquely identified by its `aspect` id `A01 - XXX`...`A21
|
|
32
32
|
- XXX`), but *strictly limited* to those aspects whose id is
|
|
33
33
|
contained in the aspect set <aspects/> -- all other aspects are
|
|
34
34
|
*not* checked and their problems are *never* reported:
|
|
@@ -266,6 +266,50 @@ Workflow
|
|
|
266
266
|
*masks* another bug (e.g., unreachable code after a misplaced
|
|
267
267
|
`return` that skips cleanup logic).
|
|
268
268
|
|
|
269
|
+
- **A21 - DOCUMENTATION**:
|
|
270
|
+
Check for *incomplete* and for *excessive* code documentation
|
|
271
|
+
across the following sub-aspects. The yardstick is a *minimal*
|
|
272
|
+
description: one or two lines stating WHAT the construct does,
|
|
273
|
+
optimally written in the *idiomatic documentation convention* of
|
|
274
|
+
the project or the target programming language.
|
|
275
|
+
|
|
276
|
+
- **C1 MISSING-DOCUMENTATION**: functions, methods, classes,
|
|
277
|
+
interfaces, or modules without any documentation comment
|
|
278
|
+
describing their purpose -- *private* and *internal*
|
|
279
|
+
constructs included, not just the public API surface.
|
|
280
|
+
Exclude trivial constructs whose name already fully conveys
|
|
281
|
+
the purpose (plain getters/setters, one-line lambdas,
|
|
282
|
+
delegating overloads) and constructs inheriting the
|
|
283
|
+
documentation of an overridden or implemented declaration.
|
|
284
|
+
Propose *adding* those missing comments.
|
|
285
|
+
|
|
286
|
+
- **C2 EXCESSIVE-DOCUMENTATION**: comments going far beyond
|
|
287
|
+
the minimal description: narrated decision logs ("chose X
|
|
288
|
+
over Y because ..."), change history ("now uses X instead of
|
|
289
|
+
Y"), line-by-line explanations of the obvious, or comment
|
|
290
|
+
blocks substantially longer than the code they describe.
|
|
291
|
+
Propose *condensing* to a brief 1-2 line description (up to
|
|
292
|
+
4 lines only for genuinely non-obvious constraints).
|
|
293
|
+
|
|
294
|
+
- **C3 RESTATING-DOCUMENTATION**: comments merely repeating
|
|
295
|
+
the code or the identifier verbatim without adding any
|
|
296
|
+
information (e.g., "increment i" above `i++`). Propose
|
|
297
|
+
*removing* them.
|
|
298
|
+
|
|
299
|
+
- **C4 DRIFTED-DOCUMENTATION**: comments contradicting the
|
|
300
|
+
code they describe (stale parameter lists, outdated behavior
|
|
301
|
+
claims). Propose *correcting* the *comment* only -- *never*
|
|
302
|
+
change the code under this aspect.
|
|
303
|
+
|
|
304
|
+
Keep intact comments stating a *constraint the code cannot
|
|
305
|
+
show* (brief WHY-comments on non-obvious decisions) -- they are
|
|
306
|
+
neither excessive nor restating.
|
|
307
|
+
|
|
308
|
+
Severity guidance: C1 defaults to MEDIUM for non-trivial
|
|
309
|
+
constructs, else LOW; C2 and C3 default to LOW, escalating to
|
|
310
|
+
MEDIUM when the noise dominates the file; and C4 defaults to
|
|
311
|
+
MEDIUM (it actively misleads).
|
|
312
|
+
|
|
269
313
|
Be conservative - only report clear, well-grounded issues
|
|
270
314
|
that require an actual *code change*. Think twice to avoid
|
|
271
315
|
*false positives*.
|
|
@@ -277,7 +321,7 @@ Workflow
|
|
|
277
321
|
|
|
278
322
|
For *each* found problem which requires a code change:
|
|
279
323
|
|
|
280
|
-
1. Set <aspect/> to the identifier `A01 - XXX`...`
|
|
324
|
+
1. Set <aspect/> to the identifier `A01 - XXX`...`A21 - XXX`,
|
|
281
325
|
indicating the aspect under which the problem was detected.
|
|
282
326
|
|
|
283
327
|
2. Set <severity/> to the string `LOW`, `MEDIUM`, or `HIGH`,
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
|
|
2
|
+
Grill Skill Common Steps
|
|
3
|
+
========================
|
|
4
|
+
|
|
5
|
+
<define name="grill-understanding">
|
|
6
|
+
|
|
7
|
+
- GOAL:
|
|
8
|
+
|
|
9
|
+
Interactively interviewing the user *relentlessly* about every
|
|
10
|
+
*essential aspect* of <arg1/> *until* reaching a shared
|
|
11
|
+
understanding and no major decisions/questions are left open.
|
|
12
|
+
|
|
13
|
+
This especially means that you *MUST* clarify as many aspects as
|
|
14
|
+
necessary to ensure that for at least the most important decisions,
|
|
15
|
+
during a subsequent implementation, no essential freedom of choice
|
|
16
|
+
exists any longer.
|
|
17
|
+
|
|
18
|
+
- FOCUS:
|
|
19
|
+
|
|
20
|
+
Focusing on the following outside-in *Focus Areas*, in order of
|
|
21
|
+
descending importance for the grilling operation:
|
|
22
|
+
|
|
23
|
+
1. *DOMAIN*: Aspects affecting domain-specifics. These
|
|
24
|
+
aspects *MUST* be clarified, as they are about
|
|
25
|
+
the "what" of the solution and they
|
|
26
|
+
non-technically shape the solution noticeably.
|
|
27
|
+
|
|
28
|
+
2. *INTERFACE*: Aspects affecting externally observable
|
|
29
|
+
behavior or interfaces, especially aspects about user (UI)
|
|
30
|
+
and machine (API) interfaces. These aspects *MUST* be
|
|
31
|
+
clarified, as they are externally visible and
|
|
32
|
+
shape the boundary of the solution.
|
|
33
|
+
|
|
34
|
+
3. *ARCHITECTURE*: Aspects affecting software and system
|
|
35
|
+
architecture, especially decisions on structure, wiring,
|
|
36
|
+
placement, or dependencies. These aspects *SHOULD*
|
|
37
|
+
be clarified, as they technically shape the solution noticeably.
|
|
38
|
+
|
|
39
|
+
4. *IMPLEMENTATION*: Aspects affecting any other
|
|
40
|
+
implementation details, especially how <arg1/>
|
|
41
|
+
is realized in the code base. These aspects *CAN* be
|
|
42
|
+
clarified, as they shape technical inner details only.
|
|
43
|
+
|
|
44
|
+
- SEVERITY:
|
|
45
|
+
|
|
46
|
+
The *Focus Area* indicate the severity of the aspect:
|
|
47
|
+
|
|
48
|
+
- severity *MUST* for *DOMAIN* focus area
|
|
49
|
+
- severity *MUST* for *INTERFACE* focus area
|
|
50
|
+
- severity *SHOULD* for *ARCHITECTURE* focus area
|
|
51
|
+
- severity *MAY* for *IMPLEMENTATION* focus area
|
|
52
|
+
|
|
53
|
+
- INDICATORS:
|
|
54
|
+
|
|
55
|
+
Check the following indicators for identifying problematic
|
|
56
|
+
aspects:
|
|
57
|
+
|
|
58
|
+
- *Fuzzy Language*:
|
|
59
|
+
When the user uses vague or overloaded terms instead of
|
|
60
|
+
a precise or canonical term.
|
|
61
|
+
|
|
62
|
+
- *Conflicting Terminology*:
|
|
63
|
+
When the user uses a term that conflicts with the
|
|
64
|
+
existing terminology in the code base.
|
|
65
|
+
|
|
66
|
+
- *Conflicting Code*:
|
|
67
|
+
When the user states how something works, check whether the
|
|
68
|
+
current code state really agrees.
|
|
69
|
+
|
|
70
|
+
- *Non-Concrete Scenarios*:
|
|
71
|
+
When domain relationships are being discussed,
|
|
72
|
+
stress-test them with specific scenarios. Theoretically
|
|
73
|
+
invent realistic scenarios that probe edge cases and
|
|
74
|
+
force the user to be precise about the boundaries
|
|
75
|
+
between concepts.
|
|
76
|
+
|
|
77
|
+
- *Unspecified Architecture Patterns*:
|
|
78
|
+
When the realization of the functionality is known to
|
|
79
|
+
be reasonably realizable with more than one decent
|
|
80
|
+
architecture pattern, but no such pattern was
|
|
81
|
+
mentioned.
|
|
82
|
+
|
|
83
|
+
- *Unspecified Dependencies*:
|
|
84
|
+
When the realization of functionality usually is known
|
|
85
|
+
to be supported by the use of frameworks or libraries,
|
|
86
|
+
but no dependencies on such solutions were mentioned.
|
|
87
|
+
|
|
88
|
+
</define>
|
|
89
|
+
|
|
@@ -36,6 +36,12 @@ following procedure:
|
|
|
36
36
|
description. The second and following lines each provide an
|
|
37
37
|
answer label and an answer description.
|
|
38
38
|
|
|
39
|
+
Parse the first line by splitting it at its *first* `: ` into
|
|
40
|
+
<question-label/> (the text before) and <question-description/>
|
|
41
|
+
(the remaining text, *without* the label). The label is rendered
|
|
42
|
+
*only* as the box subtitle below, so <question-description/>
|
|
43
|
+
*MUST* *NOT* repeat it.
|
|
44
|
+
|
|
39
45
|
Do not output anything in this step!
|
|
40
46
|
|
|
41
47
|
2. Render the custom dialog, collect the user input, and dispatch on the result:
|
package/plugin/package.json
CHANGED
|
@@ -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.
|
|
9
|
+
"version": "0.9.62",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -482,7 +482,7 @@ interface quality, quality attributes, and architecture governance.
|
|
|
482
482
|
nothing and hence emit no output at all):
|
|
483
483
|
|
|
484
484
|
<ase-tpl-hint level="minimal">
|
|
485
|
-
For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve <id-prefix/>P{n}` or `/ase-code-resolve <id-prefix/>T{n}` in the same or even a different session.
|
|
485
|
+
For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve <id-prefix/>P{n}` or `/ase-code-resolve <id-prefix/>T{n}`, or for a direct one-shot fix use `/ase-code-edit <id-prefix/>P{n}` or `/ase-code-edit <id-prefix/>T{n}`, in the same or even a different session.
|
|
486
486
|
</ase-tpl-hint>
|
|
487
487
|
|
|
488
488
|
</step>
|
|
@@ -218,7 +218,7 @@ problems in *performance* and *efficiency*, or problems in *security*.
|
|
|
218
218
|
nothing and hence emit no output at all):
|
|
219
219
|
|
|
220
220
|
<ase-tpl-hint level="minimal">
|
|
221
|
-
For deeper analysis, suggestions on solution approaches and then final problem resolution, use `/ase-code-resolve <id-prefix/>P{n}
|
|
221
|
+
For deeper analysis, suggestions on solution approaches and then final problem resolution, use `/ase-code-resolve <id-prefix/>P{n}`, or for a direct one-shot fix use `/ase-code-edit <id-prefix/>P{n}`, in the same or even a different session.
|
|
222
222
|
</ase-tpl-hint>
|
|
223
223
|
|
|
224
224
|
You *MUST* not output anything else in this STEP 3,
|
|
@@ -52,7 +52,8 @@ problem as a `PROBLEM` entry with severity (`LOW`, `MEDIUM`, `HIGH`) and
|
|
|
52
52
|
inline file/line references (in the performance lens, each entry
|
|
53
53
|
additionally carries an *evidence* and a *trade-off* line), and persists
|
|
54
54
|
results in the `ase` MCP key/value store as `ase-issue-P<n>` entries so
|
|
55
|
-
they can later be resolved via `ase-code-resolve P<n
|
|
55
|
+
they can later be resolved via `ase-code-resolve P<n>` or directly
|
|
56
|
+
fixed via `ase-code-edit P<n>`.
|
|
56
57
|
|
|
57
58
|
## ARGUMENTS
|
|
58
59
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-code-edit
|
|
3
|
-
argument-hint: "[--help|-h] [--mode|-m auto|craft|refactor|resolve] [--grill|-g] [--grill-rounds|-r <n>] [--verify|-v] [--worktree|-w] [--loop|-l] [<query>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--mode|-m auto|craft|refactor|resolve] [--grill|-g] [--grill-rounds|-r <n>] [--verify|-v] [--worktree|-w] [--loop|-l] [<query>|<issue-id>]"
|
|
4
4
|
description: >
|
|
5
5
|
Edit Source Code: Use when the user wants to "edit" the code base in
|
|
6
|
-
one shot from a query
|
|
7
|
-
|
|
8
|
-
isolation.
|
|
6
|
+
one shot from a query or a bare analyzer issue id like "P1", fusing
|
|
7
|
+
crafting, refactoring, and resolving with optional grilling,
|
|
8
|
+
verification, looping, and Git worktree isolation.
|
|
9
9
|
user-invocable: true
|
|
10
10
|
disable-model-invocation: false
|
|
11
11
|
effort: xhigh
|
|
@@ -33,6 +33,7 @@ resolving in one shot -- through the states *querying*, *discovering*,
|
|
|
33
33
|
</objective>
|
|
34
34
|
|
|
35
35
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-grill.md
|
|
36
37
|
|
|
37
38
|
Procedure
|
|
38
39
|
---------
|
|
@@ -114,7 +115,32 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
114
115
|
|
|
115
116
|
</if>
|
|
116
117
|
|
|
117
|
-
2.
|
|
118
|
+
2. <if condition="<query/> matches the regexp `^([a-zA-Z][a-zA-Z0-9_]*-)?[PT]\d+$`">
|
|
119
|
+
|
|
120
|
+
The <query/> is a bare issue identifier (like `P1`, `T1`, or
|
|
121
|
+
`<prefix>-P1`) previously produced by `ase-code-analyze` or
|
|
122
|
+
`ase-arch-analyze`. Set <issue-id><query/></issue-id> and call
|
|
123
|
+
the `ase_kv_get(key: "ase-issue-<issue-id/>")` tool of the
|
|
124
|
+
`ase` MCP server to retrieve the persisted problem description.
|
|
125
|
+
If the returned `text` is non-empty, set <query><text/></query>
|
|
126
|
+
and only output the following <template/>:
|
|
127
|
+
|
|
128
|
+
<template>
|
|
129
|
+
⧉ **ASE**: ✪ skill: **ase-code-edit**, ⇌ issue: **<issue-id/>**, ▶ status: **issue retrieved**
|
|
130
|
+
</template>
|
|
131
|
+
|
|
132
|
+
Otherwise, set <issue-id></issue-id> (empty) and only output the
|
|
133
|
+
following <template/>, then, under `--loop`, continue with the
|
|
134
|
+
*next* iteration at item 3.1 above, or, without `--loop`,
|
|
135
|
+
immediately *STOP* processing the entire current skill:
|
|
136
|
+
|
|
137
|
+
<template>
|
|
138
|
+
⧉ **ASE**: ✪ skill: **ase-code-edit**, ▶ ERROR: no analyzer result exists for issue **<query/>**
|
|
139
|
+
</template>
|
|
140
|
+
|
|
141
|
+
</if>
|
|
142
|
+
|
|
143
|
+
3. Convert the <query/> *fresh* into <todo-what/> -- the
|
|
118
144
|
domain-specific, non-implementation-detail information -- and
|
|
119
145
|
<todo-how/> -- the remaining information -- discarding all
|
|
120
146
|
<todo-what/>/<todo-how/> content of any previous iteration.
|
|
@@ -122,11 +148,11 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
122
148
|
and during later implementation just interpret the query best-effort.
|
|
123
149
|
Do not output anything.
|
|
124
150
|
|
|
125
|
-
|
|
151
|
+
4. Expand the following:
|
|
126
152
|
|
|
127
153
|
<expand name="todo-box" arg1="current state (after querying)"></expand>
|
|
128
154
|
|
|
129
|
-
|
|
155
|
+
5. Set <query></query> (clear the query, so every further `--loop`
|
|
130
156
|
iteration asks for a fresh one). Do not output anything.
|
|
131
157
|
|
|
132
158
|
4. **State: discovering:**
|
|
@@ -144,85 +170,16 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
144
170
|
|
|
145
171
|
1. Understand what "grilling" is about:
|
|
146
172
|
|
|
147
|
-
-
|
|
148
|
-
|
|
149
|
-
Interactively interviewing the user *relentlessly* about every
|
|
150
|
-
*essential aspect* of the edit query in <todo-what/> and
|
|
151
|
-
<todo-how/> *until* reaching a shared understanding and no
|
|
152
|
-
major decisions/questions are left open.
|
|
153
|
-
|
|
154
|
-
This especially means that you *MUST* clarify as many aspects as
|
|
155
|
-
necessary to ensure that for at least the most important decisions,
|
|
156
|
-
during a subsequent implementation, no essential freedom of choice
|
|
157
|
-
exists any longer.
|
|
158
|
-
|
|
159
|
-
- FOCUS:
|
|
160
|
-
|
|
161
|
-
Focusing on the following outside-in *Focus Areas*, in order of
|
|
162
|
-
descending importance for the grilling operation:
|
|
163
|
-
|
|
164
|
-
1. *DOMAIN*: Aspects affecting domain-specifics. These
|
|
165
|
-
aspects *MUST* be clarified, as they are about
|
|
166
|
-
the "what" of the solution and they
|
|
167
|
-
non-technically shape the solution noticeably.
|
|
168
|
-
|
|
169
|
-
2. *INTERFACE*: Aspects affecting externally observable
|
|
170
|
-
behavior or interfaces, especially aspects about user (UI)
|
|
171
|
-
and machine (API) interfaces. These aspects *MUST* be
|
|
172
|
-
clarified, as they are externally visible and
|
|
173
|
-
shape the boundary of the solution.
|
|
174
|
-
|
|
175
|
-
3. *ARCHITECTURE*: Aspects affecting software and system
|
|
176
|
-
architecture, especially decisions on structure, wiring,
|
|
177
|
-
placement, or dependencies. These aspects *SHOULD*
|
|
178
|
-
be clarified, as they technically shape the solution noticeably.
|
|
179
|
-
|
|
180
|
-
4. *IMPLEMENTATION*: Aspects affecting any other
|
|
181
|
-
implementation details, especially how the edit query
|
|
182
|
-
is realized in the code base. These aspects *CAN* be
|
|
183
|
-
clarified, as they shape technical inner details only.
|
|
184
|
-
|
|
185
|
-
- INDICATORS:
|
|
186
|
-
|
|
187
|
-
Check the following indicators for identifying problematic
|
|
188
|
-
aspects:
|
|
189
|
-
|
|
190
|
-
- *Fuzzy Language*:
|
|
191
|
-
When the user uses vague or overloaded terms instead of
|
|
192
|
-
a precise or canonical term.
|
|
193
|
-
|
|
194
|
-
- *Conflicting Terminology*:
|
|
195
|
-
When the user uses a term that conflicts with the
|
|
196
|
-
existing terminology in the code base.
|
|
197
|
-
|
|
198
|
-
- *Conflicting Code*:
|
|
199
|
-
When the user states how something works, check whether the
|
|
200
|
-
current code state really agrees.
|
|
201
|
-
|
|
202
|
-
- *Non-Concrete Scenarios*:
|
|
203
|
-
When domain relationships are being discussed,
|
|
204
|
-
stress-test them with specific scenarios. Theoretically
|
|
205
|
-
invent realistic scenarios that probe edge cases and
|
|
206
|
-
force the user to be precise about the boundaries
|
|
207
|
-
between concepts.
|
|
208
|
-
|
|
209
|
-
- *Unspecified Architecture Patterns*:
|
|
210
|
-
When the realization of the functionality is known to
|
|
211
|
-
be reasonably realizable with more than one decent
|
|
212
|
-
architecture pattern, but no such pattern was
|
|
213
|
-
mentioned.
|
|
214
|
-
|
|
215
|
-
- *Unspecified Dependencies*:
|
|
216
|
-
When the realization of functionality usually is known
|
|
217
|
-
to be supported by the use of frameworks or libraries,
|
|
218
|
-
but no dependencies on such solutions were mentioned.
|
|
173
|
+
<expand name="grill-understanding" arg1="the edit query in <todo-what/> and <todo-how/>"></expand>
|
|
219
174
|
|
|
220
175
|
2. Perform <getopt-option-grill-rounds/> grilling *rounds*,
|
|
221
176
|
numbered <m/> (1-<getopt-option-grill-rounds/>).
|
|
222
177
|
|
|
223
178
|
For each round:
|
|
224
179
|
|
|
225
|
-
1.
|
|
180
|
+
1. INITIALIZE TODO:
|
|
181
|
+
|
|
182
|
+
Explicitly start *from scratch* from *only* the current
|
|
226
183
|
<todo-what/> and <todo-how/> and *forget* all information
|
|
227
184
|
gathered in previous rounds. Set <round-id/> to
|
|
228
185
|
`GRILLING ROUND <m/>/<getopt-option-grill-rounds/>` if
|
|
@@ -230,50 +187,71 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
230
187
|
`GRILLING` otherwise (a single round needs no round
|
|
231
188
|
numbering). Do not output anything.
|
|
232
189
|
|
|
233
|
-
2.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
focus
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
190
|
+
2. DETERMINE QUESTIONS:
|
|
191
|
+
|
|
192
|
+
Determine the questions, comprised of a globally-unique id
|
|
193
|
+
<question-N-id/> of `Q<N/>`, and a very brief but precise
|
|
194
|
+
question text <question-N-text/>. Each question is chosen to
|
|
195
|
+
resolve the open points related to the above understanding
|
|
196
|
+
of grilling, by focusing on the mentioned *Focus Areas*.
|
|
197
|
+
|
|
198
|
+
For <question-N-text/> use the format `Shall...?` for
|
|
199
|
+
questions of focus area `DOMAIN` and `INTERFACE`, the format
|
|
200
|
+
`Should...?` for questions of focus area `ARCHITECTURE`,
|
|
201
|
+
and the format `May...?` for questions of focus area
|
|
202
|
+
`IMPLEMENTATION`.
|
|
203
|
+
|
|
204
|
+
In every <question-N-text/>, encode all *literal aspects*
|
|
205
|
+
-- file and directory paths, identifiers, symbols, types,
|
|
206
|
+
commands, options, configuration keys, and literal values --
|
|
207
|
+
with backticks.
|
|
208
|
+
|
|
209
|
+
Keep every <question-N-text/> at most *200 characters* long
|
|
210
|
+
-- compact the text until it fits --, as a longer question
|
|
211
|
+
overflows its table cell and silently degrades the entire
|
|
212
|
+
table into a plain text rendering.
|
|
213
|
+
|
|
214
|
+
3. DETERMINE CONTEXT:
|
|
215
|
+
|
|
216
|
+
For each question, determine its focus area
|
|
217
|
+
<context-N-focus/> from the mentioned *Focus Areas*, a 1-3
|
|
218
|
+
word hint <context-N-topic/>, describing what the question
|
|
219
|
+
is about, and a <context-N-severity/>, describing how
|
|
220
|
+
important this question is.
|
|
221
|
+
|
|
222
|
+
Set <context-N-id/> to `DOM` for <context-N-focus/> of
|
|
223
|
+
`DOMAIN`, `IFC` for <context-N-focus/> of `INTERFACE`, `ARC`
|
|
224
|
+
for <context-N-focus/> of `ARCHITECTURE`, and `IMP` for
|
|
225
|
+
<context-N-focus/> of `IMPLEMENTATION`.
|
|
226
|
+
|
|
227
|
+
4. SORT QUESTIONS:
|
|
228
|
+
|
|
229
|
+
Finally, *sort* the questions by descending focus area
|
|
230
|
+
order -- first all `DOMAIN`, then all `INTERFACE`, then all
|
|
231
|
+
`ARCHITECTURE`, and then all `IMPLEMENTATION` ones -- and
|
|
232
|
+
renumber <N/> according to this order. Truncate the list
|
|
233
|
+
after a maximum of 10 questions and set <n/> to the number
|
|
234
|
+
of remaining questions. Do not output anything.
|
|
235
|
+
|
|
236
|
+
Finally, assemble the <question-N/> out of
|
|
237
|
+
`**<question-N-id/>** ▶ **<context-N-id/>** ▷
|
|
238
|
+
**<context-N-topic/>**: <question-N-text/>`.
|
|
239
|
+
|
|
240
|
+
5. DETERMINE ANSWERS:
|
|
241
|
+
|
|
242
|
+
For all remaining <question-N/>, check the code base and
|
|
243
|
+
your world knowledge to find *two to three* grounded answer
|
|
244
|
+
alternatives <answer-N-K/> with an id <answer-N-K-id/>
|
|
245
|
+
of `A<K/>`, a 1-3 word label <answer-N-K-label/>, and
|
|
246
|
+
an ultra brief description <answer-N-K-description/> of
|
|
247
|
+
at most *10 words*. For the answer which reflects the
|
|
248
|
+
current <todo-what/>/<todo-how/> understanding, append
|
|
249
|
+
` ⚑` to its <answer-N-K-label/>.
|
|
250
|
+
|
|
251
|
+
Assemble an <answer-N/> out of `**<answer-N-1-id/>**
|
|
252
|
+
▶ **<answer-N-1-label/>**: <answer-N-1-description/>,
|
|
253
|
+
**<answer-N-2-id/>** ▶ **<answer-N-2-label/>**:
|
|
254
|
+
<answer-N-2-description/>[, ...]`.
|
|
277
255
|
|
|
278
256
|
Keep every assembled <answer-N/> at most *240 characters*
|
|
279
257
|
long -- drop the least relevant alternative and compact the
|
|
@@ -281,7 +259,9 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
281
259
|
its table cell and silently degrades the entire table into a
|
|
282
260
|
plain text rendering.
|
|
283
261
|
|
|
284
|
-
|
|
262
|
+
6. INTERACTIVE DIALOG:
|
|
263
|
+
|
|
264
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
285
265
|
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
286
266
|
custom dialog according to the expanded `custom-dialog`
|
|
287
267
|
definition. You *MUST* closely follow this definition. The
|
|
@@ -289,8 +269,8 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
289
269
|
`SKIP GRILLING` and `STOP SKILL`, dispatched as follows:
|
|
290
270
|
|
|
291
271
|
- If a <result/> is `SKIP GRILLING` or `CANCEL`, ask no
|
|
292
|
-
further questions, continue with item
|
|
293
|
-
the answers gathered so far), and after item
|
|
272
|
+
further questions, continue with item 7 below (merging
|
|
273
|
+
the answers gathered so far), and after item 8 skip all
|
|
294
274
|
remaining rounds and continue with the *implementing*
|
|
295
275
|
state.
|
|
296
276
|
|
|
@@ -305,9 +285,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
305
285
|
1. Output only the following <template/> -- it lists *all*
|
|
306
286
|
questions of the round up-front, one table row per
|
|
307
287
|
aspect, so the subsequent dialog only has to ask for the
|
|
308
|
-
combined answer. Align all column edges of the table.
|
|
309
|
-
<getopt-option-grill-rounds/> is equal `1`, *omit* the
|
|
310
|
-
leading `<round-id/>` line.
|
|
288
|
+
combined answer. Align all column edges of the table.
|
|
311
289
|
|
|
312
290
|
In every table cell you *MUST* escape each literal pipe
|
|
313
291
|
character outside a code span as `\|` and you *MUST*
|
|
@@ -317,13 +295,16 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
317
295
|
entire table into a plain text rendering:
|
|
318
296
|
|
|
319
297
|
<template>
|
|
320
|
-
⧉ **ASE**: <round-id/>:
|
|
298
|
+
⧉ **ASE**: <round-id/>: *Relentless Interviewing Until Clarity*
|
|
299
|
+
|
|
300
|
+
| QUESTION | ANSWERS |
|
|
301
|
+
| ------------- | ----------- |
|
|
302
|
+
| <question-1/> | <answer-1/> |
|
|
303
|
+
| <question-2/> | <answer-2/> |
|
|
304
|
+
| [...] | [...] |
|
|
321
305
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
| **Q1** | <focus-area-1/> ▶ <topic-1/> | **<question-1/>** | <answer-1/> |
|
|
325
|
-
| **Q2** | <focus-area-2/> ▶ <topic-2/> | **<question-2/>** | <answer-2/> |
|
|
326
|
-
| [..] | [...] | [...] | [...] |
|
|
306
|
+
Legend: **DOM**: Domain (MUST), **IFC**: Interface (MUST), **ARC**: Architecture (SHOULD), **IMP**: Implementation (MAY)
|
|
307
|
+
**Qn**: global question id, **An**: question-local answer id, ⚑: current decision state
|
|
327
308
|
</template>
|
|
328
309
|
|
|
329
310
|
2. Show a custom dialog. Its only answer options are the
|
|
@@ -331,7 +312,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
331
312
|
*one* free-text reply:
|
|
332
313
|
|
|
333
314
|
<expand name="custom-dialog" arg1="--other">
|
|
334
|
-
<round-id/>: What is your (combined) answer to all (or a subset) of the above questions? (keywords are sufficient)
|
|
315
|
+
<round-id/>: What is your (combined) answer to all (or a subset) of the above questions? (keywords or `Qn:An` references are sufficient)
|
|
335
316
|
SKIP GRILLING: skip all remaining grilling and continue with the implementation
|
|
336
317
|
STOP SKILL: stop the entire skill immediately
|
|
337
318
|
</expand>
|
|
@@ -342,11 +323,15 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
342
323
|
combined free-text answers to all questions of the
|
|
343
324
|
round.
|
|
344
325
|
|
|
345
|
-
|
|
346
|
-
|
|
326
|
+
7. MERGE ANSWERS INTO TODO:
|
|
327
|
+
|
|
328
|
+
Merge all gathered answers in <result/> of the round -- the
|
|
329
|
+
combined reply -- *exclusively* back into <todo-what/> and
|
|
347
330
|
<todo-how/>. Do not output anything.
|
|
348
331
|
|
|
349
|
-
|
|
332
|
+
8. SHOW CURRENT TODO:
|
|
333
|
+
|
|
334
|
+
Set <round-suffix/> to
|
|
350
335
|
` round <m/>/<getopt-option-grill-rounds/>` if
|
|
351
336
|
<getopt-option-grill-rounds/> is greater than 1, or to
|
|
352
337
|
empty otherwise, and expand the following -- this
|
|
@@ -363,6 +348,10 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
363
348
|
`resolve`: Set <task-kind/> to `CRAFTING`, `REFACTORING`,
|
|
364
349
|
or `RESOLVING` correspondingly.
|
|
365
350
|
|
|
351
|
+
- Else if <issue-id/> is not empty (`auto` with a retrieved
|
|
352
|
+
analyzer issue): Set <task-kind/> to `RESOLVING`, as the
|
|
353
|
+
edit fixes a reported problem.
|
|
354
|
+
|
|
366
355
|
- Else (`auto`): *Infer* the <task-kind/> from <todo-what/> and
|
|
367
356
|
<todo-how/>: set to `RESOLVING` if the edit predominantly
|
|
368
357
|
fixes a defect, set to `REFACTORING` if it predominantly
|
|
@@ -447,7 +436,15 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
447
436
|
user keeps full control over the final commit.
|
|
448
437
|
</if>
|
|
449
438
|
|
|
450
|
-
4.
|
|
439
|
+
4. <if condition="<issue-id/> is not empty">
|
|
440
|
+
Call the `ase_kv_delete(key: "ase-issue-<issue-id/>")` tool of
|
|
441
|
+
the `ase` MCP server to remove the now-resolved analyzer result
|
|
442
|
+
from the key/value store, then set <issue-id></issue-id> (empty),
|
|
443
|
+
so every further `--loop` iteration starts without an issue.
|
|
444
|
+
Do not output anything.
|
|
445
|
+
</if>
|
|
446
|
+
|
|
447
|
+
5. Output only the following <template/>. You *MUST* *NOT* output a
|
|
451
448
|
change summary, a list of modified artifacts, a rationale, or a
|
|
452
449
|
unified diff of the changes -- *independent* of
|
|
453
450
|
<ase-project-boxing/>, whose exposure rules are explicitly
|
|
@@ -467,7 +464,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
|
|
|
467
464
|
1. Verify whether the implementation fulfills <todo-what/> and
|
|
468
465
|
<todo-how/> by running available verification commands
|
|
469
466
|
(build, tests, linter, type-checker)
|
|
470
|
-
<if condition="
|
|
467
|
+
<if condition="<worktree-dir/> is not empty">
|
|
471
468
|
, each with <worktree-dir/> as its working directory
|
|
472
469
|
</if>.
|
|
473
470
|
|
|
@@ -20,7 +20,7 @@ Lint Source Code
|
|
|
20
20
|
|
|
21
21
|
<expand name="getopt"
|
|
22
22
|
arg1="ase-code-lint"
|
|
23
|
-
arg2="--auto|-a --severity|-S=(LOW|MEDIUM|HIGH) --include|-i=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20)... --exclude|-e=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20)...">
|
|
23
|
+
arg2="--auto|-a --severity|-S=(LOW|MEDIUM|HIGH) --include|-i=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)... --exclude|-e=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)...">
|
|
24
24
|
$ARGUMENTS
|
|
25
25
|
</expand>
|
|
26
26
|
|
|
@@ -53,16 +53,16 @@ related to a set of code quality aspects.
|
|
|
53
53
|
<getopt-option-include/> and <getopt-option-exclude/> as
|
|
54
54
|
comma-separated token lists, silently dropping the `none` sentinel
|
|
55
55
|
and any empty token. If a token <token/> is *not* one of the aspect
|
|
56
|
-
ids `A01`...`
|
|
56
|
+
ids `A01`...`A21`, only output the following <template/> and then
|
|
57
57
|
*STOP* the entire flow (do not perform any further steps):
|
|
58
58
|
|
|
59
59
|
<template>
|
|
60
60
|
⧉ **ASE**: ✪ skill: **ase-code-lint**, ▶ ERROR: invalid aspect id: **<token/>**
|
|
61
61
|
</template>
|
|
62
62
|
|
|
63
|
-
Otherwise set <aspects/> to *all* twenty aspect ids `A01`...`
|
|
63
|
+
Otherwise set <aspects/> to *all* twenty-one aspect ids `A01`...`A21`
|
|
64
64
|
if both lists are empty, to the *include* list if only it is
|
|
65
|
-
non-empty, to all twenty *minus* the *exclude* list if only it is
|
|
65
|
+
non-empty, to all twenty-one *minus* the *exclude* list if only it is
|
|
66
66
|
non-empty, and to the *include* list *minus* the *exclude* list if
|
|
67
67
|
both are non-empty. If the resulting <aspects/> is *empty*, only
|
|
68
68
|
output the following <template/> and then *STOP* the entire flow
|
|
@@ -143,7 +143,7 @@ related to a set of code quality aspects.
|
|
|
143
143
|
|
|
144
144
|
Use the following <template/> to output a summary of the detected
|
|
145
145
|
problems in <problems/> (if any were found), in the original aspect
|
|
146
|
-
ordering `A01 - XXX`...`
|
|
146
|
+
ordering `A01 - XXX`...`A21 - XXX`.
|
|
147
147
|
|
|
148
148
|
<template>
|
|
149
149
|
<ase-tpl-bullet-secondary/> **LINT SUMMARY**:
|
|
@@ -27,22 +27,31 @@ correction interactively (or refine it via a free-text hint, which
|
|
|
27
27
|
re-proposes the correction without limit) or - with `--auto` - applies
|
|
28
28
|
all corrections automatically.
|
|
29
29
|
|
|
30
|
-
By default all twenty code quality aspects are checked. The `--include`
|
|
30
|
+
By default all twenty-one code quality aspects are checked. The `--include`
|
|
31
31
|
and `--exclude` options narrow this to an *effective aspect set*: with
|
|
32
32
|
`--include` only, exactly the listed aspects are checked; with
|
|
33
33
|
`--exclude` only, all aspects except the listed ones; with both, the
|
|
34
34
|
included ones minus the excluded ones. An unknown aspect id, or a
|
|
35
35
|
combination which cancels out to an empty set, aborts the skill with an
|
|
36
|
-
error. The twenty aspect ids are:
|
|
36
|
+
error. The twenty-one aspect ids are:
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
|
-
A01 FORMATTING
|
|
40
|
-
A02 COMPREHENSION
|
|
41
|
-
A03 CLEANLINESS
|
|
42
|
-
A04 SPELLING
|
|
43
|
-
A05 COMPLEXITY
|
|
39
|
+
A01 FORMATTING A07 PATTERNS A13 MEMORY-LEAK A19 FLOW
|
|
40
|
+
A02 COMPREHENSION A08 COMPLICATEDNESS A14 CONCURRENCY A20 DEAD-CODE
|
|
41
|
+
A03 CLEANLINESS A09 CONCISENESS A15 PERFORMANCE A21 DOCUMENTATION
|
|
42
|
+
A04 SPELLING A10 SMELLS A16 SECURITY
|
|
43
|
+
A05 COMPLEXITY A11 TYPING A17 ARCHITECTURE
|
|
44
|
+
A06 REDUNDANCY A12 ERROR-HANDLING A18 LOGIC
|
|
44
45
|
```
|
|
45
46
|
|
|
47
|
+
The `A21 DOCUMENTATION` aspect checks the code documentation in *both*
|
|
48
|
+
directions: it flags functions, methods, classes, and modules - *private
|
|
49
|
+
ones included* - which lack a minimal 1-2 line description in the
|
|
50
|
+
idiomatic documentation convention of the target language, *and* it
|
|
51
|
+
flags excessive comments (narrated decision logs, change history,
|
|
52
|
+
line-by-line explanations of the obvious), comments merely restating
|
|
53
|
+
the code, and comments contradicting the code.
|
|
54
|
+
|
|
46
55
|
## OPTIONS
|
|
47
56
|
|
|
48
57
|
`--auto`|`-a`:
|
|
@@ -60,7 +69,7 @@ A05 COMPLEXITY A10 SMELLS A15 PERFORMANCE A20 DEAD-CODE
|
|
|
60
69
|
`--include`|`-i`=*aspect*[`,`...]:
|
|
61
70
|
Restrict the checked code quality aspects to the given
|
|
62
71
|
comma-separated list of aspect ids (e.g. `A01,A04`). Without this
|
|
63
|
-
option, all twenty aspects are checked.
|
|
72
|
+
option, all twenty-one aspects are checked.
|
|
64
73
|
|
|
65
74
|
`--exclude`|`-e`=*aspect*[`,`...]:
|
|
66
75
|
Remove the given comma-separated list of aspect ids from the checked
|
|
@@ -104,6 +113,12 @@ Lint a directory for all aspects except dead code:
|
|
|
104
113
|
❯ /ase-code-lint --exclude A20 src/handlers/
|
|
105
114
|
```
|
|
106
115
|
|
|
116
|
+
Lint a directory for the documentation aspect only:
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
❯ /ase-code-lint -i A21 src/handlers/
|
|
120
|
+
```
|
|
121
|
+
|
|
107
122
|
## SEE ALSO
|
|
108
123
|
|
|
109
124
|
[`ase-code-analyze`](../ase-code-analyze/help.md), [`ase-code-resolve`](../ase-code-resolve/help.md), [`ase-code-refactor`](../ase-code-refactor/help.md),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-task-grill
|
|
3
|
-
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--rounds|-r <n>] [--next|-n <option>[,...]] [<id>]"
|
|
4
4
|
description: >
|
|
5
5
|
Interview the user relentlessly about the task plan until reaching a
|
|
6
6
|
shared understanding, resolving each branch of the question decision
|
|
@@ -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|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
|
|
25
|
+
arg2="--rounds|-r=1 --next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
|
|
26
26
|
$ARGUMENTS
|
|
27
27
|
</expand>
|
|
28
28
|
|
|
@@ -33,6 +33,7 @@ task plan until reaching a shared understanding.
|
|
|
33
33
|
|
|
34
34
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
35
35
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-grill.md
|
|
36
37
|
|
|
37
38
|
Procedure
|
|
38
39
|
---------
|
|
@@ -52,7 +53,15 @@ Set <args>--int-reuse-task</args>.
|
|
|
52
53
|
Inherit the always existing <ase-session-id/> from the current context.
|
|
53
54
|
Do not output anything.
|
|
54
55
|
|
|
55
|
-
2.
|
|
56
|
+
2. If <getopt-option-rounds/> is not a positive integer,
|
|
57
|
+
only output the following <template/> and then immediately
|
|
58
|
+
*STOP* processing the entire current skill:
|
|
59
|
+
|
|
60
|
+
<template>
|
|
61
|
+
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--rounds` value: **<getopt-option-rounds/>**
|
|
62
|
+
</template>
|
|
63
|
+
|
|
64
|
+
3. React on task id:
|
|
56
65
|
|
|
57
66
|
<expand name="task-react-id" arg1="ase-task-grill"></expand>
|
|
58
67
|
|
|
@@ -71,62 +80,97 @@ Set <args>--int-reuse-task</args>.
|
|
|
71
80
|
|
|
72
81
|
3. **Iterate Over Task Plan Aspects:**
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
*essential aspect* of the task plan in <task-content/> *until* reaching a
|
|
76
|
-
shared understanding and no decisions/questions are left open.
|
|
77
|
-
|
|
78
|
-
This especially means that you *MUST* clarify as many aspects as
|
|
79
|
-
necessary to ensure that for at least the most important decisions,
|
|
80
|
-
during a subsequent implementation, no essential freedom of choice
|
|
81
|
-
exists any longer.
|
|
82
|
-
|
|
83
|
-
For this process, determine the <n/> essential aspects <aspect-N/>
|
|
84
|
-
(a one- or two-word-long short identifier like `Foo` or `Bar-Baz`)
|
|
85
|
-
and the corresponding decision/question <question-N/> where a shared
|
|
86
|
-
understanding is required.
|
|
83
|
+
1. Understand what "grilling" is about:
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
aspects:
|
|
85
|
+
<expand name="grill-understanding" arg1="the task plan in <task-content/>"></expand>
|
|
90
86
|
|
|
91
|
-
-
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
2. Perform <getopt-option-rounds/> grilling *rounds*, numbered
|
|
88
|
+
<m/> (1-<getopt-option-rounds/>). Each round starts *from
|
|
89
|
+
scratch* from *only* the *current* <task-content/> -- as
|
|
90
|
+
updated by all previous rounds -- and *forgets* all questions
|
|
91
|
+
and answers gathered in previous rounds.
|
|
94
92
|
|
|
95
|
-
|
|
96
|
-
When the user uses a term that conflicts with the existing
|
|
97
|
-
terminology in the code base.
|
|
93
|
+
For each round:
|
|
98
94
|
|
|
99
|
-
|
|
100
|
-
When the user states how something works, check whether the
|
|
101
|
-
current code state really agrees.
|
|
95
|
+
1. INITIALIZE ROUND:
|
|
102
96
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
concepts.
|
|
97
|
+
Set <round-id/> to `GRILLING ROUND <m/>/<getopt-option-rounds/>`
|
|
98
|
+
if <getopt-option-rounds/> is greater than 1, or to
|
|
99
|
+
`GRILLING` otherwise (a single round needs no round
|
|
100
|
+
numbering). Then output only the following <template/>:
|
|
108
101
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
the corresponding answer <answer-N/>, one at a time.
|
|
102
|
+
<template>
|
|
103
|
+
⧉ **ASE**: <round-id/>: *Relentless Interviewing Until Clarity*
|
|
104
|
+
</template>
|
|
113
105
|
|
|
114
|
-
|
|
106
|
+
2. DETERMINE QUESTIONS:
|
|
107
|
+
|
|
108
|
+
Determine the essential aspects <aspect-N/> (a one- or
|
|
109
|
+
two-word-long short identifier like `Foo` or `Bar-Baz`, also
|
|
110
|
+
serving as the topic hint) and the corresponding, very brief
|
|
111
|
+
but precise decision/question <question-N/> where a shared
|
|
112
|
+
understanding is required. Each question is chosen to
|
|
113
|
+
resolve the open points related to the above understanding
|
|
114
|
+
of grilling, by focusing on the mentioned *Focus Areas* and
|
|
115
|
+
checking the mentioned *Indicators*.
|
|
116
|
+
|
|
117
|
+
For <question-N/> use the format `Shall...?` for
|
|
118
|
+
questions of focus area `DOMAIN` and `INTERFACE`, the format
|
|
119
|
+
`Should...?` for questions of focus area `ARCHITECTURE`,
|
|
120
|
+
and the format `May...?` for questions of focus area
|
|
121
|
+
`IMPLEMENTATION`.
|
|
122
|
+
|
|
123
|
+
In every <question-N/>, encode all *literal aspects*
|
|
124
|
+
-- file and directory paths, identifiers, symbols, types,
|
|
125
|
+
commands, options, configuration keys, and literal values --
|
|
126
|
+
with backticks. Do not output anything.
|
|
127
|
+
|
|
128
|
+
3. DETERMINE CONTEXT:
|
|
129
|
+
|
|
130
|
+
For each question, determine its focus area
|
|
131
|
+
<context-N-focus/> from the mentioned *Focus Areas*.
|
|
132
|
+
<context-N-severity/>, describing how important this
|
|
133
|
+
question is.
|
|
134
|
+
|
|
135
|
+
4. SORT QUESTIONS:
|
|
136
|
+
|
|
137
|
+
Create a decisions/questions tree for the questions,
|
|
138
|
+
capturing the dependencies between the decisions. Then
|
|
139
|
+
*sort* the questions *primarily* by descending focus area
|
|
140
|
+
order -- first all `DOMAIN`, then all `INTERFACE`, then all
|
|
141
|
+
`ARCHITECTURE`, and then all `IMPLEMENTATION` ones -- and
|
|
142
|
+
*secondarily*, within each focus area, by the decision tree
|
|
143
|
+
order, so that each decision is asked *after* the decisions
|
|
144
|
+
it depends on. Renumber <N/> according to this order.
|
|
145
|
+
Truncate the list after a maximum of 10 questions and set
|
|
146
|
+
<n/> to the number of remaining questions. Do not output
|
|
147
|
+
anything.
|
|
148
|
+
|
|
149
|
+
5. For each question <question-N/> in the iteration cycle <N/>,
|
|
150
|
+
*one at a time*:
|
|
151
|
+
|
|
152
|
+
1. Output the following <template/>:
|
|
115
153
|
|
|
116
|
-
|
|
154
|
+
<template>
|
|
155
|
+
<ase-tpl-bullet-signal/> ASPECT <N/>/<n/> ▶ **<context-N-focus/>** (<context-N-severity/>) ▷ **<aspect-N/>**
|
|
156
|
+
</template>
|
|
117
157
|
|
|
118
|
-
|
|
119
|
-
<ase-tpl-bullet-signal/> ASPECT <N/>/<n/>: **<aspect-N/>**, QUESTION: **<question-N/>**
|
|
120
|
-
</template>
|
|
158
|
+
2. Determine the answer alternatives:
|
|
121
159
|
|
|
122
|
-
|
|
160
|
+
1. Check the <task-content/> for the answer <answer-N-1/>,
|
|
161
|
+
which reflects the current plan.
|
|
123
162
|
|
|
124
|
-
|
|
163
|
+
2. Check the code base and your world knowledge and
|
|
164
|
+
use this information to find *up to three* grounded
|
|
165
|
+
alternative answers <answer-N-K/> (K={2,3,4}), so there
|
|
166
|
+
are between two and four answer options in total.
|
|
125
167
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
168
|
+
3. For each <answer-N-K/> (K={1,2,3,4}) determine
|
|
169
|
+
a 1-3 word label <answer-N-K-label/>, and an
|
|
170
|
+
ultra brief description <answer-N-K-description/>
|
|
171
|
+
of at most *10 words*. Prepend `⚑ ` to the
|
|
172
|
+
<answer-N-K-description/> which reflects the current
|
|
173
|
+
plan. Do not output anything.
|
|
130
174
|
|
|
131
175
|
3. In the following, you *MUST* *NOT* use your built-in
|
|
132
176
|
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
@@ -135,30 +179,46 @@ Set <args>--int-reuse-task</args>.
|
|
|
135
179
|
|
|
136
180
|
Let the user select the <answer-N/> out of the answer
|
|
137
181
|
alternatives <answer-N-K/> by raising a question with the
|
|
138
|
-
following custom dialog
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
`⚝ **CURRENT PLAN** ⚝ `. Emit only the answer lines for the
|
|
143
|
-
alternatives <answer-N-K/> you actually determined in the
|
|
144
|
-
previous step (between two and four lines in total):
|
|
182
|
+
following custom dialog. Emit only the answer lines for
|
|
183
|
+
the alternatives <answer-N-K/> you actually determined in
|
|
184
|
+
the previous step (between two and four lines in total),
|
|
185
|
+
followed by the fixed `SKIP GRILLING` answer option:
|
|
145
186
|
|
|
146
187
|
<expand name="custom-dialog" arg1="--other">
|
|
147
188
|
<aspect-N/>: <question-N/>
|
|
148
|
-
<answer-N-1-label/>:
|
|
149
|
-
<answer-N-
|
|
189
|
+
<answer-N-1-label/>: <answer-N-1-description/>
|
|
190
|
+
<answer-N-2-label/>: <answer-N-2-description/>
|
|
150
191
|
[...]
|
|
192
|
+
SKIP GRILLING: skip all remaining grilling and continue with the plan update
|
|
151
193
|
</expand>
|
|
152
194
|
|
|
153
|
-
|
|
195
|
+
Check the <result/> and dispatch accordingly:
|
|
196
|
+
|
|
197
|
+
- If <result/> is `CANCEL`, only output the following
|
|
198
|
+
<template/> and then immediately *STOP* processing
|
|
199
|
+
the entire current skill, leaving the plan *untouched*:
|
|
200
|
+
|
|
201
|
+
<template>
|
|
202
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **grilling stopped**
|
|
203
|
+
</template>
|
|
204
|
+
|
|
205
|
+
- If <result/> is `SKIP GRILLING`, ask no further
|
|
206
|
+
questions, continue with item 6 below (updating the
|
|
207
|
+
plan with the answers gathered so far), and after
|
|
208
|
+
item 6 skip all remaining rounds and continue with
|
|
209
|
+
item 3.3 below.
|
|
210
|
+
|
|
211
|
+
- Otherwise, strip any leading `OTHER: ` prefix from
|
|
212
|
+
<result/> and set <answer-N/> to the remainder.
|
|
154
213
|
|
|
155
214
|
4. Output the following <template/>:
|
|
156
215
|
|
|
157
216
|
<template>
|
|
158
|
-
<ase-tpl-bullet-normal/> ASPECT <N/>/<n
|
|
217
|
+
<ase-tpl-bullet-normal/> ASPECT <N/>/<n/> ▶ **<context-N-focus/>** (<context-N-severity/>) ▷ **<aspect-N/>**, ANSWER: **<answer-N/>**
|
|
159
218
|
</template>
|
|
160
219
|
|
|
161
|
-
|
|
220
|
+
6. Update <task-content/> based on all answers <answer-N/>
|
|
221
|
+
gathered in this round. Do not output anything.
|
|
162
222
|
|
|
163
223
|
3. <if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
|
|
164
224
|
Set <timestamp-created><text/></timestamp-created> (set
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
`ase-task-grill`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
|
+
[`--rounds`|`-r` *n*]
|
|
10
11
|
[`--next`|`-n` *option*[,...]]
|
|
11
12
|
[*id*]
|
|
12
13
|
|
|
@@ -16,20 +17,43 @@ The `ase-task-grill` skill *relentlessly interviews* the user about
|
|
|
16
17
|
every *essential aspect* of an existing *task plan* until a *shared
|
|
17
18
|
understanding* is reached and no decisions or questions are left open.
|
|
18
19
|
|
|
19
|
-
The skill identifies the essential aspects of the plan
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
The skill identifies the essential aspects of the plan and raises up to
|
|
21
|
+
10 questions per round which resolve its open points. Each question
|
|
22
|
+
carries a `FOCUS-AREA` -- `DOMAIN` (domain-specifics, must be
|
|
23
|
+
clarified), `INTERFACE` (externally observable behavior or UI/API
|
|
24
|
+
interfaces, must be clarified), `ARCHITECTURE` (structure, wiring,
|
|
25
|
+
placement, or dependencies, should be clarified), or `IMPLEMENTATION`
|
|
26
|
+
(inner technical details, can be clarified) -- and a 1-2 word `ASPECT`
|
|
27
|
+
hint. The questions are sorted primarily by descending focus area
|
|
28
|
+
importance (`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`)
|
|
29
|
+
and secondarily by the decision tree of their dependencies, so each
|
|
30
|
+
decision is asked after the decisions it depends on. It honors checks
|
|
31
|
+
for *fuzzy language*, *conflicting terminology*, *conflicting code*,
|
|
32
|
+
*non-concrete scenarios*, *unspecified architecture patterns*, and
|
|
33
|
+
*unspecified dependencies*.
|
|
34
|
+
|
|
35
|
+
In contrast to the batch grilling of `ase-code-edit --grill`, the
|
|
36
|
+
questions are asked *sequentially*, one at a time: each question is
|
|
37
|
+
announced as an `ASPECT n/N ▶ FOCUS ▷ ASPECT, QUESTION` line and then
|
|
38
|
+
raised via an interactive dialog presenting two to four *grounded*
|
|
39
|
+
answer alternatives labeled `A1`-`A4` (the current plan, marked with
|
|
40
|
+
`⚑`, plus alternatives derived from the code base and world knowledge),
|
|
41
|
+
the fixed `SKIP GRILLING` option (skip the remaining questions and
|
|
42
|
+
rounds, keeping the answers gathered so far), and free-text input.
|
|
43
|
+
Cancelling the dialog stops the skill and leaves the plan untouched.
|
|
44
|
+
Once all aspects are resolved, the plan is updated and persisted, its
|
|
45
|
+
`Properties:` frontmatter key gains the value `grilled`, and the user is
|
|
46
|
+
offered a hand-off to editing, implementation, or preflight.
|
|
30
47
|
|
|
31
48
|
## OPTIONS
|
|
32
49
|
|
|
50
|
+
`--rounds`|`-r` *n*:
|
|
51
|
+
The number of grill rounds to apply (default: `1`). Each round
|
|
52
|
+
starts from scratch from only the current plan, as updated by all
|
|
53
|
+
previous rounds, and re-derives its questions from it, forgetting
|
|
54
|
+
all questions and answers of previous rounds. With more than one
|
|
55
|
+
round, each round is announced as `GRILLING ROUND K/L`.
|
|
56
|
+
|
|
33
57
|
`--next`|`-n` *option*[,...]:
|
|
34
58
|
Automatically answer the user dialog for the next step (at the end
|
|
35
59
|
of this skill). *option* is a single token or a *comma-separated
|
|
@@ -63,6 +87,12 @@ Grill the task plan under id `hello`:
|
|
|
63
87
|
❯ /ase-task-grill hello
|
|
64
88
|
```
|
|
65
89
|
|
|
90
|
+
Grill the current task plan in two rounds:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
❯ /ase-task-grill --rounds 2
|
|
94
|
+
```
|
|
95
|
+
|
|
66
96
|
Grill the current task plan and then hand off to editing:
|
|
67
97
|
|
|
68
98
|
```text
|
|
@@ -73,4 +103,4 @@ Grill the current task plan and then hand off to editing:
|
|
|
73
103
|
|
|
74
104
|
[`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md),
|
|
75
105
|
[`ase-task-implement`](../ase-task-implement/help.md), [`ase-task-view`](../ase-task-view/help.md), [`ase-task-list`](../ase-task-list/help.md),
|
|
76
|
-
[`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|
|
106
|
+
[`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md), [`ase-code-edit`](../ase-code-edit/help.md).
|