@rse/ase 0.9.61 → 0.9.63

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 (37) hide show
  1. package/dst/ase-artifact.js +19 -8
  2. package/dst/ase-config.js +12 -8
  3. package/dst/ase-hook.js +8 -0
  4. package/dst/ase-service.js +2 -0
  5. package/dst/ase-spec.js +241 -0
  6. package/dst/ase.js +2 -0
  7. package/package.json +10 -8
  8. package/plugin/.claude-plugin/plugin.json +1 -1
  9. package/plugin/.codex-plugin/plugin.json +1 -1
  10. package/plugin/.github/plugin/plugin.json +1 -1
  11. package/plugin/agents/ase-code-lint.md +47 -3
  12. package/plugin/etc/stx.conf +5 -3
  13. package/plugin/meta/ase-common-grill.md +89 -0
  14. package/plugin/meta/ase-dialog.md +6 -0
  15. package/plugin/meta/ase-format-meta.md +23 -105
  16. package/plugin/meta/ase-format-spec.md +22 -1326
  17. package/plugin/meta/ase-tenets.md +63 -4
  18. package/plugin/package.json +6 -2
  19. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  20. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  21. package/plugin/skills/ase-code-analyze/help.md +2 -1
  22. package/plugin/skills/ase-code-edit/SKILL.md +142 -140
  23. package/plugin/skills/ase-code-lint/SKILL.md +5 -5
  24. package/plugin/skills/ase-code-lint/help.md +23 -8
  25. package/plugin/skills/ase-help-skill/catalog.md +3 -0
  26. package/plugin/skills/ase-meta-review/help.md +1 -1
  27. package/plugin/skills/ase-spec-edit/SKILL.md +520 -0
  28. package/plugin/skills/ase-spec-edit/help.md +130 -0
  29. package/plugin/skills/ase-sync-export/SKILL.md +57 -116
  30. package/plugin/skills/ase-sync-export/help.md +30 -42
  31. package/plugin/skills/ase-sync-import/SKILL.md +37 -15
  32. package/plugin/skills/ase-sync-import/help.md +14 -10
  33. package/plugin/skills/ase-sync-reconcile/SKILL.md +37 -16
  34. package/plugin/skills/ase-sync-reconcile/help.md +19 -16
  35. package/plugin/skills/ase-task-grill/SKILL.md +120 -59
  36. package/plugin/skills/ase-task-grill/help.md +42 -12
  37. package/plugin/meta/ase-format-arch.md +0 -1164
@@ -20,20 +20,23 @@ kinds (the *source*). It reads the source artifacts and then adjusts the
20
20
  target artifacts *directly* and *surgically* to match the source state,
21
21
  while optionally honoring a filtering *hint*.
22
22
 
23
- Both *target* and *source* are comma-separated lists over the seven
24
- recognized artifact kinds `SPEC` (Specification), `ARCH` (Architecture),
25
- `CODE` (Source Code), `DOCS` (Documentation), `TASK` (Task Plans), `INFR`
26
- (Infrastructure), and `OTHR` (catch-all). When *source* is `auto`, it
27
- resolves to all seven kinds *minus* the kinds listed in *target*. Unless
28
- `--bidirectional` is given, a kind present in *target* is never used as
29
- its own source.
23
+ Both *target* and *source* are comma-separated lists over the six
24
+ recognized artifact kinds `SPEC` (Specification, covering both
25
+ requirements and architecture), `CODE` (Source Code), `DOCS`
26
+ (Documentation), `TASK` (Task Plans), `INFR` (Infrastructure), and
27
+ `OTHR` (catch-all). When *source* is `auto`, it resolves to all six
28
+ kinds *minus* the kinds listed in *target*. Unless `--bidirectional` is
29
+ given, a kind present in *target* is never used as its own source.
30
30
 
31
31
  The file lists for all involved kinds are resolved via the
32
32
  `ase_artifact_list` MCP tool of the `ase` MCP server. While reconciling,
33
33
  the skill honors the artifact-format conventions of `ase-format-meta.md`,
