@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 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.53",
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.53",
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.53",
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.53",
3
+ "version": "0.9.54",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -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 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
@@ -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.53",
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/>")`.
@@ -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/>")`.
@@ -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.