@rse/ase 0.9.43 → 0.9.45

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-artifact.js +28 -24
  2. package/dst/ase-config.js +27 -36
  3. package/dst/ase-diagram.js +15 -35
  4. package/dst/ase-getopt.js +10 -15
  5. package/dst/ase-hook.js +29 -27
  6. package/dst/ase-kv.js +24 -29
  7. package/dst/ase-log.js +10 -3
  8. package/dst/ase-markdown.js +135 -102
  9. package/dst/ase-mcp.js +3 -10
  10. package/dst/ase-meta.js +6 -4
  11. package/dst/ase-persona.js +7 -11
  12. package/dst/ase-service.js +28 -28
  13. package/dst/ase-setup.js +65 -28
  14. package/dst/ase-skills.js +2 -2
  15. package/dst/ase-statusline.js +26 -34
  16. package/dst/ase-task.js +60 -63
  17. package/dst/ase-version.js +2 -1
  18. package/dst/ase.js +7 -11
  19. package/package.json +12 -10
  20. package/plugin/.claude-plugin/plugin.json +1 -1
  21. package/plugin/.codex-plugin/plugin.json +1 -1
  22. package/plugin/.github/plugin/plugin.json +2 -2
  23. package/plugin/agents/ase-code-lint.md +15 -4
  24. package/plugin/agents/ase-docs-proofread.md +9 -1
  25. package/plugin/agents/ase-meta-chat.md +19 -13
  26. package/plugin/agents/ase-meta-diagram.md +1 -1
  27. package/plugin/agents/ase-meta-search.md +1 -2
  28. package/plugin/etc/eslint.mjs +0 -2
  29. package/plugin/meta/ase-common-task.md +145 -0
  30. package/plugin/meta/ase-constitution.md +5 -2
  31. package/plugin/meta/ase-control.md +1 -1
  32. package/plugin/meta/ase-dialog.md +7 -7
  33. package/plugin/meta/ase-format-arch.md +12 -12
  34. package/plugin/meta/ase-format-spec.md +23 -23
  35. package/plugin/meta/ase-format-task.md +9 -11
  36. package/plugin/meta/ase-getopt.md +1 -1
  37. package/plugin/meta/ase-persona.md +3 -3
  38. package/plugin/meta/ase-skill.md +3 -3
  39. package/plugin/meta/ase-tenets.md +4 -4
  40. package/plugin/package.json +8 -8
  41. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
  42. package/plugin/skills/ase-arch-analyze/help.md +2 -2
  43. package/plugin/skills/ase-arch-discover/SKILL.md +2 -2
  44. package/plugin/skills/ase-arch-discover/help.md +3 -2
  45. package/plugin/skills/ase-code-analyze/SKILL.md +0 -1
  46. package/plugin/skills/ase-code-craft/SKILL.md +11 -11
  47. package/plugin/skills/ase-code-lint/SKILL.md +31 -13
  48. package/plugin/skills/ase-code-refactor/SKILL.md +13 -13
  49. package/plugin/skills/ase-code-refactor/help.md +1 -1
  50. package/plugin/skills/ase-code-resolve/SKILL.md +10 -10
  51. package/plugin/skills/ase-code-resolve/help.md +1 -1
  52. package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
  53. package/plugin/skills/ase-docs-distill/help.md +6 -4
  54. package/plugin/skills/ase-docs-proofread/SKILL.md +23 -8
  55. package/plugin/skills/ase-meta-brainstorm/help.md +1 -1
  56. package/plugin/skills/ase-meta-changelog/SKILL.md +9 -5
  57. package/plugin/skills/ase-meta-commit/SKILL.md +8 -6
  58. package/plugin/skills/ase-meta-compat/SKILL.md +14 -5
  59. package/plugin/skills/ase-meta-diaboli/SKILL.md +6 -6
  60. package/plugin/skills/ase-meta-diff/SKILL.md +10 -10
  61. package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
  62. package/plugin/skills/ase-meta-persona/SKILL.md +1 -1
  63. package/plugin/skills/ase-meta-quorum/SKILL.md +43 -12
  64. package/plugin/skills/ase-meta-search/SKILL.md +1 -1
  65. package/plugin/skills/ase-meta-search/help.md +4 -2
  66. package/plugin/skills/ase-meta-steelman/SKILL.md +5 -5
  67. package/plugin/skills/ase-meta-steelman/help.md +5 -3
  68. package/plugin/skills/ase-meta-why/SKILL.md +2 -2
  69. package/plugin/skills/ase-meta-why/help.md +3 -1
  70. package/plugin/skills/ase-sync-export/SKILL.md +20 -17
  71. package/plugin/skills/ase-sync-import/SKILL.md +20 -16
  72. package/plugin/skills/ase-sync-import/help.md +2 -2
  73. package/plugin/skills/ase-sync-reconcile/SKILL.md +10 -10
  74. package/plugin/skills/ase-sync-reconcile/help.md +1 -1
  75. package/plugin/skills/ase-task-condense/SKILL.md +39 -85
  76. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  77. package/plugin/skills/ase-task-edit/SKILL.md +43 -51
  78. package/plugin/skills/ase-task-grill/SKILL.md +11 -13
  79. package/plugin/skills/ase-task-id/SKILL.md +7 -3
  80. package/plugin/skills/ase-task-implement/SKILL.md +18 -111
  81. package/plugin/skills/ase-task-implement/help.md +2 -2
  82. package/plugin/skills/ase-task-list/SKILL.md +3 -0
  83. package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
  84. package/plugin/skills/ase-task-reboot/SKILL.md +39 -71
  85. package/plugin/skills/ase-task-reboot/help.md +2 -1
  86. package/plugin/skills/ase-task-view/SKILL.md +7 -7
