@rse/ase 0.9.52 → 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 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.52",
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.2",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.52",
3
+ "version": "0.9.54",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.52",
3
+ "version": "0.9.54",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.52",
3
+ "version": "0.9.54",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -248,15 +248,13 @@ Workflow
248
248
  }
249
249
  </template>
250
250
 
251
- 5. Return *exclusively* a single fenced JSON block (no prose,
252
- no preamble, no summary) of the following shape:
251
+ 5. You *MUST* *NOT* propose, apply, or render any code
252
+ changes yourself. Instead, return *exclusively* as the last message
253
+ a single JSON block (no markdown, no prose, no preamble, no summary)
254
+ of the following shape:
253
255
 
254
256
  ```json
255
257
  [
256
258
  <problems/>
257
259
  ]
258
260
  ```
259
-
260
- 6. You *MUST* *NOT* propose, apply, or render any code
261
- changes yourself.
262
-
@@ -393,15 +393,13 @@ Workflow
393
393
  }
394
394
  </template>
395
395
 
396
- 5. Return *exclusively* a single fenced JSON block (no prose,
397
- no preamble, no summary) of the following shape:
396
+ 5. You *MUST* *NOT* propose, apply, or render any code
397
+ changes yourself. Instead, return *exclusively* as the last message
398
+ a single JSON block (no markdown, no prose, no preamble, no summary)
399
+ of the following shape:
398
400
 
399
401
  ```json
400
402
  [
401
403
  <problems/>
402
404
  ]
403
405
  ```
404
-
405
- 6. You *MUST* *NOT* propose, apply, or render any code
406
- changes yourself.
407
-
@@ -94,15 +94,13 @@ Workflow
94
94
  }
95
95
  </template>
96
96
 
97
- 3. Return *exclusively* a single fenced JSON block (no prose,
98
- no preamble, no summary) of the following shape:
97
+ 3. You *MUST* *NOT* propose, apply, or render any document
98
+ changes yourself. Instead, return *exclusively* as the last message
99
+ a single JSON block (no markdown, no prose, no preamble, no summary)
100
+ of the following shape:
99
101
 
100
102
  ```json
101
103
  [
102
104
  <problems/>
103
105
  ]
104
106
  ```
105
-
106
- 4. You *MUST* *NOT* propose, apply, or render any document
107
- changes yourself.
108
-
@@ -54,7 +54,7 @@ tools:
54
54
  </template>
55
55
 
56
56
  4. Now call the MCP tool `query(prompt: <query/>)` from the MCP server
57
- <server/> and then return its result `text` *verbatim* and
58
- *without any modifications*. Especially, do *NOT* add or remove
59
- any text to the MCP server response on your own and do not
57
+ <server/> and then return its result `text` *verbatim* and *without
58
+ any modifications* as the last message. Especially, do *NOT* add or
59
+ remove any text to the MCP server response on your own and do not
60
60
  interpret the result in any way.
@@ -115,8 +115,8 @@ store those facts in the placeholder named `<arg2/>`.
115
115
  mere synonym or spelling variant of it. You *MUST* *NOT* output
116
116
  anything related to this step.
117
117
 
118
- 4. Return *exclusively* the following <template/> (no prose, no
119
- preamble, no summary, and no Markdown formatting):
118
+ 4. Return *exclusively* as the last message the following <template/>
119
+ (no prose, no preamble, no summary, and no Markdown formatting):
120
120
 
121
121
  <template>
122
122
  TOPIC: <topic/>
@@ -172,8 +172,10 @@ Workflow
172
172
  }
173
173
  </template>
174
174
 
175
- 7. Return *exclusively* a single fenced JSON block (no prose, no
176
- preamble, no summary) of the following shape:
175
+ 7. You *MUST* *NOT* propose, apply, or render any document
176
+ changes yourself. Instead, return *exclusively* as the last message
177
+ a single JSON block (no markdown, no prose, no preamble, no summary)
178
+ of the following shape:
177
179
 
178
180
  ```json
179
181
  {
@@ -183,6 +185,3 @@ Workflow
183
185
  ]
184
186
  }
185
187
  ```
186
-
187
- 8. You *MUST* *NOT* propose, apply, or render any code or document
188
- changes yourself.
@@ -9,6 +9,6 @@ tools:
9
9
  - "WebSearch"
10
10
  ---
11
11
 