34
- `ase-format-spec.md`, `ase-format-arch.md`, and `ase-format-task.md`;
35
- the kinds `CODE`, `DOCS`, `INFR`, and `OTHR` have no dedicated format
36
- contract and are treated as free-form.
34
+ `ase-format-spec.md` (the *SpecBook* models and formats plus the
35
+ SpecBook schema configuration), and `ase-format-task.md`; the kinds
36
+ `CODE`, `DOCS`, `INFR`, and `OTHR` have no dedicated format contract and
37
+ are treated as free-form. Changed `SPEC` artifacts are validated via
38
+ the `ase_specbook_lint` MCP tool and the reported diagnostics are fixed
39
+ in at most three rounds; any remaining diagnostics are surfaced.
37
40
 
38
41
  ## OPTIONS
39
42
 
@@ -62,25 +65,25 @@ contract and are treated as free-form.
62
65
  ## EXAMPLES
63
66
 
64
67
  Reconcile the code and documentation
65
- to reflect the current specification and architecture
68
+ to reflect the current specification
66
69
  in a "forward engineering" approach:
67
70
 
68
71
  ```text
69
- ❯ /ase-sync-reconcile -t CODE,DOCS -s SPEC,ARCH
72
+ ❯ /ase-sync-reconcile -t CODE,DOCS -s SPEC
70
73
  ```
71
74
 
72
- Reconcile specification and architecture from everything else
75
+ Reconcile the specification from everything else
73
76
  in a "reverse engineering" approach:
74
77
 
75
78
  ```text
76
- ❯ /ase-sync-reconcile -t SPEC,ARCH -s CODE,DOCS
79
+ ❯ /ase-sync-reconcile -t SPEC -s CODE,DOCS
77
80
  ```
78
81
 
79
- Bidirectionally reconcile specification and architecture against
82
+ Bidirectionally reconcile specification and code against
80
83
  each other, limited to the authentication aspect:
81
84
 
82
85
  ```text
83
- ❯ /ase-sync-reconcile -b -t SPEC -s ARCH authentication
86
+ ❯ /ase-sync-reconcile -b -t SPEC -s CODE authentication
84
87
  ```
85
88
 
86
89
  ## SEE ALSO
@@ -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. React on task id:
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,98 @@ Set <args>--int-reuse-task</args>.
71
80
 
72
81
  3. **Iterate Over Task Plan Aspects:**
73
82
 
74
- Interactively interview the user *relentlessly* about every
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
- Honor also the following checks for identifying the problematic
89
- aspects:
85
+ <expand name="grill-understanding" arg1="the task plan in <task-content/>"></expand>
90
86
 
91
- - **Fuzzy Language**:
92
- When the user uses vague or overloaded terms instead of a precise
93
- or canonical term.
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
- - **Conflicting Terminology**:
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
- - **Conflicting Code**:
100
- When the user states how something works, check whether the
101
- current code state really agrees.
95
+ 1. INITIALIZE ROUND:
102
96
 
103
- - **Non-Concrete Scenarios**:
104
- When domain relationships are being discussed, stress-test them
105
- with specific scenarios. Invent scenarios that probe edge cases
106
- and force the user to be precise about the boundaries between
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
- Then create a decisions/questions tree for them. Walk down each
110
- branch of this decision tree, resolving dependencies between
111
- decisions one-by-one. Ask the questions <question-N/> and determine
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
- 1. For each question <question-N/> in the iteration cycle <N/>:
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
+ starting at `1` in *every* round, independent of the
146
+ numbering of previous rounds. Truncate the list after a
147
+ maximum of 10 questions and set <n/> to the number of
148
+ remaining questions. Do not output anything.
149
+
150
+ 5. For each question <question-N/> in the iteration cycle <N/>,
151
+ *one at a time*:
152
+
153
+ 1. Output the following <template/>:
115
154
 
116
- 1. Output the following <template/>:
155
+ <template>
156
+ <ase-tpl-bullet-signal/> ASPECT <N/>/<n/> ▶ **<context-N-focus/>** (<context-N-severity/>) ▷ **<aspect-N/>**
157
+ </template>
117
158
 
118
- <template>
119
- <ase-tpl-bullet-signal/> ASPECT <N/>/<n/>: **<aspect-N/>**, QUESTION: **<question-N/>**
120
- </template>
159
+ 2. Determine the answer alternatives:
121
160
 
122
- 2. Determine the answer alternatives:
161
+ 1. Check the <task-content/> for the answer <answer-N-1/>,
162
+ which reflects the current plan.
123
163
 
