@rse/ase 0.9.54 → 0.9.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dst/ase-log.js +5 -0
  2. package/dst/ase-service.js +45 -6
  3. package/dst/ase-setup.js +4 -2
  4. package/dst/ase-statusline.js +6 -8
  5. package/dst/ase-task.js +152 -28
  6. package/package.json +5 -5
  7. package/plugin/.claude-plugin/plugin.json +1 -1
  8. package/plugin/.codex-plugin/plugin.json +1 -1
  9. package/plugin/.github/plugin/plugin.json +1 -1
  10. package/plugin/agents/ase-code-analyze.md +1 -1
  11. package/plugin/agents/ase-code-lint.md +4 -4
  12. package/plugin/agents/ase-meta-chat.md +1 -1
  13. package/plugin/agents/ase-meta-proximity.md +1 -1
  14. package/plugin/meta/ase-common-code.md +165 -2
  15. package/plugin/meta/ase-common-task.md +17 -15
  16. package/plugin/meta/ase-constitution.md +3 -3
  17. package/plugin/meta/ase-control.md +7 -7
  18. package/plugin/meta/ase-dialog.md +5 -4
  19. package/plugin/meta/ase-format-arch.md +7 -8
  20. package/plugin/meta/ase-format-spec.md +10 -11
  21. package/plugin/meta/ase-format-task.md +90 -20
  22. package/plugin/meta/ase-getopt.md +1 -1
  23. package/plugin/meta/ase-persona.md +3 -3
  24. package/plugin/meta/ase-skill.md +14 -24
  25. package/plugin/meta/ase-tenets.md +5 -5
  26. package/plugin/package.json +2 -2
  27. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  28. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  29. package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
  30. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  31. package/plugin/skills/ase-code-analyze/help.md +1 -1
  32. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  33. package/plugin/skills/ase-code-craft/help.md +1 -1
  34. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  35. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  36. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  37. package/plugin/skills/ase-code-lint/help.md +2 -2
  38. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  39. package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
  40. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  41. package/plugin/skills/ase-docs-distill/help.md +1 -1
  42. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  43. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  44. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  45. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  46. package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
  47. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  48. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  49. package/plugin/skills/ase-meta-config/help.md +4 -4
  50. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  51. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  52. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  53. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  54. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  55. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  56. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  57. package/plugin/skills/ase-meta-quotes/help.md +4 -3
  58. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  59. package/plugin/skills/ase-meta-review/help.md +2 -2
  60. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  61. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  62. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  63. package/plugin/skills/ase-meta-why/help.md +3 -3
  64. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  65. package/plugin/skills/ase-sync-export/help.md +1 -1
  66. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  67. package/plugin/skills/ase-task-condense/SKILL.md +19 -72
  68. package/plugin/skills/ase-task-condense/help.md +1 -1
  69. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  70. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  71. package/plugin/skills/ase-task-edit/SKILL.md +74 -26
  72. package/plugin/skills/ase-task-grill/SKILL.md +30 -124
  73. package/plugin/skills/ase-task-grill/help.md +2 -1
  74. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  75. package/plugin/skills/ase-task-implement/SKILL.md +37 -4
  76. package/plugin/skills/ase-task-implement/help.md +9 -5
  77. package/plugin/skills/ase-task-list/SKILL.md +60 -15
  78. package/plugin/skills/ase-task-list/help.md +49 -6
  79. package/plugin/skills/ase-task-preflight/SKILL.md +20 -8
  80. package/plugin/skills/ase-task-preflight/help.md +4 -3
  81. package/plugin/skills/ase-task-reboot/SKILL.md +19 -62
  82. package/plugin/skills/ase-task-reboot/help.md +1 -1
  83. package/plugin/skills/ase-task-view/SKILL.md +27 -4
  84. package/dst/ase-guidance.js +0 -89
  85. package/dst/ase-persona.js +0 -87
  86. package/dst/ase-stdout.js +0 -18
@@ -5,12 +5,16 @@ Task
5
5
  Every *task* uses a strict and fixed format:
6
6
 
7
7
  <format>
8
+ ---
9
+ Id: <task-id/>
10
+ Created: <timestamp-created/>
11
+ Modified: <timestamp-modified/>
12
+ Status: <task-status/>
13
+ Properties: <task-properties/>
14
+ Kind: <task-kind/>
15
+ ---
8
16
 
9
- # TASK <task-id/>: <title/>
10
-
11
- ⎈ Created: <timestamp-created/>
12
- ⚙ Modified: <timestamp-modified/>
13
- ☯ Kind: <task-kind/>
17
+ # TASK: <title/>
14
18
 
15
19
  ## CONTEXT
16
20
 
