@rse/ase 0.9.16 → 0.9.18
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 +6 -6
- 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-constitution.md +1 -52
- package/plugin/meta/ase-tenets.md +220 -0
- package/plugin/package.json +3 -3
- package/plugin/skills/ase-code-craft/SKILL.md +4 -51
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -40
- package/plugin/skills/ase-code-resolve/SKILL.md +4 -38
- package/plugin/skills/ase-meta-update/SKILL.md +183 -0
- package/plugin/skills/ase-meta-update/help.md +66 -0
- package/dst/ase-notify.js +0 -32
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.18",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -18,15 +18,15 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"eslint": "9.39.4",
|
|
20
20
|
"@eslint/js": "9.39.4",
|
|
21
|
-
"@typescript-eslint/parser": "8.61.
|
|
22
|
-
"@typescript-eslint/eslint-plugin": "8.61.
|
|
21
|
+
"@typescript-eslint/parser": "8.61.1",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "8.61.1",
|
|
23
23
|
"eslint-plugin-promise": "7.3.0",
|
|
24
24
|
"eslint-plugin-import": "2.32.0",
|
|
25
25
|
"neostandard": "0.13.0",
|
|
26
26
|
"globals": "17.6.0",
|
|
27
27
|
"typescript": "6.0.3",
|
|
28
28
|
|
|
29
|
-
"@rse/stx": "1.1.
|
|
29
|
+
"@rse/stx": "1.1.6",
|
|
30
30
|
"nodemon": "3.1.14",
|
|
31
31
|
"shx": "0.4.0",
|
|
32
32
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"commander": "15.0.0",
|
|
45
|
-
"@dotenvx/dotenvx": "1.
|
|
45
|
+
"@dotenvx/dotenvx": "1.73.1",
|
|
46
46
|
"yaml": "2.9.0",
|
|
47
47
|
"valibot": "1.4.1",
|
|
48
48
|
"execa": "9.6.1",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"get-stdin": "10.0.0",
|
|
62
62
|
"proper-lockfile": "4.1.2",
|
|
63
63
|
"write-file-atomic": "8.0.0",
|
|
64
|
-
"pacote": "
|
|
64
|
+
"pacote": "22.0.0",
|
|
65
65
|
"ofetch": "1.5.1",
|
|
66
66
|
"picomatch": "4.0.4"
|
|
67
67
|
},
|
|
@@ -66,58 +66,7 @@ Commandments
|
|
|
66
66
|
primary programming language* (e.g., TypeScript for TS/JS projects,
|
|
67
67
|
Python for Python projects, Go for Go projects).
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
------
|
|
71
|
-
|
|
72
|
-
- **Think Before Coding**:
|
|
73
|
-
*Don't assume. Don't hide confusion. Surface tradeoffs.*
|
|
74
|
-
Before implementing:
|
|
75
|
-
- State your assumptions explicitly. If uncertain, ask.
|
|
76
|
-
- If multiple interpretations exist, present them - don't pick silently.
|
|
77
|
-
- If a simpler approach exists, say so. Push back when warranted.
|
|
78
|
-
- If something is unclear, stop. Name what's confusing. Ask.
|
|
79
|
-
|
|
80
|
-
- **Simplicity First**:
|
|
81
|
-
*Minimum code that solves the problem. Nothing speculative.*
|
|
82
|
-
- No features beyond what was asked.
|
|
83
|
-
- No abstractions for single-use code.
|
|
84
|
-
- No "flexibility" or "configurability" that wasn't requested.
|
|
85
|
-
- No error handling for impossible scenarios.
|
|
86
|
-
- If you write 200 lines and it could be 50, rewrite it.
|
|
87
|
-
Ask yourself: "Would a senior software developer say this is overcomplicated?" If yes, simplify.
|
|
88
|
-
|
|
89
|
-
- **Practical Relevance**:
|
|
90
|
-
*Error handling for practically relevant cases only. No theoretical assumptions.*
|
|
91
|
-
- Handle obvious or expected errors near the origin.
|
|
92
|
-
- Handle theoretical or unexpected errors in parent scopes.
|
|
93
|
-
- Avoid introducing dedicated state variables for individual error cases.
|
|
94
|
-
- If state variables are needed to detect error cases, use minimum number of those variables only.
|
|
95
|
-
- Use minimum number of state variables to span the maximum of error space.
|
|
96
|
-
|
|
97
|
-
- **Surgical Changes**:
|
|
98
|
-
*Touch only what you must. Clean up only your own mess.*
|
|
99
|
-
When editing existing code:
|
|
100
|
-
- Don't "improve" adjacent code, comments, or formatting.
|
|
101
|
-
- Don't refactor things that aren't broken.
|
|
102
|
-
- Match existing style, even if you'd do it differently.
|
|
103
|
-
- If you notice unrelated dead code, mention it - don't delete it.
|
|
104
|
-
When your changes create orphans:
|
|
105
|
-
- Remove imports/variables/functions that YOUR changes made unused.
|
|
106
|
-
- Don't remove pre-existing dead code unless asked.
|
|
107
|
-
The test: Every changed line should trace directly to the user's request.
|
|
108
|
-
|
|
109
|
-
- **Goal-Driven Execution**:
|
|
110
|
-
*Define success criteria. Loop until verified.*
|
|
111
|
-
Transform tasks into verifiable goals:
|
|
112
|
-
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
113
|
-
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
114
|
-
- "Refactor X" → "Ensure tests pass before and after"
|
|
115
|
-
Strong success criteria let you loop independently.
|
|
116
|
-
Weak criteria ("make it work") require constant clarification.
|
|
117
|
-
|
|
118
|
-
Persona
|
|
119
|
-
-------
|
|
69
|
+
@./ase-tenets.md
|
|
120
70
|
|
|
121
71
|
@./ase-control.md
|
|
122
72
|
@./ase-persona.md
|
|
123
|
-
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
|
|
2
|
+
The following are the **ASE Tenets** -- the guiding principles you
|
|
3
|
+
*MUST* internalize and *honor at any time*. They are organized into
|
|
4
|
+
*Generic Tenets*, which always apply, and *Operation-Specific Tenets*,
|
|
5
|
+
which apply only to a particular kind of operation (Crafting, Aligning,
|
|
6
|
+
Refactoring, Resolving).
|
|
7
|
+
|
|
8
|
+
GENERIC TENETS
|
|
9
|
+
--------------
|
|
10
|
+
|
|
11
|
+
At any time and for all kinds of operations,
|
|
12
|
+
you *MUST* honor the following so-called **GENERIC TENETS**:
|
|
13
|
+
|
|
14
|
+
- **Think Before Acting**:
|
|
15
|
+
*Don't assume. Don't hide confusion. Surface trade-offs.*
|
|
16
|
+
Before implementing:
|
|
17
|
+
- State your assumptions explicitly. If uncertain, ask.
|
|
18
|
+
- If multiple interpretations exist, present them - don't pick silently.
|
|
19
|
+
- If a simpler approach exists, say so. Push back when warranted.
|
|
20
|
+
- If something is unclear, stop. Name what's confusing. Ask.
|
|
21
|
+
|
|
22
|
+
- **Simplicity First**:
|
|
23
|
+
*Minimum solution that solves the problem. Nothing speculative.*
|
|
24
|
+
- No features beyond what was asked.
|
|
25
|
+
- No abstractions for single-use code.
|
|
26
|
+
- No "flexibility" or "configurability" that wasn't requested.
|
|
27
|
+
- No error handling for impossible scenarios.
|
|
28
|
+
- If you write 200 lines and it could be 50, rewrite it.
|
|
29
|
+
Ask yourself: "Would a senior software developer say this is
|
|
30
|
+
overcomplicated?" If yes, simplify.
|
|
31
|
+
|
|
32
|
+
- **Practical Relevance**:
|
|
33
|
+
*Error handling for practically relevant cases only. No theoretical assumptions.*
|
|
34
|
+
- Handle obvious or expected errors near the origin.
|
|
35
|
+
- Handle theoretical or unexpected errors in parent scopes.
|
|
36
|
+
- Avoid introducing dedicated state variables for individual error cases.
|
|
37
|
+
- If state variables are needed to detect error cases, use minimum
|
|
38
|
+
number of those variables only.
|
|
39
|
+
- Use minimum number of state variables to span the maximum of error space.
|
|
40
|
+
|
|
41
|
+
- **Surgical Changes**:
|
|
42
|
+
*Keep changes as small as possible.*
|
|
43
|
+
When editing existing code:
|
|
44
|
+
- Touch only what you must. Clean up only your own mess.
|
|
45
|
+
- Don't "improve" adjacent code, comments, or formatting.
|
|
46
|
+
- Don't refactor things that aren't broken.
|
|
47
|
+
- Match existing style, even if you'd do it differently.
|
|
48
|
+
- If you notice unrelated dead code, mention it - don't delete it.
|
|
49
|
+
When your changes create orphans:
|
|
50
|
+
- Remove imports/variables/functions that YOUR changes made unused.
|
|
51
|
+
- Don't remove pre-existing dead code unless asked.
|
|
52
|
+
The test: Every changed line should trace directly to the user's request.
|
|
53
|
+
|
|
54
|
+
- **Separation of Concerns**:
|
|
55
|
+
*One concern per part; keep distinct concerns apart.*
|
|
56
|
+
- Give each module, function, or layer a single, well-defined concern.
|
|
57
|
+
- Don't entangle policy with mechanism, or business logic with I/O.
|
|
58
|
+
- When one concern changes, the change should not ripple into unrelated ones.
|
|
59
|
+
|
|
60
|
+
- **Code Base Alignment**:
|
|
61
|
+
*Blend in. New aspect should read as if the existing aspects wrote it.*
|
|
62
|
+
- Follow the established coding style, formatting, and idioms exactly.
|
|
63
|
+
- Mirror the existing structure, layering, and file organization.
|
|
64
|
+
- Reuse the prevailing naming conventions, patterns, and libraries.
|
|
65
|
+
- When in doubt, imitate the nearest similar code rather than inventing anew.
|
|
66
|
+
|
|
67
|
+
- **Goal-Driven Execution**:
|
|
68
|
+
*Define success criteria. Loop until verified.*
|
|
69
|
+
Transform tasks into verifiable goals:
|
|
70
|
+
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
71
|
+
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
72
|
+
- "Refactor X" → "Ensure tests pass before and after"
|
|
73
|
+
Strong success criteria let you loop independently.
|
|
74
|
+
Weak criteria ("make it work") require constant clarification.
|
|
75
|
+
|
|
76
|
+
CRAFTING TENETS
|
|
77
|
+
---------------
|
|
78
|
+
|
|
79
|
+
When *crafting* from scratch a new artifact, a feature, or an aspect,
|
|
80
|
+
you *MUST* honor the following so-called "CRAFTING TENETS":
|
|
81
|
+
|
|
82
|
+
- **Clear Minimal Scope**:
|
|
83
|
+
Establish explicit boundaries for the new feature.
|
|
84
|
+
Avoid feature scope creep and over-engineering.
|
|
85
|
+
|
|
86
|
+
- **Keep it Simple, Stupid (KISS)**:
|
|
87
|
+
Build with the simplest design that solves the real problem.
|
|
88
|
+
Avoid over-engineering.
|
|
89
|
+
|
|
90
|
+
- **You Aren't Gonna Need It (YAGNI)**:
|
|
91
|
+
Build for today's actual needs, not speculative futures.
|
|
92
|
+
Avoid premature optimizations, premature abstractions,
|
|
93
|
+
over-configurability, etc.
|
|
94
|
+
|
|
95
|
+
- **Don't Repeat Yourself (DRY)**:
|
|
96
|
+
Avoid redundancies, but honor the *Rule of Three*: Don't
|
|
97
|
+
abstract on the first occurrence -- tolerate (small)
|
|
98
|
+
duplication on the second -- factor out on the third only.
|
|
99
|
+
|
|
100
|
+
- **Single Responsibility Principle (SRP)**:
|
|
101
|
+
Every module, class, or function should have only one reason
|
|
102
|
+
to change.
|
|
103
|
+
|
|
104
|
+
- **Loose Coupling, High Cohesion**:
|
|
105
|
+
Strive for good modularity by a set of small, focused parts
|
|
106
|
+
(high cohesion), connected by thin, explicit wires and
|
|
107
|
+
interfaces (loose coupling).
|
|
108
|
+
|
|
109
|
+
- **Clear Interfaces**:
|
|
110
|
+
Design clear interfaces, contracts, and data models --
|
|
111
|
+
with high attention to boundaries and modularity.
|
|
112
|
+
|
|
113
|
+
- **Non-Functional Requirements**:
|
|
114
|
+
Honor the non-functional requirements Performance, Security,
|
|
115
|
+
Scalability, Comprehensibility.
|
|
116
|
+
|
|
117
|
+
ALIGNING TENETS
|
|
118
|
+
---------------
|
|
119
|
+
|
|
120
|
+
When *aligning* a set of target artifacts to a set of source artifacts,
|
|
121
|
+
you *MUST* honor the following so-called **ALIGNING TENETS**:
|
|
122
|
+
|
|
123
|
+
- **Directional Authority**:
|
|
124
|
+
The *source* artifacts are the single source of truth; only the
|
|
125
|
+
*target* artifacts are ever mutated. Never edit the source to fit
|
|
126
|
+
the target, and never let a stale target override a current source.
|
|
127
|
+
|
|
128
|
+
- **Faithful Reflection**:
|
|
129
|
+
The target *MUST* reflect the current source state *exactly* -- no
|
|
130
|
+
more, no less. Do not enrich the target with content the source does
|
|
131
|
+
not warrant, and do not silently drop source facts the target should
|
|
132
|
+
carry.
|
|
133
|
+
|
|
134
|
+
- **Drift Completeness**:
|
|
135
|
+
Detect *every* divergence between source and target, not just the
|
|
136
|
+
obvious additions: reconcile changed content, *and* remove or mark
|
|
137
|
+
target content that the source no longer supports (stale statements,
|
|
138
|
+
orphaned sections, dangling references).
|
|
139
|
+
|
|
140
|
+
- **No Fabrication**:
|
|
141
|
+
Never invent target content that the source does not support. If the
|
|
142
|
+
source is silent, ambiguous, or contradictory on something the target
|
|
143
|
+
needs, surface the gap explicitly rather than papering over it with a
|
|
144
|
+
plausible guess.
|
|
145
|
+
|
|
146
|
+
- **Level-Appropriate Translation**:
|
|
147
|
+
Re-express source facts at the *target's* level of abstraction and
|
|
148
|
+
altitude; do not copy verbatim across artifact levels. A SPEC states
|
|
149
|
+
intent, an ARCH states structure, CODE states realization, DOCS
|
|
150
|
+
states facts, etc -- align the *meaning*, not the wording.
|
|
151
|
+
|
|
152
|
+
- **Format Conformance**:
|
|
153
|
+
Keep every formatted target (SPEC, ARCH, TASK) conformant to its
|
|
154
|
+
format contract (headings, structure, identifiers). Treat CODE,
|
|
155
|
+
DOCS, INFR, and OTHR kinds of artifacts as foreign defined, but not
|
|
156
|
+
as free-form.
|
|
157
|
+
|
|
158
|
+
- **Alignment Traceability**:
|
|
159
|
+
Every target change *MUST* trace back to a concrete source fact. If
|
|
160
|
+
you cannot point to the source statement that justifies a target
|
|
161
|
+
edit, do not make that edit.
|
|
162
|
+
|
|
163
|
+
REFACTORING TENETS
|
|
164
|
+
------------------
|
|
165
|
+
|
|
166
|
+
When *refactoring* existing artifacts or aspects,
|
|
167
|
+
you *MUST* honor the following so-called **REFACTORING TENETS**
|
|
168
|
+
|
|
169
|
+
- **Behavior Preservation**:
|
|
170
|
+
Refactoring changes only re-structure, never change any
|
|
171
|
+
observable behavior at all. Especially, do not mix with
|
|
172
|
+
problem resolving and feature crafting.
|
|
173
|
+
|
|
174
|
+
- **Boy Scout Rule**:
|
|
175
|
+
After the refactoring, leave the source code base cleaner
|
|
176
|
+
than you found it.
|
|
177
|
+
|
|
178
|
+
- **Don't Repeat Yourself (DRY)**:
|
|
179
|
+
Avoid redundancies, but honor the *Rule of Three*: Don't
|
|
180
|
+
abstract on the first occurrence -- tolerate (small)
|
|
181
|
+
duplication on the second -- factor out on the third only.
|
|
182
|
+
|
|
183
|
+
- **Single Responsibility Principle (SRP)**:
|
|
184
|
+
Every module, class, or function should have only one reason
|
|
185
|
+
to change.
|
|
186
|
+
|
|
187
|
+
- **Loose Coupling, High Cohesion**:
|
|
188
|
+
Strive for good modularity by a set of small, focused parts
|
|
189
|
+
(high cohesion), connected by thin, explicit wires and
|
|
190
|
+
interfaces (loose coupling).
|
|
191
|
+
|
|
192
|
+
- **Clear Interfaces**:
|
|
193
|
+
Design clear interfaces, contracts, and data models -- with high
|
|
194
|
+
attention to boundaries and modularity.
|
|
195
|
+
|
|
196
|
+
RESOLVING TENETS
|
|
197
|
+
----------------
|
|
198
|
+
|
|
199
|
+
When *resolving* a problem or challenge (bug-fixing),
|
|
200
|
+
you *MUST* honor the following so-called **RESOLVING TENETS**
|
|
201
|
+
|
|
202
|
+
- **No Cleanups**:
|
|
203
|
+
Strictly focus on resolving the problem and do not mix the task with
|
|
204
|
+
any other necessary code cleanups, unless they are really necessary
|
|
205
|
+
for resolving the task.
|
|
206
|
+
|
|
207
|
+
- **Minimum Flags**:
|
|
208
|
+
Use the absolute minimum total number of flags (boolean variables) to
|
|
209
|
+
span the entire space of scenarios. Prefer the adjustment of existing
|
|
210
|
+
flags over the introduction of new flags.
|
|
211
|
+
|
|
212
|
+
- **Code Adequacy**:
|
|
213
|
+
As little increase in overall source code complexity as possible, as
|
|
214
|
+
much new problem resolution source code as necessary.
|
|
215
|
+
|
|
216
|
+
- **Origin Proximity**:
|
|
217
|
+
Problems for *obvious, particular, or expected* errors *should* be
|
|
218
|
+
handled *near the origin*. Problems for *theoretical, fictive, or
|
|
219
|
+
unexpected* errors *should* be handled more generally and in parent
|
|
220
|
+
scopes.
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.18",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"url": "http://engelschall.com"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@rse/stx": "1.1.
|
|
17
|
+
"@rse/stx": "1.1.6",
|
|
18
18
|
"markdownlint": "0.41.0",
|
|
19
19
|
"markdownlint-cli2": "0.22.1",
|
|
20
|
-
"eslint": "10.
|
|
20
|
+
"eslint": "10.5.0",
|
|
21
21
|
"@eslint/markdown": "8.0.2",
|
|
22
22
|
"eslint-markdown": "0.11.0"
|
|
23
23
|
},
|
|
@@ -132,58 +132,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
132
132
|
|
|
133
133
|
3. <step id="STEP 3: Internalize Crafting Tenets">
|
|
134
134
|
|
|
135
|
-
You *MUST* internalize and honor the
|
|
136
|
-
|
|
135
|
+
1. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
|
|
136
|
+
and the **CRAFTING TENETS** of the **ASE Tenets** when updating
|
|
137
|
+
in the following. Do not output anything.
|
|
137
138
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- **Separation of Concerns**:
|
|
141
|
-
Clearly separate all individual concerns as well as possible.
|
|
142
|
-
|
|
143
|
-
- **Code Base Alignment**:
|
|
144
|
-
Strictly align with the existing source code base by exactly
|
|
145
|
-
following its coding style, its structure, its naming
|
|
146
|
-
conventions, etc.
|
|
147
|
-
|
|
148
|
-
2. Specific Tenets:
|
|
149
|
-
|
|
150
|
-
- **Surgical Changes**:
|
|
151
|
-
Keep source code changes always as small as possible.
|
|
152
|
-
|
|
153
|
-
- **Clear Minimal Scope**:
|
|
154
|
-
Establish explicit boundaries for the new feature.
|
|
155
|
-
Avoid feature scope creep and over-engineering.
|
|
156
|
-
|
|
157
|
-
- **Keep it Simple, Stupid (KISS)**:
|
|
158
|
-
Build with the simplest design that solves the real problem.
|
|
159
|
-
Avoid over-engineering.
|
|
160
|
-
|
|
161
|
-
- **You Aren't Gonna Need It (YAGNI)**:
|
|
162
|
-
Build for today's actual needs, not speculative futures.
|
|
163
|
-
Avoid premature optimizations, premature abstractions,
|
|
164
|
-
over-configurability, etc.
|
|
165
|
-
|
|
166
|
-
- **Don't Repeat Yourself (DRY)**:
|
|
167
|
-
Avoid redundancies, but honor the *Rule of Three*: Don't
|
|
168
|
-
abstract on the first occurrence -- tolerate (small)
|
|
169
|
-
duplication on the second -- factor out on the third only.
|
|
170
|
-
|
|
171
|
-
- **Single Responsibility Principle (SRP)**:
|
|
172
|
-
Every module, class, or function should have only one reason
|
|
173
|
-
to change.
|
|
174
|
-
|
|
175
|
-
- **Loose Coupling, High Cohesion**:
|
|
176
|
-
Strive for good modularity by a set of small, focused parts
|
|
177
|
-
(high cohesion), connected by thin, explicit wires and
|
|
178
|
-
interfaces (loose coupling).
|
|
179
|
-
|
|
180
|
-
- **Clear Interfaces**:
|
|
181
|
-
Design clear interfaces, contracts, and data models --
|
|
182
|
-
with high attention to boundaries and modularity.
|
|
183
|
-
|
|
184
|
-
- **Non-Functional Requirements**:
|
|
185
|
-
Honor the non-functional requirements Performance, Security,
|
|
186
|
-
Scalability, Comprehensibility.
|
|
139
|
+
2. Do not output anything in this STEP 3.
|
|
187
140
|
|
|
188
141
|
</step>
|
|
189
142
|
|
|
@@ -132,47 +132,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
132
132
|
|
|
133
133
|
3. <step id="STEP 3: Internalize Refactoring Tenets">
|
|
134
134
|
|
|
135
|
-
You *MUST* internalize and honor the
|
|
136
|
-
|
|
135
|
+
1. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
|
|
136
|
+
and the **REFACTORING TENETS** of the **ASE Tenets** when updating
|
|
137
|
+
in the following. Do not output anything.
|
|
137
138
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- **Separation of Concerns**:
|
|
141
|
-
Clearly separate all individual concerns as well as possible.
|
|
142
|
-
|
|
143
|
-
- **Code Base Alignment**:
|
|
144
|
-
Strictly align with the existing source code base by exactly
|
|
145
|
-
following its coding style, its structure, its naming
|
|
146
|
-
conventions, etc.
|
|
147
|
-
|
|
148
|
-
2. Specific Tenets:
|
|
149
|
-
|
|
150
|
-
- **Behavior Preservation**:
|
|
151
|
-
Refactoring changes only re-structure, never change any
|
|
152
|
-
observable behavior at all. Especially, do not mix with
|
|
153
|
-
problem resolving and feature crafting.
|
|
154
|
-
|
|
155
|
-
- **Boy Scout Rule**:
|
|
156
|
-
After the refactoring, leave the source code base cleaner
|
|
157
|
-
than you found it.
|
|
158
|
-
|
|
159
|
-
- **Don't Repeat Yourself (DRY)**:
|
|
160
|
-
Avoid redundancies, but honor the *Rule of Three*: Don't
|
|
161
|
-
abstract on the first occurrence -- tolerate (small)
|
|
162
|
-
duplication on the second -- factor out on the third only.
|
|
163
|
-
|
|
164
|
-
- **Single Responsibility Principle (SRP)**:
|
|
165
|
-
Every module, class, or function should have only one reason
|
|
166
|
-
to change.
|
|
167
|
-
|
|
168
|
-
- **Loose Coupling, High Cohesion**:
|
|
169
|
-
Strive for good modularity by a set of small, focused parts
|
|
170
|
-
(high cohesion), connected by thin, explicit wires and
|
|
171
|
-
interfaces (loose coupling).
|
|
172
|
-
|
|
173
|
-
- **Clear Interfaces**:
|
|
174
|
-
Design clear interfaces, contracts, and data models --
|
|
175
|
-
with high attention to boundaries and modularity.
|
|
139
|
+
2. Do not output anything in this STEP 3.
|
|
176
140
|
|
|
177
141
|
</step>
|
|
178
142
|
|
|
@@ -186,45 +186,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
186
186
|
|
|
187
187
|
3. <step id="STEP 3: Internalize Problem Resolution Tenets">
|
|
188
188
|
|
|
189
|
-
You *MUST* internalize and honor the
|
|
190
|
-
|
|
189
|
+
1. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
|
|
190
|
+
and the **RESOLVING TENETS** of the **ASE Tenets** when updating
|
|
191
|
+
in the following. Do not output anything.
|
|
191
192
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
- **Separation of Concerns**:
|
|
195
|
-
Clearly separate all individual concerns as well as possible.
|
|
196
|
-
|
|
197
|
-
- **Code Base Alignment**:
|
|
198
|
-
Strictly align with the existing source code base by exactly
|
|
199
|
-
following its coding style, its structure, its naming
|
|
200
|
-
conventions, etc.
|
|
201
|
-
|
|
202
|
-
2. Specific Tenets:
|
|
203
|
-
|
|
204
|
-
- **Surgical Changes**:
|
|
205
|
-
Keep source code changes always as small as possible.
|
|
206
|
-
|
|
207
|
-
- **No Cleanups**:
|
|
208
|
-
Strictly focus on resolving the problem and do not mix this
|
|
209
|
-
task with any other necessary code cleanups, unless they are
|
|
210
|
-
really necessary for resolving the task.
|
|
211
|
-
|
|
212
|
-
- **Minimum Flags**:
|
|
213
|
-
Use the absolute minimum total number of flags (boolean
|
|
214
|
-
variables) to span the entire space of scenarios. Prefer the
|
|
215
|
-
adjustment of existing flags over the introduction of new
|
|
216
|
-
flags.
|
|
217
|
-
|
|
218
|
-
- **Code Adequacy**:
|
|
219
|
-
As little increase in overall source code complexity as
|
|
220
|
-
possible, as much new problem resolution source code as
|
|
221
|
-
necessary.
|
|
222
|
-
|
|
223
|
-
- **Origin Proximity**:
|
|
224
|
-
Problems for *obvious, particular, or expected* errors
|
|
225
|
-
*should* be handled *near the origin*. Problems for
|
|
226
|
-
*theoretical, fictive, or unexpected* errors *should* be
|
|
227
|
-
handled more generally and in parent scopes.
|
|
193
|
+
2. Do not output anything in this STEP 3.
|
|
228
194
|
|
|
229
195
|
</step>
|
|
230
196
|
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-update
|
|
3
|
+
argument-hint: "[--help|-h] <target>[,...] [<source>[,...]]"
|
|
4
|
+
description: >
|
|
5
|
+
Update one set of artifact kinds (the target) to reflect the current
|
|
6
|
+
state of another set of artifact kinds (the source). Use when the
|
|
7
|
+
user wants to "update", "reconcile", or "sync" artifacts like SPEC,
|
|
8
|
+
ARCH, CODE, DOCS, TASK, INFR, or OTHR against each other.
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
effort: xhigh
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
|
+
|
|
18
|
+
<skill name="ase-meta-update">
|
|
19
|
+
Update Artifacts from Artifacts
|
|
20
|
+
</skill>
|
|
21
|
+
|
|
22
|
+
<expand name="getopt" arg1="ase-meta-update">
|
|
23
|
+
$ARGUMENTS
|
|
24
|
+
</expand>
|
|
25
|
+
|
|
26
|
+
<objective>
|
|
27
|
+
*Update* the *target* artifact kinds to *reflect* the *current
|
|
28
|
+
state* of the *source* artifact kinds, by reading the source
|
|
29
|
+
artifacts and adjusting the target artifacts accordingly:
|
|
30
|
+
<request><getopt-arguments/></request>.
|
|
31
|
+
</objective>
|
|
32
|
+
|
|
33
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
|
|
34
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-arch.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
37
|
+
|
|
38
|
+
Procedure
|
|
39
|
+
---------
|
|
40
|
+
|
|
41
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
42
|
+
You *MUST* not skip any numbered item during processing!
|
|
43
|
+
|
|
44
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
45
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
46
|
+
|
|
47
|
+
<flow>
|
|
48
|
+
|
|
49
|
+
1. <step id="STEP 1: Determine Target and Source">
|
|
50
|
+
|
|
51
|
+
1. The recognized artifact kinds are the seven tokens `TASK`,
|
|
52
|
+
`SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and `OTHR`. Parse
|
|
53
|
+
<getopt-arguments/> as one or two whitespace-separated fields:
|
|
54
|
+
the *first* field is the comma-separated <target/> kind list, the
|
|
55
|
+
optional *second* field is the comma-separated <source/> kind list.
|
|
56
|
+
Upper-case and trim every parsed kind token.
|
|
57
|
+
|
|
58
|
+
2. <if condition="<target/> is empty">
|
|
59
|
+
|
|
60
|
+
Only output the following <template/> and then immediately *STOP*
|
|
61
|
+
processing the entire current skill:
|
|
62
|
+
|
|
63
|
+
<template>
|
|
64
|
+
⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: missing target argument
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
</if>
|
|
68
|
+
|
|
69
|
+
3. If any token in <target/> or <source/> is *not* one of the seven
|
|
70
|
+
recognized kinds, only output the following <template/> (with
|
|
71
|
+
<kind/> set to the first offending token) and then immediately
|
|
72
|
+
*STOP* processing the entire current skill:
|
|
73
|
+
|
|
74
|
+
<template>
|
|
75
|
+
⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: unknown artifact kind: **<kind/>**
|
|
76
|
+
</template>
|
|
77
|
+
|
|
78
|
+
4. <if condition="<source/> is empty">
|
|
79
|
+
|
|
80
|
+
Set <source/> to the seven recognized kinds
|
|
81
|
+
`TASK,SPEC,ARCH,CODE,DOCS,INFR,OTHR` *minus* all kinds present
|
|
82
|
+
in <target/> (preserving that fixed order). Do not output
|
|
83
|
+
anything.
|
|
84
|
+
|
|
85
|
+
</if>
|
|
86
|
+
|
|
87
|
+
5. Remove from <source/> any kind that is also present in <target/>
|
|
88
|
+
(a kind is never its own source). If <source/> is then empty,
|
|
89
|
+
only output the following <template/> and then immediately *STOP*
|
|
90
|
+
processing the entire current skill:
|
|
91
|
+
|
|
92
|
+
<template>
|
|
93
|
+
⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: empty source -- nothing to update from
|
|
94
|
+
</template>
|
|
95
|
+
|
|
96
|
+
6. Report the resolved target and source with the following <template/>:
|
|
97
|
+
|
|
98
|
+
<template>
|
|
99
|
+
<ase-tpl-bullet-signal/> **TARGET**: <target/>
|
|
100
|
+
<ase-tpl-bullet-normal/> **SOURCE**: <source/>
|
|
101
|
+
</template>
|
|
102
|
+
|
|
103
|
+
</step>
|
|
104
|
+
|
|
105
|
+
2. <step id="STEP 2: Resolve and Read Artifact Files">
|
|
106
|
+
|
|
107
|
+
1. Do not output anything in this STEP 2.
|
|
108
|
+
|
|
109
|
+
2. For all kinds in the union of <target/> and <source/>,
|
|
110
|
+
call the `ase_artifact_list(kind: [ ... ])` tool of the `ase`
|
|
111
|
+
MCP server *once*, passing the lower-cased `kind` tokens, and
|
|
112
|
+
read the returned `artifacts` array of `{ kind, files }` objects
|
|
113
|
+
to obtain the project-relative file list per kind.
|
|
114
|
+
|
|
115
|
+
3. Read all <source/> artifact files previously resolved and build a
|
|
116
|
+
precise understanding of the *current state* they represent.
|
|
117
|
+
|
|
118
|
+
</step>
|
|
119
|
+
|
|
120
|
+
3. <step id="STEP 3: Internalize Artifact Formats">
|
|
121
|
+
|
|
122
|
+
1. Do not output anything in this STEP 3.
|
|
123
|
+
|
|
124
|
+
2. Internalize and honor the artifact-format conventions imported above:
|
|
125
|
+
- the artifact-set/artifact/aspect meta information of `ase-format-meta.md`,
|
|
126
|
+
- the `SPEC` format of `ase-format-spec.md`,
|
|
127
|
+
- the `ARCH` format of `ase-format-arch.md`,
|
|
128
|
+
- the `TASK` format of `ase-format-task.md`.
|
|
129
|
+
|
|
130
|
+
Whenever a target artifact belongs to one of these formatted
|
|
131
|
+
kinds, the update *MUST* keep it conformant to the
|
|
132
|
+
corresponding format (headings, structure, identifiers, and the
|
|
133
|
+
`<timestamp-modified/>` rule). The kinds `CODE`, `DOCS`, `INFR`,
|
|
134
|
+
and `OTHR` have no dedicated format contract and are treated as
|
|
135
|
+
free-form.
|
|
136
|
+
|
|
137
|
+
</step>
|
|
138
|
+
|
|
139
|
+
4. <step id="STEP 4: Update Target Artifacts">
|
|
140
|
+
|
|
141
|
+
1. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
|
|
142
|
+
the **ALIGNMENT TENETS**, the **REFACTORING TENETS**, and the
|
|
143
|
+
**CRAFTING TENETS** of the **ASE Tenets** when updating in the following. Do not
|
|
144
|
+
output anything.
|
|
145
|
+
|
|
146
|
+
2. *Update* the <target/> artifact files so that they faithfully
|
|
147
|
+
*reflect the current state* of the <source/> artifacts. Apply the
|
|
148
|
+
update *directly* to the target files via `Write`/`Edit`, keeping
|
|
149
|
+
changes as *surgical* as possible: change only what the source
|
|
150
|
+
state actually requires, and do *not* rewrite unrelated parts of a
|
|
151
|
+
target artifact.
|
|
152
|
+
|
|
153
|
+
For each formatted target kind, honor its format contract
|
|
154
|
+
internalized in STEP 3 and, whenever a target artifact is
|
|
155
|
+
changed, update its `<timestamp-modified/>` line via a call to
|
|
156
|
+
the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
157
|
+
`ase` MCP server.
|
|
158
|
+
|
|
159
|
+
3. Report the performed update with the following <template/>, listing
|
|
160
|
+
one bullet line per changed target file (with <file/> its
|
|
161
|
+
project-relative path and <note/> an ultra-brief description of
|
|
162
|
+
what was reconciled):
|
|
163
|
+
|
|
164
|
+
<template>
|
|
165
|
+
<ase-tpl-bullet-signal/> **UPDATED ARTIFACTS**:
|
|
166
|
+
|
|
167
|
+
- `<file/>`: <note/>
|
|
168
|
+
</template>
|
|
169
|
+
|
|
170
|
+
<if condition="no target artifact required any change">
|
|
171
|
+
|
|
172
|
+
Instead, only output the following <template/>:
|
|
173
|
+
|
|
174
|
+
<template>
|
|
175
|
+
<ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none -- target already reflects source state.
|
|
176
|
+
</template>
|
|
177
|
+
|
|
178
|
+
</if>
|
|
179
|
+
|
|
180
|
+
</step>
|
|
181
|
+
|
|
182
|
+
</flow>
|
|
183
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-update` - Update Artifacts from Artifacts
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-update`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
*target*[,...]
|
|
11
|
+
[*source*[,...]]
|
|
12
|
+
|
|
13
|
+
## DESCRIPTION
|
|
14
|
+
|
|
15
|
+
The `ase-meta-update` skill updates one set of artifact kinds (the
|
|
16
|
+
*target*) to *reflect* the *current state* of another set of artifact
|
|
17
|
+
kinds (the *source*). It reads the source artifacts and then adjusts the
|
|
18
|
+
target artifacts *directly* and *surgically* to match the source state.
|
|
19
|
+
|
|
20
|
+
Both *target* and *source* are comma-separated lists over the seven
|
|
21
|
+
recognized artifact kinds `SPEC` (Specification), `ARCH` (Architecture),
|
|
22
|
+
`CODE` (Source Code), `DOCS` (Documentation), `TASK` (Task Plans), `INFR`
|
|
23
|
+
(Infrastructure), and `OTHR` (catch-all). When *source* is omitted, it
|
|
24
|
+
defaults to all seven kinds *minus* the kinds listed in *target*. A kind
|
|
25
|
+
present in *target* is never used as its own source.
|
|
26
|
+
|
|
27
|
+
The file lists for the kinds `SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and
|
|
28
|
+
`OTHR` are resolved via the `ase_artifact_list` MCP tool; the `TASK` kind
|
|
29
|
+
is resolved generically from the `.ase/task/*/plan.md` task plans. While
|
|
30
|
+
updating, the skill honors the artifact-format conventions of
|
|
31
|
+
`ase-format-meta.md`, `ase-format-spec.md`, `ase-format-arch.md`, and
|
|
32
|
+
`ase-format-task.md`; the kinds `CODE`, `DOCS`, `INFR`, and `OTHR` are
|
|
33
|
+
treated as free-form.
|
|
34
|
+
|
|
35
|
+
## ARGUMENTS
|
|
36
|
+
|
|
37
|
+
*target*[,...]:
|
|
38
|
+
The comma-separated list of artifact kinds to update.
|
|
39
|
+
|
|
40
|
+
*source*[,...]:
|
|
41
|
+
The comma-separated list of artifact kinds to update *from*. When
|
|
42
|
+
omitted, it defaults to all recognized kinds except those in *target*.
|
|
43
|
+
|
|
44
|
+
## EXAMPLES
|
|
45
|
+
|
|
46
|
+
Update the specification to reflect the current source code:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
❯ /ase-meta-update SPEC CODE
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Update specification and architecture from everything else:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
❯ /ase-meta-update SPEC,ARCH
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Update the documentation from the code and the architecture:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
❯ /ase-meta-update DOCS CODE,ARCH
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## SEE ALSO
|
|
65
|
+
|
|
66
|
+
[`ase-meta-changelog`](../ase-meta-changelog/help.md), [`ase-arch-analyze`](../ase-arch-analyze/help.md), [`ase-arch-discover`](../ase-arch-discover/help.md).
|
package/dst/ase-notify.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
** Agentic Software Engineering (ASE)
|
|
3
|
-
** Copyright (c) 2025-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
4
|
-
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
/* MCP registration entry point for user notification tool */
|
|
8
|
-
export class NotifyMCP {
|
|
9
|
-
register(mcp) {
|
|
10
|
-
mcp.registerTool("ase_notify", {
|
|
11
|
-
title: "ASE user notification",
|
|
12
|
-
description: "Display a `message` to the user in the terminal of the agent harness. " +
|
|
13
|
-
"The display happens deterministically through the accompanying PostToolUse hook, " +
|
|
14
|
-
"independent of any assistant text output. " +
|
|
15
|
-
"Use this to surface intermediate skill progress or status information " +
|
|
16
|
-
"which otherwise would not be visible to the user before the final response. " +
|
|
17
|
-
"Returns a status `text` acknowledging the notification.",
|
|
18
|
-
inputSchema: {
|
|
19
|
-
message: z.string().min(1).max(4096)
|
|
20
|
-
.describe("message to display to the user (plain text, up to 4096 characters)")
|
|
21
|
-
}
|
|
22
|
-
}, async (args) => {
|
|
23
|
-
/* the tool itself is a deliberate no-op: the user-visible display
|
|
24
|
-
happens in the PostToolUse hook ("ase hook post-tool-use"),
|
|
25
|
-
which receives this tool call's input from the agent harness
|
|
26
|
-
and reflects the message back as a "systemMessage" */
|
|
27
|
-
return {
|
|
28
|
-
content: [{ type: "text", text: "notify: OK: message displayed to user" }]
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|