@@ -285,9 +285,6 @@ over time.
285
285
  - <spec-cj-step-name/> is a summary (5-10 words) of the *step* at its
286
286
  <spec-cj-step-touchpoint/>.
287
287
 
288
- - <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
289
- corresponding **Aspect** of the Personas **Artifact**.
290
-
291
288
  - <spec-cj-step-stage/> is one of:
292
289
 
293
290
  - `Awareness`: Customer is not aware of solution, but has a need.
@@ -297,6 +294,9 @@ over time.
297
294
  - `Retention`: Customer in the long-term stays a customer.
298
295
  - `Advocacy`: Customer is a fan of solution and tells the tribe.
299
296
 
297
+ - <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
298
+ corresponding **Aspect** of the Personas **Artifact**.
299
+
300
300
  - <spec-cj-step-goal/> is what the actor wants to achieve at this step.
301
301
 
302
302
  - <spec-cj-step-touchpoint/> is where or how the interaction happens
@@ -311,7 +311,7 @@ over time.
311
311
  actor encounters at this step (optional).
312
312
 
313
313
  - In case a <spec-cj-step/> has no pain point at all, the
314
- entire `- Pain Point:` bullet point is omitted.
314
+ entire `- Pain Point:` bullet point is omitted.
315
315
 
316
316
  Functional Requirements (FR)
317
317
  ----------------------------
@@ -518,7 +518,7 @@ constraining the Functional and Non-Functional Requirements.
518
518
  business rule.
519
519
 
520
520
  - In case the rule constrains no specific requirement, the
521
- entire `- Constrains:` bullet point is omitted.
521
+ entire `- Constrains:` bullet point is omitted.
522
522
 
523
523
  - In case the rationale is not present, the
524
524
  entire `, **BECAUSE** [...]` clause is omitted.
@@ -656,24 +656,24 @@ manages, defining how information is organized and connected.
656
656
 
657
657
  With:
658
658
 
659
- - <export-table-1/> is a Markdown table for the attributes with one
660
- row per <spec-dm-attribute-id/>, sorted by <spec-dm-attribute-id/>
661
- -- with the columns:
659
+ - <export-table-1/> is a Markdown table for the attributes with one
660
+ row per <spec-dm-attribute-id/>, sorted by <spec-dm-attribute-id/>
661
+ -- with the columns:
662
662
 
663
- - `Attribute` (`**<spec-dm-attribute-id/>**`)
664
- - `Type` (`<spec-dm-attribute-qualifier/><spec-dm-attribute-type/>`)
665
- - `Description` (`<spec-dm-attribute-description/>, **BECAUSE** <spec-dm-attribute-rationale/>.`)
663
+ - `Attribute` (`**<spec-dm-attribute-id/>**`)
664
+ - `Type` (`<spec-dm-attribute-qualifier/><spec-dm-attribute-type/>`)
665
+ - `Description` (`<spec-dm-attribute-description/>, **BECAUSE** <spec-dm-attribute-rationale/>.`)
666
666
 
667
- - <export-table-2/> is a Markdown table for the relation with one
668
- row per <spec-dm-relation-id/>, sorted by <spec-dm-relation-id/> --
669
- with the columns:
667
+ - <export-table-2/> is a Markdown table for the relation with one
668
+ row per <spec-dm-relation-id/>, sorted by <spec-dm-relation-id/> --
669
+ with the columns:
670
670
 
