@rse/ase 0.9.55 → 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 (78) hide show
  1. package/dst/ase-setup.js +4 -2
  2. package/dst/ase-statusline.js +6 -8
  3. package/dst/ase-task.js +36 -11
  4. package/package.json +5 -5
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/agents/ase-code-analyze.md +1 -1
  9. package/plugin/agents/ase-code-lint.md +4 -4
  10. package/plugin/agents/ase-meta-chat.md +1 -1
  11. package/plugin/agents/ase-meta-proximity.md +1 -1
  12. package/plugin/meta/ase-common-code.md +164 -1
  13. package/plugin/meta/ase-common-task.md +14 -13
  14. package/plugin/meta/ase-constitution.md +3 -3
  15. package/plugin/meta/ase-control.md +7 -7
  16. package/plugin/meta/ase-dialog.md +5 -4
  17. package/plugin/meta/ase-format-arch.md +7 -8
  18. package/plugin/meta/ase-format-spec.md +10 -11
  19. package/plugin/meta/ase-format-task.md +2 -2
  20. package/plugin/meta/ase-getopt.md +1 -1
  21. package/plugin/meta/ase-persona.md +3 -3
  22. package/plugin/meta/ase-skill.md +14 -24
  23. package/plugin/meta/ase-tenets.md +5 -5
  24. package/plugin/package.json +2 -2
  25. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  26. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  27. package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
  28. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  29. package/plugin/skills/ase-code-analyze/help.md +1 -1
  30. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  31. package/plugin/skills/ase-code-craft/help.md +1 -1
  32. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  33. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  35. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  36. package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
  37. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  38. package/plugin/skills/ase-docs-distill/help.md +1 -1
  39. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  40. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  41. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  42. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  43. package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
  44. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  45. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  46. package/plugin/skills/ase-meta-config/help.md +1 -1
  47. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  48. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  49. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  50. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  51. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  52. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  53. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  54. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  55. package/plugin/skills/ase-meta-review/help.md +2 -2
  56. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  57. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  58. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  59. package/plugin/skills/ase-meta-why/help.md +3 -3
  60. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  61. package/plugin/skills/ase-sync-export/help.md +1 -1
  62. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  63. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  64. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  65. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  66. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  67. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  68. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  69. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  70. package/plugin/skills/ase-task-implement/help.md +1 -1
  71. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  72. package/plugin/skills/ase-task-preflight/SKILL.md +13 -7
  73. package/plugin/skills/ase-task-reboot/SKILL.md +18 -61
  74. package/plugin/skills/ase-task-reboot/help.md +1 -1
  75. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  76. package/dst/ase-guidance.js +0 -89
  77. package/dst/ase-persona.js +0 -87
  78. package/dst/ase-stdout.js +0 -18
@@ -28,7 +28,7 @@ is the timestamp when this **Artifact** was created. The
28
28
  <timestamp-modified/> is the timestamp when this **Artifact** was last
29
29
  modified. Both use an ISO-style format value. The value of both can be
30
30
  determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
31
- tool of the `ase` MCP server and use the `text` field of its response.
31
+ tool of the `ase` MCP server, using the `text` field of its response.
32
32
  Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
33
33
  updated, too.
34
34
 