12
- Just perform the given *query* `$ARGUMENTS` and
13
- give back the *plain responses* without any modifications.
12
+ Just perform the given *query* `$ARGUMENTS` and as the last message give
13
+ back the *plain responses* without any modifications.
14
14
 
@@ -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>
@@ -54,7 +54,7 @@ following ruleset:
54
54
 
55
55
  8. *Honor the dissection hint*:
56
56
  <if condition="<arg2/> is not empty">
57
- Set <hint><arg2/></hint>. The user explicitly told *how* the epic
57
+ Set <hint><arg2/></hint>. The user explicitly stated *how* the epic
58
58
  should be split -- e.g. which input elements belong together, along
59
59
  which axis to cut, or how many parts to aim at -- so you *MUST*
60
60
  follow this <hint/> as closely as possible and let it *override* the
@@ -97,14 +97,14 @@ Report the derived <parts/> with the following <template/>, emitting
97
97
  column edges of the table, and do *not* output any further explanation:
98
98
 
99
99
  <template>
100
- <ase-tpl-head title="DISSECTION" subtitle="<arg1/>">
100
+ <ase-tpl-head title="DISSECTION" subtitle="<arg1/>"/>
101
101
 
102
102
  | Part | Id | Scope | Rationale |
103
103
  | --------------- | ------------ | -------- | ------------ |
104
104
  | **P<part-no/>** | `<part-id/>` | <scope/> | <rationale/> |
105
105
  | [...] | [...] | [...] | [...] |
106
106
 
107
- <ase-tpl-foot title="DISSECTION" subtitle="<arg1/>">
107
+ <ase-tpl-foot title="DISSECTION" subtitle="<arg1/>"/>
108
108
  </template>
109
109
 
110
110
  </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 programming language*.
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
@@ -374,17 +374,29 @@ Template Patterns
374
374
 
375
375
  </template>
376
376
 
377
- - When `<ase-tpl-head title="<title/>"/>` should be expanded, use
378
- (where <raw-title/> is the visible un-styled text `⧉ ASE: <title/>`,
379
- <raw-title-len/> is the number of characters in <raw-title/>, and
380
- <bar/> is the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
381
- times -- clamped to zero so an over-long title never yields a negative
382
- count -- the very same bar-width rule as `<ase-tpl-foot/>` and
383
- `<ase-tpl-boxed/>`, so equal visible text yields equal total width):
377
+ - When `<ase-tpl-head title="<title/>"[ subtitle="<subtitle/>"]/>`
378
+ should be expanded use the following helper placeholders and then
379
+ the following <template/>:
380
+
381
+ - <if condition="<subtitle/> is not empty">
382
+ Set <raw-title>⧉ ASE: <title/>: <subtitle/></raw-title>.
383
+ Set <render-title>⧉ ASE: **`<title/>`**: `<subtitle/>`</render-title>.
384
+ </if>
385
+ <else>
386
+ Set <raw-title>⧉ ASE: <title/></raw-title>.
387
+ Set <render-title>⧉ ASE: **`<title/>`**</render-title>.
388
+ </else>
389
+ - Set <raw-title-len/> to the number of characters in the visible
390
+ un-styled text <raw-title/>.
391
+ - Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
392
+ times -- clamped to zero so an over-long title never yields a
393
+ negative count -- the very same bar-width rule as `<ase-tpl-foot/>`
394
+ and `<ase-tpl-boxed/>`, so equal visible text yields equal total
395
+ width.
384
396
 
385
397
  <template>
386
398
 