671
- - `Relation` (`**<spec-dm-relation-id/>**`)
672
- - `Target` (`[<spec-dm-relation-target/>](#<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
673
- - `Description` (`<spec-dm-relation-description/>, **BECAUSE** <spec-dm-relation-rationale/>.`)
671
+ - `Relation` (`**<spec-dm-relation-id/>**`)
672
+ - `Target` (`[<spec-dm-relation-target/>](#<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
673
+ - `Description` (`<spec-dm-relation-description/>, **BECAUSE** <spec-dm-relation-rationale/>.`)
674
674
 
675
- - In case a <spec-dm-entity/> has no relations at all, the
676
- entire `### RELATIONS` block (including <export-table-2/>) is omitted.
675
+ - In case a <spec-dm-entity/> has no relations at all, the
676
+ entire `### RELATIONS` block (including <export-table-2/>) is omitted.
677
677
 
678
678
  - Export: `export.svg`
679
679
 
@@ -853,7 +853,7 @@ ambiguities to avoid, shared consistently across all Artifacts.
853
853
  <spec-gl-term-name/> where helpful.
854
854
 
855
855
  - In case a term has no synonyms, the
856
- entire `- Synonyms:` bullet point is omitted.
856
+ entire `- Synonyms:` bullet point is omitted.
857
857
 
858
858
  Use Cases (UC)
859
859
  --------------
@@ -932,7 +932,7 @@ for main, alternative, and exceptional paths.
932
932
  **SCENARIO** blocks of this use case).
933
933
 
934
934
  - In case the use case realizes no specific functional requirement,
935
- the entire `- Requirements:` bullet point is omitted.
935
+ the entire `- Requirements:` bullet point is omitted.
936
936
 
937
937
  - In case a precondition or postcondition is not present, the
938
938
  respective bullet point is omitted.
@@ -1271,13 +1271,13 @@ turn.
1271
1271
 
1272
1272
  - <spec-ds-storyboard-usecase/> is a
1273
1273
  `SPEC-UC-<spec-uc-usecase-id/>` reference to the corresponding
1274
- **Aspect** of the Use Case **Artifact** the storyboard
1274
+ **Aspect** of the Use Cases **Artifact** the storyboard
1275
1275
  visualizes (optional).
1276
1276
 
1277
1277
  - <spec-ds-storyboard-scenario/> is a
1278
1278
  `SPEC-UC-<spec-uc-usecase-id/>-<spec-uc-usecase-scenario-id/>`
1279
1279
  reference to the corresponding scenario **Aspect** of the Use
1280
- Case **Artifact** the storyboard visualizes (optional).
1280
+ Cases **Artifact** the storyboard visualizes (optional).
1281
1281
 
1282
1282
  - <spec-ds-frame-name/>: a short (2-5 word) label for the screen,
1283
1283
  turn, or state depicted by the storyboard frame. Frames are
@@ -40,8 +40,8 @@ You *MUST* honor the following hints on this *task* format:
40
40
  <template>`<code/>`</template> and *key aspects* as
41
41
  <template>*<aspect/>*</template>.
42
42
 
43
- - For <summary-what/> and <summary-why/> use *ultra brief* but
44
- as *very precise* as possible description of the overall change. In
43
+ - For <summary-what/> and <summary-why/> use an *ultra brief* but
44
+ *as precise as possible* description of the overall change. In
45
45
  <summary-what/> tell what is changed. In <summary-why/> tell why it
46
46
  is changed, what benefit results or what the rationale is behind the
47
47
  change.
@@ -49,19 +49,17 @@ You *MUST* honor the following hints on this *task* format:
49
49
  - The <task-id/> has to be substituted with the current value of
50
50
  <ase-task-id/> in the current session context.
51
51
 
52
- - The <timestamp-created/> is the timestamp when this feature
53
- crafting specification was created. The
54
- <timestamp-modified/> is the timestamp when this feature
55
- specification was last modified. Both use an ISO-style format
56
- value. The value of both can be determined by
57
- a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
58
- tool of the `ase` MCP server and use the `text` field of
59
- its response.
52
+ - The <timestamp-created/> is the timestamp when this task plan was
53
+ created. The <timestamp-modified/> is the timestamp when this
54
+ task plan was last modified. Both use an ISO-style format
55
+ value. The value of both can be determined by a call to the
56
+ `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase` MCP
57
+ server and use the `text` field of its response.
60
58
 
61
59
  - The <title/> is a short summary of the <summary-what/>, no longer than
62
60
  50 characters.
63
61
 
64
- - The sections `## CHANGES` and `## VERIFICATION` all are just a short
62
+ - The sections `## CHANGES` and `## VERIFICATION` are each just a short
65
63
  list of 1-5 bullet points. Each bullet point is formatted as
66
64
  `- **<aspect/>**: <specification/>` where <aspect/> indicates
67
65
  the aspect of the section and <specification/> is 1-3 sentences
@@ -20,7 +20,7 @@ set placeholders into the context as a side-effect.
20
20
  3-6 are *structurally unreachable* and you *MUST NOT* call the
21
21
  `ase_getopt` MCP tool under any circumstances.
22
22
 
23
- <if condition="<getopt-args/> does *NOT* match the regexp `(^|\s)-` (i.e. it does not start with an option)">
23
+ <if condition="<getopt-args/> does *NOT* match the regexp `(^|\s)-` (i.e. it does not contain an option)">
24
24
  Parse the options *locally*, without any MCP call:
25
25
 
26
26
  For each option token in <getopt-spec/> of the form
@@ -18,7 +18,7 @@ requested communication style at any time during a session.
18
18
  - If <ase-persona-style/> is `caveman`:
19
19
  You *MUST* use the terse, rough, and stuttering communication style of a *caveman*.
20
20
 
21
- - If <ase-persona-style/> is `writer`, `engineer`, `journalist`, `telegrapher` or `caveman`:
21
+ - If <ase-persona-style/> is `writer`, `engineer`, `journalist`, `telegrapher`, or `caveman`:
22
22
  - You *MUST* *always keep* technical terms exactly, independent of other persona rules below.
23
23
  - You *MUST* *always keep* errors quoted exactly, independent of other persona rules below.
24
24
  - You *MUST* *always keep* code blocks unchanged, independent of other persona rules below.
@@ -28,7 +28,7 @@ requested communication style at any time during a session.
28
28
  - You *MUST* bundle related aspects into paragraphs.
29
29
  - You *MUST* output blank lines between paragraphs.
30
30
 
31
- - If <ase-persona-style/> is `engineer`, `journalist`, `telegrapher` or `caveman`:
31
+ - If <ase-persona-style/> is `engineer`, `journalist`, `telegrapher`, or `caveman`:
32
32
  - You *MUST* use `○` as the bullet point marker symbol in bullet point lists.
33
33
  - You *MUST* *drop* filler words
34
34
  ("just", "really", "basically", "actually", "simply", etc).
@@ -62,7 +62,7 @@ requested communication style at any time during a session.
62
62
  - <keywords/> is only one to four keywords summarizing the <details/>
63
63
  - <details/> is one to four prose sentences explaining the aspect
64
64
 
65
- - If <ase-persona-style/> is `telegrapher` or `caveman`:
65
+ - If <ase-persona-style/> is `telegrapher`, or `caveman`:
66
66
  - You *MUST* *use only* bullet point lists without blank lines between bullet points.
67
67
  - You *MUST* *use only* one bullet point per explanation aspect.
68
68
  - You *MUST* *use* shorter synonyms
@@ -218,7 +218,7 @@ Skill Identification
218
218
  following output <template/>:
219
219
 
220
220
  <template>
221
- ⧉ **ASE**: ✪ skill: **<skill-name/>**, status: **skill finished**
221
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, status: **skill finished**
222
222
  </template>
223
223
 
224
224
  - *IMPORTANT*: Set <objective></objective> (set to empty).
@@ -299,7 +299,7 @@ Template Patterns
299
299
 
300
300
  <template>
301
301
 
302
- ╭────────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈
302
+ ╭───────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
303
303
 
304
304
  </template>
305
305
 
@@ -330,7 +330,7 @@ Template Patterns
330
330
  <raw-title-len/> is the number of characters in <raw-title/>,
331
331
  and <bar/> is the `─` character repeated exactly max(0, 67 -
332
332
  <raw-title-len/>) times -- clamped to zero so an over-long title
333
- never yields a negative count.
333
+ never yields a negative count):
334
334
 