@@ -84,7 +84,6 @@ distinct **Artifact**s (listed under their <artifact-name/> and their
84
84
  The **Artifact**s have the following cross-references:
85
85
 
86
86
  ```text
87
- ARCH-02-FV Functionality View ──(depends on)─► ARCH-01-CV Context View
88
87
  ARCH-03-IV Information View ──(entity)─► SPEC-07-DM Data Model
89
88
  ARCH-03-IV Information View ──(owner)─► ARCH-02-FV Functionality View
90
89
  ARCH-04-CO Concurrency View ──(hosts)─► ARCH-02-FV Functionality View
@@ -831,7 +830,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
831
830
 
832
831
  - <arch-dr-decision-notes/> is *OPTIONAL* and can be omitted when it
833
832
  does not add genuine value - most decisions won't need it. The
834
- following usually goes into it: information of the decision *process*
833
+ following usually goes into it: information about the decision *process*
835
834
  (e.g. a weighted decision matrix of considered alternatives);
836
835
  consequences of the decision (but only when non-obvious downstream
837
836
  effects need to be called out); and links to strongly related
@@ -850,7 +849,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
850
849
  almost inevitable answer to the context - if a reader is surprised
851
850
  by the decision, either the context is missing a force, or the
852
851
  decision is under-justified. The rationale should make the decision
853
- feel earned, not asserted - if you would delete the rationale and
852
+ feel earned, not asserted - if you delete the rationale and
854
853
  the decision suddenly looks arbitrary, the rationale was doing its
855
854
  job.
856
855
 
@@ -892,7 +891,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
892
891
 
893
892
  - **Boundary and scope decisions.** "Customer data is owned by the
894
893
  Customer context; other contexts reference it by ID only." The explicit
895
- no-s are as valuable as the yes-s.
894
+ no's are as valuable as the yes's.
896
895
 
897
896
  - **Deliberate deviations from the obvious path.** "We're using
898
897
  manual SQL instead of an ORM because X." Anything where a reasonable
@@ -1091,7 +1090,7 @@ its purpose, and the alternatives that were considered but not chosen.
1091
1090
  to bootstrap application parameters.
1092
1091
 
1093
1092
  - **Configuration Parsing**:
1094
- Load and parse directives from configuration file to bootstrap
1093
+ Load and parse directives from a configuration file to bootstrap
1095
1094
  application parameters.
1096
1095
 
1097
1096
  - **Process Daemonizing**:
@@ -1103,7 +1102,7 @@ its purpose, and the alternatives that were considered but not chosen.
1103
1102
  and control them during the life-cycle of the application.
1104
1103
 
1105
1104
  - **Component Management**:
1106
- Structure the code into components, instantiate them under run-time
1105
+ Structure the code into components, instantiate them at run-time
1107
1106
  and manage them in a stateful component life-cycle.
1108
1107
 
1109
1108
  - **Component Communication**:
@@ -1151,7 +1150,7 @@ its purpose, and the alternatives that were considered but not chosen.
1151
1150
  measurement information at certain points of interest.
1152
1151
 
1153
1152
  - **Database Access**:
1154
- Map in-memory domain entities onto data store dependent persistent
1153
+ Map in-memory domain entities onto a data-store-dependent persistent
1155
1154
  data structure.
1156
1155
 
1157
1156
  - **Database Connectivity**:
@@ -28,7 +28,7 @@ is the timestamp when this **Artifact** was created. The
28
28
  <timestamp-modified/> is the timestamp when this **Artifact** was last
29
29
  modified. Both use an ISO-style format value. The value of both can be
30
30
  determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
31
- tool of the `ase` MCP server and use the `text` field of its response.
31
+ tool of the `ase` MCP server, using the `text` field of its response.
32
32
  Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
33
33
  updated, too.
34
34
 
@@ -122,7 +122,6 @@ SPEC-06-BR Business Rules ──(constrains)─► SPEC-05-NR Non-Functio
122
122
  SPEC-08-SM State Model ──(of entity)─► SPEC-07-DM Data Model
123
123
  SPEC-10-UC Use Cases ──(use case actor)─► SPEC-02-PE Personas
124
124
  SPEC-10-UC Use Cases ──(realizes)─► SPEC-04-FR Functional Requirements
125
- SPEC-10-UC Use Cases ──(transitions)─► SPEC-08-SM State Model
126
125
  SPEC-11-TC Test Cases ──(verifies)─► SPEC-04-FR Functional Requirements
127
126
  SPEC-11-TC Test Cases ──(verifies)─► SPEC-05-NR Non-Functional Requirements
128
127
  SPEC-15-DS Dialog Storyboard ──(scenario)─► SPEC-10-UC Use Cases
@@ -221,7 +220,7 @@ capturing their goals, needs, behaviors, and context.
221
220
  in total not longer than 30 characters), derived from
222
221
  <spec-pe-persona-name/>.
223
222
 
224
- - <spec-pe-persona-name/>: per-artifact unique first name of fictional
223
+ - <spec-pe-persona-name/>: per-artifact unique first name of the fictional
225
224
  described person.
226
225
 
227
226
  - <spec-pe-persona-gender/>: the gender of the persona: `male`,
@@ -231,7 +230,7 @@ capturing their goals, needs, behaviors, and context.
231
230
 
232
231
  - <spec-pe-persona-role/>: the role of the persona.
233
232
 
234
- - <spec-pe-persona-quote/>: a short and bold, first-person statement -
233
+ - <spec-pe-persona-quote/>: a short and bold first-person statement -
235
234
  written in the persona's own voice - that captures their core
236
235
  attitude, motivation, frustration, or need in a single memorable line.
237
236
  It's sometimes called the persona's "tagline," "mantra," or "defining
@@ -287,12 +286,12 @@ over time.
287
286
 
288
287
  - <spec-cj-step-stage/> is one of:
289
288
 
290
- - `Awareness`: Customer is not aware of solution, but has a need.
291
- - `Consideration`: Customer is aware of solution, and should consider its use.
289
+ - `Awareness`: Customer is not aware of the solution, but has a need.
290
+ - `Consideration`: Customer is aware of the solution, and should consider its use.
292
291
  - `Decision`: Customer wants to pick the solution.
293
292
  - `Onboarding`: Customer is using the solution.
294
- - `Retention`: Customer in the long-term stays a customer.
295
- - `Advocacy`: Customer is a fan of solution and tells the tribe.
293
+ - `Retention`: Customer in the long term stays a customer.
294
+ - `Advocacy`: Customer is a fan of the solution and tells the tribe.
296
295
 
297
296
  - <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
298
297
  corresponding **Aspect** of the Personas **Artifact**.
@@ -564,7 +563,7 @@ manages, defining how information is organized and connected.
564
563
 
565
564
  ### RELATIONS
566
565
 
567
- - `<spec-dm-relation-id/>`: [`<spec-dm-relation-target/>`](#<spec-dm-relation-target-id/>)(`<spec-dm-relation-cardinality/>`):<br/>
566
+ - `<spec-dm-relation-id/>`: [`<spec-dm-relation-target/>`](#SPEC-DM-<spec-dm-relation-target-id/>)(`<spec-dm-relation-cardinality/>`):<br/>
568
567
  <spec-dm-relation-description/>,
569
568
  **BECAUSE** <spec-dm-relation-rationale/>.
570
569
 
@@ -664,12 +663,12 @@ manages, defining how information is organized and connected.
664
663
  - `Type` (`<spec-dm-attribute-qualifier/><spec-dm-attribute-type/>`)
665
664
  - `Description` (`<spec-dm-attribute-description/>, **BECAUSE** <spec-dm-attribute-rationale/>.`)
666
665
 
667
- - <export-table-2/> is a Markdown table for the relation with one
666
+ - <export-table-2/> is a Markdown table for the relations with one
668
667
  row per <spec-dm-relation-id/>, sorted by <spec-dm-relation-id/> --
669
668
  with the columns:
670
669
 
671
670
  - `Relation` (`**<spec-dm-relation-id/>**`)
672
- - `Target` (`[<spec-dm-relation-target/>](#<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
671
+ - `Target` (`[<spec-dm-relation-target/>](#SPEC-DM-<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
673
672
  - `Description` (`<spec-dm-relation-description/>, **BECAUSE** <spec-dm-relation-rationale/>.`)
674
673
 
675
674
  - In case a <spec-dm-entity/> has no relations at all, the
@@ -139,14 +139,14 @@ You *MUST* honor the following hints on this *task* format:
139
139
  task plan was last modified. Both use an ISO-style format
140
140
  value. The value of both can be determined by a call to the
141
141
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase` MCP
142
- server and use the `text` field of its response.
142
+ server, using the `text` field of its response.
143
143
 
144
144
  - The <title/> is a short summary of the <summary-what/>, no longer than
145
145
  50 characters.
146
146
 
147
147
  - The sections `## CHANGES` and `## VERIFICATION` are each just a short
148
148
  list of 1-5 bullet points. Each bullet point is formatted as
149
- `- **<aspect/>**: <specification/>` where <aspect/> indicates
149
+ `- **<aspect/>**: <specification/>` where <aspect/> indicates
150
150
  the aspect of the section and <specification/> is 1-3 sentences
151
151
  giving an *ultra precise* but also *ultra brief* and *ultra concise*
152
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.55",
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*.