@rse/ase 0.9.55 → 0.9.57
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/dst/ase-config.js +72 -31
- package/dst/ase-getopt.js +3 -1
- package/dst/ase-hook.js +5 -3
- package/dst/ase-markdown.js +7 -4
- package/dst/ase-service.js +1 -1
- package/dst/ase-setup.js +4 -2
- package/dst/ase-statusline.js +6 -8
- package/dst/ase-task.js +37 -11
- package/package.json +5 -5
- 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/agents/ase-code-analyze.md +1 -1
- package/plugin/agents/ase-code-lint.md +4 -4
- package/plugin/agents/ase-meta-chat.md +1 -1
- package/plugin/agents/ase-meta-proximity.md +1 -1
- package/plugin/meta/ase-common-code.md +168 -1
- package/plugin/meta/ase-common-task.md +31 -13
- package/plugin/meta/ase-constitution.md +3 -3
- package/plugin/meta/ase-control.md +7 -7
- package/plugin/meta/ase-dialog.md +5 -4
- package/plugin/meta/ase-format-arch.md +6 -21
- package/plugin/meta/ase-format-meta.md +15 -2
- package/plugin/meta/ase-format-spec.md +9 -24
- package/plugin/meta/ase-format-task.md +2 -2
- package/plugin/meta/ase-getopt.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +14 -24
- package/plugin/meta/ase-tenets.md +5 -5
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
- package/plugin/skills/ase-arch-analyze/help.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +9 -7
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/help.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +2 -153
- package/plugin/skills/ase-code-craft/help.md +1 -1
- package/plugin/skills/ase-code-explain/SKILL.md +3 -3
- package/plugin/skills/ase-code-insight/SKILL.md +9 -7
- package/plugin/skills/ase-code-lint/SKILL.md +7 -5
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
- package/plugin/skills/ase-code-resolve/SKILL.md +48 -173
- package/plugin/skills/ase-code-resolve/help.md +15 -4
- package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
- package/plugin/skills/ase-docs-distill/help.md +1 -1
- package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/SKILL.md +33 -9
- package/plugin/skills/ase-help-skill/SKILL.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
- package/plugin/skills/ase-meta-changelog/SKILL.md +13 -8
- package/plugin/skills/ase-meta-chat/SKILL.md +9 -0
- package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
- package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
- package/plugin/skills/ase-meta-config/help.md +3 -2
- package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
- package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
- package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
- package/plugin/skills/ase-meta-eli5/help.md +1 -1
- package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
- package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
- package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
- package/plugin/skills/ase-meta-review/SKILL.md +7 -5
- package/plugin/skills/ase-meta-review/help.md +2 -2
- package/plugin/skills/ase-meta-search/SKILL.md +18 -0
- package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
- package/plugin/skills/ase-meta-why/SKILL.md +15 -6
- package/plugin/skills/ase-meta-why/help.md +3 -3
- package/plugin/skills/ase-sync-export/SKILL.md +2 -1
- package/plugin/skills/ase-sync-export/help.md +1 -1
- package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
- package/plugin/skills/ase-task-condense/SKILL.md +13 -67
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
- package/plugin/skills/ase-task-edit/SKILL.md +49 -22
- package/plugin/skills/ase-task-grill/SKILL.md +31 -129
- package/plugin/skills/ase-task-id/SKILL.md +12 -2
- package/plugin/skills/ase-task-implement/SKILL.md +11 -7
- package/plugin/skills/ase-task-implement/help.md +1 -1
- package/plugin/skills/ase-task-list/SKILL.md +9 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +17 -33
- package/plugin/skills/ase-task-reboot/SKILL.md +24 -100
- package/plugin/skills/ase-task-reboot/help.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +4 -2
- package/dst/ase-guidance.js +0 -89
- package/dst/ase-persona.js +0 -87
- package/dst/ase-stdout.js +0 -18
|
@@ -4,7 +4,7 @@ Code Skill Common Steps
|
|
|
4
4
|
|
|
5
5
|
<define name="code-tenets">
|
|
6
6
|
|
|
7
|
-
You *MUST* internalize and strictly honor the **GENERIC TENETS
|
|
7
|
+
You *MUST* internalize and strictly honor the **GENERIC TENETS** and
|
|
8
8
|
the **<arg1/> TENETS** of the **ASE Tenets** in the following creation
|
|
9
9
|
and updating of code. Do not output anything.
|
|
10
10
|
|
|
@@ -32,3 +32,170 @@ Then honor the tenet sets of <task-kind/>:
|
|
|
32
32
|
<expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
33
33
|
|
|
34
34
|
</define>
|
|
35
|
+
|
|
36
|
+
<define name="code-approaches">
|
|
37
|
+
|
|
38
|
+
You *MUST* perform the following sub-steps *internally* and *without
|
|
39
|
+
any output* until and including the recommendation decision. Only
|
|
40
|
+
sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
|
|
41
|
+
<getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
|
|
42
|
+
is *not* equal `black`.
|
|
43
|
+
|
|
44
|
+
If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
|
|
45
|
+
equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
|
|
46
|
+
perform no output at all) to speed up processing.
|
|
47
|
+
|
|
48
|
+
1. *Propose* a corresponding *<arg1/> approach*, optionally including
|
|
49
|
+
some *alternative* <arg1/> approaches. Do *not* output anything
|
|
50
|
+
in this sub-step.
|
|
51
|
+
|
|
52
|
+
2. *Reflect* on and *critique* the proposed approaches by deriving,
|
|
53
|
+
per approach, a small set of concrete *pros* and *cons*. Do
|
|
54
|
+
*not* output anything in this sub-step.
|
|
55
|
+
|
|
56
|
+
3. Based on the reflection, *decide* which approach to recommend
|
|
57
|
+
and annotate it with an <annotation/> of
|
|
58
|
+
` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
|
|
59
|
+
empty <annotation/>. Do *not* output anything in this sub-step.
|
|
60
|
+
|
|
61
|
+
4. Indicate start of reporting by showing the following <template/>:
|
|
62
|
+
|
|
63
|
+
<template>
|
|
64
|
+
<ase-tpl-head title="APPROACHES"/>
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
5. Now report each approach with the following <template/>,
|
|
68
|
+
inlining its pros/cons derived in sub-step 2, and do not output
|
|
69
|
+
anything else in this step:
|
|
70
|
+
|
|
71
|
+
<template>
|
|
72
|
+
● **APPROACH A<n/>**<annotation/>: **<summary/>**
|
|
73
|
+
○ [...]
|
|
74
|
+
⊕ *PRO*: [...]
|
|
75
|
+
⊖ *CON*: [...]
|
|
76
|
+
</template>
|
|
77
|
+
|
|
78
|
+
Hints:
|
|
79
|
+
|
|
80
|
+
- Give a short one-sentence <summary/> of the <arg1/> approach
|
|
81
|
+
plus *precise* and *ultra brief and concise* <arg1/>
|
|
82
|
+
information. Try to keep the number of bullet points
|
|
83
|
+
(`○ [...]`) in the range of 1-4.
|
|
84
|
+
|
|
85
|
+
6. Indicate end of reporting by showing the following <template/>:
|
|
86
|
+
|
|
87
|
+
<template>
|
|
88
|
+
<ase-tpl-foot title="APPROACHES"/>
|
|
89
|
+
</template>
|
|
90
|
+
|
|
91
|
+
7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
|
|
92
|
+
|
|
93
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
94
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
95
|
+
custom dialog according to the expanded `custom-dialog`
|
|
96
|
+
definition. You *MUST* closely follow this definition.
|
|
97
|
+
|
|
98
|
+
Let the user choose the preferred approach A<n/> by raising
|
|
99
|
+
a question with the following custom dialog, where per
|
|
100
|
+
approach A<n/>, you determine an ultra brief summary
|
|
101
|
+
<short-summary/> and then use the answer option `A<n/>:
|
|
102
|
+
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
103
|
+
recommended approach plus zero or more answer options `A<n/>:
|
|
104
|
+
<short-summary/>` for all other approaches:
|
|
105
|
+
|
|
106
|
+
<expand name="custom-dialog" arg1="--no-other">
|
|
107
|
+
Select Approach: Select your preferred <arg2/> approach to follow?
|
|
108
|
+
A<n/>: <short-summary/>
|
|
109
|
+
[...]
|
|
110
|
+
</expand>
|
|
111
|
+
|
|
112
|
+
</if>
|
|
113
|
+
<else>
|
|
114
|
+
|
|
115
|
+
Set <n/> to the number of the <arg1/> approach A<n/> you recommend.
|
|
116
|
+
Output a hint with the following <template/>:
|
|
117
|
+
|
|
118
|
+
<template>
|
|
119
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
|
|
120
|
+
</template>
|
|
121
|
+
|
|
122
|
+
</else>
|
|
123
|
+
|
|
124
|
+
</define>
|
|
125
|
+
|
|
126
|
+
<define name="code-next-dispatch">
|
|
127
|
+
|
|
128
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
129
|
+
list of pre-selected next-step tokens. *Peek* the *first* token
|
|
130
|
+
as <head/> (or `none` if the list is `none`/empty).
|
|
131
|
+
Set <args>--int-reuse-task</args>.
|
|
132
|
+
|
|
133
|
+
1. <if condition="<head/> is equal `DONE`">
|
|
134
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
135
|
+
tokens (joined back with `,`, or `none` if empty). `DONE`
|
|
136
|
+
means the freshly composed plan is finalized as-is, so do
|
|
137
|
+
*not* hand off to `ase-task-edit`. Only output the following
|
|
138
|
+
<template/> and then *STOP*. Do *not* implement the plan.
|
|
139
|
+
|
|
140
|
+
<template>
|
|
141
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
|
|
142
|
+
</template>
|
|
143
|
+
</if>
|
|
144
|
+
|
|
145
|
+
2. <elseif condition="<head/> is equal `IMPLEMENT`">
|
|
146
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
147
|
+
tokens (joined back with `,`, or `none` if empty).
|
|
148
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
149
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
150
|
+
</if>
|
|
151
|
+
Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
|
|
152
|
+
to *implement* the freshly composed plan, bypassing `ase-task-edit`.
|
|
153
|
+
</elseif>
|
|
154
|
+
|
|
155
|
+
3. <elseif condition="<head/> is equal `PREFLIGHT`">
|
|
156
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
157
|
+
tokens (joined back with `,`, or `none` if empty).
|
|
158
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
159
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
160
|
+
</if>
|
|
161
|
+
Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
|
|
162
|
+
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
163
|
+
</elseif>
|
|
164
|
+
|
|
165
|
+
4. <elseif condition="<head/> is equal `GRILL`">
|
|
166
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
167
|
+
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
168
|
+
is this skill's own dispatch token, *not* part of
|
|
169
|
+
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
170
|
+
stripped here rather than forwarded. All remaining tokens are
|
|
171
|
+
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
172
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
173
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
174
|
+
</if>
|
|
175
|
+
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
176
|
+
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
177
|
+
</elseif>
|
|
178
|
+
|
|
179
|
+
5. <else>
|
|
180
|
+
Hand off to `ase-task-edit`.
|
|
181
|
+
<if condition="<head/> is equal `EDIT`">
|
|
182
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
183
|
+
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
184
|
+
is this skill's own dispatch token, *not* part of
|
|
185
|
+
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
186
|
+
stripped here rather than forwarded.
|
|
187
|
+
</if>
|
|
188
|
+
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
189
|
+
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
190
|
+
own head itself.
|
|
191
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
192
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
193
|
+
</if>
|
|
194
|
+
Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
|
|
195
|
+
</else>
|
|
196
|
+
|
|
197
|
+
6. In every branch above which invoked the `Skill` tool, you *MUST*
|
|
198
|
+
immediately stop processing the current skill once the `Skill`
|
|
199
|
+
tool was used.
|
|
200
|
+
|
|
201
|
+
</define>
|
|
@@ -62,29 +62,30 @@ Task Skill Common Steps
|
|
|
62
62
|
|
|
63
63
|
<if condition="
|
|
64
64
|
<getopt-option-int-reuse-task/> is equal `true`
|
|
65
|
-
*and*
|
|
65
|
+
*and* an `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
66
66
|
exists earlier in the current session
|
|
67
67
|
">
|
|
68
|
-
Set <text/> to the `text` *
|
|
68
|
+
Set <text/> to the `text` *argument* of the most recent
|
|
69
69
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this is
|
|
70
|
-
the
|
|
71
|
-
with the `text` *
|
|
70
|
+
the *authoring form* of the plan and *MUST NOT* be confused
|
|
71
|
+
with the `text` *output* field of that call -- *without*
|
|
72
72
|
calling `ase_task_load` again. Set <status>plan
|
|
73
73
|
reused</status>. Do not output anything.
|
|
74
74
|
</if>
|
|
75
75
|
<else>
|
|
76
76
|
Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
|
|
77
|
-
`ase` MCP server to load the current task plan content
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
call.
|
|
77
|
+
`ase` MCP server to load the current task plan content in its
|
|
78
|
+
*authoring form* -- the `variant` argument defaults to `source`
|
|
79
|
+
-- and set <text/> to the `text` output field of this
|
|
80
|
+
`ase_task_load` tool call. Do not output anything related to
|
|
81
|
+
this MCP tool call. Set <status>plan loaded</status>.
|
|
81
82
|
</else>
|
|
82
83
|
|
|
83
84
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
84
85
|
Set <task-content></task-content> (set task content to empty).
|
|
85
86
|
Set <words/> to "0".
|
|
86
87
|
|
|
87
|
-
- If <text/>
|
|
88
|
+
- If <text/> does NOT start with `ERROR:` and NOT with `WARNING:`:
|
|
88
89
|
Set <task-content><text/></task-content> (set task content to text).
|
|
89
90
|
Calculate the number of words <words/> of <task-content/>.
|
|
90
91
|
|
|
@@ -101,7 +102,7 @@ Only output the following <template/>:
|
|
|
101
102
|
Update <timestamp-modified/> with the current time in ISO-style
|
|
102
103
|
format, which has to be determined by calling the
|
|
103
104
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
104
|
-
MCP server and
|
|
105
|
+
MCP server and using the `text` field of its response. If
|
|
105
106
|
<timestamp-created/> is still unset (because the plan content
|
|
106
107
|
had no `Created:` frontmatter key), set
|
|
107
108
|
<timestamp-created><timestamp-modified/></timestamp-created>
|
|
@@ -113,8 +114,8 @@ the number of words <words/> of <task-content/>.
|
|
|
113
114
|
|
|
114
115
|
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
115
116
|
"<task-content/>")` tool of the `ase` MCP server to save the task
|
|
116
|
-
plan content
|
|
117
|
-
except the following <template/>:
|
|
117
|
+
plan content in its *authoring form*. Do not output anything
|
|
118
|
+
related to this MCP call except the following <template/>:
|
|
118
119
|
|
|
119
120
|
<template>
|
|
120
121
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<arg1/>**
|
|
@@ -143,7 +144,7 @@ except the following <template/>:
|
|
|
143
144
|
⧉ **ASE**: ☻ skill: **<arg1/>**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
144
145
|
</template>
|
|
145
146
|
|
|
146
|
-
-
|
|
147
|
+
- Else, i.e. <getopt-option-next/> was *originally* equal to `none`:
|
|
147
148
|
|
|
148
149
|
In the following, you *MUST* *NOT* use your built-in
|
|
149
150
|
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
@@ -155,3 +156,20 @@ except the following <template/>:
|
|
|
155
156
|
</expand>
|
|
156
157
|
|
|
157
158
|
</define>
|
|
159
|
+
|
|
160
|
+
<define name="task-next-handoff">
|
|
161
|
+
|
|
162
|
+
Set <args>--int-reuse-task</args>.
|
|
163
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
164
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
165
|
+
</if>
|
|
166
|
+
Only output the following <template/> and then call the tool
|
|
167
|
+
`Skill(skill: "ase:<arg1/>", args: "<args/>")` to invoke the
|
|
168
|
+
`ase:<arg1/>` skill to continue with the updated plan. Immediately
|
|
169
|
+
stop processing the current skill once the `Skill` tool was used.
|
|
170
|
+
|
|
171
|
+
<template>
|
|
172
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<arg2/>**
|
|
173
|
+
</template>
|
|
174
|
+
|
|
175
|
+
</define>
|
|
@@ -13,7 +13,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
13
13
|
- Do *not* use braces around single-statement blocks in "if" and "while" constructs unless the language requires them.
|
|
14
14
|
- Do *not* insist on early "return" in "if" blocks, if an "else" block exists.
|
|
15
15
|
- Do *not* remove any whitespace in the code formatting -- keep whitespace aligned with code base.
|
|
16
|
-
- Do *not* produce any trailing
|
|
16
|
+
- Do *not* produce any trailing whitespace on any lines.
|
|
17
17
|
- Do *not* guess missing tool call parameters or fill them with invented placeholder values.
|
|
18
18
|
|
|
19
19
|
## Commandments
|
|
@@ -24,7 +24,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
24
24
|
- Assume your *internal knowledge of dependencies* (libraries, frameworks, tools, and their implementations)
|
|
25
25
|
is *outdated*; always verify the current API, version, and usage pattern against the local sources
|
|
26
26
|
or the web before writing any code against them.
|
|
27
|
-
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY*
|
|
27
|
+
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY* they are necessary.
|
|
28
28
|
- Use *concise* and *type-safe code* only.
|
|
29
29
|
- Use *precise* and *surgical code changes* only.
|
|
30
30
|
- Be very *pedantic* on code style.
|
|
@@ -36,7 +36,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
36
36
|
- Always use *parentheses around arrow function parameters*, even for a single parameter.
|
|
37
37
|
- Make a line break before the keywords "else", "catch", and "finally".
|
|
38
38
|
- Try to *vertically align similar operators* on consecutive, similar lines.
|
|
39
|
-
- Place spaces after opening and before closing
|
|
39
|
+
- Place spaces after opening and before closing square brackets
|
|
40
40
|
(except for array access and array types) and braces (except for regular expression ranges).
|
|
41
41
|
- Use *double-quotes* (`"[...]"`) instead of single-quotes (`'[...]'`) for all strings.
|
|
42
42
|
- Use K&R coding style with *opening braces* at the end of lines and *closing braces* at the beginning of lines.
|
|
@@ -6,9 +6,9 @@ Control Flow Constructs
|
|
|
6
6
|
<define name="<define-name/>"><define-body/></define>:
|
|
7
7
|
|
|
8
8
|
This specifies a *reusable definition* named <define-name/> and
|
|
9
|
-
|
|
9
|
+
a <define-body/> which can contain arbitrary information with
|
|
10
10
|
optional `<args/>` (or alternatively, individual `<arg1/>`,
|
|
11
|
-
`<arg2/>`, etc) and optional `<content/>` references from
|
|
11
|
+
`<arg2/>`, etc.) and optional `<content/>` references from
|
|
12
12
|
subsequent <expand/> calls.
|
|
13
13
|
This construct is expanded into nothing.
|
|
14
14
|
Do not output anything.
|
|
@@ -20,7 +20,7 @@ Control Flow Constructs
|
|
|
20
20
|
construct is expanded to the <define-body/> of <define/> with
|
|
21
21
|
`<args/>` substituted with `<expand-arg1/> <expand-arg2/> [...]`,
|
|
22
22
|
`<arg1/>` substituted with <expand-arg1/>, `<arg2/>` substituted
|
|
23
|
-
with <expand-arg2/>, etc
|
|
23
|
+
with <expand-arg2/>, etc., and `<content/>` substituted with
|
|
24
24
|
<expand-content/>. Do not output anything else.
|
|
25
25
|
|
|
26
26
|
- *IMPORTANT*: You *MUST* honor the following control flow construct:
|
|
@@ -47,7 +47,7 @@ Control Flow Constructs
|
|
|
47
47
|
<if condition="<if-condition/>"><if-body/></if>:
|
|
48
48
|
|
|
49
49
|
This specifies a simple condition which is expanded to <if-body/>
|
|
50
|
-
if <if-condition/> is met, or to empty string if <if-condition/> is
|
|
50
|
+
if <if-condition/> is met, or to the empty string if <if-condition/> is
|
|
51
51
|
*not* met. It can be optionally followed by one or more <elseif/>
|
|
52
52
|
constructs and/or one final <else/> construct. Do not output anything else.
|
|
53
53
|
|
|
@@ -112,11 +112,11 @@ Control Flow Constructs
|
|
|
112
112
|
anything else.
|
|
113
113
|
|
|
114
114
|
- *IMPORTANT*: You *MUST* honor the following control flow construct:
|
|
115
|
-
<agent-consolidation [group=<agent-group/>]
|
|
115
|
+
<agent-consolidation [group=<agent-group/>]/>:
|
|
116
116
|
|
|
117
117
|
This specifies the merging of all the Git WorkTrees created by the
|
|
118
|
-
<agent/> calls
|
|
119
|
-
<agent-group/> or
|
|
118
|
+
<agent/> calls which either are identified with the unique group
|
|
119
|
+
<agent-group/> or occur in the last <parallel/> section
|
|
120
120
|
of the context. After merging a single Git WorkTree, remove the Git
|
|
121
121
|
WorkTree.
|
|
122
122
|
|
|
@@ -63,7 +63,7 @@ following procedure:
|
|
|
63
63
|
|
|
64
64
|
<text>
|
|
65
65
|
<text/>
|
|
66
|
-
<
|
|
66
|
+
<label-key/> ▶ <label-text/><label-pad/> <description/>
|
|
67
67
|
</text>
|
|
68
68
|
|
|
69
69
|
<if condition="<keys/> is empty">
|
|
@@ -82,7 +82,7 @@ following procedure:
|
|
|
82
82
|
</else>
|
|
83
83
|
|
|
84
84
|
<if condition="<opts/> contains `--other` and does *not* contain `--no-other`">
|
|
85
|
-
Set <hint>Please choose *one* option by typing <keys/>, or other free-text instruction.</hint>.
|
|
85
|
+
Set <hint>Please choose *one* option by typing <keys/>, or any other free-text instruction.</hint>.
|
|
86
86
|
</if>
|
|
87
87
|
<else>
|
|
88
88
|
Set <hint>Please choose *one* option by typing <keys/>.</hint>.
|
|
@@ -93,7 +93,7 @@ following procedure:
|
|
|
93
93
|
<text>
|
|
94
94
|
<ase-tpl-boxed title="DIALOG" subtitle="<question-label/>">
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
**<question-description/>**
|
|
97
97
|
|
|
98
98
|
<text/>
|
|
99
99
|
|
|
@@ -125,7 +125,8 @@ following procedure:
|
|
|
125
125
|
otherwise indicates that the user doesn't want to proceed,
|
|
126
126
|
or the user declined to answer the question, or that
|
|
127
127
|
the dialog was cancelled, rejected or skipped, set
|
|
128
|
-
<result>CANCEL</result
|
|
128
|
+
<result>CANCEL</result> and *SKIP* all remaining steps
|
|
129
|
+
2.3.3 - 2.3.4 of this dispatch.
|
|
129
130
|
|
|
130
131
|
3. Otherwise, determine the selected <label/>
|
|
131
132
|
by mapping the <result/> (usually containing one of the
|
|
@@ -18,20 +18,6 @@ at `01`) according to the order of the **Artifact** list below, and with
|
|
|
18
18
|
Pascal-casing each word (upper-casing its first letter) and using `-`
|
|
19
19
|
characters instead of spaces (e.g. `Context-View`).
|
|
20
20
|
|
|
21
|
-
Each **Artifact** file *MUST* begin with a single blank line before its
|
|
22
|
-
`#` heading and end with a single blank line after its last content line
|
|
23
|
-
(followed by the trailing newline), mirroring the blank lines shown
|
|
24
|
-
inside the `<format>` blocks below.
|
|
25
|
-
|
|
26
|
-
Each **Artifact** contains two timestamps: the <timestamp-created/>
|
|
27
|
-
is the timestamp when this **Artifact** was created. The
|
|
28
|
-
<timestamp-modified/> is the timestamp when this **Artifact** was last
|
|
29
|
-
modified. Both use an ISO-style format value. The value of both can be
|
|
30
|
-
determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
|
|
31
|
-
tool of the `ase` MCP server and use the `text` field of its response.
|
|
32
|
-
Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
|
|
33
|
-
updated, too.
|
|
34
|
-
|
|
35
21
|
The **Artifact Set** **Architecture (ARCH)** consists of the following
|
|
36
22
|
distinct **Artifact**s (listed under their <artifact-name/> and their
|
|
37
23
|
<artifact-id/>):
|
|
@@ -84,7 +70,6 @@ distinct **Artifact**s (listed under their <artifact-name/> and their
|
|
|
84
70
|
The **Artifact**s have the following cross-references:
|
|
85
71
|
|
|
86
72
|
```text
|
|
87
|
-
ARCH-02-FV Functionality View ──(depends on)─► ARCH-01-CV Context View
|
|
88
73
|
ARCH-03-IV Information View ──(entity)─► SPEC-07-DM Data Model
|
|
89
74
|
ARCH-03-IV Information View ──(owner)─► ARCH-02-FV Functionality View
|
|
90
75
|
ARCH-04-CO Concurrency View ──(hosts)─► ARCH-02-FV Functionality View
|
|
@@ -831,7 +816,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
|
|
|
831
816
|
|
|
832
817
|
- <arch-dr-decision-notes/> is *OPTIONAL* and can be omitted when it
|
|
833
818
|
does not add genuine value - most decisions won't need it. The
|
|
834
|
-
following usually goes into it: information
|
|
819
|
+
following usually goes into it: information about the decision *process*
|
|
835
820
|
(e.g. a weighted decision matrix of considered alternatives);
|
|
836
821
|
consequences of the decision (but only when non-obvious downstream
|
|
837
822
|
effects need to be called out); and links to strongly related
|
|
@@ -850,7 +835,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
|
|
|
850
835
|
almost inevitable answer to the context - if a reader is surprised
|
|
851
836
|
by the decision, either the context is missing a force, or the
|
|
852
837
|
decision is under-justified. The rationale should make the decision
|
|
853
|
-
feel earned, not asserted - if you
|
|
838
|
+
feel earned, not asserted - if you delete the rationale and
|
|
854
839
|
the decision suddenly looks arbitrary, the rationale was doing its
|
|
855
840
|
job.
|
|
856
841
|
|
|
@@ -892,7 +877,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
|
|
|
892
877
|
|
|
893
878
|
- **Boundary and scope decisions.** "Customer data is owned by the
|
|
894
879
|
Customer context; other contexts reference it by ID only." The explicit
|
|
895
|
-
no
|
|
880
|
+
no's are as valuable as the yes's.
|
|
896
881
|
|
|
897
882
|
- **Deliberate deviations from the obvious path.** "We're using
|
|
898
883
|
manual SQL instead of an ORM because X." Anything where a reasonable
|
|
@@ -1091,7 +1076,7 @@ its purpose, and the alternatives that were considered but not chosen.
|
|
|
1091
1076
|
to bootstrap application parameters.
|
|
1092
1077
|
|
|
1093
1078
|
- **Configuration Parsing**:
|
|
1094
|
-
Load and parse directives from configuration file to bootstrap
|
|
1079
|
+
Load and parse directives from a configuration file to bootstrap
|
|
1095
1080
|
application parameters.
|
|
1096
1081
|
|
|
1097
1082
|
- **Process Daemonizing**:
|
|
@@ -1103,7 +1088,7 @@ its purpose, and the alternatives that were considered but not chosen.
|
|
|
1103
1088
|
and control them during the life-cycle of the application.
|
|
1104
1089
|
|
|
1105
1090
|
- **Component Management**:
|
|
1106
|
-
Structure the code into components, instantiate them
|
|
1091
|
+
Structure the code into components, instantiate them at run-time
|
|
1107
1092
|
and manage them in a stateful component life-cycle.
|
|
1108
1093
|
|
|
1109
1094
|
- **Component Communication**:
|
|
@@ -1151,7 +1136,7 @@ its purpose, and the alternatives that were considered but not chosen.
|
|
|
1151
1136
|
measurement information at certain points of interest.
|
|
1152
1137
|
|
|
1153
1138
|
- **Database Access**:
|
|
1154
|
-
Map in-memory domain entities onto data
|
|
1139
|
+
Map in-memory domain entities onto a data-store-dependent persistent
|
|
1155
1140
|
data structure.
|
|
1156
1141
|
|
|
1157
1142
|
- **Database Connectivity**:
|
|
@@ -51,8 +51,7 @@ Artifact Meta Information
|
|
|
51
51
|
name (for stable ordering) and is *not* part of the **Artifact**'s
|
|
52
52
|
or its **Aspect**s' identifiers.
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
blank line. All its lines should be kept below 140 characters,
|
|
54
|
+
All lines of an **Artifact** should be kept below 140 characters,
|
|
56
55
|
whenever possible by line-breaking with newlines after about 120
|
|
57
56
|
characters per line.
|
|
58
57
|
|
|
@@ -64,6 +63,20 @@ Artifact Meta Information
|
|
|
64
63
|
characters and in total not longer than 30 characters). An example
|
|
65
64
|
is `user-login`.
|
|
66
65
|
|
|
66
|
+
Each **Artifact** file *MUST* begin with a single blank line before its
|
|
67
|
+
`#` heading and end with a single blank line after its last content line
|
|
68
|
+
(followed by the trailing newline), mirroring the blank lines shown
|
|
69
|
+
inside the `<format>` blocks below.
|
|
70
|
+
|
|
71
|
+
Each **Artifact** contains two timestamps: the <timestamp-created/>
|
|
72
|
+
is the timestamp when this **Artifact** was created. The
|
|
73
|
+
<timestamp-modified/> is the timestamp when this **Artifact** was last
|
|
74
|
+
modified. Both use an ISO-style format value. The value of both can be
|
|
75
|
+
determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
|
|
76
|
+
tool of the `ase` MCP server, using the `text` field of its response.
|
|
77
|
+
Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
|
|
78
|
+
updated, too.
|
|
79
|
+
|
|
67
80
|
An **Artifact** *MAY* additionally declare an **Export** -- a derived,
|
|
68
81
|
ready-to-consume rendering of (part of) its content, materialized as a
|
|
69
82
|
*side-by-side* file next to the **Artifact** itself. An **Artifact**
|
|
@@ -18,20 +18,6 @@ at `01`) according to the order of the **Artifact** list below, and with
|
|
|
18
18
|
Pascal-casing each word (upper-casing its first letter) and using `-`
|
|
19
19
|
characters instead of spaces (e.g. `Customer-Journey`).
|
|
20
20
|
|
|
21
|
-
Each **Artifact** file *MUST* begin with a single blank line before its
|
|
22
|
-
`#` heading and end with a single blank line after its last content line
|
|
23
|
-
(followed by the trailing newline), mirroring the blank lines shown
|
|
24
|
-
inside the `<format>` blocks below.
|
|
25
|
-
|
|
26
|
-
Each **Artifact** contains two timestamps: the <timestamp-created/>
|
|
27
|
-
is the timestamp when this **Artifact** was created. The
|
|
28
|
-
<timestamp-modified/> is the timestamp when this **Artifact** was last
|
|
29
|
-
modified. Both use an ISO-style format value. The value of both can be
|
|
30
|
-
determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
|
|
31
|
-
tool of the `ase` MCP server and use the `text` field of its response.
|
|
32
|
-
Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
|
|
33
|
-
updated, too.
|
|
34
|
-
|
|
35
21
|
The **Artifact Set** **Specification (SPEC)** consists of the following
|
|
36
22
|
distinct **Artifact**s (listed under their <artifact-name/> and their
|
|
37
23
|
<artifact-id/>):
|
|
@@ -122,7 +108,6 @@ SPEC-06-BR Business Rules ──(constrains)─► SPEC-05-NR Non-Functio
|
|
|
122
108
|
SPEC-08-SM State Model ──(of entity)─► SPEC-07-DM Data Model
|
|
123
109
|
SPEC-10-UC Use Cases ──(use case actor)─► SPEC-02-PE Personas
|
|
124
110
|
SPEC-10-UC Use Cases ──(realizes)─► SPEC-04-FR Functional Requirements
|
|
125
|
-
SPEC-10-UC Use Cases ──(transitions)─► SPEC-08-SM State Model
|
|
126
111
|
SPEC-11-TC Test Cases ──(verifies)─► SPEC-04-FR Functional Requirements
|
|
127
112
|
SPEC-11-TC Test Cases ──(verifies)─► SPEC-05-NR Non-Functional Requirements
|
|
128
113
|
SPEC-15-DS Dialog Storyboard ──(scenario)─► SPEC-10-UC Use Cases
|
|
@@ -221,7 +206,7 @@ capturing their goals, needs, behaviors, and context.
|
|
|
221
206
|
in total not longer than 30 characters), derived from
|
|
222
207
|
<spec-pe-persona-name/>.
|
|
223
208
|
|
|
224
|
-
- <spec-pe-persona-name/>: per-artifact unique first name of fictional
|
|
209
|
+
- <spec-pe-persona-name/>: per-artifact unique first name of the fictional
|
|
225
210
|
described person.
|
|
226
211
|
|
|
227
212
|
- <spec-pe-persona-gender/>: the gender of the persona: `male`,
|
|
@@ -231,7 +216,7 @@ capturing their goals, needs, behaviors, and context.
|
|
|
231
216
|
|
|
232
217
|
- <spec-pe-persona-role/>: the role of the persona.
|
|
233
218
|
|
|
234
|
-
- <spec-pe-persona-quote/>: a short and bold
|
|
219
|
+
- <spec-pe-persona-quote/>: a short and bold first-person statement -
|
|
235
220
|
written in the persona's own voice - that captures their core
|
|
236
221
|
attitude, motivation, frustration, or need in a single memorable line.
|
|
237
222
|
It's sometimes called the persona's "tagline," "mantra," or "defining
|
|
@@ -287,12 +272,12 @@ over time.
|
|
|
287
272
|
|
|
288
273
|
- <spec-cj-step-stage/> is one of:
|
|
289
274
|
|
|
290
|
-
- `Awareness`: Customer is not aware of solution, but has a need.
|
|
291
|
-
- `Consideration`: Customer is aware of solution, and should consider its use.
|
|
275
|
+
- `Awareness`: Customer is not aware of the solution, but has a need.
|
|
276
|
+
- `Consideration`: Customer is aware of the solution, and should consider its use.
|
|
292
277
|
- `Decision`: Customer wants to pick the solution.
|
|
293
278
|
- `Onboarding`: Customer is using the solution.
|
|
294
|
-
- `Retention`: Customer in the long
|
|
295
|
-
- `Advocacy`: Customer is a fan of solution and tells the tribe.
|
|
279
|
+
- `Retention`: Customer in the long term stays a customer.
|
|
280
|
+
- `Advocacy`: Customer is a fan of the solution and tells the tribe.
|
|
296
281
|
|
|
297
282
|
- <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
|
|
298
283
|
corresponding **Aspect** of the Personas **Artifact**.
|
|
@@ -564,7 +549,7 @@ manages, defining how information is organized and connected.
|
|
|
564
549
|
|
|
565
550
|
### RELATIONS
|
|
566
551
|
|
|
567
|
-
- `<spec-dm-relation-id/>`: [`<spec-dm-relation-target/>`](
|
|
552
|
+
- `<spec-dm-relation-id/>`: [`<spec-dm-relation-target/>`](#SPEC-DM-<spec-dm-relation-target-id/>)(`<spec-dm-relation-cardinality/>`):<br/>
|
|
568
553
|
<spec-dm-relation-description/>,
|
|
569
554
|
**BECAUSE** <spec-dm-relation-rationale/>.
|
|
570
555
|
|
|
@@ -664,12 +649,12 @@ manages, defining how information is organized and connected.
|
|
|
664
649
|
- `Type` (`<spec-dm-attribute-qualifier/><spec-dm-attribute-type/>`)
|
|
665
650
|
- `Description` (`<spec-dm-attribute-description/>, **BECAUSE** <spec-dm-attribute-rationale/>.`)
|
|
666
651
|
|
|
667
|
-
- <export-table-2/> is a Markdown table for the
|
|
652
|
+
- <export-table-2/> is a Markdown table for the relations with one
|
|
668
653
|
row per <spec-dm-relation-id/>, sorted by <spec-dm-relation-id/> --
|
|
669
654
|
with the columns:
|
|
670
655
|
|
|
671
656
|
- `Relation` (`**<spec-dm-relation-id/>**`)
|
|
672
|
-
- `Target` (`[<spec-dm-relation-target/>](
|
|
657
|
+
- `Target` (`[<spec-dm-relation-target/>](#SPEC-DM-<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
|
|
673
658
|
- `Description` (`<spec-dm-relation-description/>, **BECAUSE** <spec-dm-relation-rationale/>.`)
|
|
674
659
|
|
|
675
660
|
- In case a <spec-dm-entity/> has no relations at all, the
|
|
@@ -139,14 +139,14 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
139
139
|
task plan was last modified. Both use an ISO-style format
|
|
140
140
|
value. The value of both can be determined by a call to the
|
|
141
141
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase` MCP
|
|
142
|
-
server
|
|
142
|
+
server, using the `text` field of its response.
|
|
143
143
|
|
|
144
144
|
- The <title/> is a short summary of the <summary-what/>, no longer than
|
|
145
145
|
50 characters.
|
|
146
146
|
|
|
147
147
|
- The sections `## CHANGES` and `## VERIFICATION` are each just a short
|
|
148
148
|
list of 1-5 bullet points. Each bullet point is formatted as
|
|
149
|
-
`-
|
|
149
|
+
`- **<aspect/>**: <specification/>` where <aspect/> indicates
|
|
150
150
|
the aspect of the section and <specification/> is 1-3 sentences
|
|
151
151
|
giving an *ultra precise* but also *ultra brief* and *ultra concise*
|
|
152
152
|
description of the aspect.
|
|
@@ -36,7 +36,7 @@ set placeholders into the context as a side-effect.
|
|
|
36
36
|
Additionally, simulate <getopt-info/> as a comma-separated
|
|
37
37
|
markdown rendering of the parsed options in the form `<longN/>:
|
|
38
38
|
**<valueN/>**, [...]` (joined with `, `, with each value
|
|
39
|
-
shell-quoted if value contains spaces or special characters, and
|
|
39
|
+
shell-quoted if the value contains spaces or special characters, and
|
|
40
40
|
excluding the `help` option and any *internal* option whose long
|
|
41
41
|
name starts with `int-`).
|
|
42
42
|
|
|
@@ -61,7 +61,7 @@ requested communication style at any time during a session.
|
|
|
61
61
|
- <keywords/> is only one to four keywords summarizing the <details/>
|
|
62
62
|
- <details/> is one to four concise prose sentences explaining the aspect
|
|
63
63
|
|
|
64
|
-
- If <ase-persona-style/> is `telegrapher
|
|
64
|
+
- If <ase-persona-style/> is `telegrapher` or `caveman`:
|
|
65
65
|
- You *MUST* *use only* bullet point lists without blank lines between bullet points.
|
|
66
66
|
- You *MUST* *use only* one bullet point per explanation aspect.
|
|
67
67
|
- You *MUST* *use* shorter synonyms
|
|
@@ -89,13 +89,13 @@ requested communication style at any time during a session.
|
|
|
89
89
|
- `<subject/> ▶ <action/> ▷ <object/>.`
|
|
90
90
|
- `<subject/> ▶ <action/>.`
|
|
91
91
|
Each of <subject/>, <action/>, <object/>, and <reason/>
|
|
92
|
-
|
|
92
|
+
is just one to six words.
|
|
93
93
|
|
|
94
94
|
- If <ase-persona-style/> is `caveman`:
|
|
95
95
|
- You *MUST* structure every bullet point by
|
|
96
96
|
following exactly the formatting `○ <core/>`, where:
|
|
97
97
|
<core/> is a *very terse core* stating the essence of the aspect
|
|
98
|
-
using one of the following
|
|
98
|
+
using one of the following four sentence patterns:
|
|
99
99
|
- `<expression/>!`
|
|
100
100
|
- `<subject/> <action/> <object/>, <reason/>.`
|
|
101
101
|
- `<subject/> <action/> <object/>.`
|