@rse/ase 0.9.19 → 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.19",
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.19",
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.19",
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.19",
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
@@ -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.19",
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)
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: ase-sync-reconcile
3
- argument-hint: "[--help|-h] <target>[,...] [<source>[,...]]"
3
+ argument-hint: "[--help|-h] [--bidirectional|-b] [--target|-t <target>[,...]] [--source|-s <source>[,...]] [<hint>]"
4
4
  description: >
5
- Reconcile 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 "reconcile", "sync", "align", or "update" artifacts like
8
- SPEC, ARCH, CODE, DOCS, TASK, INFR, or OTHR against each other.
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.
9
10
  user-invocable: true
10
11
  disable-model-invocation: false
11
12
  effort: xhigh
@@ -16,18 +17,20 @@ effort: xhigh
16
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
17
18
 
18
19
  <skill name="ase-sync-reconcile">
19
- Reconcile Artifacts from Artifacts
20
+ Reconcile Artifact Set to Artifact Set
20
21
  </skill>
21
22
 
22
- <expand name="getopt" arg1="ase-sync-reconcile">
23
+ <expand name="getopt"
24
+ arg1="ase-sync-reconcile"
25
+ arg2="--bidirectional|-b --target|-t=CODE,DOCS,INFR,OTHR --source|-s=AUTO">
23
26
  $ARGUMENTS
24
27
  </expand>
25
28
 
26
29
  <objective>
27
30
  *Reconcile* the *target* artifact kinds to *reflect* the *current
28
31
  state* of the *source* artifact kinds, by reading the source
29
- artifacts and adjusting the target artifacts accordingly:
30
- <request><getopt-arguments/></request>.
32
+ artifacts and aligning the target artifacts accordingly:
33
+ <hint><getopt-arguments/></hint>.
31
34
  </objective>
32
35
 
