@rse/ase 0.9.53 → 0.9.54
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 +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-constitution.md +6 -1
- package/plugin/meta/ase-format-task.md +15 -0
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +8 -7
- package/plugin/skills/ase-code-refactor/SKILL.md +8 -7
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -7
- package/plugin/skills/ase-task-implement/SKILL.md +120 -4
- package/plugin/skills/ase-task-implement/help.md +35 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +6 -0
- package/plugin/skills/ase-task-preflight/help.md +7 -0
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.54",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"shx": "0.4.0",
|
|
32
32
|
|
|
33
33
|
"@types/node": "26.1.2",
|
|
34
|
-
"@types/luxon": "3.7.
|
|
34
|
+
"@types/luxon": "3.7.3",
|
|
35
35
|
"@types/which": "3.0.4",
|
|
36
36
|
"@types/update-notifier": "6.0.8",
|
|
37
37
|
"@types/shell-quote": "1.7.5",
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
Code Skill Common Steps
|
|
3
|
+
=======================
|
|
4
|
+
|
|
5
|
+
<define name="code-tenets">
|
|
6
|
+
|
|
7
|
+
You *MUST* internalize and strictly honor the **GENERIC TENETS**, and
|
|
8
|
+
the **<arg1/> TENETS** of the **ASE Tenets** in the following creation
|
|
9
|
+
and updating of code. Do not output anything.
|
|
10
|
+
|
|
11
|
+
</define>
|
|
12
|
+
|
|
13
|
+
<define name="code-tenets-from-plan">
|
|
14
|
+
|
|
15
|
+
Determine the *kind of change* the task plan describes and internalize
|
|
16
|
+
the corresponding tenet sets:
|
|
17
|
+
|
|
18
|
+
- If <task-content/> contains a `☯ Kind: <text/>` header line
|
|
19
|
+
and <text/> is one of `CRAFTING`, `REFACTORING`, or `RESOLVING`:
|
|
20
|
+
Set <task-kind><text/></task-kind> (set task kind to the stated kind).
|
|
21
|
+
|
|
22
|
+
- Else:
|
|
23
|
+
The plan states no kind at all, or an unrecognized one, so *infer*
|
|
24
|
+
the kind from the plan content itself: `RESOLVING` if the plan
|
|
25
|
+
predominantly fixes a defect, `REFACTORING` if it predominantly
|
|
26
|
+
re-structures existing artifacts without changing their observable
|
|
27
|
+
behavior, and `CRAFTING` otherwise. Set <task-kind/> to the inferred
|
|
28
|
+
kind, defaulting to `CRAFTING` if the inference stays inconclusive.
|
|
29
|
+
|
|
30
|
+
Then honor the tenet sets of <task-kind/>:
|
|
31
|
+
|
|
32
|
+
<expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
33
|
+
|
|
34
|
+
</define>
|
|
@@ -14,12 +14,16 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
14
14
|
- Do *not* insist on early "return" in "if" blocks, if an "else" block exists.
|
|
15
15
|
- Do *not* remove any whitespace in the code formatting -- keep whitespace aligned with code base.
|
|
16
16
|
- Do *not* produce any trailing white-spaces on any lines.
|
|
17
|
+
- Do *not* guess missing tool call parameters or fill them with invented placeholder values.
|
|
17
18
|
|
|
18
19
|
## Commandments
|
|
19
20
|
|
|
20
21
|
- Be *honest* and *transparent* in all your responses.
|
|
21
22
|
- *Ground* factual and technical claims in verifiable evidence (code base, local files, or web)
|
|
22
23
|
with a reference, rather than unverified model knowledge; state explicitly when a claim cannot be verified.
|
|
24
|
+
- Assume your *internal knowledge of dependencies* (libraries, frameworks, tools, and their implementations)
|
|
25
|
+
is *outdated*; always verify the current API, version, and usage pattern against the local sources
|
|
26
|
+
or the web before writing any code against them.
|
|
23
27
|
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY* it is necessary.
|
|
24
28
|
- Use *concise* and *type-safe code* only.
|
|
25
29
|
- Use *precise* and *surgical code changes* only.
|
|
@@ -37,7 +41,8 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
37
41
|
- Use *double-quotes* (`"[...]"`) instead of single-quotes (`'[...]'`) for all strings.
|
|
38
42
|
- Use K&R coding style with *opening braces* at the end of lines and *closing braces* at the beginning of lines.
|
|
39
43
|
- When a language has a *more strongly-typed variant*, prefer that variant.
|
|
40
|
-
- When generating temporary helper programs, prefer the *target project's primary
|
|
44
|
+
- When generating temporary helper programs or scratch test files, prefer the *target project's primary
|
|
45
|
+
programming language* and *clean them up* once they are no longer needed.
|
|
41
46
|
|
|
42
47
|
@./ase-persona.md
|
|
43
48
|
|
|
@@ -10,6 +10,7 @@ Every *task* uses a strict and fixed format:
|
|
|
10
10
|
|
|
11
11
|
⎈ Created: <timestamp-created/>
|
|
12
12
|
⚙ Modified: <timestamp-modified/>
|
|
13
|
+
☯ Kind: <task-kind/>
|
|
13
14
|
|
|
14
15
|
## CONTEXT
|
|
15
16
|
|
|
@@ -49,6 +50,20 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
49
50
|
- The <task-id/> has to be substituted with the current value of
|
|
50
51
|
<ase-task-id/> in the current session context.
|
|
51
52
|
|
|
53
|
+
- The `☯ Kind:` line states the *kind of change* the task plan
|
|
54
|
+
describes, and hence which *operation-specific tenet set* of the
|
|
55
|
+
**ASE Tenets** a subsequent preflight or implementation has to
|
|
56
|
+
honor. The <task-kind/> value is *strictly* one of `CRAFTING`,
|
|
57
|
+
`REFACTORING`, or `RESOLVING`, and the line is column-aligned with
|
|
58
|
+
the `⎈ Created:` and `⚙ Modified:` lines above it.
|
|
59
|
+
|
|
60
|
+
- The `☯ Kind:` line is *optional*: a skill *authoring* or
|
|
61
|
+
*updating* a task plan *CAN* update an already present line or pass
|
|
62
|
+
it through *verbatim* and *MAY* create a missing one by *inferring*
|
|
63
|
+
the kind from the plan content (defaulting to `CRAFTING`). A
|
|
64
|
+
`--dry` run *never* drops this line, as `--dry` only omits the
|
|
65
|
+
`## VERIFICATION` section.
|
|
66
|
+
|
|
52
67
|
- The <timestamp-created/> is the timestamp when this task plan was
|
|
53
68
|
created. The <timestamp-modified/> is the timestamp when this
|
|
54
69
|
task plan was last modified. Both use an ISO-style format
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.54",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -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/>")`.
|
|
@@ -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/>")`.
|
|
@@ -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
|
|
@@ -89,7 +195,17 @@ Procedure
|
|
|
89
195
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented**
|
|
90
196
|
</template>
|
|
91
197
|
|
|
92
|
-
|
|
198
|
+
3. <if condition="<worktree-dir/> is not empty">
|
|
199
|
+
Give the closing hint by expanding the following (which,
|
|
200
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
201
|
+
into nothing and hence emit no output at all):
|
|
202
|
+
|
|
203
|
+
<ase-tpl-hint level="minimal">
|
|
204
|
+
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`.
|
|
205
|
+
</ase-tpl-hint>
|
|
206
|
+
</if>
|
|
207
|
+
|
|
208
|
+
5. **Decide Next Step:**
|
|
93
209
|
|
|
94
210
|
1. *Determine next step*:
|
|
95
211
|
|
|
@@ -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
|
|
@@ -18,6 +19,13 @@ a task plan by modifying the corresponding *artifacts* with a complete
|
|
|
18
19
|
section produced by `ase-task-preflight` is used as a hint - the plain
|
|
19
20
|
plan content always overrules the draft.
|
|
20
21
|
|
|
22
|
+
The *kind of change* stated by the plan's `☯ Kind:` header line
|
|
23
|
+
(`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
|
|
24
|
+
*operation-specific tenet set* of the **ASE Tenets** is internalized
|
|
25
|
+
before any artifact is touched, in addition to the always applying
|
|
26
|
+
**GENERIC TENETS**. If a plan carries no such line, the kind is
|
|
27
|
+
*inferred* from the plan content, defaulting to `CRAFTING`.
|
|
28
|
+
|
|
21
29
|
If the task plan deliberately *omits* the `## VERIFICATION` section
|
|
22
30
|
(as produced by `ase-code-craft`, `ase-code-refactor`,
|
|
23
31
|
`ase-code-resolve`, or `ase-task-edit` when invoked with `--dry`),
|
|
@@ -25,6 +33,17 @@ the entire verification phase is strictly skipped: no build, tests,
|
|
|
25
33
|
linter, type-checker, or program execution is performed once the
|
|
26
34
|
source files have been modified.
|
|
27
35
|
|
|
36
|
+
With `--worktree`|`-w`, the change set is *not* applied to the current
|
|
37
|
+
working copy: a *fresh Git WorkTree* `.ase/worktree/<id>` and its
|
|
38
|
+
equally named branch are created from `HEAD` *before* any artifact is
|
|
39
|
+
touched, and the entire implementation -- including all verification
|
|
40
|
+
runs -- then happens *inside* that worktree, which is left
|
|
41
|
+
*uncommitted*. The worktree is *not* named by an option value: it
|
|
42
|
+
always carries the unique *task id*, so worktree and branch stay tied
|
|
43
|
+
to the very task plan implemented in them. As the worktree branches off
|
|
44
|
+
`HEAD`, *uncommitted* changes of the current working copy are *not*
|
|
45
|
+
carried over into it.
|
|
46
|
+
|
|
28
47
|
After implementation, the user is asked whether to preserve or
|
|
29
48
|
delete the task plan, unless `--next` pre-selects this choice.
|
|
30
49
|
|
|
@@ -40,6 +59,14 @@ delete the task plan, unless `--next` pre-selects this choice.
|
|
|
40
59
|
answer required), `DONE` (preserve task plan and stop), or
|
|
41
60
|
`DELETE` (hand off to `ase-task-delete`).
|
|
42
61
|
|
|
62
|
+
`--worktree`|`-w`:
|
|
63
|
+
Apply the change set inside a dedicated *Git WorkTree* instead of
|
|
64
|
+
the current working copy. The worktree directory `.ase/worktree/<id>`
|
|
65
|
+
and its equally named branch are derived from the *task id* and
|
|
66
|
+
created from `HEAD`. If either the directory or the branch already
|
|
67
|
+
exists, the skill stops and touches nothing. By default, the change
|
|
68
|
+
set is applied to the current working copy.
|
|
69
|
+
|
|
43
70
|
## ARGUMENTS
|
|
44
71
|
|
|
45
72
|
*id*:
|
|
@@ -60,7 +87,15 @@ Implement a specific task and delete the plan when done:
|
|
|
60
87
|
❯ /ase-task-implement --next DELETE hello
|
|
61
88
|
```
|
|
62
89
|
|
|
90
|
+
Implement the task `hello` inside the isolated Git WorkTree
|
|
91
|
+
`.ase/worktree/hello`:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
❯ /ase-task-implement --worktree hello
|
|
95
|
+
```
|
|
96
|
+
|
|
63
97
|
## SEE ALSO
|
|
64
98
|
|
|
65
99
|
[`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
100
|
[`ase-task-view`](../ase-task-view/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|
|
101
|
+
|
|
@@ -32,6 +32,8 @@ for a corresponding, *complete source code 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,6 +61,10 @@ Procedure
|
|
|
59
61
|
or `ase-task-edit` skills first to create a task plan. Then
|
|
60
62
|
immediately stop processing this skill.
|
|
61
63
|
|
|
64
|
+
3. Internalize the tenets stated by the plan:
|
|
65
|
+
|
|
66
|
+
<expand name="code-tenets-from-plan"></expand>
|
|
67
|
+
|
|
62
68
|
3. **Create Implementation Draft:**
|
|
63
69
|
|
|
64
70
|
1. Perform a *preflight* of the *implementation* of <task-content/> by creating a
|
|
@@ -19,6 +19,13 @@ draft for a corresponding, complete *artifact change set* in
|
|
|
19
19
|
an `IMPLEMENTATION DRAFT` section (replacing any previous draft).
|
|
20
20
|
No source files are modified.
|
|
21
21
|
|
|
22
|
+
The *kind of change* stated by the plan's `☯ Kind:` header line
|
|
23
|
+
(`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
|
|
24
|
+
*operation-specific tenet set* of the **ASE Tenets** is internalized
|
|
25
|
+
before the draft is produced, in addition to the always applying
|
|
26
|
+
**GENERIC TENETS**. If a plan carries no such line, the kind is
|
|
27
|
+
*inferred* from the plan content, defaulting to `CRAFTING`.
|
|
28
|
+
|
|
22
29
|
After the preflight, the user is asked whether to stop, hand
|
|
23
30
|
off to `ase-task-edit`, or hand off to `ase-task-implement`,
|
|
24
31
|
unless `--next` pre-selects this choice.
|