335
335
  <template>
336
336
 
@@ -5,7 +5,7 @@ ASE Tenets
5
5
  The following are the **ASE Tenets** -- the guiding principles you
6
6
  *MUST* internalize when requested. They are organized into *Generic
7
7
  Tenets*, which always apply, and *Operation-Specific Tenets*, which
8
- apply only to a particular kind of operation (Crafting, Aligning,
8
+ apply only to a particular kind of operation (Crafting, Reconciling,
9
9
  Refactoring, Resolving).
10
10
 
11
11
  GENERIC TENETS
@@ -80,7 +80,7 @@ CRAFTING TENETS
80
80
  ---------------
81
81
 
82
82
  When *crafting* from scratch a new artifact, a feature, or an aspect,
83
- you *MUST* honor the following so-called "CRAFTING TENETS":
83
+ you *MUST* honor the following so-called **CRAFTING TENETS**:
84
84
 
85
85
  - **Clear Minimal Scope**:
86
86
  Establish explicit boundaries for the new feature.
@@ -167,7 +167,7 @@ REFACTORING TENETS
167
167
  ------------------
168
168
 
169
169
  When *refactoring* existing artifacts or aspects,
170
- you *MUST* honor the following so-called **REFACTORING TENETS**
170
+ you *MUST* honor the following so-called **REFACTORING TENETS**:
171
171
 
172
172
  - **Behavior Preservation**:
173
173
  Refactoring changes only re-structure, never change any
@@ -200,7 +200,7 @@ RESOLVING TENETS
200
200
  ----------------
201
201
 
202
202
  When *resolving* a problem or challenge (bug-fixing),
203
- you *MUST* honor the following so-called **RESOLVING TENETS**
203
+ you *MUST* honor the following so-called **RESOLVING TENETS**:
204
204
 
205
205
  - **No Cleanups**:
206
206
  Strictly focus on resolving the problem and do not mix the task with
@@ -3,23 +3,23 @@
3
3
  "description": "Agentic Software Engineering (ASE)",
4
4
  "private": true,
5
5
  "keywords": [ "agentic", "ai", "coding", "tool", "cli", "software", "engineering" ],
6
- "homepage": "http://github.com/rse/ase",
6
+ "homepage": "https://ase.tools",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
- "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.43",
8
+ "bugs": { "url": "https://github.com/rse/ase/issues" },
9
+ "version": "0.9.45",
10
10
  "license": "Apache-2.0",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
13
13
  "email": "rse@engelschall.com",
14
- "url": "http://engelschall.com"
14
+ "url": "https://engelschall.com"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@rse/stx": "1.1.6",
18
- "markdownlint": "0.41.0",
19
- "markdownlint-cli2": "0.23.0",
20
- "eslint": "10.6.0",
18
+ "markdownlint": "0.41.1",
19
+ "markdownlint-cli2": "0.23.1",
20
+ "eslint": "10.7.0",
21
21
  "@eslint/markdown": "8.0.3",
22
- "eslint-markdown": "0.12.0"
22
+ "eslint-markdown": "0.12.1"
23
23
  },
