@rse/ase 0.9.53 → 0.9.55
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-log.js +5 -0
- package/dst/ase-service.js +45 -6
- package/dst/ase-task.js +117 -18
- package/package.json +2 -2
- 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/meta/ase-common-code.md +34 -0
- package/plugin/meta/ase-common-task.md +3 -2
- package/plugin/meta/ase-constitution.md +6 -1
- package/plugin/meta/ase-format-task.md +96 -11
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +8 -7
- package/plugin/skills/ase-code-lint/help.md +2 -2
- package/plugin/skills/ase-code-refactor/SKILL.md +8 -7
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -7
- package/plugin/skills/ase-meta-config/help.md +3 -3
- package/plugin/skills/ase-meta-quotes/help.md +4 -3
- package/plugin/skills/ase-task-condense/SKILL.md +6 -5
- package/plugin/skills/ase-task-condense/help.md +1 -1
- package/plugin/skills/ase-task-edit/SKILL.md +26 -5
- package/plugin/skills/ase-task-grill/SKILL.md +8 -4
- package/plugin/skills/ase-task-grill/help.md +2 -1
- package/plugin/skills/ase-task-implement/SKILL.md +150 -5
- package/plugin/skills/ase-task-implement/help.md +40 -1
- package/plugin/skills/ase-task-list/SKILL.md +51 -15
- package/plugin/skills/ase-task-list/help.md +49 -6
- package/plugin/skills/ase-task-preflight/SKILL.md +15 -3
- package/plugin/skills/ase-task-preflight/help.md +9 -1
- package/plugin/skills/ase-task-reboot/SKILL.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +23 -2
|
@@ -40,6 +40,7 @@ From scratch *craft* the following feature:
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -127,11 +128,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
127
128
|
|
|
128
129
|
3. <step id="STEP 3: Internalize Crafting Tenets">
|
|
129
130
|
|
|
130
|
-
1.
|
|
131
|
-
and the **CRAFTING TENETS** of the **ASE Tenets** when updating
|
|
132
|
-
in the following. Do not output anything.
|
|
131
|
+
1. <task-kind>CRAFTING</task-kind>
|
|
133
132
|
|
|
134
|
-
2.
|
|
133
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
134
|
+
|
|
135
|
+
3. Do not output anything in this STEP 3.
|
|
135
136
|
|
|
136
137
|
</step>
|
|
137
138
|
|
|
@@ -251,9 +252,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
251
252
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
252
253
|
`ase` MCP server and use the `text` field of its response for
|
|
253
254
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
254
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
255
|
-
<timestamp-modified/> information and calculate
|
|
256
|
-
words <words/> of <task-content/>.
|
|
255
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
256
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
257
|
+
the number of words <words/> of <task-content/>.
|
|
257
258
|
|
|
258
259
|
3. You then *MUST* *save* the resulting plan content with the
|
|
259
260
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -64,8 +64,8 @@ A05 COMPLEXITY A10 SMELLS A15 PERFORMANCE A20 DEAD-CODE
|
|
|
64
64
|
|
|
65
65
|
`--exclude`|`-e`=*aspect*[`,`...]:
|
|
66
66
|
Remove the given comma-separated list of aspect ids from the checked
|
|
67
|
-
code quality aspects. Applied *after* `--include`, so
|
|
68
|
-
A02` checks `A01` only.
|
|
67
|
+
code quality aspects. Applied *after* `--include`, so
|
|
68
|
+
`-i A01,A02 -e A02` checks `A01` only.
|
|
69
69
|
|
|
70
70
|
## ARGUMENTS
|
|
71
71
|
|
|
@@ -40,6 +40,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -127,11 +128,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
127
128
|
|
|
128
129
|
3. <step id="STEP 3: Internalize Refactoring Tenets">
|
|
129
130
|
|
|
130
|
-
1.
|
|
131
|
-
and the **REFACTORING TENETS** of the **ASE Tenets** when updating
|
|
132
|
-
in the following. Do not output anything.
|
|
131
|
+
1. <task-kind>REFACTORING</task-kind>
|
|
133
132
|
|
|
134
|
-
2.
|
|
133
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
134
|
+
|
|
135
|
+
3. Do not output anything in this STEP 3.
|
|
135
136
|
|
|
136
137
|
</step>
|
|
137
138
|
|
|
@@ -251,9 +252,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
251
252
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
252
253
|
`ase` MCP server and use the `text` field of its response for
|
|
253
254
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
254
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
255
|
-
<timestamp-modified/> information and calculate
|
|
256
|
-
words <words/> of <task-content/>.
|
|
255
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
256
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
257
|
+
the number of words <words/> of <task-content/>.
|
|
257
258
|
|
|
258
259
|
3. You then *MUST* *save* the resulting plan content with the
|
|
259
260
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -40,6 +40,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -181,11 +182,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
181
182
|
|
|
182
183
|
3. <step id="STEP 3: Internalize Problem Resolution Tenets">
|
|
183
184
|
|
|
184
|
-
1.
|
|
185
|
-
and the **RESOLVING TENETS** of the **ASE Tenets** when updating
|
|
186
|
-
in the following. Do not output anything.
|
|
185
|
+
1. <task-kind>RESOLVING</task-kind>
|
|
187
186
|
|
|
188
|
-
2.
|
|
187
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
188
|
+
|
|
189
|
+
3. Do not output anything in this STEP 3.
|
|
189
190
|
|
|
190
191
|
</step>
|
|
191
192
|
|
|
@@ -305,9 +306,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
305
306
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
306
307
|
`ase` MCP server and use the `text` field of its response for
|
|
307
308
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
308
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
309
|
-
<timestamp-modified/> information and calculate
|
|
310
|
-
words <words/> of <task-content/>.
|
|
309
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
310
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
311
|
+
the number of words <words/> of <task-content/>.
|
|
311
312
|
|
|
312
313
|
3. You then *MUST* *save* the resulting plan content with the
|
|
313
314
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -67,9 +67,9 @@ The following *operations* exist:
|
|
|
67
67
|
The `init` and `edit` subcommands of the `ase config` CLI are
|
|
68
68
|
deliberately *not* mirrored: `edit` is bound to the interactive `$EDITOR`
|
|
69
69
|
and therefore has no meaning inside an assistant turn, and `init` is a
|
|
70
|
-
preset-bootstrapping operation that stays a shell concern next to
|
|
71
|
-
setup`. Both remain available as `ase config init` and
|
|
72
|
-
on the command line.
|
|
70
|
+
preset-bootstrapping operation that stays a shell concern next to
|
|
71
|
+
`ase setup`. Both remain available as `ase config init` and
|
|
72
|
+
`ase config edit` on the command line.
|
|
73
73
|
|
|
74
74
|
## OPTIONS
|
|
75
75
|
|
|
@@ -39,9 +39,10 @@ without any quote is rendered as `(none)`.
|
|
|
39
39
|
|
|
40
40
|
Every quote is rendered on its own line and carries, where applicable,
|
|
41
41
|
the suffixes `— <author>, <origin>` (in the two `ATTRIBUTED`
|
|
42
|
-
quadrants, omitting whichever part is unknown),
|
|
43
|
-
<source-topic>]` (when the quote was contributed by a
|
|
44
|
-
under `--proximity` instead of by *topic-keywords*
|
|
42
|
+
quadrants, omitting whichever part is unknown),
|
|
43
|
+
`[from proximity: <source-topic>]` (when the quote was contributed by a
|
|
44
|
+
neighborhood topic under `--proximity` instead of by *topic-keywords*
|
|
45
|
+
itself), and
|
|
45
46
|
`(unverified)` (when the exact wording or the attribution could not be
|
|
46
47
|
established with confidence). The `(unverified)` marker is dropped as
|
|
47
48
|
soon as the Internet/Web search under `--ground` confirms the wording and
|
|
@@ -98,7 +98,7 @@ Set <args></args> (set args to empty).
|
|
|
98
98
|
Set <words-before><words/></words-before> (remember the loaded
|
|
99
99
|
word count for the strictly-smaller check in step 3).
|
|
100
100
|
|
|
101
|
-
<if condition="<task-content/>
|
|
101
|
+
<if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
|
|
102
102
|
Set <timestamp-created><text/></timestamp-created> (extract the
|
|
103
103
|
original creation timestamp so it can be re-inserted unchanged
|
|
104
104
|
into the condensed <task-content/> in step 3).
|
|
@@ -125,10 +125,11 @@ Set <args></args> (set args to empty).
|
|
|
125
125
|
and unchanged*. Honor the following ruleset *strictly*:
|
|
126
126
|
|
|
127
127
|
1. *Preserve-exactly (never alter)*: the plan <format/>
|
|
128
|
-
structure (the
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
structure (the frontmatter block with its `Id:`, `Created:`,
|
|
129
|
+
`Modified:`, `Status:`, `Properties:`, and `Kind:` keys,
|
|
130
|
+
the headings `#`/`##`, all
|
|
131
|
+
three `## CONTEXT`, `## CHANGES`, and `## VERIFICATION`
|
|
132
|
+
sections, and the `- **<aspect/>**:` bullet labels), all *code spans* and
|
|
132
133
|
code blocks, technical terms, file paths, identifiers,
|
|
133
134
|
numbers, severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and
|
|
134
135
|
the `*<aspect/>*` emphasis highlighting convention.
|
|
@@ -30,7 +30,7 @@ telegrapher-like even under the `writer` persona.
|
|
|
30
30
|
|
|
31
31
|
The plan is saved *only* when condensing actually makes it smaller; if no
|
|
32
32
|
further reduction is possible, the plan is left untouched (including its
|
|
33
|
-
|
|
33
|
+
`Modified:` frontmatter timestamp) and reported as *already condensed*.
|
|
34
34
|
|
|
35
35
|
After condensing, the user is asked whether to stop or hand off to
|
|
36
36
|
`ase-task-edit`, `ase-task-implement`, or `ase-task-preflight`, unless
|
|
@@ -322,13 +322,13 @@ Set <args></args> (set args to empty).
|
|
|
322
322
|
`PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
|
|
323
323
|
|
|
324
324
|
1. *Update timestamp*:
|
|
325
|
-
<if condition="<task-content/>
|
|
325
|
+
<if condition="the frontmatter of <task-content/> carries a `Modified:` key AND <task-content-dirty/> is 'true'">
|
|
326
326
|
Update <timestamp-modified/> with the current time in
|
|
327
327
|
ISO-style format, which has to be determined by calling the
|
|
328
328
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
329
329
|
MCP server and use the `text` field of its response. Update
|
|
330
|
-
the
|
|
331
|
-
|
|
330
|
+
the `Modified: ...` frontmatter key of <task-content/> with the
|
|
331
|
+
new <timestamp-modified/> value.
|
|
332
332
|
Do not output anything.
|
|
333
333
|
</if>
|
|
334
334
|
|
|
@@ -346,6 +346,27 @@ Set <args></args> (set args to empty).
|
|
|
346
346
|
</if>
|
|
347
347
|
|
|
348
348
|
3. *Render plan*: Treat <task-content/> as *verbatim* Markdown.
|
|
349
|
+
|
|
350
|
+
For the *rendering only*, drop the leading *frontmatter* block --
|
|
351
|
+
both `---` delimiters and all of their keys -- and instead place
|
|
352
|
+
the following column-aligned glyph lines *before* the
|
|
353
|
+
`# TASK: <title/>` heading, separated from it by an empty line,
|
|
354
|
+
omitting the line of every key absent from the frontmatter. The
|
|
355
|
+
glyph lines *MUST* stay *above* the heading, exactly where the
|
|
356
|
+
frontmatter block sits in the plan file, and *MUST NOT* be moved
|
|
357
|
+
below it. This keeps the `---` delimiters from rendering as a
|
|
358
|
+
horizontal rule plus a *setext heading*. This rewrite is
|
|
359
|
+
*display-only* and *MUST NOT* change <task-content/> itself:
|
|
360
|
+
|
|
361
|
+
<format>
|
|
362
|
+
◉ **Id:** <task-id/>
|
|
363
|
+
⎈ **Created:** <timestamp-created/>
|
|
364
|
+
⚙ **Modified:** <timestamp-modified/>
|
|
365
|
+
◐ **Status:** <task-status/>
|
|
366
|
+
⚑ **Properties:** <task-properties/>
|
|
367
|
+
☯ **Kind:** <task-kind/>
|
|
368
|
+
</format>
|
|
369
|
+
|
|
349
370
|
Only output the following <template/>, so the user
|
|
350
371
|
can read the plan and react to it. If <task-content/> is longer
|
|
351
372
|
than 90 lines and a `## IMPLEMENTATION DRAFT` section (from the
|
|
@@ -355,9 +376,9 @@ Set <args></args> (set args to empty).
|
|
|
355
376
|
Use the following <template/>:
|
|
356
377
|
|
|
357
378
|
<template>
|
|
358
|
-
<ase-tpl-head title="TASK"/>
|
|
379
|
+
<ase-tpl-head title="TASK" subtitle="<task-id/>"/>
|
|
359
380
|
<task-content/>
|
|
360
|
-
<ase-tpl-foot title="TASK"/>
|
|
381
|
+
<ase-tpl-foot title="TASK" subtitle="<task-id/>"/>
|
|
361
382
|
</template>
|
|
362
383
|
|
|
363
384
|
4. *Determine next step*:
|
|
@@ -216,7 +216,7 @@ Set <args>--int-reuse-task</args>.
|
|
|
216
216
|
|
|
217
217
|
2. Finally, update the plan in <plan/> based on all answers <answer-N/>.
|
|
218
218
|
|
|
219
|
-
3. <if condition="<plan/>
|
|
219
|
+
3. <if condition="the frontmatter of <plan/> carries a `Created: <text/>` key">
|
|
220
220
|
Set <timestamp-created><text/></timestamp-created> (set
|
|
221
221
|
timestamp-created to extracted text)
|
|
222
222
|
</if>
|
|
@@ -225,11 +225,15 @@ Set <args>--int-reuse-task</args>.
|
|
|
225
225
|
`ase` MCP server and use the `text` field of its response for
|
|
226
226
|
<timestamp-modified/> information. If <timestamp-created/> is
|
|
227
227
|
still unset (because the previous <plan/> had no `Created:`
|
|
228
|
-
|
|
228
|
+
frontmatter key), set <timestamp-created><timestamp-modified/></timestamp-created>
|
|
229
229
|
(fall back to the modified timestamp). Then insert the current
|
|
230
230
|
<ase-task-id/>, previous <timestamp-created/>, and refreshed
|
|
231
|
-
<timestamp-modified/> information
|
|
232
|
-
|
|
231
|
+
<timestamp-modified/> information into the frontmatter keys `Id:`,
|
|
232
|
+
`Created:`, and `Modified:` and calculate the number of
|
|
233
|
+
words <words/> of <plan/>. Additionally *add* the value `grilled`
|
|
234
|
+
to the `Properties:` frontmatter key if it is still absent,
|
|
235
|
+
keeping all already present values and *creating* the whole key
|
|
236
|
+
(with the single value `grilled`) if the plan carries none.
|
|
233
237
|
|
|
234
238
|
5. Call the `ase_task_save(id: "<ase-task-id/>",
|
|
235
239
|
text: "<plan/>")` tool of the `ase` MCP server to save the updated
|
|
@@ -24,7 +24,8 @@ the code base and world knowledge), marks the current-plan choice, and
|
|
|
24
24
|
lets the user pick via an interactive dialog. It honors checks for
|
|
25
25
|
*fuzzy language*, *conflicting terminology*, *conflicting code*, and
|
|
26
26
|
*non-concrete scenarios*. Once all aspects are resolved, the plan is
|
|
27
|
-
updated and persisted,
|
|
27
|
+
updated and persisted, its `Properties:` frontmatter key gains the value
|
|
28
|
+
`grilled`, and the user is offered a hand-off to editing,
|
|
28
29
|
implementation, or preflight.
|
|
29
30
|
|
|
30
31
|
## OPTIONS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-task-implement
|
|
3
|
-
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [--worktree|-w] [<id>]"
|
|
4
4
|
description: >
|
|
5
5
|
Implement current or given task plan.
|
|
6
6
|
Use when the user calls to "implement", "realize" or "apply" the
|
|
@@ -21,7 +21,7 @@ Implement a Task Plan
|
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-implement"
|
|
24
|
-
arg2="--next|-n=(none|DONE|DELETE)... --int-reuse-task">
|
|
24
|
+
arg2="--next|-n=(none|DONE|DELETE)... --worktree|-w --int-reuse-task">
|
|
25
25
|
$ARGUMENTS
|
|
26
26
|
</expand>
|
|
27
27
|
|
|
@@ -32,6 +32,8 @@ with a corresponding, complete *change set*.
|
|
|
32
32
|
|
|
33
33
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
34
34
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
35
37
|
|
|
36
38
|
Procedure
|
|
37
39
|
---------
|
|
@@ -59,7 +61,98 @@ Procedure
|
|
|
59
61
|
or `ase-task-edit` skills first to create a task plan. Then
|
|
60
62
|
immediately stop processing this skill.
|
|
61
63
|
|
|
62
|
-
3.
|
|
64
|
+
3. Internalize the tenets stated by the plan:
|
|
65
|
+
|
|
66
|
+
<expand name="code-tenets-from-plan"></expand>
|
|
67
|
+
|
|
68
|
+
3. **Prepare WorkTree:**
|
|
69
|
+
|
|
70
|
+
<if condition="<getopt-option-worktree/> is not equal `true`">
|
|
71
|
+
No worktree was requested, so the implementation is applied directly
|
|
72
|
+
to the *current* working copy. Set <worktree-dir></worktree-dir>
|
|
73
|
+
(empty) and *skip* all remaining sub-steps of this step. Do not
|
|
74
|
+
output anything.
|
|
75
|
+
</if>
|
|
76
|
+
|
|
77
|
+
1. Set <worktree-name><ase-task-id/></worktree-name>. The worktree
|
|
78
|
+
is *never* named by an own option value: it always carries the
|
|
79
|
+
unique *task id*, so the worktree directory and its branch stay
|
|
80
|
+
unambiguously tied to the very task plan implemented in them.
|
|
81
|
+
The task id is a plain identifier by construction, hence it is
|
|
82
|
+
directly usable as both a directory and a branch name. Do not
|
|
83
|
+
output anything.
|
|
84
|
+
|
|
85
|
+
2. Determine the *repository root* by running the corresponding
|
|
86
|
+
command (taken exactly as given) and capturing its output into
|
|
87
|
+
<repo-root/>:
|
|
88
|
+
|
|
89
|
+
`git rev-parse --show-toplevel`
|
|
90
|
+
|
|
91
|
+
<if condition="this command fails">
|
|
92
|
+
The current directory is no Git repository, so no worktree can be
|
|
93
|
+
created. Only output the following <template/> and then
|
|
94
|
+
immediately *STOP* processing the entire current skill, leaving
|
|
95
|
+
the working copy *untouched*:
|
|
96
|
+
|
|
97
|
+
<template>
|
|
98
|
+
⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: no Git repository -- cannot create worktree
|
|
99
|
+
</template>
|
|
100
|
+
</if>
|
|
101
|
+
|
|
102
|
+
Then set <worktree-dir><repo-root/>/.ase/worktree/<worktree-name/></worktree-dir>.
|
|
103
|
+
|
|
104
|
+
3. Determine the *existing worktrees* and *existing branches* by
|
|
105
|
+
running the corresponding commands (taken exactly as given) and
|
|
106
|
+
capturing their outputs:
|
|
107
|
+
|
|
108
|
+
`git worktree list --porcelain`
|
|
109
|
+
|
|
110
|
+
`git branch --list`
|
|
111
|
+
|
|
112
|
+
<if condition="the worktree directory <worktree-dir/> or the branch <worktree-name/> already exists">
|
|
113
|
+
Only output the following <template/> and then immediately *STOP*
|
|
114
|
+
processing the entire current skill, leaving the existing
|
|
115
|
+
worktree, its branch, and the working copy *untouched*:
|
|
116
|
+
|
|
117
|
+
<template>
|
|
118
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: worktree or branch **<worktree-name/>** already exists
|
|
119
|
+
</template>
|
|
120
|
+
|
|
121
|
+
Directly *after* this error <template/>, and *before* stopping,
|
|
122
|
+
give the corrective hint by expanding the following (which,
|
|
123
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
124
|
+
into nothing and hence emit no output at all):
|
|
125
|
+
|
|
126
|
+
<ase-tpl-hint level="minimal">
|
|
127
|
+
Remove the existing worktree via `git worktree remove` and `git branch -d`, or rename the task via `/ase-task-rename` to implement it under a still unused worktree name.
|
|
128
|
+
</ase-tpl-hint>
|
|
129
|
+
</if>
|
|
130
|
+
|
|
131
|
+
4. Create the worktree by running the corresponding command (taken
|
|
132
|
+
exactly as given), which creates the directory *and* -- named
|
|
133
|
+
after its last path component -- the branch <worktree-name/> from
|
|
134
|
+
`HEAD`. The `.ase` directory is usually git-ignored, so the
|
|
135
|
+
worktree itself never shows up as a change:
|
|
136
|
+
|
|
137
|
+
`git worktree add "<worktree-dir/>"`
|
|
138
|
+
|
|
139
|
+
<if condition="this command fails">
|
|
140
|
+
Only output the following <template/> and then immediately *STOP*
|
|
141
|
+
processing the entire current skill, leaving the working copy
|
|
142
|
+
*untouched*:
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: worktree **<worktree-name/>** failed to create
|
|
146
|
+
</template>
|
|
147
|
+
</if>
|
|
148
|
+
|
|
149
|
+
5. Only output the following <template/>:
|
|
150
|
+
|
|
151
|
+
<template>
|
|
152
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ◉ worktree: **.ase/worktree/<worktree-name/>**, ▶ status: **worktree created**
|
|
153
|
+
</template>
|
|
154
|
+
|
|
155
|
+
4. **Create Implementation:**
|
|
63
156
|
|
|
64
157
|
1. Perform a *final implementation* of the task plan
|
|
65
158
|
by modifying the *artifacts* with a corresponding, complete
|
|
@@ -73,6 +166,19 @@ Procedure
|
|
|
73
166
|
overrules the implementation draft in the `IMPLEMENTATION DRAFT`
|
|
74
167
|
section of <task-content/>.
|
|
75
168
|
|
|
169
|
+
<if condition="<worktree-dir/> is not empty">
|
|
170
|
+
The change set *MUST* land *exclusively inside* the worktree
|
|
171
|
+
<worktree-dir/>: resolve *every* file path of the task plan
|
|
172
|
+
relative to <worktree-dir/> instead of the original working copy,
|
|
173
|
+
and run *every* verification command (build, tests, linter,
|
|
174
|
+
type-checker, program execution) with <worktree-dir/> as its
|
|
175
|
+
working directory. You *MUST* *NEVER* modify, stage, stash,
|
|
176
|
+
revert, or commit anything *outside* of this worktree. Leave the
|
|
177
|
+
worktree *uncommitted*: do *not* run `git add` and do *not* run
|
|
178
|
+
`git commit`, so the user keeps full control over the final
|
|
179
|
+
commit.
|
|
180
|
+
</if>
|
|
181
|
+
|
|
76
182
|
<if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
|
|
77
183
|
The task plan deliberately *omits* the `## VERIFICATION`
|
|
78
184
|
section. You *MUST* therefore *strictly skip* the entire
|
|
@@ -83,13 +189,52 @@ Procedure
|
|
|
83
189
|
way.
|
|
84
190
|
</if>
|
|
85
191
|
|
|
86
|
-
2.
|
|
192
|
+
2. Update the frontmatter of <task-content/> as follows, *creating*
|
|
193
|
+
each of the `Properties:`, `Status:`, and `Modified:` keys the
|
|
194
|
+
plan does not carry yet at its position in the key order of the
|
|
195
|
+
plan <format/>:
|
|
196
|
+
|
|
197
|
+
- *Add* the value `implemented` to the `Properties:` key if it
|
|
198
|
+
is still absent, keeping all already present values.
|
|
199
|
+
|
|
200
|
+
- *Add* the value `verified` to the `Properties:` key as well,
|
|
201
|
+
but *only* if the verification phase was actually performed
|
|
202
|
+
and succeeded -- hence *never* for a plan whose
|
|
203
|
+
`## VERIFICATION` section is deliberately omitted.
|
|
204
|
+
|
|
205
|
+
- Set the `Status:` key to `COMPLETED`, but *only* if the
|
|
206
|
+
change set was applied *completely* and *successfully* --
|
|
207
|
+
this traverses the `start` and `complete` transitions of the
|
|
208
|
+
state machine of the plan <format/> in one go. Otherwise
|
|
209
|
+
leave the `Status:` key *untouched*, as an incomplete run
|
|
210
|
+
transitioned nowhere.
|
|
211
|
+
|
|
212
|
+
- Refresh the `Modified:` key with the current time in
|
|
213
|
+
ISO-style format, determined by calling the
|
|
214
|
+
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
215
|
+
MCP server.
|
|
216
|
+
|
|
217
|
+
Then call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
218
|
+
"<task-content/>")` tool of the `ase` MCP server to persist the
|
|
219
|
+
updated task plan. Do not output anything in this sub-step.
|
|
220
|
+
|
|
221
|
+
3. Only output the following <template/>:
|
|
87
222
|
|
|
88
223
|
<template>
|
|
89
224
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented**
|
|
90
225
|
</template>
|
|
91
226
|
|
|
92
|
-
4.
|
|
227
|
+
4. <if condition="<worktree-dir/> is not empty">
|
|
228
|
+
Give the closing hint by expanding the following (which,
|
|
229
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
230
|
+
into nothing and hence emit no output at all):
|
|
231
|
+
|
|
232
|
+
<ase-tpl-hint level="minimal">
|
|
233
|
+
The change set is uncommitted in `.ase/worktree/<worktree-name/>` on branch `<worktree-name/>` -- review and commit it there, then remove the worktree via `git worktree remove`.
|
|
234
|
+
</ase-tpl-hint>
|
|
235
|
+
</if>
|
|
236
|
+
|
|
237
|
+
5. **Decide Next Step:**
|
|
93
238
|
|
|
94
239
|
1. *Determine next step*:
|
|
95
240
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
`ase-task-implement`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
10
|
[`--next`|`-n` *option*[,...]]
|
|
11
|
+
[`--worktree`|`-w`]
|
|
11
12
|
[*id*]
|
|
12
13
|
|
|
13
14
|
## DESCRIPTION
|
|
@@ -16,7 +17,18 @@ The `ase-task-implement` skill performs the *final implementation* of
|
|
|
16
17
|
a task plan by modifying the corresponding *artifacts* with a complete
|
|
17
18
|
*change set*. The plan is loaded and any optional `IMPLEMENTATION DRAFT`
|
|
18
19
|
section produced by `ase-task-preflight` is used as a hint - the plain
|
|
19
|
-
plan content always overrules the draft.
|
|
20
|
+
plan content always overrules the draft. Afterwards the plan's
|
|
21
|
+
`Properties:` frontmatter key gains the value `implemented` (plus
|
|
22
|
+
`verified`, if the verification phase actually ran and succeeded), and
|
|
23
|
+
its `Status:` key becomes `COMPLETED` if the change set was applied
|
|
24
|
+
completely and successfully.
|
|
25
|
+
|
|
26
|
+
The *kind of change* stated by the plan's `Kind:` frontmatter key
|
|
27
|
+
(`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
|
|
28
|
+
*operation-specific tenet set* of the **ASE Tenets** is internalized
|
|
29
|
+
before any artifact is touched, in addition to the always applying
|
|
30
|
+
**GENERIC TENETS**. If a plan carries no such key, the kind is
|
|
31
|
+
*inferred* from the plan content, defaulting to `CRAFTING`.
|
|
20
32
|
|
|
21
33
|
If the task plan deliberately *omits* the `## VERIFICATION` section
|
|
22
34
|
(as produced by `ase-code-craft`, `ase-code-refactor`,
|
|
@@ -25,6 +37,17 @@ the entire verification phase is strictly skipped: no build, tests,
|
|
|
25
37
|
linter, type-checker, or program execution is performed once the
|
|
26
38
|
source files have been modified.
|
|
27
39
|
|
|
40
|
+
With `--worktree`|`-w`, the change set is *not* applied to the current
|
|
41
|
+
working copy: a *fresh Git WorkTree* `.ase/worktree/<id>` and its
|
|
42
|
+
equally named branch are created from `HEAD` *before* any artifact is
|
|
43
|
+
touched, and the entire implementation -- including all verification
|
|
44
|
+
runs -- then happens *inside* that worktree, which is left
|
|
45
|
+
*uncommitted*. The worktree is *not* named by an option value: it
|
|
46
|
+
always carries the unique *task id*, so worktree and branch stay tied
|
|
47
|
+
to the very task plan implemented in them. As the worktree branches off
|
|
48
|
+
`HEAD`, *uncommitted* changes of the current working copy are *not*
|
|
49
|
+
carried over into it.
|
|
50
|
+
|
|
28
51
|
After implementation, the user is asked whether to preserve or
|
|
29
52
|
delete the task plan, unless `--next` pre-selects this choice.
|
|
30
53
|
|
|
@@ -40,6 +63,14 @@ delete the task plan, unless `--next` pre-selects this choice.
|
|
|
40
63
|
answer required), `DONE` (preserve task plan and stop), or
|
|
41
64
|
`DELETE` (hand off to `ase-task-delete`).
|
|
42
65
|
|
|
66
|
+
`--worktree`|`-w`:
|
|
67
|
+
Apply the change set inside a dedicated *Git WorkTree* instead of
|
|
68
|
+
the current working copy. The worktree directory `.ase/worktree/<id>`
|
|
69
|
+
and its equally named branch are derived from the *task id* and
|
|
70
|
+
created from `HEAD`. If either the directory or the branch already
|
|
71
|
+
exists, the skill stops and touches nothing. By default, the change
|
|
72
|
+
set is applied to the current working copy.
|
|
73
|
+
|
|
43
74
|
## ARGUMENTS
|
|
44
75
|
|
|
45
76
|
*id*:
|
|
@@ -60,7 +91,15 @@ Implement a specific task and delete the plan when done:
|
|
|
60
91
|
❯ /ase-task-implement --next DELETE hello
|
|
61
92
|
```
|
|
62
93
|
|
|
94
|
+
Implement the task `hello` inside the isolated Git WorkTree
|
|
95
|
+
`.ase/worktree/hello`:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
❯ /ase-task-implement --worktree hello
|
|
99
|
+
```
|
|
100
|
+
|
|
63
101
|
## SEE ALSO
|
|
64
102
|
|
|
65
103
|
[`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md),
|
|
66
104
|
[`ase-task-view`](../ase-task-view/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|
|
105
|
+
|