@rse/ase 0.9.18 → 0.9.20

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": "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.18",
9
+ "version": "0.9.20",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.18",
3
+ "version": "0.9.20",
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.18",
3
+ "version": "0.9.20",
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.18",
3
+ "version": "0.9.20",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -139,8 +139,14 @@ Skill Sequential Processing
139
139
  - *IMPORTANT*: For each <step/> you *MUST* use the `TaskUpdate` tool
140
140
  for updating its status *during* processing, once a <step/> finished.
141
141
 
142
- - *IMPORTANT*: You *MUST* sequentially execute every <step/> in
143
- a <flow/> *EXACTLY* as the instructions specify.
142
+ - *IMPORTANT*: You *MUST* *strictly sequentially* execute every <step/> in
143
+ a <flow/>. You *MUST* not implicitly skip any <step/> during
144
+ processing, except you were explicitly requested to do this or the
145
+ step is a configured to be a conditional step!
146
+
147
+ - *IMPORTANT*: You *MUST* *strictly sequentially* execute every numbered
148
+ items in a <step/>. You *MUST* not implicitly skip any numbered item during
149
+ processing, except you were explicitly requested to do this!
144
150
 
145
151
  - *IMPORTANT*: For any <step/> that specifies an *agent* in its
146
152
  `agent="[...]"` XML attribute, you *MUST* use the specified
@@ -114,10 +114,10 @@ you *MUST* honor the following so-called "CRAFTING TENETS":
114
114
  Honor the non-functional requirements Performance, Security,
115
115
  Scalability, Comprehensibility.
116
116
 
117
- ALIGNING TENETS
118
- ---------------
117
+ RECONCILIATION TENETS
118
+ ---------------------
119
119
 
120
- When *aligning* a set of target artifacts to a set of source artifacts,
120
+ When *reconcile* a set of target artifacts to a set of source artifacts,
121
121
  you *MUST* honor the following so-called **ALIGNING TENETS**:
122
122
 
123
123
  - **Directional Authority**:
@@ -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.18",
9
+ "version": "0.9.20",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -43,12 +43,6 @@ From scratch *craft* the following feature:
43
43
  Procedure
44
44
  ---------
45
45
 
46
- You *MUST* follow the following numbered items *strictly* *sequentially*!
47
- You *MUST* not skip any numbered item during processing!
48
-
49
- You *MUST* *NOT* output anything in this entire procedure, *except* when
50
- explicitly requested by this procedure via outputs based on a <template/>!
51
-
52
46
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
53
47
  filesystem-modifying tool during this entire skill. The *only*
54
48
  permitted way to persist artifacts is via `ase_task_save(...)`.
@@ -43,12 +43,6 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
43
43
  Procedure
44
44
  ---------
45
45
 
46
- You *MUST* follow the following numbered items *strictly* *sequentially*!
47
- You *MUST* not skip any numbered item during processing!
48
-
49
- You *MUST* *NOT* output anything in this entire procedure, *except* when
50
- explicitly requested by this procedure via outputs based on a <template/>!
51
-
52
46
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
53
47
  filesystem-modifying tool during this entire skill. The *only*
54
48
  permitted way to persist artifacts is via `ase_task_save(...)`.
@@ -43,12 +43,6 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
43
43
  Procedure
44
44
  ---------
45
45
 
46
- You *MUST* follow the following numbered items *strictly* *sequentially*!
47
- You *MUST* not skip any numbered item during processing!
48
-
49
- You *MUST* *NOT* output anything in this entire procedure, *except* when
50
- explicitly requested by this procedure via outputs based on a <template/>!
51
-
52
46
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
53
47
  filesystem-modifying tool during this entire skill. The *only*
54
48
  permitted way to persist artifacts is via `ase_task_save(...)`.
@@ -37,12 +37,6 @@ effort: high
37
37
  Procedure
38
38
  ---------
39
39
 
40
- You *MUST* follow the following numbered items *strictly* *sequentially*!
41
- You *MUST* not skip any numbered item during processing!
42
-
43
- You *MUST* *NOT* output anything in this entire procedure, *except* when
44
- explicitly requested by this procedure via outputs based on a <template/>!
45
-
46
40
  <flow>