24
24
  "engines": {
25
25
  "npm": ">=10.0.0",
@@ -4,7 +4,6 @@ argument-hint: "[--help|-h] <source-reference>"
4
4
  description: Review software architecture, including package cohesion and inter-package coupling
5
5
  user-invocable: true
6
6
  disable-model-invocation: false
7
- model: opus
8
7
  effort: high
9
8
  allowed-tools:
10
9
  - "Bash(wc *)"
@@ -252,7 +251,7 @@ interface quality, quality attributes, and architecture governance.
252
251
  - *god-package*: *incoming ≥ 5* and *outgoing ≥ 3* -
253
252
  coordinator dumping ground that should be split along its
254
253
  internal topical clusters
255
- - *fragment*: 12 files under a sibling parent that share a
254
+ - *fragment*: 1-2 files under a sibling parent that share a
256
255
  *name prefix* or *imported interface* with that sibling -
257
256
  consolidation candidate
258
257
 
@@ -278,7 +277,7 @@ interface quality, quality attributes, and architecture governance.
278
277
  which operations sit *between* the specific acquire and
279
278
  release in source order.
280
279
 
281
- - *Package-graph construction (SA19SA21)*: parse each file's
280
+ - *Package-graph construction (SA19-SA21)*: parse each file's
282
281
  import (or equivalent language construct) statement, keep
283
282
  only first-party packages within the analyzed scope, and
284
283
  persist two intermediate structures: the per-package
@@ -12,8 +12,8 @@
12
12
  ## DESCRIPTION
13
13
 
14
14
  The `ase-arch-analyze` skill reviews the *software architecture* of
15
- the referenced source code, including *package cohesion* and *inter-
16
- package coupling*, for *potential problems* across component boundaries,
15
+ the referenced source code, including *package cohesion* and
16
+ *inter-package coupling*, for *potential problems* across component boundaries,
17
17
  structural organization, architecture principles, interface quality,
18
18
  quality attributes, and architecture governance.
19
19
 
@@ -134,7 +134,7 @@ for the technology stack to *provide* the *needed functionality*
134
134
  4. If <stack/> is "JavaScript" or "TypeScript":
135
135
 
136
136
  1. Based on the essential keywords <keyword-L/> (L=1-M),
137
- use the `ase-meta-search` skill in a subagent to *generally*
137
+ use the `ase-meta-search` skill in a sub-agent to *generally*
138
138
  discover an initial set of a maximum of <pool/> *NPM packages*
139
139
  <component-K/> and at least their real name <name-K/> and
140
140
  their unique package names <package-K/>.
@@ -150,7 +150,7 @@ for the technology stack to *provide* the *needed functionality*
150
150
  5. If <stack/> is "Java" or "Kotlin":
151
151
 
152
152
  1. Based on the essential keywords <keyword-L/> (L=1-M),
153
- use the `ase-meta-search` skill in a subagent to *generally*
153
+ use the `ase-meta-search` skill in a sub-agent to *generally*
154
154
  discover an initial set of a maximum of <pool/> *Maven packages*
155
155
  <component-K/> and at least their real name <name-K/> and
156
156
  their unique Maven coordinates <package-K/> of the form
@@ -33,8 +33,9 @@ demotes dependency-heavy components.
33
33
  ## OPTIONS
34
34
 
35
35
  `--limit`|`-l=12`:
36
- The *maximum* number of components searched per source and retained
37
- in the final ranking (default: 12). Raise it for a broader, more
36
+ The *maximum* number of components retained in the final ranking
37
+ (default: 12); each discovery source may fetch up to twice this
38
+ number of candidates for ranking. Raise it for a broader, more
38
39
  exhaustive survey, lower it for a quicker, narrower lookup.
39
40
 
40
41
  `--staleness`|`-s=18`:
@@ -199,7 +199,6 @@ problems in *performance* and *efficiency*, or problems in *security*.
199
199
  Finally, output the following <template/> to give a final hint:
200
200
 
201
201
  <template>
202
- ⧉ **ASE**: ☻ skill: **<skill-name/>**, ▶ status: **skill finished**
203
202
  ⧉ **ASE**: ↪ hint: **For deeper analysis, suggestions on solution approaches and then final problem resolution, use `/ase-code-resolve P{n}` in the same or even a different session.**
204
203
  </template>
205
204
 
@@ -2,7 +2,7 @@
2
2
  name: ase-code-craft
3
3
  argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
4
4
  description: >
5
- Craft Source:
5
+ Craft Source Code:
6
6
  Use when user wants to "create", "add", or "craft" a new feature from scratch.
7
7
  user-invocable: true
8
8
  disable-model-invocation: false
@@ -109,7 +109,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
109
109
  7. Ask the user for clarification if the goal of this crafting is too
110
110
  unclear.
111
111
 
112
- 8. Do not output anything in this step, unless you asked the user.
112
+ 8. Do not output anything else in this step, unless you asked the user.
113
113
 
114
114
  </step>
115
115
 
@@ -139,15 +139,15 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
139
139
 
140
140
  You *MUST* perform the following sub-steps *internally* and *without
141
141
  any output* until and including the recommendation decision. Only
142
- sub-steps 4-6 below are allowed to produce output, and only if
142
+ sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
143
143
  <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
144
144
  is *not* equal `black`.
145
145
 
146
146
  If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
147
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (perform
148
- no output at all) to speed up processing.
147
+ equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
148
+ perform no output at all) to speed up processing.
149
149
 