@@ -34,8 +38,19 @@ Every *task* uses a strict and fixed format:
34
38
 
35
39
  You *MUST* honor the following hints on this *task* format:
36
40
 
37
- - You *MUST* always keep the first empty line and the last empty line.
38
- If one of them is missing, add it back.
41
+ - The content *MUST* begin with the `---` opening delimiter of the
42
+ *Markdown frontmatter* as its very *first* line -- there is *no*
43
+ leading empty line, as any line before the `---` would degrade the
44
+ frontmatter into ordinary Markdown. You *MUST* always keep the empty
45
+ line between the closing `---` delimiter and the `#` heading, and
46
+ always keep the last empty line. If one of them is missing, add it
47
+ back.
48
+
49
+ - The *frontmatter* carries the keys `Id`, `Created`, `Modified`,
50
+ `Status`, `Properties`, and `Kind`, in exactly this order, with their
51
+ values being *unquoted* plain scalars and vertically aligned one
52
+ space after the longest key. Only `Id` is *mandatory* -- every other
53
+ key is *optional* and, when absent, falls back to its default value.
39
54
 
40
55
  - In all descriptions, highlight *code* as
41
56
  <template>`<code/>`</template> and *key aspects* as
@@ -47,36 +62,91 @@ You *MUST* honor the following hints on this *task* format:
47
62
  is changed, what benefit results or what the rationale is behind the
48
63
  change.
49
64
 
50
- - The <task-id/> has to be substituted with the current value of
51
- <ase-task-id/> in the current session context.
52
-
53
- - The `☯ Kind:` line states the *kind of change* the task plan
65
+ - The <task-id/> of the `Id:` frontmatter key has to be substituted
66
+ with the current value of <ase-task-id/> in the current session
67
+ context.
68
+
69
+ - The `Status:` frontmatter key states the current *lifecycle state*
70
+ of the task plan. The key is *optional* and defaults to `DRAFTED`:
71
+ an *absent* key reads as `DRAFTED`, and a *newly created* plan
72
+ carries `DRAFTED` explicitly. The <task-status/> value is *strictly*
73
+ one of the following eight states:
74
+
75
+ - `DRAFTED`: plan exists but is still provisional and not yet
76
+ cleared for implementation.
77
+ - `REJECTED`: plan was reviewed and refused, and has to be reworked
78
+ before it can be approved.
79
+ - `APPROVED`: plan is accepted as authoritative and cleared for
80
+ implementation, but no work has begun.
81
+ - `DEFERRED`: plan is approved and unobstructed, but its start was
82
+ deliberately postponed.
83
+ - `STARTED`: implementation of the plan is actively underway.
84
+ - `BLOCKED`: implementation is halted by an impediment which
85
+ someone has to remove before it can resume.
86
+ - `COMPLETED`: plan was implemented in full and reached its
87
+ intended outcome.
88
+ - `CANCELLED`: plan was terminated before completion, because it
89
+ failed, was called off, or became obsolete.
90
+
91
+ - The eight states form a *state machine*. Whoever sets the `Status:`
92
+ key *MUST* only move along one of the following transitions, whereby
93
+ a *single* operation *MAY* traverse *several* transitions at once if
94
+ it performs the corresponding stages in one go:
95
+
96
+ ```text
97
+ DRAFTED ──reject───▶ REJECTED STARTED ──block────▶ BLOCKED
98
+ REJECTED ──redraft──▶ DRAFTED BLOCKED ──unblock──▶ STARTED
99
+ DRAFTED ──approve──▶ APPROVED STARTED ──complete─▶ COMPLETED
100
+ APPROVED ──defer────▶ DEFERRED
101
+ DEFERRED ──resume───▶ APPROVED any non-terminal state
102
+ APPROVED ──start────▶ STARTED ──cancel───▶ CANCELLED
103
+ ```
104
+
105
+ `COMPLETED` and `CANCELLED` are the two *terminal* states: a plan
106
+ which reached one of them is *finished* and leaves the state machine.
107
+
108
+ - The `Properties:` frontmatter key states which *stages* the task
109
+ plan already passed through. The <task-properties/> value is
110
+ *strictly* either `none` or a comma-separated list of the values
111
+ `grilled`, `preflighted`, `implemented`, and `verified`, listed in
112
+ exactly this order, each at most once. The key is *optional* and
113
+ defaults to `none`: an *absent* key reads as `none`, and a *newly
114
+ created* plan carries `none` explicitly. The list only ever
115
+ *accumulates*: a skill *adds* its own value if still absent and
116
+ *MUST NOT* drop any value already present, except when a plan is
117
+ *recreated from scratch*, which resets it to `none`.
118
+
119
+ - The `Kind:` frontmatter key states the *kind of change* the task plan
54
120
  describes, and hence which *operation-specific tenet set* of the
55
121
  **ASE Tenets** a subsequent preflight or implementation has to
56
122
  honor. The <task-kind/> value is *strictly* one of `CRAFTING`,
57
- `REFACTORING`, or `RESOLVING`, and the line is column-aligned with
58
- the `⎈ Created:` and `⚙ Modified:` lines above it.
123
+ `REFACTORING`, or `RESOLVING`.
59
124
 
60
- - The `☯ Kind:` line is *optional*: a skill *authoring* or
61
- *updating* a task plan *CAN* update an already present line or pass
125
+ - The `Kind:` frontmatter key is *optional*: a skill *authoring* or
126
+ *updating* a task plan *CAN* update an already present key or pass
62
127
  it through *verbatim* and *MAY* create a missing one by *inferring*
63
128
  the kind from the plan content (defaulting to `CRAFTING`). A
64
- `--dry` run *never* drops this line, as `--dry` only omits the
129
+ `--dry` run *never* drops this key, as `--dry` only omits the
65
130
  `## VERIFICATION` section.
66
131
 
67
- - The <timestamp-created/> is the timestamp when this task plan was
68
- created. The <timestamp-modified/> is the timestamp when this
132
+ - A skill *writing* an optional key which is still *absent* inserts it
133
+ at its position in the key order above and re-aligns the values of
134
+ the whole frontmatter block.
135
+
136
+ - The <timestamp-created/> of the `Created:` frontmatter key is the
137
+ timestamp when this task plan was created. The <timestamp-modified/>
138
+ of the `Modified:` frontmatter key is the timestamp when this
69
139
  task plan was last modified. Both use an ISO-style format
70
140
  value. The value of both can be determined by a call to the
71
141
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase` MCP
72
- server and use the `text` field of its response.
142
+ server, using the `text` field of its response.
73
143
 
74
144
  - The <title/> is a short summary of the <summary-what/>, no longer than
75
145
  50 characters.
76
146
 
77
147
  - The sections `## CHANGES` and `## VERIFICATION` are each just a short
78
148
  list of 1-5 bullet points. Each bullet point is formatted as
79
- `- **<aspect/>**: <specification/>` where <aspect/> indicates
149
+ `- **<aspect/>**: <specification/>` where <aspect/> indicates
80
150
  the aspect of the section and <specification/> is 1-3 sentences
81
151
  giving an *ultra precise* but also *ultra brief* and *ultra concise*
82
152
  description of the aspect.
@@ -36,7 +36,7 @@ set placeholders into the context as a side-effect.
36
36
  Additionally, simulate <getopt-info/> as a comma-separated
37
37
  markdown rendering of the parsed options in the form `<longN/>:
38
38
  **<valueN/>**, [...]` (joined with `, `, with each value
39
- shell-quoted if value contains spaces or special characters, and
39
+ shell-quoted if the value contains spaces or special characters, and
40
40
  excluding the `help` option and any *internal* option whose long
41
41
  name starts with `int-`).
42
42
 
@@ -61,7 +61,7 @@ requested communication style at any time during a session.
61
61
  - <keywords/> is only one to four keywords summarizing the <details/>
62
62
  - <details/> is one to four concise prose sentences explaining the aspect
63
63
 
64
- - If <ase-persona-style/> is `telegrapher`, or `caveman`:
64
+ - If <ase-persona-style/> is `telegrapher` or `caveman`:
65
65
  - You *MUST* *use only* bullet point lists without blank lines between bullet points.
66
66
  - You *MUST* *use only* one bullet point per explanation aspect.
67
67
  - You *MUST* *use* shorter synonyms
@@ -89,13 +89,13 @@ requested communication style at any time during a session.
89
89
  - `<subject/> ▶ <action/> ▷ <object/>.`
90
90
  - `<subject/> ▶ <action/>.`
91
91
  Each of <subject/>, <action/>, <object/>, and <reason/>
92
- are just one to six words.
92
+ is just one to six words.
93
93
 
94
94
  - If <ase-persona-style/> is `caveman`:
95
95
  - You *MUST* structure every bullet point by
96
96
  following exactly the formatting `○ <core/>`, where:
97
97
  <core/> is a *very terse core* stating the essence of the aspect
98
- using one of the following three sentence patterns:
98
+ using one of the following four sentence patterns:
99
99
  - `<expression/>!`
100
100
  - `<subject/> <action/> <object/>, <reason/>.`
101
101
  - `<subject/> <action/> <object/>.`
@@ -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.54",
9
+ "version": "0.9.56",
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",
@@ -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
@@ -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*.