@rse/ase 0.9.19 → 0.9.21
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 +1 -1
- 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-format-arch.md +272 -4
- package/plugin/meta/ase-format-spec.md +5 -4
- package/plugin/meta/ase-skill.md +8 -2
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +0 -6
- package/plugin/skills/ase-code-refactor/SKILL.md +0 -6
- package/plugin/skills/ase-code-resolve/SKILL.md +0 -6
- package/plugin/skills/ase-docs-distill/SKILL.md +0 -6
- package/plugin/skills/ase-meta-diff/SKILL.md +0 -6
- package/plugin/skills/ase-meta-review/SKILL.md +0 -6
- package/plugin/skills/ase-sync-import/SKILL.md +191 -0
- package/plugin/skills/ase-sync-import/help.md +80 -0
- package/plugin/skills/ase-sync-reconcile/SKILL.md +93 -63
- package/plugin/skills/ase-sync-reconcile/help.md +51 -28
- package/plugin/skills/ase-task-condense/SKILL.md +0 -6
- package/plugin/skills/ase-task-delete/SKILL.md +0 -6
- package/plugin/skills/ase-task-edit/SKILL.md +0 -6
- package/plugin/skills/ase-task-grill/SKILL.md +0 -6
- package/plugin/skills/ase-task-implement/SKILL.md +0 -6
- package/plugin/skills/ase-task-preflight/SKILL.md +0 -6
- package/plugin/skills/ase-task-reboot/SKILL.md +0 -6
- package/plugin/skills/ase-task-rename/SKILL.md +0 -6
- package/plugin/skills/ase-task-view/SKILL.md +0 -6
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.21",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -9,10 +9,11 @@ and the "how" of the Software Engineering project.
|
|
|
9
9
|
|
|
10
10
|
Each **Artifact** of the **Artifact Set**
|
|
11
11
|
**Architecture (ARCH)** is stored under
|
|
12
|
-
|
|
13
|
-
relative to the project root directory, with <
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
`<basedir/>/ARCH-<artifact-no/>-<artifact-id/>-<artifact-slug/>.md`,
|
|
13
|
+
relative to the project root directory, with <basedir/> being the
|
|
14
|
+
`project.artifact.arch.basedir` config variable, <artifact-no/> being
|
|
15
|
+
the zero-padded, two-digit sequence number of the **Artifact** (starting
|
|
16
|
+
at `01`) according to the order of the **Artifact** list below, and with
|
|
16
17
|
<artifact-slug/> being derived from <artifact-name/> (see below) by
|
|
17
18
|
Pascal-casing each word (upper-casing its first letter) and using `-`
|
|
18
19
|
characters instead of spaces (e.g. `Context-View`).
|
|
@@ -74,6 +75,12 @@ distinct **Artifact**s (listed under their <artifact-name/> and their
|
|
|
74
75
|
The major decisions related to the architecture, each recording the
|
|
75
76
|
forces at play, the chosen response, and the reasoning that justifies it.
|
|
76
77
|
|
|
78
|
+
10. **Technology Stack (TS)**:
|
|
79
|
+
The concrete technology products the solution is built upon, organized
|
|
80
|
+
by tier and lifecycle phase, recording for each component its chosen
|
|
81
|
+
product, its purpose, and the alternatives that were considered but not
|
|
82
|
+
chosen.
|
|
83
|
+
|
|
77
84
|
The **Artifact**s have the following cross-references:
|
|
78
85
|
|
|
79
86
|
```text
|
|
@@ -89,6 +96,8 @@ ARCH-08-QP Quality Perspectives ──(affects)─► ARCH-02-FV Functionalit
|
|
|
89
96
|
ARCH-08-QP Quality Perspectives ──(affects)─► ARCH-06-DP Deployment View
|
|
90
97
|
ARCH-09-DR Decision Record ──(affects)─► ARCH-02-FV Functionality View
|
|
91
98
|
ARCH-09-DR Decision Record ──(affects)─► ARCH-06-DP Deployment View
|
|
99
|
+
ARCH-10-TS Technology Stack ──(realizes)─► ARCH-02-FV Functionality View
|
|
100
|
+
ARCH-10-TS Technology Stack ──(realizes)─► ARCH-06-DP Deployment View
|
|
92
101
|
```
|
|
93
102
|
|
|
94
103
|
Context View (CV)
|
|
@@ -897,3 +906,262 @@ forces at play, the chosen response, and the reasoning that justifies it.
|
|
|
897
906
|
- **Rejected alternatives when the rejection is non-obvious.** If
|
|
898
907
|
you considered GraphQL and picked REST for subtle reasons, record it -
|
|
899
908
|
otherwise someone will suggest GraphQL again in six months.
|
|
909
|
+
|
|
910
|
+
Technology Stack (TS)
|
|
911
|
+
---------------------
|
|
912
|
+
|
|
913
|
+
The concrete technology products the solution is built upon, organized by
|
|
914
|
+
tier and lifecycle phase, recording for each component its chosen product,
|
|
915
|
+
its purpose, and the alternatives that were considered but not chosen.
|
|
916
|
+
|
|
917
|
+
- Format:
|
|
918
|
+
|
|
919
|
+
<format>
|
|
920
|
+
|
|
921
|
+
# ARCHITECTURE: TECHNOLOGY STACK (ARCH-TS)
|
|
922
|
+
|
|
923
|
+
✳ Created: **<timestamp-created/>**
|
|
924
|
+
✎ Modified: **<timestamp-modified/>**
|
|
925
|
+
|
|
926
|
+
<arch-ts-component/>
|
|
927
|
+
<arch-ts-component/>
|
|
928
|
+
[...]
|
|
929
|
+
|
|
930
|
+
</format>
|
|
931
|
+
|
|
932
|
+
- <arch-ts-component/> format:
|
|
933
|
+
|
|
934
|
+
<format>
|
|
935
|
+
|
|
936
|
+
## COMPONENT: <arch-ts-component-name/> <a id="ARCH-TS-<arch-ts-component-id/>"></a>
|
|
937
|
+
|
|
938
|
+
- When: <arch-ts-component-when/>
|
|
939
|
+
- Tier: <arch-ts-component-tier/>
|
|
940
|
+
- Coverage: <arch-ts-component-coverage/>
|
|
941
|
+
- Product: <arch-ts-component-product/>
|
|
942
|
+
- Realizes: <arch-ts-component-element/>[, ...]
|
|
943
|
+
- Alternatives: <arch-ts-component-alternative/>[, ...]
|
|
944
|
+
|
|
945
|
+
<arch-ts-component-description/>,
|
|
946
|
+
**BECAUSE** <arch-ts-component-rationale/>.
|
|
947
|
+
|
|
948
|
+
</format>
|
|
949
|
+
|
|
950
|
+
- <arch-ts-component/> details:
|
|
951
|
+
|
|
952
|
+
- <arch-ts-component-id/>: per-artifact unique "slug" of always 1-3
|
|
953
|
+
lower-cased words (concatenated with "-" characters and
|
|
954
|
+
in total not longer than 30 characters), derived from
|
|
955
|
+
<arch-ts-component-name/>.
|
|
956
|
+
|
|
957
|
+
- <arch-ts-component-name/> is a short (2-5 word) summary of the
|
|
958
|
+
technology component (e.g. `UI Framework`, `Web Server`, `Relational
|
|
959
|
+
Database`).
|
|
960
|
+
|
|
961
|
+
- <arch-ts-component-when/> is the lifecycle phase in which the
|
|
962
|
+
component is relevant, one of:
|
|
963
|
+
|
|
964
|
+
- `Build-Time`: Used during development, compilation, or packaging.
|
|
965
|
+
- `Run-Time`: Used while the solution executes in production.
|
|
966
|
+
|
|
967
|
+
- <arch-ts-component-tier/> is the architectural tier the component
|
|
968
|
+
belongs to, one of:
|
|
969
|
+
|
|
970
|
+
- `Client`: Runs on the client side (e.g. browser, desktop, mobile).
|
|
971
|
+
- `Server`: Runs on the server side (e.g. backend, application, API).
|
|
972
|
+
|
|
973
|
+
- <arch-ts-component-coverage/> is either one or more of the
|
|
974
|
+
*Client Aspects* or one or more of the *Server Aspects* defined
|
|
975
|
+
below. The general goal is to achieve a maximum coverage of all
|
|
976
|
+
aspects per <arch-ts-component-tier/> with the minimum total
|
|
977
|
+
number of <arch-ts-component-product/>.
|
|
978
|
+
|
|
979
|
+
- <arch-ts-component-product/> is the concrete product, library, or
|
|
980
|
+
framework chosen for this component (e.g. `VueJS`, `Node.js`,
|
|
981
|
+
`PostgreSQL`).
|
|
982
|
+
|
|
983
|
+
- <arch-ts-component-element/> is an `ARCH-FV-<arch-fv-component-id/>`
|
|
984
|
+
or `ARCH-DP-<arch-dp-node-id/>` reference to the functional element
|
|
985
|
+
or deployment node this product realizes.
|
|
986
|
+
|
|
987
|
+
- <arch-ts-component-alternative/> is a product that would also fit
|
|
988
|
+
this component but was not chosen (e.g. `React`, `Svelte`).
|
|
989
|
+
|
|
990
|
+
- <arch-ts-component-description/> is a concise paragraph (1-3
|
|
991
|
+
sentences) of prose describing how the product is used within the
|
|
992
|
+
solution and how it fits into the overall technology stack.
|
|
993
|
+
|
|
994
|
+
- <arch-ts-component-rationale/> is the 1-sentence rationale ("why")
|
|
995
|
+
for choosing this product over the alternatives.
|
|
996
|
+
|
|
997
|
+
- In case the element reference is not present, the
|
|
998
|
+
entire `- Realizes:` bullet point is omitted.
|
|
999
|
+
|
|
1000
|
+
- In case no alternatives were considered, the
|
|
1001
|
+
entire `- Alternatives:` bullet point is omitted.
|
|
1002
|
+
|
|
1003
|
+
- In case the rationale is not present, the
|
|
1004
|
+
entire `, **BECAUSE** [...]` clause is omitted.
|
|
1005
|
+
|
|
1006
|
+
- The known *Client Aspects* which usually have to covered (at least for
|
|
1007
|
+
clients in a Rich-Client architecture):
|
|
1008
|
+
|
|
1009
|
+
- **Interface Theme**:
|
|
1010
|
+
Style Reset, Shape, Color, Gradient, Shadow, Font, Icon.
|
|
1011
|
+
|
|
1012
|
+
- **Interface Widgets**:
|
|
1013
|
+
Icon, Label, Text Paragraph, Image, Form, Text-Field, Text-Area,
|
|
1014
|
+
Date Picker, Toggle, Radio Button, Checkbox, Select List, Slider,
|
|
1015
|
+
Progress Bar, Hyperlink, Popup Menu, Dropdown Menu, Toolbar, Tooltip,
|
|
1016
|
+
Tab, Pill, Breadcrumb, Pagination, Badge, Alert, Panel, Modal, Table,
|
|
1017
|
+
Scrollbar, Carousel.
|
|
1018
|
+
|
|
1019
|
+
- **Interface Layouting**:
|
|
1020
|
+
Responsive Design, Media Query, Frame, Grid, Padding, Border,
|
|
1021
|
+
Margin, Alignment, Force, Magnetism.
|
|
1022
|
+
|
|
1023
|
+
- **Interface Effects**:
|
|
1024
|
+
Transition, Transformation, Keyframes, Easing Function, Sound
|
|
1025
|
+
Effect, Physics.
|
|
1026
|
+
|
|
1027
|
+
- **Interface Interactions**:
|
|
1028
|
+
Mouse, Keyboard, Touchscreen, Gesture, Clipboard, Drag & Drop.
|
|
1029
|
+
|
|
1030
|
+
- **Interface States**:
|
|
1031
|
+
Rendered, Enabled, Visible, Focused, Warning, Error, Floating.
|
|
1032
|
+
|
|
1033
|
+
- **Interface Mask**:
|
|
1034
|
+
Markup Loading, Markup Generation, Virtual DOM, Text, Bitmaps,
|
|
1035
|
+
Vectors, 2D/3D Canvas, Accessibility.
|
|
1036
|
+
|
|
1037
|
+
- **Interface Internationalization**:
|
|
1038
|
+
Text Internationalization (I18N).
|
|
1039
|
+
|
|
1040
|
+
- **Data Conversion**:
|
|
1041
|
+
Value Formatting, Value Parsing, Localization (L10N).
|
|
1042
|
+
|
|
1043
|
+
- **Data Binding**:
|
|
1044
|
+
Reactive, Observer, Unidirectional, Bidirectional, Incremental.
|
|
1045
|
+
|
|
1046
|
+
- **Presentation Model**:
|
|
1047
|
+
Parameter Value, Command Value, State Value, Data Value, Event
|
|
1048
|
+
Value, Value Validation, Presentation Logic.
|
|
1049
|
+
|
|
1050
|
+
- **Dialog Navigation**:
|
|
1051
|
+
Deep Linking, Routing, Dialog Flow.
|
|
1052
|
+
|
|
1053
|
+
- **Dialog Automation**:
|
|
1054
|
+
Dialog Macros, Click-Through, Smoke Testing.
|
|
1055
|
+
|
|
1056
|
+
- **Dialog Communication**:
|
|
1057
|
+
Service, Event, Model, Socket, Hooks.
|
|
1058
|
+
|
|
1059
|
+
- **Dialog Life-Cycle**:
|
|
1060
|
+
Component States, Component State Transitions.
|
|
1061
|
+
|
|
1062
|
+
- **Dialog Structure**:
|
|
1063
|
+
Component, Model/View/Controller Roles, Hierarchical Composition.
|
|
1064
|
+
|
|
1065
|
+
- **State Persistence**:
|
|
1066
|
+
Local Storage, Cookies, Caching.
|
|
1067
|
+
|
|
1068
|
+
- **Business Model**:
|
|
1069
|
+
Entity, Field, Relationship, Universally Unique Identifiers (UUID).
|
|
1070
|
+
|
|
1071
|
+
- **Use-Case Authorization**:
|
|
1072
|
+
User Experience, Dialog Restriction, User, Group, Role, Use-Case,
|
|
1073
|
+
Data, Access.
|
|
1074
|
+
|
|
1075
|
+
- **Client Networking**:
|
|
1076
|
+
Request/Response, Synchronization, Push, Pull, Pulled-Push,
|
|
1077
|
+
REST, GraphQL, Authentication, Session.
|
|
1078
|
+
|
|
1079
|
+
- **Environment Detection**:
|
|
1080
|
+
Runtime Detection, Feature Detection.
|
|
1081
|
+
|
|
1082
|
+
- The known *Server Aspects* which usually have to covered (at least for
|
|
1083
|
+
servers, sometimes called Thin-Servers, in a Rich-Client architecture):
|
|
1084
|
+
|
|
1085
|
+
- **Environment Detection**:
|
|
1086
|
+
Detect the run-time environment, like underlying operating
|
|
1087
|
+
system, execution platform, network topology, feature toggles, etc.
|
|
1088
|
+
|
|
1089
|
+
- **Argument Parsing**:
|
|
1090
|
+
Parse options and arguments of the Command-Line Interface (CLI)
|
|
1091
|
+
to bootstrap application parameters.
|
|
1092
|
+
|
|
1093
|
+
- **Configuration Parsing**:
|
|
1094
|
+
Load and parse directives from configuration file to bootstrap
|
|
1095
|
+
application parameters.
|
|
1096
|
+
|
|
1097
|
+
- **Process Daemonizing**:
|
|
1098
|
+
Detach from the startup terminal and host process in order to run
|
|
1099
|
+
fully independently.
|
|
1100
|
+
|
|
1101
|
+
- **Process Management**:
|
|
1102
|
+
(Pre-)fork child processes and/or threads of execution and monitor
|
|
1103
|
+
and control them during the life-cycle of the application.
|
|
1104
|
+
|
|
1105
|
+
- **Component Management**:
|
|
1106
|
+
Structure the code into components, instantiate them under run-time
|
|
1107
|
+
and manage them in a stateful component life-cycle.
|
|
1108
|
+
|
|
1109
|
+
- **Component Communication**:
|
|
1110
|
+
Provide inter-component communication mechanisms like events, hooks,
|
|
1111
|
+
registry, etc.
|
|
1112
|
+
|
|
1113
|
+
- **Server Networking**:
|
|
1114
|
+
Listen to network sockets, accept connections and manage
|
|
1115
|
+
request/response and message communication.
|
|
1116
|
+
|
|
1117
|
+
- **Peer Information**:
|
|
1118
|
+
Determine unique identification and add-on information about the
|
|
1119
|
+
client peer.
|
|
1120
|
+
|
|
1121
|
+
- **Session Handling**:
|
|
1122
|
+
Manage secured per-connection sessions to keep state between
|
|
1123
|
+
communication requests and/or client sessions.
|
|
1124
|
+
|
|
1125
|
+
- **User Authentication**:
|
|
1126
|
+
Determine and validate the unique identity of the user communicating
|
|
1127
|
+
over the current network connection.
|
|
1128
|
+
|
|
1129
|
+
- **Request Validation**:
|
|
1130
|
+
Validate the syntactical and semantical compliance of the requests
|
|
1131
|
+
and sanitize the requests.
|
|
1132
|
+
|
|
1133
|
+
- **Request Processing**:
|
|
1134
|
+
Process the request by dispatching execution according to the
|
|
1135
|
+
provided request and determined context information.
|
|
1136
|
+
|
|
1137
|
+
- **Role Authorization**:
|
|
1138
|
+
Determine whether the role of the current user is allowed to execute
|
|
1139
|
+
the current request.
|
|
1140
|
+
|
|
1141
|
+
- **Client Networking**:
|
|
1142
|
+
Provide mechanisms to connect to peers over the network and perform
|
|
1143
|
+
request/response and/or publish/subscribe communication.
|
|
1144
|
+
|
|
1145
|
+
- **Task Scheduling**:
|
|
1146
|
+
Schedule and execute recurring tasks independent of regular I/O
|
|
1147
|
+
operations.
|
|
1148
|
+
|
|
1149
|
+
- **Execution Tracing**:
|
|
1150
|
+
Provide mechanisms for tracing the execution by logging event and
|
|
1151
|
+
measurement information at certain points of interest.
|
|
1152
|
+
|
|
1153
|
+
- **Database Access**:
|
|
1154
|
+
Map in-memory domain entities onto data store dependent persistent
|
|
1155
|
+
data structure.
|
|
1156
|
+
|
|
1157
|
+
- **Database Connectivity**:
|
|
1158
|
+
Locally or remotely connect the database access layer to the
|
|
1159
|
+
underlying data store.
|
|
1160
|
+
|
|
1161
|
+
- **Database Schema**:
|
|
1162
|
+
Create, update or downgrade the data schema inside the underlying
|
|
1163
|
+
data store.
|
|
1164
|
+
|
|
1165
|
+
- **Database Bootstrapping**:
|
|
1166
|
+
Create, update or downgrade both mandatory bootstrapping and optional
|
|
1167
|
+
domain-specific data inside the underlying data store.
|
|
@@ -9,10 +9,11 @@ and the "what" of the Software Engineering project.
|
|
|
9
9
|
|
|
10
10
|
Each **Artifact** of the **Artifact Set**
|
|
11
11
|
**Specification (SPEC)** is stored under
|
|
12
|
-
|
|
13
|
-
relative to the project root directory, with <
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
`<basedir/>/SPEC-<artifact-no/>-<artifact-id/>-<artifact-slug/>.md`,
|
|
13
|
+
relative to the project root directory, with <basedir/> being the
|
|
14
|
+
`project.artifact.spec.basedir` config variable, <artifact-no/> being
|
|
15
|
+
the zero-padded, two-digit sequence number of the **Artifact** (starting
|
|
16
|
+
at `01`) according to the order of the **Artifact** list below, and with
|
|
16
17
|
<artifact-slug/> being derived from <artifact-name/> (see below) by
|
|
17
18
|
Pascal-casing each word (upper-casing its first letter) and using `-`
|
|
18
19
|
characters instead of spaces (e.g. `Customer-Journey`).
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -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
|
|
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
|
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.21",
|
|
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
|
|
6
|
-
state of another set of artifact kinds (the source)
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
20
|
+
Reconcile Artifact Set to Artifact Set
|
|
20
21
|
</skill>
|
|
21
22
|
|
|
22
|
-
<expand name="getopt"
|
|
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
|
|
30
|
-
<
|
|
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-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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:
|
|
61
|
+
⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: empty target artifact list
|
|
65
62
|
</template>
|
|
66
63
|
|
|
67
64
|
</if>
|
|
68
65
|
|
|
69
|
-
3.
|
|
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
|
-
|
|
83
|
+
5. <if condition="<getopt-bidirectional/> is not 'true'">
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
88
|
+
<if condition="<source/> is empty">
|
|
86
89
|
|
|
87
|
-
|
|
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
|
|
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.
|
|
116
|
-
|
|
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:
|
|
134
|
+
3. <step id="STEP 3: Update Artifacts">
|
|
121
135
|
|
|
122
|
-
1.
|
|
136
|
+
1. Internalize and honor the artifact-format conventions:
|
|
123
137
|
|
|
124
|
-
|
|
125
|
-
- the
|
|
126
|
-
- the `
|
|
127
|
-
- the `
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
|
|
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
|
-
|
|
147
|
-
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
160
|
-
one bullet line per changed
|
|
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
|
|
200
|
+
<if condition="no output artifact required any change">
|
|
171
201
|
|
|
172
|
-
|
|
202
|
+
Only output the following <template/>:
|
|
173
203
|
|
|
174
204
|
<template>
|
|
175
|
-
<ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none --
|
|
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
|
|
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
|
-
|
|
11
|
-
[*
|
|
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
|
|
24
|
-
|
|
25
|
-
present in *target* is never used as
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`ase-format-
|
|
32
|
-
|
|
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
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
79
|
+
Bidirectionally reconcile specification and architecture against
|
|
80
|
+
each other, limited to the authentication aspect:
|
|
59
81
|
|
|
60
82
|
```text
|
|
61
|
-
❯ /ase-sync-reconcile
|
|
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),
|
|
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
|