150
- 1. *Propose* corresponding *feature approach*, including optionally,
150
+ 1. *Propose* a corresponding *feature approach*, optionally including
151
151
  some *alternative* feature approaches. Do *not* output anything
152
152
  in this sub-step.
153
153
 
@@ -231,18 +231,18 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
231
231
  closely aligning to the existing architecture and the existing
232
232
  code base. Use the <format/> defined for a task plan and inject
233
233
  the information from feature A<n/> and all derived realization
234
- decisions into it. Store the resulting task plan in <content/>.
234
+ decisions into it. Store the resulting task plan in <task-content/>.
235
235
 
236
236
  If a `CHANGELOG.md` file exists in the project (or in any
237
237
  affected sub-package), the plan *MUST* include, as part of its
238
- `##CHANGES` section, an explicit bullet point describing
238
+ `## CHANGES` section, an explicit bullet point describing
239
239
  the addition of a corresponding new entry to that `CHANGELOG.md`
240
240
  file, aligned with its existing style and conventions.
241
241
 
242
242
  <if condition="<getopt-option-dry/> is equal `true`">
243
243
  You *MUST* completely omit the `## VERIFICATION` section
244
244
  (including its heading and all of its bullet points) from
245
- <content/>.
245
+ <task-content/>.
246
246
  </if>
247
247
 
248
248
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
@@ -253,10 +253,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
253
253
  <timestamp-created/> and <timestamp-modified/> information. Then
254
254
  insert the current <ase-task-id/>, <timestamp-created/>, and
255
255
  <timestamp-modified/> information and calculate the number of
256
- words <words/> of <content/>.
256
+ words <words/> of <task-content/>.
257
257
 