33
36
  @${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
@@ -38,22 +41,16 @@ effort: xhigh
38
41
  Procedure
39
42
  ---------
40
43
 
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
44
  <flow>
48
45
 
49
46
  1. <step id="STEP 1: Determine Target and Source">
50
47
 
51
48
  1. The recognized artifact kinds are the seven tokens `TASK`,
52
49
  `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.
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.
57
54
 
58
55
  2. <if condition="<target/> is empty">
59
56
 
@@ -61,12 +58,20 @@ explicitly requested by this procedure via outputs based on a <template/>!
61
58
  processing the entire current skill:
62
59
 
63
60
  <template>
64
- ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: missing target argument
61
+ ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: empty target artifact list
65
62
  </template>
66
63
 
67
64
  </if>
68
65
 
69
- 3. If any token in <target/> or <source/> is *not* one of the seven
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
70
75
  recognized kinds, only output the following <template/> (with
71
76
  <kind/> set to the first offending token) and then immediately
72
77
  *STOP* processing the entire current skill:
@@ -75,24 +80,24 @@ explicitly requested by this procedure via outputs based on a <template/>!
75
80
  ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: unknown artifact kind: **<kind/>**
76
81
  </template>
77
82
 
78
- 4. <if condition="<source/> is empty">
83
+ 5. <if condition="<getopt-bidirectional/> is not 'true'">
79
84
 
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.
85
+ Remove from <source/> any kind that is also present in <target/>
86
+ (a kind is never its own source).
84
87
 
85
- </if>
88
+ <if condition="<source/> is empty">
86
89
 
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
+ Only output the following <template/> and then immediately *STOP*
90
91
  processing the entire current skill:
91
92
 
92
93
  <template>
93
94
  ⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: empty source -- nothing to update from
94
95
  </template>
95
96
 
97
+ </if>
98
+
99
+ </if>
100
+
96
101
  6. Report the resolved target and source with the following <template/>:
97
102
 
98
103
  <template>
@@ -102,7 +107,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
102
107
 
103
108
  </step>
104
109
 
105
- 2. <step id="STEP 2: Resolve and Read Artifact Files">
110
+ 2. <step id="STEP 2: Resolve and Read Artifacts">
106
111
 
107
112
  1. Do not output anything in this STEP 2.
108
113
 
@@ -112,52 +117,76 @@ explicitly requested by this procedure via outputs based on a <template/>!
112
117
  read the returned `artifacts` array of `{ kind, files }` objects
113
118
  to obtain the project-relative file list per kind.
114
119
 
115
- 3. Read all <source/> artifact files previously resolved and build a
116
- precise understanding of the *current state* they represent.
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.
117
131
 
118
132
  </step>
119
133
 
120
- 3. <step id="STEP 3: Internalize Artifact Formats">
134
+ 3. <step id="STEP 3: Update Artifacts">
121
135
 
122
- 1. Do not output anything in this STEP 3.
136
+ 1. Internalize and honor the artifact-format conventions:
123
137
 
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`.
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`).
129
142
 
130
- Whenever a target artifact belongs to one of these formatted
143
+ Whenever a target artifact belongs to one of these
131
144
  kinds, the update *MUST* keep it conformant to the
132
145
  corresponding format (headings, structure, identifiers, and the
133
146
  `<timestamp-modified/>` rule). The kinds `CODE`, `DOCS`, `INFR`,
134
147
  and `OTHR` have no dedicated format contract and are treated as
135
148
  free-form.
136
149
 
137
- </step>
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>
138
173
 
139
- 4. <step id="STEP 4: Update Target Artifacts">
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.
140
177
 
141
- 1. You *MUST* internalize and strictly honor the **GENERIC TENETS**,
142
- the **RECONCILIATION TENETS**, the **REFACTORING TENETS**, and the
143
- **CRAFTING TENETS** of the **ASE Tenets** when updating in the following. Do not
144
- output anything.
178
+ Apply the update directly to the output artifacts via the
179
+ `Write`/`Edit` tools.
145
180
 
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.
181
+ For each formatted output artifact kind, strictly honor its
182
+ format contract.
152
183
 
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.
184
+ Whenever an output artifact is changed and contains a `Modified:
185
+ <timestamp-modified-old/>` line, replace this with `Modified:
186
+ <timestamp-modified/>`.
158
187
 
159
- 3. Report the performed update with the following <template/>, listing
160
- one bullet line per changed target file (with <file/> its
188
+ 5. Report the performed updates with the following <template/>, listing
189
+ one bullet line per changed output file (with <file/> its
161
190
  project-relative path and <note/> an ultra-brief description of
162
191
  what was reconciled):
163
192
 
@@ -165,14 +194,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
165
194
  <ase-tpl-bullet-signal/> **UPDATED ARTIFACTS**:
166
195
 
167
196
  - `<file/>`: <note/>
197
+ [...]
168
198
  </template>
169
199
 
170
- <if condition="no target artifact required any change">
200
+ <if condition="no output artifact required any change">
171
201
 
172
- Instead, only output the following <template/>:
202
+ Only output the following <template/>:
173
203
 
174
204
  <template>
175
- <ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none -- target already reflects source state.
205
+ <ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none -- all outputs already reflected source state
176
206
  </template>
177
207
 
178
208
  </if>
@@ -1,66 +1,89 @@
1
1
 
2
2
  ## NAME
3
3
 
4
- `ase-sync-reconcile` - Reconcile Artifacts from Artifacts
4
+ `ase-sync-reconcile` - Reconcile Artifact Set to Artifact Set
5
5
 
6
6
  ## SYNOPSIS
7
7
 
8
8
  `ase-sync-reconcile`
9
9
  [`--help`|`-h`]
10
- *target*[,...]
11
- [*source*[,...]]
10
+ [`--bidirectional`|`-b`]
11
+ [`--target`|`-t` *target*[,...]]
12
+ [`--source`|`-s` *source*[,...]]
13
+ [*hint*]
12
14
 
13
15
  ## DESCRIPTION
14
16
 
15
17
  The `ase-sync-reconcile` skill reconciles one set of artifact kinds (the
16
18
  *target*) to *reflect* the *current state* of another set of artifact
17
19
  kinds (the *source*). It reads the source artifacts and then adjusts the
18
- target artifacts *directly* and *surgically* to match the source state.
20
+ target artifacts *directly* and *surgically* to match the source state,
21
+ while optionally honoring a filtering *hint*.
19
22
 
20
23
  Both *target* and *source* are comma-separated lists over the seven
21
24
  recognized artifact kinds `SPEC` (Specification), `ARCH` (Architecture),
22
25
  `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
- reconciling, 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.
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*.
34
54
 
35
55
  ## ARGUMENTS
36
56
 
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*.
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.
43
61
 
44
62
  ## EXAMPLES
45
63
 
46
- Reconcile the specification to reflect the current source code:
64
+ Reconcile the code and documentation
65
+ to reflect the current specification and architecture
66
+ in a "forward engineering" approach:
47
67
 
48
68
  ```text
49
- ❯ /ase-sync-reconcile SPEC CODE
69
+ ❯ /ase-sync-reconcile -t CODE,DOCS -s SPEC,ARCH
50
70
  ```
51
71
 
52
- Reconcile specification and architecture from everything else:
72
+ Reconcile specification and architecture from everything else
73
+ in a "reverse engineering" approach:
53
74
 
54
75
  ```text
55
- ❯ /ase-sync-reconcile SPEC,ARCH
76
+ ❯ /ase-sync-reconcile -t SPEC,ARCH -s CODE,DOCS
56
77
  ```
57
78
 
58
- Reconcile the documentation from the code and the architecture:
79
+ Bidirectionally reconcile specification and architecture against
80
+ each other, limited to the authentication aspect:
59
81
 
60
82
  ```text
61
- ❯ /ase-sync-reconcile DOCS CODE,ARCH
83
+ ❯ /ase-sync-reconcile -b -t SPEC -s ARCH authentication
62
84
  ```
63
85
 
64
86
  ## SEE ALSO
65
87
 
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).
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