47
41
 
48
42
  1. <step id="STEP 1: Resolve Input">
@@ -44,12 +44,6 @@ render a *blast-radius map*.
44
44
  Procedure
45
45
  ---------
46
46
 
47
- You *MUST* follow the following numbered items *strictly* *sequentially*!
48
- You *MUST* not skip any numbered item during processing!
49
-
50
- You *MUST* *NOT* output anything in this entire procedure, *except* when
51
- explicitly requested by this procedure via outputs based on a <template/>!
52
-
53
47
  <flow>
54
48
 
55
49
  1. <step id="STEP 1: Determine Change Set">
@@ -43,12 +43,6 @@ scan: it complements `ase-code-lint` (mechanical quality), `ase-code-analyze`
43
43
  Procedure
44
44
  ---------
45
45
 
46
- You *MUST* follow the following numbered items *strictly* *sequentially*!
47
- You *MUST* not skip any numbered item during processing!
48
-
49
- You *MUST* *NOT* output anything in this entire procedure, *except* when
50
- explicitly requested by this procedure via outputs based on a <template/>!
51
-
52
46
  <flow>
53
47
 
54
48
  1. <step id="STEP 1: Determine Change Set">
@@ -0,0 +1,191 @@
1
+ ---
2
+ name: ase-sync-import
3
+ argument-hint: "[--help|-h] [--target|-t <target>[,...]] <hint>"
4
+ description: >
5
+ Import information from foreign sources into a set of artifact kinds
6
+ (the target), generating or updating them to reflect the imported
7
+ information. Use when the user wants to "import", "ingest", or
8
+ "bring in" external sources like files, URLs, or pasted text into
9
+ artifacts like SPEC, ARCH, CODE, DOCS, TASK, INFR, or OTHR.
10
+ user-invocable: true
11
+ disable-model-invocation: false
12
+ effort: xhigh
13
+ ---
14
+
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
16
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
17
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
18
+
19
+ <skill name="ase-sync-import">
20
+ Import Foreign Sources into Artifact Set
21
+ </skill>
22
+
23
+ <expand name="getopt"
24
+ arg1="ase-sync-import"
25
+ arg2="--target|-t=SPEC,ARCH">
26
+ $ARGUMENTS
27
+ </expand>
28
+
29
+ <objective>
30
+ *Import* the information of the *foreign sources* (named by the
31
+ <hint/>) into the *target* artifact kinds, by reading the foreign
32
+ sources and generating or updating the target artifacts to faithfully
33
+ reflect the imported information:
34
+ <hint><getopt-arguments/></hint>.
35
+ </objective>
36
+
37
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
38
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md
39
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-arch.md
40
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
41
+
42
+ Procedure
43
+ ---------
44
+
45
+ <flow>
46
+
47
+ 1. <step id="STEP 1: Determine Target">
48
+
49
+ 1. The recognized artifact kinds are the seven tokens `TASK`,
50
+ `SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and `OTHR`. Parse
51
+ <getopt-target/> as the comma-separated <target/> kind list.
52
+ Upper-case and trim every parsed kind token. Do not output
53
+ anything.
54
+
55
+ 2. <if condition="<target/> is empty">
56
+
57
+ Only output the following <template/> and then immediately *STOP*
58
+ processing the entire current skill:
59
+
60
+ <template>
61
+ ⧉ **ASE**: ☻ skill: **ase-sync-import**, ▶ ERROR: empty target artifact list
62
+ </template>
63
+
64
+ </if>
65
+
66
+ 3. If any token in <target/> is *not* one of the seven recognized
67
+ kinds, only output the following <template/> (with <kind/> set to
68
+ the first offending token) and then immediately *STOP* processing
69
+ the entire current skill:
70
+
71
+ <template>
72
+ ⧉ **ASE**: ☻ skill: **ase-sync-import**, ▶ ERROR: unknown or unsupported artifact kind: **<kind/>**
73
+ </template>
74
+
75
+ 4. <if condition="<hint/> is empty">
76
+
77
+ Only output the following <template/> and then immediately *STOP*
78
+ processing the entire current skill:
79
+
80
+ <template>
81
+ ⧉ **ASE**: ☻ skill: **ase-sync-import**, ▶ ERROR: empty source hint -- nothing to import from
82
+ </template>
83
+
84
+ </if>
85
+
86
+ 5. Report the resolved target and source hint with the following <template/>:
87
+
88
+ <template>
89
+ <ase-tpl-bullet-signal/> **TARGET**: <target/>
90
+ <ase-tpl-bullet-normal/> **SOURCE**: <hint/>
91
+ </template>
92
+
93
+ </step>
94
+
95
+ 2. <step id="STEP 2: Ingest Foreign Sources">
96
+
97
+ 1. Do not output anything in this STEP 2.
98
+
99
+ 2. Interpret the <hint/> as the description of the *foreign sources*
100
+ to import from. The foreign sources are *external* to the ASE
101
+ artifact sets and may be local files or directories, remote URLs,
102
+ pasted text passages, or references to other documents.
103
+
104
+ 3. Read or fetch all foreign sources named by the <hint/>: read local
105
+ files and directories via the `Read` tool, and fetch remote URLs
106
+ via the available web tools. Build a precise understanding of the
107
+ *information* the foreign sources represent.
108
+
109
+ </step>
110
+
111
+ 3. <step id="STEP 3: Generate or Update Artifacts">
112
+
113
+ 1. For all kinds in <target/>, call the `ase_artifact_list(kind: [
114
+ ... ])` tool of the `ase` MCP server *once*, passing the
115
+ lower-cased `kind` tokens, and read the returned `artifacts`
116
+ array of `{ kind, files }` objects to obtain the project-relative
117
+ file list per kind. Read all *existing* target artifacts to
118
+ understand their current state.
119
+
120
+ 2. Internalize and honor the artifact-format conventions:
121
+
122
+ - the artifact-set/artifact/aspect meta information (`ase-format-meta.md`),
123
+ - the `SPEC` format (`ase-format-spec.md`),
124
+ - the `ARCH` format (`ase-format-arch.md`),
125
+ - the `TASK` format (`ase-format-task.md`).
126
+
127
+ Whenever a target artifact belongs to one of these kinds, it
128
+ *MUST* be kept (or made) conformant to the corresponding format
129
+ (headings, structure, identifiers, and the `<timestamp-modified/>`
130
+ rule). The kinds `CODE`, `DOCS`, `INFR`, and `OTHR` have no
131
+ dedicated format contract and are treated as free-form.
132
+
133
+ 3. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
134
+ the **CRAFTING TENETS**, and the **RECONCILIATION TENETS** of the
135
+ **ASE Tenets** when generating or updating in the following. Do
136
+ not output anything.
137
+
138
+ 4. Once call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of
139
+ the `ase` MCP server to find out the current time and store it in
140
+ <timestamp-modified/>.
141
+
142
+ 5. *Generate or update* the <target/> artifact files so that they
143
+ faithfully *reflect* the information of the imported foreign
144
+ sources:
145
+
146
+ - *Generate* a target artifact that does not yet exist but is
147
+ warranted by the imported information, using the current time
148
+ for both its `Created:` and `Modified:` timestamps.
149
+
150
+ - *Update* an existing target artifact so it reflects the
151
+ imported information. Keep changes as *surgical* as possible:
152
+ change only what the imported information actually requires,
153
+ and do *not* rewrite unrelated parts of an artifact. Whenever
154
+ an existing artifact is changed and contains a `Modified:
155
+ <timestamp-modified-old/>` line, replace this with `Modified:
156
+ <timestamp-modified/>`.
157
+
158
+ Honor **No Fabrication**: never invent target content the foreign
159
+ sources do not support; if the sources are silent or ambiguous on
160
+ something the target needs, surface the gap rather than guessing.
161
+ Re-express the imported facts at the *target's* level of
162
+ abstraction (a SPEC states intent, an ARCH states structure).
163
+
164
+ Apply the generation/update directly to the target artifacts via
165
+ the `Write`/`Edit` tools.
166
+
167
+ 6. Report the performed changes with the following <template/>, listing
168
+ one bullet line per generated or updated file (with <file/> its
169
+ project-relative path and <note/> an ultra-brief description of
170
+ what was imported):
171
+
172
+ <template>
173
+ <ase-tpl-bullet-signal/> **IMPORTED ARTIFACTS**:
174
+
175
+ - `<file/>`: <note/>
176
+ [...]
177
+ </template>
178
+
179
+ <if condition="no target artifact required any change">
180
+
181
+ Only output the following <template/>:
182
+
183
+ <template>
184
+ <ase-tpl-bullet-normal/> **IMPORTED ARTIFACTS**: none -- all targets already reflect the imported sources
185
+ </template>
186
+
187
+ </if>
188
+
189
+ </step>
190
+
191
+ </flow>
@@ -0,0 +1,80 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-sync-import` - Import Foreign Sources into Artifact Set
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-sync-import`
9
+ [`--help`|`-h`]
10
+ [`--target`|`-t` *target*[,...]]
11
+ *hint*
12
+
13
+ ## DESCRIPTION
14
+
15
+ The `ase-sync-import` skill imports information from *foreign sources*
16
+ into a set of artifact kinds (the *target*), generating or updating the
17
+ target artifacts so they faithfully *reflect* the imported information.
18
+ Unlike `ase-sync-reconcile`, which syncs *between* existing ASE artifact
19
+ kinds, `ase-sync-import` brings in information from *external* sources
20
+ that live outside the ASE artifact sets.
21
+
22
+ The *foreign sources* are named by the free-form *hint* argument and may
23
+ be local files or directories, remote URLs, pasted text passages, or
24
+ references to other documents. Local files are read via the `Read` tool
25
+ and remote URLs are fetched via the available web tools.
26
+
27
+ The *target* is a comma-separated list over the seven recognized
28
+ artifact kinds `SPEC` (Specification), `ARCH` (Architecture), `CODE`
29
+ (Source Code), `DOCS` (Documentation), `TASK` (Task Plans), `INFR`
30
+ (Infrastructure), and `OTHR` (catch-all). It defaults to `SPEC,ARCH`.
31
+ The file lists for the involved kinds are resolved via the
32
+ `ase_artifact_list` MCP tool of the `ase` MCP server.
33
+
34
+ While importing, the skill honors the artifact-format conventions of
35
+ `ase-format-meta.md`, `ase-format-spec.md`, `ase-format-arch.md`, and
36
+ `ase-format-task.md`; the kinds `CODE`, `DOCS`, `INFR`, and `OTHR` have
37
+ no dedicated format contract and are treated as free-form. A target
38
+ artifact that does not yet exist but is warranted by the imported
39
+ information is *generated* from scratch, while an existing target
40
+ artifact is *surgically updated* to reflect the imported information.
41
+
42
+ ## OPTIONS
43
+
44
+ `--target`|`-t` *target*[,...]:
45
+ The comma-separated list of artifact kinds to generate or update.
46
+ Defaults to `SPEC,ARCH`. The skill errors out on an empty target or
47
+ an unknown/unsupported kind.
48
+
49
+ ## ARGUMENTS
50
+
51
+ *hint*:
52
+ The mandatory free-form description of the foreign sources to import
53
+ from (e.g. a file path, directory, URL, or pasted text). The skill
54
+ errors out on an empty hint.
55
+
56
+ ## EXAMPLES
57
+
58
+ Import a foreign requirements document into the specification:
59
+
60
+ ```text
61
+ ❯ /ase-sync-import -t SPEC docs/legacy/requirements.txt
62
+ ```
63
+
64
+ Import an external design write-up into the architecture, defaulting
65
+ both specification and architecture as targets:
66
+
67
+ ```text
68
+ ❯ /ase-sync-import https://example.com/design-notes.html
69
+ ```
70
+
71
+ Import a pasted feature description into a task plan:
72
+
73
+ ```text
74
+ ❯ /ase-sync-import -t TASK the new export feature must support CSV and JSON
75
+ ```
76
+
77
+ ## SEE ALSO
78
+
79
+ [`ase-sync-reconcile`](../ase-sync-reconcile/help.md),
80
+ [`ase-task-implement`](../ase-task-implement/help.md)
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: ase-sync-reconcile
3
+ argument-hint: "[--help|-h] [--bidirectional|-b] [--target|-t <target>[,...]] [--source|-s <source>[,...]] [<hint>]"
4
+ description: >
5
+ Reconcile one set of artifact kinds (the target) to reflect the
6
+ current state of another set of artifact kinds (the source), while
7
+ optionally honoring a filtering hint. Use when the user wants to
8
+ "reconcile", "sync", "align", or "update" artifacts like SPEC, ARCH,
9
+ CODE, DOCS, TASK, INFR, or OTHR against each other.
10
+ user-invocable: true
11
+ disable-model-invocation: false
12
+ effort: xhigh
13
+ ---
14
+
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
16
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
17
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
18
+
19
+ <skill name="ase-sync-reconcile">
20
+ Reconcile Artifact Set to Artifact Set
21
+ </skill>
22
+
23
+ <expand name="getopt"
24
+ arg1="ase-sync-reconcile"
25
+ arg2="--bidirectional|-b --target|-t=CODE,DOCS,INFR,OTHR --source|-s=AUTO">
26
+ $ARGUMENTS
27
+ </expand>
28
+
29
+ <objective>
30
+ *Reconcile* the *target* artifact kinds to *reflect* the *current
31
+ state* of the *source* artifact kinds, by reading the source
32
+ artifacts and aligning the target artifacts accordingly:
33
+ <hint><getopt-arguments/></hint>.
34
+ </objective>
35
+
36
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
37
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md
38
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-arch.md
39
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
40
+
41
+ Procedure
42
+ ---------
43
+
44
+ <flow>
45
+
46
+ 1. <step id="STEP 1: Determine Target and Source">
47
+
48
+ 1. The recognized artifact kinds are the seven tokens `TASK`,
49
+ `SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and `OTHR`. Parse
50
+ <getopt-target/> as the comma-separated <target/> kind list and
51
+ <getopt-source/> as the comma-separated <source/> kind list.
52
+ Upper-case and trim every parsed kind token. Do not output
53
+ anything.
54
+
55
+ 2. <if condition="<target/> is empty">
56
+
57
+ Only output the following <template/> and then immediately *STOP*
58
+ processing the entire current skill:
59
+
60
+ <template>
61
+ ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: empty target artifact list
62
+ </template>
63
+
64
+ </if>
65
+
66
+ 3. <if condition="<source/> is equal 'AUTO'">
67
+
68
+ Set <source/> to the seven recognized kinds
69
+ `TASK,SPEC,ARCH,CODE,DOCS,INFR,OTHR` *minus* all kinds present
70
+ in <target/>. Do not output anything.
71
+
72
+ </if>
73
+
74
+ 4. If any token in <target/> or <source/> is *not* one of the seven
75
+ recognized kinds, only output the following <template/> (with
76
+ <kind/> set to the first offending token) and then immediately
77
+ *STOP* processing the entire current skill:
78
+
79
+ <template>
80
+ ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: unknown artifact kind: **<kind/>**
81
+ </template>
82
+
83
+ 5. <if condition="<getopt-bidirectional/> is not 'true'">
84
+
85
+ Remove from <source/> any kind that is also present in <target/>
86
+ (a kind is never its own source).
87
+
88
+ <if condition="<source/> is empty">
89
+
90
+ Only output the following <template/> and then immediately *STOP*
91
+ processing the entire current skill:
92
+
93
+ <template>
94
+ ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: empty source -- nothing to update from
95
+ </template>
96
+
97
+ </if>
98
+
99
+ </if>
100
+
101
+ 6. Report the resolved target and source with the following <template/>:
102
+
103
+ <template>
104
+ <ase-tpl-bullet-signal/> **TARGET**: <target/>
105
+ <ase-tpl-bullet-normal/> **SOURCE**: <source/>
106
+ </template>
107
+
108
+ </step>
109
+
110
+ 2. <step id="STEP 2: Resolve and Read Artifacts">
111
+
112
+ 1. Do not output anything in this STEP 2.
113
+
114
+ 2. For all kinds in the union of <target/> and <source/>,
115
+ call the `ase_artifact_list(kind: [ ... ])` tool of the `ase`
116
+ MCP server *once*, passing the lower-cased `kind` tokens, and
117
+ read the returned `artifacts` array of `{ kind, files }` objects
118
+ to obtain the project-relative file list per kind.
119
+
120
+ 3. <if condition="<hint/> is not empty">
121
+
122
+ Honor the filtering <hint/> to reduce the source and/or target
123
+ artifacts and/or the aspects of those artifacts you should take
124
+ into account.
125
+
126
+ </if>
127
+
128
+ 4. Read all (optionally filtered) source and target artifacts
129
+ previously resolved and build a precise understanding of the
130
+ *current state* they represent.
131
+
132
+ </step>
133
+
134
+ 3. <step id="STEP 3: Update Artifacts">
135
+
136
+ 1. Internalize and honor the artifact-format conventions:
137
+
138
+ - the artifact-set/artifact/aspect meta information (`ase-format-meta.md`),
139
+ - the `SPEC` format (`ase-format-spec.md`),
140
+ - the `ARCH` format (`ase-format-arch.md`),
141
+ - the `TASK` format (`ase-format-task.md`).
142
+
143
+ Whenever a target artifact belongs to one of these
144
+ kinds, the update *MUST* keep it conformant to the
145
+ corresponding format (headings, structure, identifiers, and the
146
+ `<timestamp-modified/>` rule). The kinds `CODE`, `DOCS`, `INFR`,
147
+ and `OTHR` have no dedicated format contract and are treated as
148
+ free-form.
149
+
150
+ 2. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
151
+ the **RECONCILIATION TENETS**, the **REFACTORING TENETS**, and
152
+ the **CRAFTING TENETS** of the **ASE Tenets** when updating in
153
+ the following. Do not output anything.
154
+
155
+ 3. Once call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of
156
+ the `ase` MCP server to find out the current time and store it in
157
+ <timestamp-modified/>.
158
+
159
+ 4. <if condition="<getopt-bidirectional/> is equal 'true'">
160
+
161
+ *Bidirectionally update* the <target/> and <source/> artifacts
162
+ so that they faithfully *reflect the current state* of each
163
+ other.
164
+
165
+ </if>
166
+ <else>
167
+
168
+ *Unidirectionally update* the <target/> artifact files so that
169
+ they faithfully *reflect the current state* of the <source/>
170
+ artifacts.
171
+
172
+ </else>
173
+
174
+ Keep changes as *surgical* as possible: change only what the
175
+ input state actually requires, and do *not* rewrite unrelated
176
+ parts of an output artifact.
177
+
178
+ Apply the update directly to the output artifacts via the
179
+ `Write`/`Edit` tools.
180
+
181
+ For each formatted output artifact kind, strictly honor its
182
+ format contract.
183
+
184
+ Whenever an output artifact is changed and contains a `Modified:
185
+ <timestamp-modified-old/>` line, replace this with `Modified:
186
+ <timestamp-modified/>`.
187
+
188
+ 5. Report the performed updates with the following <template/>, listing
189
+ one bullet line per changed output file (with <file/> its
190
+ project-relative path and <note/> an ultra-brief description of
191
+ what was reconciled):
192
+
193
+ <template>
194
+ <ase-tpl-bullet-signal/> **UPDATED ARTIFACTS**:
195
+
196
+ - `<file/>`: <note/>
197
+ [...]
198
+ </template>
199
+
200
+ <if condition="no output artifact required any change">
201
+
202
+ Only output the following <template/>:
203
+
204
+ <template>
205
+ <ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none -- all outputs already reflected source state
206
+ </template>
207
+
208
+ </if>
209
+
210
+ </step>
211
+
212
+ </flow>
213
+
@@ -0,0 +1,89 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-sync-reconcile` - Reconcile Artifact Set to Artifact Set
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-sync-reconcile`
9
+ [`--help`|`-h`]
10
+ [`--bidirectional`|`-b`]
11
+ [`--target`|`-t` *target*[,...]]
12
+ [`--source`|`-s` *source*[,...]]
13
+ [*hint*]
14
+
15
+ ## DESCRIPTION
16
+
17
+ The `ase-sync-reconcile` skill reconciles one set of artifact kinds (the
18
+ *target*) to *reflect* the *current state* of another set of artifact
19
+ kinds (the *source*). It reads the source artifacts and then adjusts the
20
+ target artifacts *directly* and *surgically* to match the source state,
21
+ while optionally honoring a filtering *hint*.
22
+
23
+ Both *target* and *source* are comma-separated lists over the seven
24
+ recognized artifact kinds `SPEC` (Specification), `ARCH` (Architecture),
25
+ `CODE` (Source Code), `DOCS` (Documentation), `TASK` (Task Plans), `INFR`
26
+ (Infrastructure), and `OTHR` (catch-all). When *source* is `auto`, it
27
+ resolves to all seven kinds *minus* the kinds listed in *target*. Unless
28
+ `--bidirectional` is given, a kind present in *target* is never used as
29
+ its own source.
30
+
31
+ The file lists for all involved kinds are resolved via the
32
+ `ase_artifact_list` MCP tool of the `ase` MCP server. While reconciling,
33
+ the skill honors the artifact-format conventions of `ase-format-meta.md`,
34
+ `ase-format-spec.md`, `ase-format-arch.md`, and `ase-format-task.md`;
35
+ the kinds `CODE`, `DOCS`, `INFR`, and `OTHR` have no dedicated format
36
+ contract and are treated as free-form.
37
+
38
+ ## OPTIONS
39
+
40
+ `--bidirectional`|`-b`:
41
+ Reconcile the *target* and *source* artifacts so that they
42
+ faithfully reflect the current state of *each other*, instead of
43
+ only updating the *target* from the *source*. With this flag, a kind
44
+ present in *target* is *not* removed from *source*.
45
+
46
+ `--target`|`-t` *target*[,...]:
47
+ The comma-separated list of artifact kinds to update. Required (the
48
+ skill errors out on an empty target).
49
+
50
+ `--source`|`-s` *source*[,...]:
51
+ The comma-separated list of artifact kinds to update *from*. The
52
+ special value `auto` resolves to all recognized kinds except those
53
+ in *target*.
54
+
55
+ ## ARGUMENTS
56
+
57
+ *hint*:
58
+ An optional free-form filtering hint that narrows the source and/or
59
+ target artifacts, or the aspects of those artifacts to take into
60
+ account during reconciliation.
61
+
62
+ ## EXAMPLES
63
+
64
+ Reconcile the code and documentation
65
+ to reflect the current specification and architecture
66
+ in a "forward engineering" approach:
67
+
68
+ ```text
69
+ ❯ /ase-sync-reconcile -t CODE,DOCS -s SPEC,ARCH
70
+ ```
71
+
72
+ Reconcile specification and architecture from everything else
73
+ in a "reverse engineering" approach:
74
+
75
+ ```text
76
+ ❯ /ase-sync-reconcile -t SPEC,ARCH -s CODE,DOCS
77
+ ```
78
+
79
+ Bidirectionally reconcile specification and architecture against
80
+ each other, limited to the authentication aspect:
81
+
82
+ ```text
83
+ ❯ /ase-sync-reconcile -b -t SPEC -s ARCH authentication
84
+ ```
85
+
86
+ ## SEE ALSO
87
+
88
+ [`ase-meta-changelog`](../ase-meta-changelog/help.md),
89
+ [`ase-task-implement`](../ase-task-implement/help.md)
@@ -35,12 +35,6 @@ semantics exactly.
35
35
  Procedure
