@rse/ase 0.9.51 → 0.9.52
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/dst/ase-task.js +7 -2
- package/package.json +7 -7
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/etc/stx.conf +2 -2
- package/plugin/meta/ase-common-dissect.md +110 -0
- package/plugin/meta/ase-common-task.md +5 -3
- package/plugin/meta/ase-control.md +53 -0
- package/plugin/meta/ase-format-task.md +6 -0
- package/plugin/meta/ase-skill.md +8 -8
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +23 -12
- package/plugin/skills/ase-arch-analyze/help.md +16 -0
- package/plugin/skills/ase-arch-discover/SKILL.md +2 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +27 -18
- package/plugin/skills/ase-code-analyze/help.md +15 -0
- package/plugin/skills/ase-code-craft/SKILL.md +2 -2
- package/plugin/skills/ase-code-dissect/SKILL.md +380 -0
- package/plugin/skills/ase-code-dissect/help.md +121 -0
- package/plugin/skills/ase-code-explain/SKILL.md +2 -2
- package/plugin/skills/ase-code-insight/SKILL.md +2 -2
- package/plugin/skills/ase-code-lint/SKILL.md +2 -2
- package/plugin/skills/ase-code-refactor/SKILL.md +2 -2
- package/plugin/skills/ase-code-resolve/SKILL.md +2 -2
- package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
- package/plugin/skills/ase-docs-proofread/SKILL.md +2 -2
- package/plugin/skills/ase-help-intent/SKILL.md +2 -2
- package/plugin/skills/ase-help-skill/SKILL.md +2 -2
- package/plugin/skills/ase-help-skill/catalog.md +3 -0
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +2 -2
- package/plugin/skills/ase-meta-changelog/SKILL.md +2 -2
- package/plugin/skills/ase-meta-chat/SKILL.md +2 -2
- package/plugin/skills/ase-meta-commit/SKILL.md +2 -2
- package/plugin/skills/ase-meta-config/SKILL.md +2 -2
- package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
- package/plugin/skills/ase-meta-diff/SKILL.md +2 -2
- package/plugin/skills/ase-meta-eli5/SKILL.md +2 -2
- package/plugin/skills/ase-meta-evaluate/SKILL.md +2 -2
- package/plugin/skills/ase-meta-proximity/SKILL.md +2 -2
- package/plugin/skills/ase-meta-quorum/SKILL.md +2 -2
- package/plugin/skills/ase-meta-quotes/SKILL.md +2 -2
- package/plugin/skills/ase-meta-review/SKILL.md +2 -2
- package/plugin/skills/ase-meta-search/SKILL.md +2 -2
- package/plugin/skills/ase-meta-steelman/SKILL.md +2 -2
- package/plugin/skills/ase-meta-why/SKILL.md +2 -2
- package/plugin/skills/ase-meta-workflow/SKILL.md +378 -0
- package/plugin/skills/ase-meta-workflow/help.md +117 -0
- package/plugin/skills/ase-meta-workflow/sample.md +70 -0
- package/plugin/skills/ase-meta-workflow/workflow.txt +97 -0
- package/plugin/skills/ase-sync-export/SKILL.md +2 -2
- package/plugin/skills/ase-sync-import/SKILL.md +2 -2
- package/plugin/skills/ase-sync-reconcile/SKILL.md +2 -2
- package/plugin/skills/ase-task-condense/SKILL.md +26 -6
- package/plugin/skills/ase-task-delete/SKILL.md +2 -2
- package/plugin/skills/ase-task-dissect/SKILL.md +299 -0
- package/plugin/skills/ase-task-dissect/help.md +114 -0
- package/plugin/skills/ase-task-edit/SKILL.md +6 -4
- package/plugin/skills/ase-task-grill/SKILL.md +6 -4
- package/plugin/skills/ase-task-id/SKILL.md +2 -2
- package/plugin/skills/ase-task-implement/SKILL.md +2 -2
- package/plugin/skills/ase-task-list/SKILL.md +2 -2
- package/plugin/skills/ase-task-preflight/SKILL.md +2 -2
- package/plugin/skills/ase-task-reboot/SKILL.md +12 -6
- package/plugin/skills/ase-task-rename/SKILL.md +2 -2
- package/plugin/skills/ase-task-view/SKILL.md +2 -2
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-dissect
|
|
3
|
+
argument-hint: "[--help|-h] [--max-parts|-m <count>] [--dry|-d] [--force|-f] [<task-id>[:]] [<dissect-hint>]"
|
|
4
|
+
description: >
|
|
5
|
+
Dissect the current or given task plan, treated as an epic,
|
|
6
|
+
domain-wise and logically into cohesive parts and materialize each
|
|
7
|
+
part as its own separate task plan. Use when the user calls to
|
|
8
|
+
"dissect", "split", "break up", or "decompose" a large "task" or
|
|
9
|
+
"plan".
|
|
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-getopt.md
|
|
18
|
+
|
|
19
|
+
<purpose name="ase-task-dissect">
|
|
20
|
+
Dissect a Task Plan
|
|
21
|
+
</purpose>
|
|
22
|
+
|
|
23
|
+
<expand name="getopt"
|
|
24
|
+
arg1="ase-task-dissect"
|
|
25
|
+
arg2="--max-parts|-m=8 --dry|-d --force|-f --int-reuse-task">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
29
|
+
<objective>
|
|
30
|
+
*Dissect* a task plan, treated as an *epic*, domain-wise and logically
|
|
31
|
+
into *cohesive parts*, and materialize every part as its own separate
|
|
32
|
+
*task plan*.
|
|
33
|
+
</objective>
|
|
34
|
+
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
37
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-dissect.md
|
|
38
|
+
|
|
39
|
+
Procedure
|
|
40
|
+
---------
|
|
41
|
+
|
|
42
|
+
1. **Determine Task and Hint:**
|
|
43
|
+
|
|
44
|
+
1. Set <instruction><getopt-arguments/></instruction> initially,
|
|
45
|
+
with any leading and trailing whitespace stripped. Inherit the
|
|
46
|
+
always existing <ase-task-id/> from the current context. Inherit
|
|
47
|
+
the always existing <ase-session-id/> from the current context.
|
|
48
|
+
Do not output anything.
|
|
49
|
+
|
|
50
|
+
2. React on the task id:
|
|
51
|
+
|
|
52
|
+
<if condition="
|
|
53
|
+
<instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*:?$`
|
|
54
|
+
">
|
|
55
|
+
The lone token is the *task id* (with an optional and ignored
|
|
56
|
+
trailing `:`), never a hint. Set
|
|
57
|
+
<ase-task-id><instruction/></ase-task-id> (set task id to
|
|
58
|
+
instruction, with any trailing `:` stripped) and
|
|
59
|
+
<instruction></instruction> (set instruction empty), call the
|
|
60
|
+
`ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")`
|
|
61
|
+
tool from the `ase` MCP server to switch the task, and then only
|
|
62
|
+
output the following <template/>:
|
|
63
|
+
|
|
64
|
+
<template>
|
|
65
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
66
|
+
</template>
|
|
67
|
+
</if>
|
|
68
|
+
|
|
69
|
+
<elseif condition="
|
|
70
|
+
<instruction/> has the format `<id/>: <text/>` where
|
|
71
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
72
|
+
">
|
|
73
|
+
Set <instruction><text/></instruction> (set instruction to
|
|
74
|
+
text) and <ase-task-id><id/></ase-task-id> (set task id to
|
|
75
|
+
id), call the `ase_task_id(id: "<ase-task-id/>", session:
|
|
76
|
+
"<ase-session-id/>")` tool from the `ase` MCP server to switch
|
|
77
|
+
the task, and then only output the following <template/>:
|
|
78
|
+
|
|
79
|
+
<template>
|
|
80
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
81
|
+
</template>
|
|
82
|
+
</elseif>
|
|
83
|
+
|
|
84
|
+
3. React on the dissection hint:
|
|
85
|
+
|
|
86
|
+
Set <dissect-hint><instruction/></dissect-hint> (set the
|
|
87
|
+
dissection hint to the *remaining* instruction), with any
|
|
88
|
+
leading and trailing whitespace stripped.
|
|
89
|
+
|
|
90
|
+
<if condition="<dissect-hint/> is not empty">
|
|
91
|
+
Only output the following <template/>:
|
|
92
|
+
|
|
93
|
+
<template>
|
|
94
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ hint: **<dissect-hint/>**
|
|
95
|
+
</template>
|
|
96
|
+
</if>
|
|
97
|
+
<else>
|
|
98
|
+
No dissection hint was given, so the parts are derived from the
|
|
99
|
+
plan alone. Do not output anything.
|
|
100
|
+
</else>
|
|
101
|
+
|
|
102
|
+
2. **Determine Operation:**
|
|
103
|
+
|
|
104
|
+
1. Determine the current task plan content:
|
|
105
|
+
|
|
106
|
+
<expand name="task-load-content"></expand>
|
|
107
|
+
|
|
108
|
+
2. If the <task-content/> is still empty, complain and tell
|
|
109
|
+
the user to use the `ase-code-resolve`, `ase-code-refactor`,
|
|
110
|
+
`ase-code-craft`, or `ase-task-edit` skills first to create a
|
|
111
|
+
task plan. Then immediately stop processing this skill.
|
|
112
|
+
|
|
113
|
+
3. **Dissect Task Plan:**
|
|
114
|
+
|
|
115
|
+
1. *Derive the parts* of the epic:
|
|
116
|
+
|
|
117
|
+
<expand
|
|
118
|
+
name="dissect-derive"
|
|
119
|
+
arg1="ase-task-dissect"
|
|
120
|
+
arg2="<dissect-hint/>"
|
|
121
|
+
arg3="<ase-task-id/>"
|
|
122
|
+
>
|
|
123
|
+
the individual bullet points of the `## CHANGES` and
|
|
124
|
+
`## VERIFICATION` sections of the loaded plan <task-content/>
|
|
125
|
+
</expand>
|
|
126
|
+
|
|
127
|
+
Each `## VERIFICATION` bullet point *MUST* land in the very part
|
|
128
|
+
which carries the `## CHANGES` bullet points it verifies.
|
|
129
|
+
|
|
130
|
+
A *single* bullet point is *not* the smallest unit here: a bullet
|
|
131
|
+
point which itself covers *multiple* domains or concerns *MAY* be
|
|
132
|
+
*split* per rule 3 into two or more *bullet point fragments*,
|
|
133
|
+
each of which is a complete bullet point of its own, is formed
|
|
134
|
+
*exclusively* from the wording of the original bullet point, and
|
|
135
|
+
is then assigned to a part like an ordinary bullet point. A split
|
|
136
|
+
`## VERIFICATION` bullet point follows the `## CHANGES` bullet
|
|
137
|
+
points its fragments verify, so its fragments *MAY* land in
|
|
138
|
+
*different* parts.
|
|
139
|
+
|
|
140
|
+
2. *Report the parts*:
|
|
141
|
+
|
|
142
|
+
<expand name="dissect-report" arg1="<ase-task-id/>"></expand>
|
|
143
|
+
|
|
144
|
+
4. **Materialize Sub-Task Plans:**
|
|
145
|
+
|
|
146
|
+
You *MUST* *NOT* modify, re-save, or delete the epic plan
|
|
147
|
+
<task-content/> of <ase-task-id/> itself -- it always stays
|
|
148
|
+
*untouched*.
|
|
149
|
+
|
|
150
|
+
1. <if condition="<getopt-option-dry/> is equal `true`">
|
|
151
|
+
The dissection is *reported only*, so no artifacts are created at
|
|
152
|
+
all. Only output the following <template/> and then *SKIP* the
|
|
153
|
+
remaining sub-steps 4.2 to 4.4 and continue with step 5:
|
|
154
|
+
|
|
155
|
+
<template>
|
|
156
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ dissection: **<n/>** parts, ▶ status: **dry-run -- no sub-task plans created**
|
|
157
|
+
</template>
|
|
158
|
+
</if>
|
|
159
|
+
|
|
160
|
+
2. *Detect target collisions*, strictly *before* writing anything:
|
|
161
|
+
|
|
162
|
+
Call the `ase_task_list(verbose: false)` tool of the `ase` MCP
|
|
163
|
+
server and set <existing/> to the `id` fields of the returned
|
|
164
|
+
`tasks` array. Do not output anything related to this MCP tool
|
|
165
|
+
call. Set <collisions/> to all <part-id/> of <parts/> which are
|
|
166
|
+
already present in <existing/>.
|
|
167
|
+
|
|
168
|
+
<if condition="<collisions/> is not empty AND <getopt-option-force/> is not equal `true`">
|
|
169
|
+
Only output the following <template/> -- with <collisions/>
|
|
170
|
+
rendered as a comma-separated list of code spans -- and then
|
|
171
|
+
immediately *STOP* processing the entire current skill, leaving
|
|
172
|
+
*all* existing task plans untouched:
|
|
173
|
+
|
|
174
|
+
<template>
|
|
175
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⊘ collisions: <collisions/>
|
|
176
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ dissection: **<n/>** parts, ▶ status: **targets exist**
|
|
177
|
+
</template>
|
|
178
|
+
|
|
179
|
+
Directly *after* this <template/>, and *before* stopping, give
|
|
180
|
+
the corrective hint by expanding the following (which, depending
|
|
181
|
+
on the configured <ase-guidance-level/>, may expand into nothing
|
|
182
|
+
and hence emit no output at all):
|
|
183
|
+
|
|
184
|
+
<ase-tpl-hint level="minimal">
|
|
185
|
+
Re-run `/ase-task-dissect --force` to overwrite the colliding sub-task plans.
|
|
186
|
+
</ase-tpl-hint>
|
|
187
|
+
</if>
|
|
188
|
+
|
|
189
|
+
<if condition="<collisions/> is not empty AND <getopt-option-force/> is equal `true`">
|
|
190
|
+
The colliding sub-task plans are *overwritten* in sub-step 4.3
|
|
191
|
+
below. Do not output anything.
|
|
192
|
+
</if>
|
|
193
|
+
|
|
194
|
+
3. *Compose and persist one sub-task plan per part*:
|
|
195
|
+
|
|
196
|
+
Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
197
|
+
`ase` MCP server *once* and use the `text` field of its response
|
|
198
|
+
for both the <timestamp-created/> and <timestamp-modified/>
|
|
199
|
+
information of *all* parts.
|
|
200
|
+
|
|
201
|
+
Then, for *every* part in <parts/>, in their derived order:
|
|
202
|
+
|
|
203
|
+
1. Compose a *complete* task plan <part-content/> by closely
|
|
204
|
+
following the plan <format/>, where:
|
|
205
|
+
|
|
206
|
+
- the <task-id/> is <part-id/>,
|
|
207
|
+
- the <title/> is derived from the part's <scope/>,
|
|
208
|
+
- the `## CONTEXT` section carries a part-local
|
|
209
|
+
<summary-what/> and <summary-why/>, derived from the
|
|
210
|
+
part's own input elements plus the `## CONTEXT` section
|
|
211
|
+
of the epic,
|
|
212
|
+
- the `## CHANGES` section carries *exactly* the
|
|
213
|
+
`## CHANGES` bullet points assigned to this part,
|
|
214
|
+
keeping their original wording, and
|
|
215
|
+
- the `## VERIFICATION` section carries *exactly* the
|
|
216
|
+
`## VERIFICATION` bullet points assigned to this part,
|
|
217
|
+
keeping their original wording.
|
|
218
|
+
|
|
219
|
+
For a bullet point which was *split* into fragments, the part
|
|
220
|
+
carries *only* its own fragment: the <specification/> keeps
|
|
221
|
+
the *original* wording of the portion this fragment covers,
|
|
222
|
+
with *no* re-interpretation and *no* added scope, and the
|
|
223
|
+
`**<aspect/>**` label is *narrowed* to exactly that portion.
|
|
224
|
+
Across all parts, the fragments of a split bullet point
|
|
225
|
+
*MUST* still reproduce the original bullet point *completely*
|
|
226
|
+
and *without* duplication.
|
|
227
|
+
|
|
228
|
+
The loaded <task-content/> is the *rendering-prepared*
|
|
229
|
+
variant of the epic, so it carries artifacts which *MUST NOT*
|
|
230
|
+
leak into the persisted <part-content/>. While copying, you
|
|
231
|
+
*MUST* *normalize* every taken-over bullet point back into
|
|
232
|
+
the authoring form of the plan <format/>:
|
|
233
|
+
|
|
234
|
+
- *Restore the bullet markers*: a bullet point rendered as
|
|
235
|
+
`◯ ` is written back as `- ` -- <part-content/>
|
|
236
|
+
*MUST NOT* contain a single `◯` marker.
|
|
237
|
+
|
|
238
|
+
- *Re-join split code spans*: an inline code span which the
|
|
239
|
+
rendering split across two physical lines into two spans
|
|
240
|
+
(`` `<head/>` `` at a line end and `` `<tail/>` `` at the
|
|
241
|
+
next line start) is written back as the *one* original
|
|
242
|
+
span `` `<head/> <tail/>` ``, and the line is then broken
|
|
243
|
+
*before* its opening backtick, per the line-breaking
|
|
244
|
+
rules of the plan <format/>.
|
|
245
|
+
|
|
246
|
+
<if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
|
|
247
|
+
The epic itself deliberately *omits* the `## VERIFICATION`
|
|
248
|
+
section, so you *MUST* omit this section (including its
|
|
249
|
+
heading) from <part-content/>, too.
|
|
250
|
+
</if>
|
|
251
|
+
<elseif condition="no `## VERIFICATION` bullet point was assigned to this part">
|
|
252
|
+
This part carries *no* verification of its own, so you *MUST*
|
|
253
|
+
omit the `## VERIFICATION` section (including its heading)
|
|
254
|
+
from <part-content/>, too -- an *empty* section would violate
|
|
255
|
+
the plan <format/>, and rule 5 forbids inventing a bullet
|
|
256
|
+
point.
|
|
257
|
+
</elseif>
|
|
258
|
+
|
|
259
|
+
2. Call the `ase_task_save(id: "<part-id/>", text:
|
|
260
|
+
"<part-content/>")` tool of the `ase` MCP server to persist
|
|
261
|
+
the sub-task plan, and calculate the number of words
|
|
262
|
+
<part-words/> of <part-content/>. Do not output anything
|
|
263
|
+
related to this MCP tool call except the following
|
|
264
|
+
<template/>:
|
|
265
|
+
|
|
266
|
+
<template>
|
|
267
|
+
⧉ **ASE**: ◉ task: **<part-id/>**, ✪ plan: **<part-words/>** words, ▶ status: **sub-task plan created**
|
|
268
|
+
</template>
|
|
269
|
+
|
|
270
|
+
4. *Report the overall result* with the following <template/>:
|
|
271
|
+
|
|
272
|
+
<template>
|
|
273
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ dissection: **<n/>** parts, ▶ status: **epic dissected**
|
|
274
|
+
</template>
|
|
275
|
+
|
|
276
|
+
5. **Give Final Hints:**
|
|
277
|
+
|
|
278
|
+
Finally, give the closing hints by expanding the following (which,
|
|
279
|
+
depending on the configured <ase-guidance-level/>, may each expand
|
|
280
|
+
into nothing and hence emit no output at all):
|
|
281
|
+
|
|
282
|
+
<if condition="<getopt-option-dry/> is not equal `true`">
|
|
283
|
+
<ase-tpl-hint level="minimal">
|
|
284
|
+
Use `/ase-task-id <id>` to switch to one of the created sub-task plans and `/ase-task-implement` to implement it.
|
|
285
|
+
</ase-tpl-hint>
|
|
286
|
+
</if>
|
|
287
|
+
<else>
|
|
288
|
+
<ase-tpl-hint level="minimal">
|
|
289
|
+
Re-run `/ase-task-dissect` without `--dry` to actually create the reported sub-task plans, optionally with a `<dissect-hint>` argument if the reported split is not the intended one.
|
|
290
|
+
</ase-tpl-hint>
|
|
291
|
+
</else>
|
|
292
|
+
|
|
293
|
+
<ase-tpl-hint level="normal">
|
|
294
|
+
Use `/ase-task-list` to see the epic plan and all of its sub-task plans side by side.
|
|
295
|
+
</ase-tpl-hint>
|
|
296
|
+
|
|
297
|
+
<ase-tpl-hint level="verbose">
|
|
298
|
+
Use `/ase-task-dissect --max-parts <count>` to bound the number of parts, `/ase-task-dissect --force` to overwrite already existing sub-task plans, and `/ase-task-dissect <task-id>: <dissect-hint>` to address another task and steer its split.
|
|
299
|
+
</ase-tpl-hint>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-task-dissect` - Dissect a Task Plan
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-task-dissect`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--max-parts`|`-m` *count*]
|
|
11
|
+
[`--dry`|`-d`]
|
|
12
|
+
[`--force`|`-f`]
|
|
13
|
+
[*task-id*[`:`]]
|
|
14
|
+
[*dissect-hint*]
|
|
15
|
+
|
|
16
|
+
## DESCRIPTION
|
|
17
|
+
|
|
18
|
+
The `ase-task-dissect` skill treats an existing task plan as an *epic*
|
|
19
|
+
and *dissects* it domain-wise and logically into *cohesive parts*. Each
|
|
20
|
+
part is a self-contained unit of work with a single coherent purpose, so
|
|
21
|
+
it can be implemented, reviewed, and committed entirely on its own.
|
|
22
|
+
|
|
23
|
+
The dissection follows a strict ruleset: at least *2* and at most
|
|
24
|
+
*count* parts are derived, *every* bullet point of the epic's
|
|
25
|
+
`## CHANGES` and `## VERIFICATION` sections is assigned to *exactly
|
|
26
|
+
one* part, mutually dependent bullet points are kept together, and
|
|
27
|
+
nothing beyond the epic's own content is invented. A bullet point which
|
|
28
|
+
itself covers *multiple* domains is *split* into fragments, which are
|
|
29
|
+
then assigned individually -- together they still reproduce the original
|
|
30
|
+
bullet point completely and without duplication. The cut follows the
|
|
31
|
+
*semantics*, not the technical structure -- a split by file, directory,
|
|
32
|
+
or technical layer is usually *not* the intended one. If the epic
|
|
33
|
+
carries only a single cohesive purpose, it is reported as *not
|
|
34
|
+
dissectable* and nothing is created.
|
|
35
|
+
|
|
36
|
+
An optional *dissect-hint* steers *how* the epic is split -- which
|
|
37
|
+
bullet points belong together, along which axis to cut, or how many
|
|
38
|
+
parts to aim at. It is especially useful after a `--dry` run showed an
|
|
39
|
+
unintended dissection. The hint overrides the default grouping, but
|
|
40
|
+
never the ruleset itself.
|
|
41
|
+
|
|
42
|
+
The derived parts are first reported as a *dissection table* (part
|
|
43
|
+
number, sub-task id, scope, and rationale). Then -- unless `--dry` is
|
|
44
|
+
given -- each part is materialized as its own *complete* sub-task plan
|
|
45
|
+
(with its own `## CONTEXT`, `## CHANGES`, and `## VERIFICATION`
|
|
46
|
+
sections) and persisted under the task id `<task-id>-<feature-slug>`.
|
|
47
|
+
The epic plan itself always stays *untouched*.
|
|
48
|
+
|
|
49
|
+
## OPTIONS
|
|
50
|
+
|
|
51
|
+
`--max-parts`|`-m` *count*:
|
|
52
|
+
Upper bound for the number of derived parts (default: `8`). The
|
|
53
|
+
lower bound is always `2`, because fewer parts are no dissection.
|
|
54
|
+
|
|
55
|
+
`--dry`|`-d`:
|
|
56
|
+
*Report only* -- print the dissection table but create *no*
|
|
57
|
+
artifacts at all, so the decision stays fully reversible. Note that
|
|
58
|
+
this meaning differs from `--dry`/`-d` in `ase-code-craft`, where it
|
|
59
|
+
instead omits the `## VERIFICATION` section of the composed plan.
|
|
60
|
+
|
|
61
|
+
`--force`|`-f`:
|
|
62
|
+
Overwrite already existing sub-task plans. Without this option, the
|
|
63
|
+
skill detects colliding sub-task ids *before* writing anything,
|
|
64
|
+
reports them, and stops with status *targets exist*.
|
|
65
|
+
|
|
66
|
+
## ARGUMENTS
|
|
67
|
+
|
|
68
|
+
*task-id*:
|
|
69
|
+
The unique identifier of the task whose plan should be dissected.
|
|
70
|
+
If omitted, the *current* task id is used. A *lone* argument
|
|
71
|
+
matching the task id syntax is always taken as the *task id*, never
|
|
72
|
+
as a hint; to combine both, separate them with a `:` character, as
|
|
73
|
+
in `auth: split by API and UI`.
|
|
74
|
+
|
|
75
|
+
*dissect-hint*:
|
|
76
|
+
A free-text hint telling *how* the epic should be split. If omitted,
|
|
77
|
+
the parts are derived from the plan alone.
|
|
78
|
+
|
|
79
|
+
## EXAMPLES
|
|
80
|
+
|
|
81
|
+
Dissect the current task plan:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
❯ /ase-task-dissect
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Preview the dissection of a specific task into at most three parts:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
❯ /ase-task-dissect --dry --max-parts 3 auth
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Re-dissect a task, overwriting the previously created sub-task plans:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
❯ /ase-task-dissect --force auth
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Dissect the current task plan along an explicitly given axis:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
❯ /ase-task-dissect keep the meta file with the skills, docs separate
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Dissect a specific task plan with a hint:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
❯ /ase-task-dissect auth: one part per authentication provider
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## SEE ALSO
|
|
112
|
+
|
|
113
|
+
[`ase-code-dissect`](../ase-code-dissect/help.md), [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-condense`](../ase-task-condense/help.md),
|
|
114
|
+
[`ase-task-implement`](../ase-task-implement/help.md), [`ase-task-list`](../ase-task-list/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|
|
@@ -17,9 +17,9 @@ effort: high
|
|
|
17
17
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
18
18
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
19
19
|
|
|
20
|
-
<
|
|
20
|
+
<purpose name="ase-task-edit">
|
|
21
21
|
Iteratively Edit a Task Plan
|
|
22
|
-
</
|
|
22
|
+
</purpose>
|
|
23
23
|
|
|
24
24
|
<expand name="getopt"
|
|
25
25
|
arg1="ase-task-edit"
|
|
@@ -180,8 +180,10 @@ Set <args></args> (set args to empty).
|
|
|
180
180
|
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
181
181
|
exists earlier in the current session
|
|
182
182
|
">
|
|
183
|
-
Set <text/> to the `text`
|
|
184
|
-
`ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
183
|
+
Set <text/> to the `text` *output* field of the most recent
|
|
184
|
+
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this
|
|
185
|
+
is the rendering-prepared plan content and *MUST NOT* be
|
|
186
|
+
confused with the `text` *argument* passed into that call --
|
|
185
187
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
186
188
|
reused</status>. Do not output anything.
|
|
187
189
|
</if>
|
|
@@ -16,9 +16,9 @@ effort: high
|
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
17
17
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
18
|
|
|
19
|
-
<
|
|
19
|
+
<purpose name="ase-task-grill">
|
|
20
20
|
Iteratively Grill a Task Plan
|
|
21
|
-
</
|
|
21
|
+
</purpose>
|
|
22
22
|
|
|
23
23
|
<expand name="getopt"
|
|
24
24
|
arg1="ase-task-grill"
|
|
@@ -86,8 +86,10 @@ Set <args>--int-reuse-task</args>.
|
|
|
86
86
|
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
87
87
|
exists earlier in the current session
|
|
88
88
|
">
|
|
89
|
-
Set <text/> to the `text`
|
|
90
|
-
`ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
89
|
+
Set <text/> to the `text` *output* field of the most recent
|
|
90
|
+
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this
|
|
91
|
+
is the rendering-prepared plan content and *MUST NOT* be
|
|
92
|
+
confused with the `text` *argument* passed into that call --
|
|
91
93
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
92
94
|
reused</status>. Do not output anything.
|
|
93
95
|
</if>
|
|
@@ -14,9 +14,9 @@ effort: high
|
|
|
14
14
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
16
16
|
|
|
17
|
-
<
|
|
17
|
+
<purpose name="ase-task-id">
|
|
18
18
|
Configure Task Id
|
|
19
|
-
</
|
|
19
|
+
</purpose>
|
|
20
20
|
|
|
21
21
|
<expand name="getopt" arg1="ase-task-id">
|
|
22
22
|
$ARGUMENTS
|
|
@@ -15,9 +15,9 @@ effort: xhigh
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
17
|
|
|
18
|
-
<
|
|
18
|
+
<purpose name="ase-task-implement">
|
|
19
19
|
Implement a Task Plan
|
|
20
|
-
</
|
|
20
|
+
</purpose>
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-implement"
|
|
@@ -13,9 +13,9 @@ effort: high
|
|
|
13
13
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
14
14
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
15
15
|
|
|
16
|
-
<
|
|
16
|
+
<purpose name="ase-task-list">
|
|
17
17
|
List Task Plans
|
|
18
|
-
</
|
|
18
|
+
</purpose>
|
|
19
19
|
|
|
20
20
|
<expand name="getopt"
|
|
21
21
|
arg1="ase-task-list"
|
|
@@ -15,9 +15,9 @@ effort: xhigh
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
17
|
|
|
18
|
-
<
|
|
18
|
+
<purpose name="ase-task-preflight">
|
|
19
19
|
Preflight a Task Plan
|
|
20
|
-
</
|
|
20
|
+
</purpose>
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-preflight"
|
|
@@ -15,9 +15,9 @@ effort: high
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
17
|
|
|
18
|
-
<
|
|
18
|
+
<purpose name="ase-task-reboot">
|
|
19
19
|
Reboot a Task Plan
|
|
20
|
-
</
|
|
20
|
+
</purpose>
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-reboot"
|
|
@@ -103,19 +103,25 @@ Procedure
|
|
|
103
103
|
|
|
104
104
|
1. Start with <instruction></instruction> (set instruction to empty).
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
The loaded <task-content/> is the *rendering-prepared* variant of
|
|
107
|
+
the plan, so its bullet markers can be rendered as `◯` instead
|
|
108
|
+
of the authored `-`. Set <marker>◯</marker> if the bullet points
|
|
109
|
+
of <task-content/> start with `◯`, and set <marker>-</marker>
|
|
110
|
+
otherwise. Do not output anything.
|
|
111
|
+
|
|
112
|
+
2. <if condition="<task-content/> contains neither '<marker/> **WHAT**:' nor '<marker/> **WHY**:'">
|
|
107
113
|
Set <instruction><task-content/></instruction> (set instruction to task content).
|
|
108
114
|
</if>
|
|
109
115
|
|
|
110
|
-
3. <if condition="<task-content/> contains '
|
|
116
|
+
3. <if condition="<task-content/> contains '<marker/> **WHAT**: <text/>'">
|
|
111
117
|
Set <instruction><text/></instruction> (set instruction to extracted text).
|
|
112
118
|
</if>
|
|
113
119
|
|
|
114
|
-
4. <if condition="<task-content/> contains '
|
|
120
|
+
4. <if condition="<task-content/> contains '<marker/> **WHY**: <text/>' and <instruction/> is empty">
|
|
115
121
|
Set <instruction><text/></instruction> (set instruction to extracted text).
|
|
116
122
|
</if>
|
|
117
123
|
|
|
118
|
-
5. <if condition="<task-content/> contains '
|
|
124
|
+
5. <if condition="<task-content/> contains '<marker/> **WHY**: <text/>' and <instruction/> is NOT empty">
|
|
119
125
|
Set <instruction><instruction/>, BECAUSE <text/></instruction>
|
|
120
126
|
(append extracted text to instruction).
|
|
121
127
|
</if>
|
|
@@ -14,9 +14,9 @@ effort: high
|
|
|
14
14
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
16
16
|
|
|
17
|
-
<
|
|
17
|
+
<purpose name="ase-task-rename">
|
|
18
18
|
Rename a Task Plan
|
|
19
|
-
</
|
|
19
|
+
</purpose>
|
|
20
20
|
|
|
21
21
|
<expand name="getopt" arg1="ase-task-rename">
|
|
22
22
|
$ARGUMENTS
|
|
@@ -14,9 +14,9 @@ effort: high
|
|
|
14
14
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
16
16
|
|
|
17
|
-
<
|
|
17
|
+
<purpose name="ase-task-view">
|
|
18
18
|
View a Task Plan
|
|
19
|
-
</
|
|
19
|
+
</purpose>
|
|
20
20
|
|
|
21
21
|
<expand name="getopt"
|
|
22
22
|
arg1="ase-task-view"
|