@rse/ase 0.0.59 → 0.0.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/etc/markdownlint.yaml +2 -0
- package/plugin/meta/ase-skill.md +80 -37
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
- package/plugin/skills/ase-arch-discover/SKILL.md +4 -4
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +10 -4
- package/plugin/skills/ase-code-craft/help.md +8 -0
- package/plugin/skills/ase-code-explain/SKILL.md +6 -6
- package/plugin/skills/ase-code-insight/SKILL.md +4 -4
- package/plugin/skills/ase-code-lint/SKILL.md +9 -9
- package/plugin/skills/ase-code-refactor/SKILL.md +10 -4
- package/plugin/skills/ase-code-refactor/help.md +8 -0
- package/plugin/skills/ase-code-resolve/SKILL.md +12 -6
- package/plugin/skills/ase-code-resolve/help.md +8 -0
- package/plugin/skills/ase-docs-proofread/SKILL.md +5 -5
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +220 -0
- package/plugin/skills/ase-meta-brainstorm/help.md +51 -0
- package/plugin/skills/ase-meta-changes/SKILL.md +5 -5
- package/plugin/skills/ase-meta-diaboli/SKILL.md +3 -3
- package/plugin/skills/ase-meta-diff/SKILL.md +301 -0
- package/plugin/skills/ase-meta-diff/help.md +81 -0
- package/plugin/skills/ase-meta-evaluate/SKILL.md +9 -9
- package/plugin/skills/ase-meta-why/SKILL.md +3 -3
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-edit/SKILL.md +2 -2
- package/plugin/skills/ase-task-grill/SKILL.md +2 -2
- package/plugin/skills/ase-task-view/SKILL.md +2 -2
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-brainstorm
|
|
3
|
+
argument-hint: "[--help|-h] <topic>"
|
|
4
|
+
description: >
|
|
5
|
+
Collaboratively brainstorm a topic by diverging on ideas, converging
|
|
6
|
+
through clustering and scoring, and distilling a shortlist with
|
|
7
|
+
a recommended direction. Use when the user wants to brainstorm,
|
|
8
|
+
explore ideas, ideate, or figure out *what* to build before *how* to
|
|
9
|
+
build it.
|
|
10
|
+
user-invocable: true
|
|
11
|
+
disable-model-invocation: false
|
|
12
|
+
effort: high
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
18
|
+
|
|
19
|
+
<skill name="ase-meta-brainstorm">
|
|
20
|
+
Collaboratively Brainstorm a Topic
|
|
21
|
+
</skill>
|
|
22
|
+
|
|
23
|
+
<objective>
|
|
24
|
+
Collaboratively brainstorm the topic <topic>$ARGUMENTS</topic> by first
|
|
25
|
+
*diverging* into a broad space of candidate ideas, then *converging*
|
|
26
|
+
through clustering and scoring, and finally distilling a *shortlist*
|
|
27
|
+
with a single recommended direction.
|
|
28
|
+
</objective>
|
|
29
|
+
|
|
30
|
+
Guiding Tenets
|
|
31
|
+
--------------
|
|
32
|
+
|
|
33
|
+
Honor the following tenets throughout the brainstorming:
|
|
34
|
+
|
|
35
|
+
- **No Assumption of Simplicity**:
|
|
36
|
+
Every topic goes through the full process — a one-line config
|
|
37
|
+
change as much as a new subsystem — because the simplest-looking
|
|
38
|
+
topics often hide the most harmful assumptions.
|
|
39
|
+
|
|
40
|
+
- **Explore Intent First**:
|
|
41
|
+
Understand the *purpose*, *constraints*, and *success criteria*
|
|
42
|
+
behind the topic before generating ideas, because ideas that
|
|
43
|
+
optimize the wrong goal are worse than no ideas.
|
|
44
|
+
|
|
45
|
+
- **Diverge Before Converge**:
|
|
46
|
+
Generate many candidate ideas without judging them first, because
|
|
47
|
+
premature evaluation collapses the space before the good ideas have
|
|
48
|
+
a chance to surface.
|
|
49
|
+
|
|
50
|
+
- **One Question at a Time**:
|
|
51
|
+
Ask a single, preferably multiple-choice question per dialog round,
|
|
52
|
+
because a wall of open questions overwhelms and yields shallow
|
|
53
|
+
answers.
|
|
54
|
+
|
|
55
|
+
- **YAGNI Ruthlessly**:
|
|
56
|
+
Actively prune ideas that serve speculative future needs rather
|
|
57
|
+
than the stated purpose, because unbuilt features still cost
|
|
58
|
+
clarity now.
|
|
59
|
+
|
|
60
|
+
- **Ground in Reality**:
|
|
61
|
+
Cross-check ideas against the existing code base, documented
|
|
62
|
+
context, and your world knowledge, because an idea that contradicts
|
|
63
|
+
what already exists is a defect, not an option.
|
|
64
|
+
|
|
65
|
+
- **Incremental Validation**:
|
|
66
|
+
Seek the user's confirmation at each phase boundary before
|
|
67
|
+
advancing, because converging on a misunderstanding wastes the
|
|
68
|
+
entire downstream effort.
|
|
69
|
+
|
|
70
|
+
<flow>
|
|
71
|
+
|
|
72
|
+
1. <step id="STEP 1: Restate Topic">
|
|
73
|
+
|
|
74
|
+
Restate the topic to be brainstormed by output the following <template/>:
|
|
75
|
+
|
|
76
|
+
<template>
|
|
77
|
+
<ase-tpl-bullet-secondary/> **TOPIC**: <topic/>
|
|
78
|
+
</template>
|
|
79
|
+
|
|
80
|
+
</step>
|
|
81
|
+
|
|
82
|
+
2. <step id="STEP 2: Clarify Intent">
|
|
83
|
+
|
|
84
|
+
Before generating any ideas, *explore the project context* (review
|
|
85
|
+
relevant existing files, documentation, and recent changes) and
|
|
86
|
+
determine the <m/> *essential unknowns* about the topic — the
|
|
87
|
+
purpose, constraints, scope boundaries, and success criteria that
|
|
88
|
+
must be pinned down for the brainstorming to be reasonably grounded.
|
|
89
|
+
|
|
90
|
+
For each essential unknown, derive a short 1-3 word facet <facet-M/>
|
|
91
|
+
and a corresponding question <question-M/> whose answer materially
|
|
92
|
+
changes which ideas make sense at all.
|
|
93
|
+
|
|
94
|
+
1. For each <question-M/> in the iteration cycle <M/> (<M/>=1...<m/>):
|
|
95
|
+
|
|
96
|
+
1. Output the following <template/>:
|
|
97
|
+
|
|
98
|
+
<template>
|
|
99
|
+
<ase-tpl-bullet-signal/> FACET <M/>/<m/>: **<facet-M/>**, QUESTION: **<question-M/>**
|
|
100
|
+
</template>
|
|
101
|
+
|
|
102
|
+
2. Determine *up to 4* grounded candidate answers
|
|
103
|
+
<answer-M-K/> (K={1,2,3,4}) from the code base, the documented
|
|
104
|
+
context, and your world knowledge.
|
|
105
|
+
|
|
106
|
+
3. Use an interactive user dialog with header <facet-M/> and
|
|
107
|
+
question <question-M/>, and let the user select the
|
|
108
|
+
<answer-M/> out of the candidate answers <answer-M-K/> (just
|
|
109
|
+
leave out all answers in case you have determined less than
|
|
110
|
+
4 potential answers)
|
|
111
|
+
|
|
112
|
+
<expand name="user-dialog">
|
|
113
|
+
<facet-M/>: <question-M/>
|
|
114
|
+
<answer-M-1/>: (first grounded candidate answer)
|
|
115
|
+
<answer-M-2/>: (second grounded candidate answer)
|
|
116
|
+
<answer-M-3/>: (third grounded candidate answer)
|
|
117
|
+
<answer-M-4/>: (forth grounded candidate answer)
|
|
118
|
+
</expand>
|
|
119
|
+
|
|
120
|
+
4. Output the following <template/>:
|
|
121
|
+
|
|
122
|
+
<template>
|
|
123
|
+
<ase-tpl-bullet-normal/> FACET <M/>/<m/>: **<facet-M/>**, ANSWER: **<answer-M/>**
|
|
124
|
+
</template>
|
|
125
|
+
|
|
126
|
+
2. If at any point <result/> is `CANCEL`:
|
|
127
|
+
Only output the following <template/> and then immediately *STOP*
|
|
128
|
+
processing the entire current skill:
|
|
129
|
+
|
|
130
|
+
<template>
|
|
131
|
+
⧉ **ASE**: ✪ skill: **ase-meta-brainstorm**, ▶ status: **brainstorm cancelled**
|
|
132
|
+
</template>
|
|
133
|
+
|
|
134
|
+
</step>
|
|
135
|
+
|
|
136
|
+
3. <step id="STEP 3: Diverge Idea Space">
|
|
137
|
+
|
|
138
|
+
Generate a *broad* space of candidate ideas that address the
|
|
139
|
+
<topic/> within the constraints established by the answers
|
|
140
|
+
<answer-M/>.
|
|
141
|
+
|
|
142
|
+
Deliberately pursue *diverse angles* — e.g. the minimal/MVP-first
|
|
143
|
+
angle, the robustness/risk-first angle, the user-experience-first
|
|
144
|
+
angle, the reuse-existing-machinery angle, the coolness angle, and
|
|
145
|
+
the unconventional/wildcard angle — because variety in origin yields
|
|
146
|
+
variety in outcome.
|
|
147
|
+
|
|
148
|
+
Do still *not* judge, rank, or prune ideas in this step. Generate
|
|
149
|
+
ideas until you either reach at least 12 distinct candidate ideas or
|
|
150
|
+
have clearly exhausted the meaningfully distinct space.
|
|
151
|
+
|
|
152
|
+
Store each candidate idea in <idea-N/> with the format
|
|
153
|
+
`**<idea-name-N/>**: <idea-statement-N/>` (where <idea-name-N/> is a
|
|
154
|
+
short 1-4 word summary and <idea-statement-N/> is a single-sentence
|
|
155
|
+
statement of not more than 40 words), and output the following
|
|
156
|
+
<template/>:
|
|
157
|
+
|
|
158
|
+
<template>
|
|
159
|
+
<ase-tpl-bullet-normal/> **IDEA <N/>**: <idea-N/>
|
|
160
|
+
</template>
|
|
161
|
+
|
|
162
|
+
</step>
|
|
163
|
+
|
|
164
|
+
4. <step id="STEP 4: Converge Idea Space">
|
|
165
|
+
|
|
166
|
+
Converge the candidate ideas <idea-N/> into a smaller, structured
|
|
167
|
+
sets and finally into a recommendation.
|
|
168
|
+
|
|
169
|
+
1. *Cluster*: group the candidate ideas into <c/> coherent clusters
|
|
170
|
+
<cluster-C/> (a short 1-4 word label, C=1...</c>), collapsing
|
|
171
|
+
near-duplicates and discarding ideas pruned by *You Aren't Gonna
|
|
172
|
+
Need It (YAGNI)* (speculative, out-of-scope, or contradicting
|
|
173
|
+
documented context).
|
|
174
|
+
|
|
175
|
+
For each cluster and its contained retained ideas, output the
|
|
176
|
+
following <template/> (<cluster-summary-C/> is a single-sentence
|
|
177
|
+
statement of not more than 40 words):
|
|
178
|
+
|
|
179
|
+
<template>
|
|
180
|
+
<ase-tpl-bullet-secondary/> **IDEA CLUSTER <C/>/<c/>**: <cluster-C/> — <cluster-summary-C/>,
|
|
181
|
+
**IDEAS**: <N/>, <M/>[, ...]
|
|
182
|
+
</template>
|
|
183
|
+
|
|
184
|
+
2. *Score*: for each retained idea <idea-N/> in the clusters, rank its *fit* against the
|
|
185
|
+
purpose and constraints on a Likert scale of 0 (poor) to 10
|
|
186
|
+
(excellent), considering *value*, *uniqueness*, *risk*, and
|
|
187
|
+
*alignment with the existing code base*. Keep only ideas in the
|
|
188
|
+
clusters with a rank of at least 7.
|
|
189
|
+
|
|
190
|
+
3. From the scored ideas <idea-N/>, distill a *shortlist* of the top
|
|
191
|
+
3-4 options, sorted by rank from highest to lowest.
|
|
192
|
+
|
|
193
|
+
For this, draw the shortlist from *distinct* clusters <cluster-C/>
|
|
194
|
+
wherever possible — prefer a diverse shortlist spanning different
|
|
195
|
+
clusters over several high-ranked variations of the same cluster,
|
|
196
|
+
unless one cluster clearly dominates on rank.
|
|
197
|
+
|
|
198
|
+
Store each distilled option in <option-N/> with the format
|
|
199
|
+
`**<option-name-N/>** (rank: <option-rank-N/>/10, cluster:
|
|
200
|
+
<option-cluster-N/>): <option-statement-N/>` (where the statement is
|
|
201
|
+
a single sentence of not more than 40 words capturing the direction
|
|
202
|
+
and its primary trade-off), and output the following <template/>:
|
|
203
|
+
|
|
204
|
+
<template>
|
|
205
|
+
<ase-tpl-bullet-normal/> **DISTILLED IDEA <N/>**: <option-N/>
|
|
206
|
+
</template>
|
|
207
|
+
|
|
208
|
+
4. Finally, derive a single *recommended idea* — the highest-ranked
|
|
209
|
+
option, or a principled synthesis of the option shortlist that preserves
|
|
210
|
+
what is strongest in each — store its one-sentence rationale (not
|
|
211
|
+
more than 40 words) in <recommendation/>, and output the following
|
|
212
|
+
<template/>:
|
|
213
|
+
|
|
214
|
+
<template>
|
|
215
|
+
<ase-tpl-bullet-signal/> **RECOMMENDED IDEA**: <recommendation/>
|
|
216
|
+
</template>
|
|
217
|
+
|
|
218
|
+
</step>
|
|
219
|
+
|
|
220
|
+
</flow>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-brainstorm` - Collaboratively Brainstorm a Topic
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-brainstorm`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
*topic*
|
|
11
|
+
|
|
12
|
+
## DESCRIPTION
|
|
13
|
+
|
|
14
|
+
The `ase-meta-brainstorm` skill guides a collaborative ideation
|
|
15
|
+
session on a *topic* *before* any implementation begins. It first
|
|
16
|
+
*clarifies intent* by exploring the project context and interviewing
|
|
17
|
+
the user — one grounded, multiple-choice question at a time — about
|
|
18
|
+
purpose, constraints, scope, and success criteria. It then *diverges*
|
|
19
|
+
into a broad space of candidate ideas pursued from deliberately diverse
|
|
20
|
+
angles (MVP-first, risk-first, UX-first, reuse-first, and wildcard),
|
|
21
|
+
without judging them.
|
|
22
|
+
|
|
23
|
+
Next it *converges* by clustering the ideas into coherent themes,
|
|
24
|
+
pruning speculative or out-of-scope ones via *YAGNI*, and scoring the
|
|
25
|
+
survivors on a 0-10 fit scale (keeping only those ranked 7 or higher).
|
|
26
|
+
Finally it distills a *shortlist* of the top 3-4 directions — drawn from
|
|
27
|
+
distinct clusters wherever possible — and derives a single
|
|
28
|
+
*RECOMMENDATION*, being either the highest-ranked option or a principled
|
|
29
|
+
synthesis of the shortlist.
|
|
30
|
+
|
|
31
|
+
On completion the skill offers a *next step*: stop, or hand the
|
|
32
|
+
recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
|
|
33
|
+
`ase-task-preflight` skills.
|
|
34
|
+
|
|
35
|
+
## ARGUMENTS
|
|
36
|
+
|
|
37
|
+
*topic*:
|
|
38
|
+
The subject to brainstorm — a feature, component, behavior, or
|
|
39
|
+
design question to explore *what* to build before *how*.
|
|
40
|
+
|
|
41
|
+
## EXAMPLES
|
|
42
|
+
|
|
43
|
+
Brainstorm an approach for a new feature:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
❯ /ase-meta-brainstorm an offline-first sync layer for the mobile app
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## SEE ALSO
|
|
50
|
+
|
|
51
|
+
`ase-meta-evaluate`, `ase-meta-quorum`, `ase-meta-diaboli`
|
|
@@ -63,7 +63,7 @@ Processing
|
|
|
63
63
|
following <template/>:
|
|
64
64
|
|
|
65
65
|
<template>
|
|
66
|
-
|
|
66
|
+
<ase-tpl-bullet-normal/> **CHANGELOG FILE:** `<filename/>`
|
|
67
67
|
</template>
|
|
68
68
|
|
|
69
69
|
</step>
|
|
@@ -74,7 +74,7 @@ Processing
|
|
|
74
74
|
operation with an output based on the following <template/>:
|
|
75
75
|
|
|
76
76
|
<template>
|
|
77
|
-
|
|
77
|
+
<ase-tpl-bullet-normal/> **DETERMINE ARTIFACT CHANGES:**
|
|
78
78
|
</template>
|
|
79
79
|
|
|
80
80
|
To update to entries of the most recent *ChangeLog* section, consult
|
|
@@ -102,7 +102,7 @@ Processing
|
|
|
102
102
|
operation with an output based on the following <template/>:
|
|
103
103
|
|
|
104
104
|
<template>
|
|
105
|
-
|
|
105
|
+
<ase-tpl-bullet-normal/> **COMPLETE ENTRIES:**
|
|
106
106
|
</template>
|
|
107
107
|
|
|
108
108
|
Without immediately modifying the `CHANGELOG.md` file, *complete*
|
|
@@ -127,7 +127,7 @@ Processing
|
|
|
127
127
|
operation with an output based on the following <template/>:
|
|
128
128
|
|
|
129
129
|
<template>
|
|
130
|
-
|
|
130
|
+
<ase-tpl-bullet-normal/> **CONSOLIDATE ENTRIES:**
|
|
131
131
|
</template>
|
|
132
132
|
|
|
133
133
|
Without immediately modifying the `CHANGELOG.md` file, *consolidate*
|
|
@@ -147,7 +147,7 @@ Processing
|
|
|
147
147
|
operation with an output based on the following <template/>:
|
|
148
148
|
|
|
149
149
|
<template>
|
|
150
|
-
|
|
150
|
+
<ase-tpl-bullet-signal/> **UPDATING CHANGELOG:**
|
|
151
151
|
</template>
|
|
152
152
|
|
|
153
153
|
Finally, *update* the `CHANGELOG.md` file with the completed,
|
|
@@ -27,7 +27,7 @@ effort: xhigh
|
|
|
27
27
|
Output the thesis with the following <template/>:
|
|
28
28
|
|
|
29
29
|
<template>
|
|
30
|
-
|
|
30
|
+
<ase-tpl-bullet-secondary/> **THESIS**: <thesis/>
|
|
31
31
|
</template>
|
|
32
32
|
|
|
33
33
|
2. **Determine Anti-Thesis**:
|
|
@@ -117,7 +117,7 @@ effort: xhigh
|
|
|
117
117
|
<template/>:
|
|
118
118
|
|
|
119
119
|
<template>
|
|
120
|
-
|
|
120
|
+
<ase-tpl-bullet-signal/> **ANTITHESIS**: <antithesis-N/>
|
|
121
121
|
</template>
|
|
122
122
|
|
|
123
123
|
3. **Dialectical Reasoning**:
|
|
@@ -147,6 +147,6 @@ effort: xhigh
|
|
|
147
147
|
in <synthesis/>, and then finally output the following <template/>:
|
|
148
148
|
|
|
149
149
|
<template>
|
|
150
|
-
|
|
150
|
+
<ase-tpl-bullet-normal/> **SYNTHESIS**: <synthesis/>
|
|
151
151
|
</template>
|
|
152
152
|
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-diff
|
|
3
|
+
argument-hint: "[--help|-h] [--risk|-r] [--blast|-b]"
|
|
4
|
+
description: >
|
|
5
|
+
Summarize the currently staged Git changes as a human-readable,
|
|
6
|
+
intent-grouped narrative. Use when the user wants a concise and
|
|
7
|
+
brief report of what changed and why. Optionally can show a risk and
|
|
8
|
+
blast radius report.
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
effort: high
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- "Bash(git diff *)"
|
|
14
|
+
- "Bash(git grep:*)"
|
|
15
|
+
- "Bash(git ls-files:*)"
|
|
16
|
+
- "Bash(grep:*)"
|
|
17
|
+
- "Agent"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
21
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
22
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
23
|
+
|
|
24
|
+
<skill name="ase-meta-diff">
|
|
25
|
+
Summarize Diff
|
|
26
|
+
</skill>
|
|
27
|
+
|
|
28
|
+
<expand name="getopt"
|
|
29
|
+
arg1="ase-meta-diff"
|
|
30
|
+
arg2="--risk|-r --blast|-b">
|
|
31
|
+
$ARGUMENTS
|
|
32
|
+
</expand>
|
|
33
|
+
|
|
34
|
+
<objective>
|
|
35
|
+
Summarize the currently staged Git changes into a *concise*,
|
|
36
|
+
*human-readable* narrative of what changed and why, *grouped by
|
|
37
|
+
intent* rather than by file. Optionally *score* the diff against a
|
|
38
|
+
*coupling-criticality-coverage- reversibility* rubric and emit a *graded
|
|
39
|
+
risk report* with *mitigations*. Optionally render a *blast-radius map*.
|
|
40
|
+
</objective>
|
|
41
|
+
|
|
42
|
+
Procedure
|
|
43
|
+
---------
|
|
44
|
+
|
|
45
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
46
|
+
You *MUST* not skip any numbered item during processing!
|
|
47
|
+
|
|
48
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
49
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
50
|
+
|
|
51
|
+
<flow>
|
|
52
|
+
|
|
53
|
+
1. <step id="STEP 1: Determine Change Set">
|
|
54
|
+
|
|
55
|
+
1. Determine the *diff details* by running the corresponding command
|
|
56
|
+
(taken exactly as given) and capturing the full diff output into
|
|
57
|
+
<diff/> for the subsequent analysis:
|
|
58
|
+
|
|
59
|
+
`git diff --cached HEAD`
|
|
60
|
+
|
|
61
|
+
2. Determine the *diff statistics* by running the corresponding command
|
|
62
|
+
(taken exactly as given) and capturing the full stat output into
|
|
63
|
+
<stat/> for the subsequent analysis:
|
|
64
|
+
|
|
65
|
+
`git diff --cached --numstat HEAD`
|
|
66
|
+
|
|
67
|
+
</step>
|
|
68
|
+
|
|
69
|
+
2. <step id="STEP 2: Summarize By Intent">
|
|
70
|
+
|
|
71
|
+
1. <if condition="<diff/> is empty">
|
|
72
|
+
Only output the following <template/> and then *STOP* immediately:
|
|
73
|
+
|
|
74
|
+
<template>
|
|
75
|
+
⧉ **ASE**: ✪ skill: **ase-meta-diff**, ▶ status: **no changes to summarize**
|
|
76
|
+
</template>
|
|
77
|
+
</if>
|
|
78
|
+
|
|
79
|
+
2. Analyze the <diff/> and <stat/> and synthesize a *concise* narrative of
|
|
80
|
+
WHAT changed and WHY, *grouped by intent* rather than by file.
|
|
81
|
+
Honor the following intents:
|
|
82
|
+
|
|
83
|
+
- `FEATURE`: new functionality or configuration
|
|
84
|
+
- `IMPROVEMENT`: improved functionality or configuration
|
|
85
|
+
- `BUGFIX`: corrected functionality or configuration
|
|
86
|
+
- `UPDATE`: updated functionality or configuration
|
|
87
|
+
- `CLEANUP`: cleaned up functionality or configuration
|
|
88
|
+
- `REFACTOR`: refactored functionality or configuration
|
|
89
|
+
|
|
90
|
+
3. <if condition="<diff/> is NOT empty">
|
|
91
|
+
1. First, output the following header <template/>:
|
|
92
|
+
|
|
93
|
+
<template>
|
|
94
|
+
|
|
95
|
+
<ase-tpl-bullet-normal/> **CHANGE INTENT REPORT**:
|
|
96
|
+
|
|
97
|
+
</template>
|
|
98
|
+
|
|
99
|
+
2. Render a *two-column table* with one row per discovered
|
|
100
|
+
*intent group* present in the <diff/>. Output the following
|
|
101
|
+
table header <template/>:
|
|
102
|
+
|
|
103
|
+
<template>
|
|
104
|
+
| Intent | Changes (LoC) | Files & Description |
|
|
105
|
+
| ------ | ------------- | ----------------------- |
|
|
106
|
+
</template>
|
|
107
|
+
|
|
108
|
+
3. For each discovered *intent group*, emit the following row
|
|
109
|
+
<template/>, where <intent/> is the intent label, <changes/>
|
|
110
|
+
is the total number of lines changes per feature in format
|
|
111
|
+
`+N/-M`, <files/> is the list of affected file references,
|
|
112
|
+
and <description/> is a *brief* one-to-two-sentence
|
|
113
|
+
narrative of what changed and why:
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
| **<intent/>** | <changes/> | <files/>: <description/> |
|
|
117
|
+
</template>
|
|
118
|
+
|
|
119
|
+
In the <files/> part of the second column, markup all file
|
|
120
|
+
references as code (with backticks), prepend them with `▢ `,
|
|
121
|
+
append ` [+N/-M]` (based on the information in <stat/>) to them,
|
|
122
|
+
and separate them with `, ` (a comma and space). Do *not* repeat
|
|
123
|
+
file references in the <description/>.
|
|
124
|
+
|
|
125
|
+
Keep the overall report *concise* and *brief*. Try to keep the
|
|
126
|
+
number of intent groups (table rows) in the range of 1-10. Do
|
|
127
|
+
*not* output any further explanation.
|
|
128
|
+
</if>
|
|
129
|
+
|
|
130
|
+
</step>
|
|
131
|
+
|
|
132
|
+
3. <step id="STEP 3: Score Against Risk Rubric (optional)">
|
|
133
|
+
|
|
134
|
+
1. <if condition="<getopt-option-risk/> is NOT equal `true`">
|
|
135
|
+
Silently *SKIP* this entire step.
|
|
136
|
+
</if>
|
|
137
|
+
|
|
138
|
+
2. <if condition="<diff/> is empty">
|
|
139
|
+
Silently *SKIP* this entire step (STEP 2 already reported it).
|
|
140
|
+
</if>
|
|
141
|
+
|
|
142
|
+
3. <if condition="<getopt-option-risk/> is equal `true` and <diff/> is NOT empty">
|
|
143
|
+
|
|
144
|
+
Score the *same* captured <diff/> and <stat/> information
|
|
145
|
+
against the four-axis rubric below. Each axis is scored on an
|
|
146
|
+
integer scale of *1* (lowest risk) to *5* (highest risk) against
|
|
147
|
+
the *fixed anchors* given, and *every* score *MUST* be backed
|
|
148
|
+
by a one-line <evidence/> grounded in the *actual* hunks or the
|
|
149
|
+
read-only repository probe.
|
|
150
|
+
|
|
151
|
+
Probe the repository *read-only* and *heuristically* (via `git
|
|
152
|
+
grep` / `grep` / `git ls-files`, restricted to first-party code)
|
|
153
|
+
only as needed to substantiate the *Coupling* and *Coverage*
|
|
154
|
+
axes (e.g. who imports a touched module, whether touched code has
|
|
155
|
+
adjacent tests). Do not output anything during the probe.
|
|
156
|
+
|
|
157
|
+
Score each axis against these anchors:
|
|
158
|
+
|
|
159
|
+
1. **COUPLING** — how widely the touched code is depended upon.
|
|
160
|
+
*1*: self-contained, no first-party importers.
|
|
161
|
+
*3*: a handful of dependent modules.
|
|
162
|
+
*5*: a hub touched by many modules or a public interface.
|
|
163
|
+
|
|
164
|
+
2. **CRITICALITY** — how essential the touched path is.
|
|
165
|
+
*1*: docs, comments, dead/peripheral code.
|
|
166
|
+
*3*: ordinary feature logic.
|
|
167
|
+
*5*: core/security/auth/data-integrity/money path.
|
|
168
|
+
|
|
169
|
+
3. **COVERAGE** — how well the change is exercised by tests.
|
|
170
|
+
*1*: tests touched in this diff or directly covering the
|
|
171
|
+
changed hunks.
|
|
172
|
+
*3*: adjacent tests exist but are not clearly exercising the
|
|
173
|
+
changed hunks.
|
|
174
|
+
*5*: no tests anywhere near the touched code.
|
|
175
|
+
|
|
176
|
+
4. **REVERSIBILITY** — how easily the change can be undone.
|
|
177
|
+
*1*: pure code change, revert restores prior state.
|
|
178
|
+
*3*: needs coordinated revert or a config rollback.
|
|
179
|
+
*5*: irreversible-by-revert (schema/data migration, released
|
|
180
|
+
artifact, external side effect).
|
|
181
|
+
|
|
182
|
+
Compute the *aggregate risk* as the *equal-weighted* mean of
|
|
183
|
+
the four risk contributions (Coupling, Criticality, Coverage,
|
|
184
|
+
Reversibility), rounded to one decimal, and map it to a *graded
|
|
185
|
+
band*: *1.0-1.9* → **LOW**, *2.0-2.9* → **MODERATE**, *3.0-3.9*
|
|
186
|
+
→ **HIGH**, *4.0-5.0* → **CRITICAL**.
|
|
187
|
+
|
|
188
|
+
Then emit the following <template/>, with the overall band and
|
|
189
|
+
aggregate score, followed by a *three-column table* with one row
|
|
190
|
+
per axis: column 1 is the *axis*, column 2 is the *score*, and
|
|
191
|
+
column 3 is the *evidence* (as a `●` bullet point) plus —
|
|
192
|
+
*only* if the axis reached the mitigation threshold of '>= 4' —
|
|
193
|
+
the *mitigation* (as a second `●` bullet point). If an axis did
|
|
194
|
+
not reach that threshold, omit the ` ● **MITIGATION**:
|
|
195
|
+
<mitigation/>` part from its row. Keep the overall <evidence/>
|
|
196
|
+
and <mitigation/> texts *concise* and *ultra brief*. Do *not*
|
|
197
|
+
output any further explanation.
|
|
198
|
+
|
|
199
|
+
In <evidence/> markup all file references as code (with
|
|
200
|
+
backticks), prepend them with `▢ ` and append ` [+N/-M]` (based
|
|
201
|
+
on the information in <stat/>) to them.
|
|
202
|
+
|
|
203
|
+
<template>
|
|
204
|
+
|
|
205
|
+
<ase-tpl-bullet-signal/> **CHANGE RISK REPORT**: Overall: **<band/>** (<aggregate/>/5)
|
|
206
|
+
|
|
207
|
+
| Axis | Score | Findings |
|
|
208
|
+
| ---- | ----- | -------- |
|
|
209
|
+
</template>
|
|
210
|
+
|
|
211
|
+
For each axis, emit the following row <template/>:
|
|
212
|
+
|
|
213
|
+
<template>
|
|
214
|
+
| **<axis/>** | <score/>/5 | ● **EVIDENCE**: <evidence/> ● **MITIGATION**: <mitigation/> |
|
|
215
|
+
</template>
|
|
216
|
+
|
|
217
|
+
Finally, output the following footer <template/>:
|
|
218
|
+
|
|
219
|
+
<template>
|
|
220
|
+
|
|
221
|
+
</template>
|
|
222
|
+
|
|
223
|
+
</if>
|
|
224
|
+
|
|
225
|
+
</step>
|
|
226
|
+
|
|
227
|
+
4. <step id="STEP 4: Render Blast-Radius Map (optional)">
|
|
228
|
+
|
|
229
|
+
1. <if condition="<getopt-option-blast/> is NOT equal `true`">
|
|
230
|
+
Silently *SKIP* this entire step.
|
|
231
|
+
</if>
|
|
232
|
+
|
|
233
|
+
2. <if condition="<diff/> is empty">
|
|
234
|
+
Silently *SKIP* this entire step (STEP 2 already reported it).
|
|
235
|
+
</if>
|
|
236
|
+
|
|
237
|
+
3. <if condition="<getopt-option-blast/> is equal `true` and <diff/> is NOT empty">
|
|
238
|
+
From the *same* captured <diff/> and <stat/>, *extract the
|
|
239
|
+
touched modules* — the distinct changed source files (or their
|
|
240
|
+
enclosing modules/ packages, according to the language idiom).
|
|
241
|
+
|
|
242
|
+
Then, for each touched module, *scan its reverse dependencies*
|
|
243
|
+
— the other first-party files that *import* or *reference* it
|
|
244
|
+
across the current project (e.g. by the module's basename,
|
|
245
|
+
exported symbol, or import path). Keep the scan *read-only*
|
|
246
|
+
and *heuristic*; restrict it to first-party code within the
|
|
247
|
+
repository. Do not output anything during the scan.
|
|
248
|
+
|
|
249
|
+
Then build a *blast-radius graph* and render it as a diagram:
|
|
250
|
+
|
|
251
|
+
1. Build a Mermaid specification <mermaid-spec/> for a `flowchart
|
|
252
|
+
TB` whose *touched* modules are the origin nodes and whose
|
|
253
|
+
*reverse-dependency* edges fan out to the dependent modules
|
|
254
|
+
(origin → dependent).
|
|
255
|
+
|
|
256
|
+
Flag each *touched* node as a problem node per the
|
|
257
|
+
`ase-meta-diagram` anomaly convention — prefix its label
|
|
258
|
+
with `⚑ ` inside quotes, e.g. `T1["⚑ src/core.ts"]`. Keep
|
|
259
|
+
labels ultra short (basenames or module names only).
|
|
260
|
+
|
|
261
|
+
2. Dispatch the rendering to the `ase-meta-diagram` sub-agent by
|
|
262
|
+
calling the tool `Agent(name: "ase:ase-meta-diagram",
|
|
263
|
+
description: "Diagram Rendering", subagent_type:
|
|
264
|
+
"ase:ase-meta-diagram", prompt: "<mermaid-spec/>")` and capture
|
|
265
|
+
its returned `text` field as <diagram/>.
|
|
266
|
+
|
|
267
|
+
Then emit the following <template/>, showing <diagram/> and
|
|
268
|
+
appending a *brief impact summary* of bullets, where each
|
|
269
|
+
<module/> is a *touched* module and <impact/> is a one-sentence
|
|
270
|
+
note on *what depends on it* and *how far the blast reaches*.
|
|
271
|
+
|
|
272
|
+
In <module/> and <impact/>, markup all file references as code
|
|
273
|
+
(with backticks), prepend them with `▢ ` and append ` [+N/-M]`
|
|
274
|
+
(based on the information in <stat/>) to them.
|
|
275
|
+
|
|
276
|
+
<template>
|
|
277
|
+
<ase-tpl-head title="Hello World"/>
|
|
278
|
+
|
|
279
|
+
<ase-tpl-bullet-signal/> **CHANGE BLAST RADIUS MAP**:
|
|
280
|
+
|
|
281
|
+
```text
|
|
282
|
+
<diagram/>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
<ase-tpl-bullet-signal/> **BLAST**: ⚑ **<module/>**: <impact/>
|
|
286
|
+
|
|
287
|
+
<ase-tpl-bullet-signal/> **BLAST**: ⚑ **<module/>**: <impact/>
|
|
288
|
+
|
|
289
|
+
[...]
|
|
290
|
+
|
|
291
|
+
<ase-tpl-foot/>
|
|
292
|
+
</template>
|
|
293
|
+
|
|
294
|
+
Keep the overall report *concise* and *brief*. Do *not* output
|
|
295
|
+
any further explanation.
|
|
296
|
+
</if>
|
|
297
|
+
|
|
298
|
+
</step>
|
|
299
|
+
|
|
300
|
+
</flow>
|
|
301
|
+
|