36
36
  ---------
37
37
 
38
- You *MUST* follow the following numbered items *strictly* *sequentially*!
39
- You *MUST* not skip any numbered item during processing!
40
-
41
- You *MUST* *NOT* output anything in this entire procedure, *except* when
42
- explicitly requested by this procedure via outputs based on a <template/>!
43
-
44
38
  1. **Determine Task:**
45
39
 
46
40
  1. Set <instruction><getopt-arguments/></instruction> initially.
@@ -29,12 +29,6 @@ Delete a Task Plan
29
29
  Procedure
30
30
  ---------
31
31
 
32
- You *MUST* follow the following numbered items *strictly* *sequentially*!
33
- You *MUST* not skip any numbered item during processing!
34
-
35
- You *MUST* *NOT* output anything in this entire procedure, *except* when
36
- explicitly requested by this procedure via outputs based on a <template/>!
37
-
38
32
  1. **Determine Task:**
39
33
 
40
34
  1. Set <id><getopt-arguments/></id> initially, with any leading and trailing
@@ -39,12 +39,6 @@ preflight.
39
39
  Procedure
40
40
  ---------
41
41
 
42
- You *MUST* follow the following numbered items *strictly* *sequentially*!
43
- You *MUST* not skip any numbered item during processing!
44
-
45
- You *MUST* *NOT* output anything in this entire procedure, *except* when
46
- explicitly requested by this procedure via outputs based on a <template/>!
47
-
48
42
  <define name="apply-refinement">
49
43
  Treat the <instruction/> as a *refinement instruction* for
50
44
  the plan, and update <content/> in-place by *applying* the
@@ -36,12 +36,6 @@ task plan until reaching a shared understanding.
36
36
  Procedure
37
37
  ---------
38
38
 
39
- You *MUST* follow the following numbered items *strictly* *sequentially*!
40
- You *MUST* not skip any numbered item during processing!
41
-
42
- You *MUST* *NOT* output anything in this entire procedure, *except* when
43
- explicitly requested by this procedure via outputs based on a <template/>!
44
-
45
39
  1. **Determine Task:**
46
40
 
47
41
  1. Set <id><getopt-arguments/></id> initially.
@@ -35,12 +35,6 @@ with a corresponding, complete *change set*.
35
35
  Procedure
36
36
  ---------
37
37
 
38
- You *MUST* follow the following numbered items *strictly* *sequentially*!
39
- You *MUST* not skip any numbered item during processing!
40
-
41
- You *MUST* *NOT* output anything in this entire procedure, *except* when
42
- explicitly requested by this procedure via outputs based on a <template/>!
43
-
44
38
  1. **Determine Task:**
45
39
 
46
40
  1. Set <instruction><getopt-arguments/></instruction> initially.
@@ -35,12 +35,6 @@ for a corresponding, *complete source code change set*.
35
35
  Procedure
36
36
  ---------
37
37
 
38
- You *MUST* follow the following numbered items *strictly* *sequentially*!
39
- You *MUST* not skip any numbered item during processing!
40
-
41
- You *MUST* *NOT* output anything in this entire procedure, *except* when
42
- explicitly requested by this procedure via outputs based on a <template/>!
43
-
44
38
  1. **Determine Task:**
45
39
 
46
40
  1. Set <instruction><getopt-arguments/></instruction> initially.
@@ -35,12 +35,6 @@ based on the existing *WHAT* and *WHY*.
35
35
  Procedure
36
36
  ---------
37
37
 
38
- You *MUST* follow the following numbered items *strictly* *sequentially*!
39
- You *MUST* not skip any numbered item during processing!
40
-
41
- You *MUST* *NOT* output anything in this entire procedure, *except* when
42
- explicitly requested by this procedure via outputs based on a <template/>!
43
-
44
38
  1. **Determine Task:**
45
39
 
46
40
  1. Set <instruction><getopt-arguments/></instruction> initially.
@@ -29,12 +29,6 @@ Rename a Task Plan
29
29
  Procedure
30
30
  ---------
31
31
 
32
- You *MUST* follow the following numbered items *strictly* *sequentially*!
33
- You *MUST* not skip any numbered item during processing!
34
-
35
- You *MUST* *NOT* output anything in this entire procedure, *except* when
36
- explicitly requested by this procedure via outputs based on a <template/>!
37
-
38
32
  1. **Determine Task:**
39
33
 
40
34
  1. Parse <arguments><getopt-arguments/></arguments> into a whitespace-separated
@@ -31,12 +31,6 @@ View a Task Plan
31
31
  Procedure
32
32
  ---------
33
33
 
34
- You *MUST* follow the following numbered items *strictly* *sequentially*!
35
- You *MUST* not skip any numbered item during processing!
36
-
37
- You *MUST* *NOT* output anything in this entire procedure, *except* when
38
- explicitly requested by this procedure via outputs based on a <template/>!
39
-
40
34
  1. **Determine Task:**
41
35
 
42
36
  1. Set <id><getopt-arguments/></id> initially, with any leading and trailing
@@ -1,183 +0,0 @@
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
-
@@ -1,66 +0,0 @@
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).