387
- ╭────━━━━**(** ⧉ ASE: **`<title/>`** **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
399
+ ╭────━━━━**(** <render-title/> **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
388
400
 
389
401
  </template>
390
402
 
@@ -396,16 +408,27 @@ Template Patterns
396
408
 
397
409
  </template>
398
410
 
399
- - When `<ase-tpl-foot title="<title/>"/>` should be expanded, use
400
- (where <raw-title/> is the visible un-styled text `⧉ ASE: <title/>`,
401
- <raw-title-len/> is the number of characters in <raw-title/>,
402
- and <bar/> is the `─` character repeated exactly max(0, 67 -
403
- <raw-title-len/>) times -- clamped to zero so an over-long title
404
- never yields a negative count):
411
+ - When `<ase-tpl-foot title="<title/>"[ subtitle="<subtitle/>"]/>`
412
+ should be expanded use the following helper placeholders and then
413
+ the following <template/>:
414
+
415
+ - <if condition="<subtitle/> is not empty">
416
+ Set <raw-title>⧉ ASE: <title/>: <subtitle/></raw-title>.
417
+ Set <render-title>⧉ ASE: **`<title/>`**: `<subtitle/>`</render-title>.
418
+ </if>
419
+ <else>
420
+ Set <raw-title>⧉ ASE: <title/></raw-title>.
421
+ Set <render-title>⧉ ASE: **`<title/>`**</render-title>.
422
+ </else>
423
+ - Set <raw-title-len/> to the number of characters in the visible
424
+ un-styled text <raw-title/>.
425
+ - Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
426
+ times -- clamped to zero so an over-long title never yields a
427
+ negative count.
405
428
 
406
429
  <template>
407
430
 
408
- ╰────━━━━**(** ⧉ ASE: **`<title/>`** **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
431
+ ╰────━━━━**(** <render-title/> **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
409
432
 
410
433
  </template>
411
434
 
@@ -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.52",
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. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
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. Do not output anything in this STEP 3.
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/>, and
255
- <timestamp-modified/> information and calculate the number of
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/>")`.
@@ -93,7 +93,7 @@ Procedure
93
93
  Determine them *read-only* by running the corresponding command
94
94
  (taken exactly as given):
95
95
 
96
- `git -C "<repo-root/>" ls-files --others --exclude-standard`
96
+ `git -C "<repo-root/>" -c core.quotepath=off ls-files --others --exclude-standard`
97
97
 
98
98
  *Skip* every listed entry below the `.ase/` directory -- it
99
99
  carries *ASE*'s own state and the worktrees created by this very
@@ -212,7 +212,7 @@ Procedure
212
212
 
213
213
  `git worktree prune`
214
214
 
215
- `git branch -D <part-id/>`
215
+ `git branch -D "<part-id/>"`
216
216
  </if>
217
217
 
218
218
  </step>
@@ -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. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
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. Do not output anything in this STEP 3.
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/>, and
255
- <timestamp-modified/> information and calculate the number of
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. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
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. Do not output anything in this STEP 3.
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/>, and
309
- <timestamp-modified/> information and calculate the number of
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/>")`.
@@ -222,9 +222,9 @@ Procedure
222
222
  Set <dir><skill-dir-local/></dir>.
223
223
  </else>
224
224
 
225
- Then set <target-skill><dir/>/<new-skill-name/>/SKILL.md</target-skill>.
226
- Expand a leading `~` in <target-skill/> into the absolute home
225
+ Expand a leading `~` in <dir/> into the absolute home
227
226
  directory of the user, as the file tools accept absolute paths only.
227
+ Then set <target-skill><dir/>/<new-skill-name/>/SKILL.md</target-skill>.
228
228
  Do not output anything.
229
229
 
230
230
  5. Check whether <target-skill/> already exists.
@@ -355,19 +355,19 @@ Procedure
355
355
  <if condition="<ase-agent-tool/> is `copilot`">
356
356
  <ase-tpl-hint level="minimal">
357
357
  Run `/skills reload` to reload all skills.
358
- Run `/<new-skill-name/>` to execute the new generated workflow.
358
+ Run `/<new-skill-name/>` to execute the newly generated workflow.
359
359
  </ase-tpl-hint>
360
360
  </if>
361
361
  <elseif condition="<ase-agent-tool/> is `codex`">
362
362
  <ase-tpl-hint level="minimal">
363
363
  Run `/skills` to check that the new skill was picked up.
364
- Mention `$<new-skill-name/>` to execute the new generated workflow.
364
+ Mention `$<new-skill-name/>` to execute the newly generated workflow.
365
365
  </ase-tpl-hint>
366
366
  </elseif>
367
367
  <else>
368
368
  <ase-tpl-hint level="minimal">
369
369
  Run `/reload-skills` to reload all skills.
370
- Run `/<new-skill-name/>` to execute the new generated workflow.
370
+ Run `/<new-skill-name/>` to execute the newly generated workflow.
371
371
  </ase-tpl-hint>
372
372
  </else>
373
373
 
@@ -43,7 +43,7 @@ Analyze and Resolve Source Code Problems
43
43
 
44
44
  1. Call the Agent:
45
45
 
46
- <agent description="Reresolve P<n/>"
46
+ <agent description="Resolve P<n/>"
47
47
  subagent_type="general-purpose"
48
48
  isolation="worktree"
49
49
  run_in_background=true>
@@ -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. **Create Implementation:**
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
- 4. **Decide Next Step:**
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.