@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.
Files changed (86) hide show
  1. package/dst/ase-config.js +72 -31
  2. package/dst/ase-getopt.js +3 -1
  3. package/dst/ase-hook.js +5 -3
  4. package/dst/ase-markdown.js +7 -4
  5. package/dst/ase-service.js +1 -1
  6. package/dst/ase-setup.js +4 -2
  7. package/dst/ase-statusline.js +6 -8
  8. package/dst/ase-task.js +37 -11
  9. package/package.json +5 -5
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/.github/plugin/plugin.json +1 -1
  13. package/plugin/agents/ase-code-analyze.md +1 -1
  14. package/plugin/agents/ase-code-lint.md +4 -4
  15. package/plugin/agents/ase-meta-chat.md +1 -1
  16. package/plugin/agents/ase-meta-proximity.md +1 -1
  17. package/plugin/meta/ase-common-code.md +168 -1
  18. package/plugin/meta/ase-common-task.md +31 -13
  19. package/plugin/meta/ase-constitution.md +3 -3
  20. package/plugin/meta/ase-control.md +7 -7
  21. package/plugin/meta/ase-dialog.md +5 -4
  22. package/plugin/meta/ase-format-arch.md +6 -21
  23. package/plugin/meta/ase-format-meta.md +15 -2
  24. package/plugin/meta/ase-format-spec.md +9 -24
  25. package/plugin/meta/ase-format-task.md +2 -2
  26. package/plugin/meta/ase-getopt.md +1 -1
  27. package/plugin/meta/ase-persona.md +3 -3
  28. package/plugin/meta/ase-skill.md +14 -24
  29. package/plugin/meta/ase-tenets.md +5 -5
  30. package/plugin/package.json +2 -2
  31. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
  32. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  33. package/plugin/skills/ase-arch-discover/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  35. package/plugin/skills/ase-code-analyze/help.md +1 -1
  36. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  37. package/plugin/skills/ase-code-craft/help.md +1 -1
  38. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  39. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  40. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  41. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  42. package/plugin/skills/ase-code-resolve/SKILL.md +48 -173
  43. package/plugin/skills/ase-code-resolve/help.md +15 -4
  44. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  45. package/plugin/skills/ase-docs-distill/help.md +1 -1
  46. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  47. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  48. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  49. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  50. package/plugin/skills/ase-meta-changelog/SKILL.md +13 -8
  51. package/plugin/skills/ase-meta-chat/SKILL.md +9 -0
  52. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  53. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  54. package/plugin/skills/ase-meta-config/help.md +3 -2
  55. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  56. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  57. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  58. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  59. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  60. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  61. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  63. package/plugin/skills/ase-meta-review/help.md +2 -2
  64. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  65. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  66. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  67. package/plugin/skills/ase-meta-why/help.md +3 -3
  68. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  69. package/plugin/skills/ase-sync-export/help.md +1 -1
  70. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  71. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  72. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  73. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  74. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  75. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  76. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  77. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  78. package/plugin/skills/ase-task-implement/help.md +1 -1
  79. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  80. package/plugin/skills/ase-task-preflight/SKILL.md +17 -33
  81. package/plugin/skills/ase-task-reboot/SKILL.md +24 -100
  82. package/plugin/skills/ase-task-reboot/help.md +1 -1
  83. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  84. package/dst/ase-guidance.js +0 -89
  85. package/dst/ase-persona.js +0 -87
  86. 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**, and
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* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
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` *output* field of the most recent
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 rendering-prepared plan content and *MUST NOT* be confused
71
- with the `text` *argument* passed into that call -- *without*
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 and
78
- set <text/> to the `text` output field of this `ase_task_load`
79
- tool call. Do not output anything related to this MCP tool
80
- call. Set <status>plan loaded</status>.
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/> starts NOT with `ERROR:` and NOT with `WARNING:`:
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 use the `text` field of its response. If
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. Do not output anything related to this MCP call
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
- - If <getopt-option-next/> is equal to `none`:
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 white-spaces on any lines.
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* it is necessary.
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 angle brackets
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
- an <define-body/> which can contain arbitrary information with
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, and `<content/>` substituted with
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 with either are identified with the unique group
119
- <agent-group/> or all <agent/> calls in the last <parallel/> section
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
- <ase-tpl-boxline><label-key/> ▶ <label-text/><label-pad/> <description/></ase-tpl-boxline>
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
- <ase-tpl-boxline>**<question-description/>**</ase-tpl-boxline>
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 of the decision *process*
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 would delete the rationale and
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-s are as valuable as the yes-s.
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 under run-time
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 store dependent persistent
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
- Each **Artifact** *MUST* have an initial blank line and a trailing
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, first-person statement -
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-term stays a customer.
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/>`](#<spec-dm-relation-target-id/>)(`<spec-dm-relation-cardinality/>`):<br/>
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 relation with one
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/>](#<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
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 and use the `text` field of its response.
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
- `- **<aspect/>**: <specification/>` where <aspect/> indicates
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`, or `caveman`:
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
- are just one to six words.
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 three sentence patterns:
98
+ using one of the following four sentence patterns:
99
99
  - `<expression/>!`
100
100
  - `<subject/> <action/> <object/>, <reason/>.`
101
101
  - `<subject/> <action/> <object/>.`