124
- 1. Check the <task-content/> for the answer <answer-N-1/>.
164
+ 2. Check the code base and your world knowledge and
165
+ use this information to find *up to three* grounded
166
+ alternative answers <answer-N-K/> (K={2,3,4}), so there
167
+ are between two and four answer options in total.
125
168
 
126
- 2. Check the code base and your world knowledge and
127
- use this information to find *up to three* grounded
128
- alternative answers <answer-N-K/> (K={2,3,4}), so there
129
- are between two and four answer options in total.
169
+ 3. For each <answer-N-K/> (K={1,2,3,4}) determine
170
+ a 1-3 word label <answer-N-K-label/>, and an
171
+ ultra brief description <answer-N-K-description/>
172
+ of at most *10 words*. Prepend `⚑ ` to the
173
+ <answer-N-K-description/> which reflects the current
174
+ plan. Do not output anything.
130
175
 
131
176
  3. In the following, you *MUST* *NOT* use your built-in
132
177
  <user-dialog-tool/> tool! Instead, you *MUST* just show a
@@ -135,30 +180,46 @@ Set <args>--int-reuse-task</args>.
135
180
 
136
181
  Let the user select the <answer-N/> out of the answer
137
182
  alternatives <answer-N-K/> by raising a question with the
138
- following custom dialog, where per alternative <answer-N-K/>
139
- you determine a brief label <answer-N-K-label/> and a
140
- description <answer-N-K-description/>, and you mark the
141
- <answer-N-1/> by prefixing its description with
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):
183
+ following custom dialog. Emit only the answer lines for
184
+ the alternatives <answer-N-K/> you actually determined in
185
+ the previous step (between two and four lines in total),
186
+ followed by the fixed `SKIP GRILLING` answer option:
145
187
 
146
188
  <expand name="custom-dialog" arg1="--other">
147
189
  <aspect-N/>: <question-N/>
148
- <answer-N-1-label/>: ⚝ **CURRENT PLAN** ⚝ - <answer-N-1-description/>
149
- <answer-N-K-label/>: <answer-N-K-description/>
190
+ <answer-N-1-label/>: <answer-N-1-description/>
191
+ <answer-N-2-label/>: <answer-N-2-description/>
150
192
  [...]
193
+ SKIP GRILLING: skip all remaining grilling and continue with the plan update
151
194
  </expand>
152
195
 
153
- Set <answer-N/> to the selected <result/>.
196
+ Check the <result/> and dispatch accordingly:
197
+
198
+ - If <result/> is `CANCEL`, only output the following
199
+ <template/> and then immediately *STOP* processing
200
+ the entire current skill, leaving the plan *untouched*:
201
+
202
+ <template>
203
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **grilling stopped**
204
+ </template>
205
+
206
+ - If <result/> is `SKIP GRILLING`, ask no further
207
+ questions, continue with item 6 below (updating the
208
+ plan with the answers gathered so far), and after
209
+ item 6 skip all remaining rounds and continue with
210
+ item 3.3 below.
211
+
212
+ - Otherwise, strip any leading `OTHER: ` prefix from
213
+ <result/> and set <answer-N/> to the remainder.
154
214
 
155
215
  4. Output the following <template/>:
156
216
 
157
217
  <template>
158
- <ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
218
+ <ase-tpl-bullet-normal/> ASPECT <N/>/<n/> **<context-N-focus/>** (<context-N-severity/>) ▷ **<aspect-N/>**, ANSWER: **<answer-N/>**
159
219
  </template>
160
220
 
161
- 2. Finally, update <task-content/> based on all answers <answer-N/>.
221
+ 6. Update <task-content/> based on all answers <answer-N/>
222
+ gathered in this round. Do not output anything.
162
223
 
163
224
  3. <if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
164
225
  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, builds a
20
- decision tree of the open questions, and walks down each branch
21
- one-by-one. For each aspect it presents up to four *grounded*
22
- alternative answers (the current plan plus alternatives derived from
23
- the code base and world knowledge), marks the current-plan choice, and
24
- lets the user pick via an interactive dialog. It honors checks for
25
- *fuzzy language*, *conflicting terminology*, *conflicting code*, and
26
- *non-concrete scenarios*. Once all aspects are resolved, the plan is
27
- updated and persisted, its `Properties:` frontmatter key gains the value
28
- `grilled`, and the user is offered a hand-off to editing,
29
- implementation, or preflight.
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).