258
258
  3. You then *MUST* *save* the resulting plan content with the
259
- `ase_task_save(id: "<ase-task-id/>", text: "<content/>")`.
259
+ `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
260
260
 
261
261
  4. Output a hint with the following <template/>:
262
262
 
@@ -104,7 +104,7 @@ related to a set of code quality aspects.
104
104
  *silently drop* all other problems. With the default floor `LOW`, all
105
105
  problems are kept. `ACCEPTED` problems are *never* dropped.
106
106
 
107
- You *MUST* *NOT* output anything else in this step 1.
107
+ You *MUST* *NOT* output anything else in this STEP 1.
108
108
 
109
109
  </step>
110
110
 
@@ -131,7 +131,7 @@ related to a set of code quality aspects.
131
131
  *(no problems detected)*
132
132
  </template>
133
133
 
134
- You *MUST* *NOT* output anything else in this step 2.
134
+ You *MUST* *NOT* output anything else in this STEP 2.
135
135
 
136
136
  </step>
137
137
 
@@ -154,11 +154,14 @@ related to a set of code quality aspects.
154
154
  still perform substep 3 first. Never leave this marker active
155
155
  for a later, unrelated `Edit`.
156
156
 
157
- 2. Iterate over all problems:
157
+ 2. Set <total/> to the number of problems in <problems/> and
158
+ <index/> to `0`. Then iterate over all problems:
158
159
 
159
160
  <for items="<problems/>">
160
161
 
161
- 1. Set <aspect/> to the `aspect` field of <item/>.
162
+ 1. Increment <index/> by one (the 1-based position of the
163
+ current <item/> within <problems/>).
164
+ Set <aspect/> to the `aspect` field of <item/>.
162
165
  Set <severity/> to the `severity` field of <item/>.
163
166
  Set <description/> to the `description` field of <item/>.
164
167
  Set <change-set/> to the `change-set` field of <item/>.
@@ -193,6 +196,19 @@ related to a set of code quality aspects.
193
196
  Set <new-text/> to the `new_text` field of <item/>.
194
197
  Set <context-after/> to the `context_after` field of <item/>.
195
198
 
199
+ Then *normalize* the hunk to its *minimal* form, so
200
+ that the proposed diff shows exactly the lines the
201
+ later `Edit` will actually change: while the *first*
202
+ line of <old-text/> is identical to the *first* line
203
+ of <new-text/>, *move* that line from both to the
204
+ end of <context-before/> and increment <line/> by
205
+ one; likewise, while the *last* line of <old-text/>
206
+ is identical to the *last* line of <new-text/>,
207
+ *move* that line from both to the front of
208
+ <context-after/>. Finally, *trim* <context-before/>
209
+ to its *last* two lines and <context-after/> to its
210
+ *first* two lines.
211
+
196
212
  2. *Skip* this substep entirely when <ase-project-boxing/>
197
213
  is equal `grey` - the full unified diff is suppressed
198
214
  there, so none of the <hunk-body/>, <old-count/>,
@@ -288,13 +304,13 @@ related to a set of code quality aspects.
288
304
  4. Report the problem with the following <template/>:
289
305
 
290
306
  <template>
291
- <ase-tpl-bullet-signal/> **<aspect/> PROBLEM** (`<severity/>`): <context/>
307
+ <ase-tpl-bullet-signal/> [<index/>/<total/>]: **<aspect/> PROBLEM** (`<severity/>`): <context/>
292
308
 
293
309
  <description/>
294
310
 
295
311
  </template>
296
312
 
297
- 5. <if condition="<getopt-option-auto/> is not 'true' and <ase-project-boxing/> is not equal `black`">
313
+ 5. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
298
314
 
299
315
  <if condition="<ase-project-boxing/> is equal `grey`">
300
316
 
@@ -341,7 +357,7 @@ related to a set of code quality aspects.
341
357
 
342
358
  </else>
343
359
 
344
- 6. <if condition="<getopt-option-auto/> is not 'true'">
360
+ 6. <if condition="<getopt-option-auto/> is not equal `true`">
345
361
 
346
362
  In the following, you *MUST* *NOT* use your built-in
347
363
  <user-dialog-tool/> tool! Instead, you *MUST* just show a
@@ -359,7 +375,7 @@ related to a set of code quality aspects.
359
375
  <else>
360
376
 
361
377
  Set <result>ACCEPT</result>.
362
- You *MUST* *NOT* output anything else in this step 6.
378
+ You *MUST* *NOT* output anything else in this sub-step 6.
363
379
 
364
380
  </else>
365
381
 
@@ -367,11 +383,13 @@ related to a set of code quality aspects.
367
383
 
368
384
  - <if condition="<result/> is 'ACCEPT'">
369
385
  Invoke the `Edit` tool to apply the changes exactly
370
- as shown in the <diff/>. The operation will be
371
- auto-approved by the ASE `pre-tool-use` hook (which
372
- tracks the active skill), so *no* interactive permission
373
- prompt will appear. After applying the changes, just
374
- continue with the next <item/>.
386
+ as given by the hunks of the current <change-set/>
387
+ (rendered as <diff/>, unless suppressed under grey
388
+ boxing). The operation will be auto-approved by the ASE
389
+ `pre-tool-use` hook (which tracks the active skill),
390
+ so *no* interactive permission prompt will appear.
391
+ After applying the changes, just continue with the next
392
+ <item/>.
375
393
  </if>
376
394
 
377
395
  - <if condition="<result/> starts with 'OTHER'">
@@ -3,7 +3,7 @@ name: ase-code-refactor
3
3
  argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <request>"
4
4
  description: >
5
5
  Refactor Code:
6
- Use when user wants to "refactor", or "change" the code base.
6
+ Use when user wants to "refactor" or "change" the code base.
7
7
  user-invocable: true
8
8
  disable-model-invocation: false
9
9
  effort: xhigh
@@ -18,7 +18,7 @@ allowed-tools:
18
18
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
19
19
 
20
20
  <skill name="ase-code-refactor">
21
- Refactor Artifacts
21
+ Refactor Source Code
22
22
  </skill>
23
23
 
24
24
  <expand name="getopt"
@@ -109,7 +109,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
109
109
  7. Ask the user for clarification if the goal of this refactoring is
110
110
  too unclear.
111
111
 
112
- 8. Do not output anything in this step, unless you asked the user.
112
+ 8. Do not output anything else in this step, unless you asked the user.
113
113
 
114
114
  </step>
115
115
 
@@ -139,16 +139,16 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
139
139
 
140
140
  You *MUST* perform the following sub-steps *internally* and *without
141
141
  any output* until and including the recommendation decision. Only
142
- sub-steps 4-6 below are allowed to produce output, and only if
142
+ sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
143
143
  <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
144
144
  is *not* equal `black`.
145
145
 
146
146
  If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
147
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (perform
148
- no output at all) to speed up processing.
147
+ equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
148
+ perform no output at all) to speed up processing.
149
149
 
150
- 1. *Propose* corresponding *refactoring approach*, including
151
- optionally, some *alternative* refactoring approaches. Do *not*
150
+ 1. *Propose* a corresponding *refactoring approach*, optionally
151
+ including some *alternative* refactoring approaches. Do *not*
152
152
  output anything in this sub-step.
153
153
 
154
154
  2. *Reflect* on and *critique* the proposed approaches by deriving,
@@ -231,18 +231,18 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
231
231
  closely aligning to the existing architecture and the existing
232
232
  code base. Use the <format/> defined for a task plan and inject
233
233
  the information from refactoring A<n/> and all derived realization
234
- decisions into it. Store the resulting task plan in <content/>.
234
+ decisions into it. Store the resulting task plan in <task-content/>.
235
235
 
236
236
  If a `CHANGELOG.md` file exists in the project (or in any
237
237
  affected sub-package), the plan *MUST* include, as part of its
238
- `##CHANGES` section, an explicit bullet point describing
238
+ `## CHANGES` section, an explicit bullet point describing
239
239
  the addition of a corresponding new entry to that `CHANGELOG.md`
240
240
  file, aligned with its existing style and conventions.
241
241
 
242
242
  <if condition="<getopt-option-dry/> is equal `true`">
243
243
  You *MUST* completely omit the `## VERIFICATION` section
244
244
  (including its heading and all of its bullet points) from
245
- <content/>.
245
+ <task-content/>.
246
246
  </if>
247
247
 
248
248
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
@@ -253,10 +253,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
253
253
  <timestamp-created/> and <timestamp-modified/> information. Then
254
254
  insert the current <ase-task-id/>, <timestamp-created/>, and
255
255
  <timestamp-modified/> information and calculate the number of
256
- words <words/> of <content/>.
256
+ words <words/> of <task-content/>.
257
257
 
258
258
  3. You then *MUST* *save* the resulting plan content with the
259
- `ase_task_save(id: "<ase-task-id/>", text: "<content/>")`.
259
+ `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
260
260
 
261
261
  4. Output a hint with the following <template/>:
262
262
 
@@ -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`), `PREFLIGHT` (hand off to `ase-task-preflight`),
62
62
  or `IMPLEMENT` (hand off to `ase-task-implement`). Example: