@rse/ase 2.0.6 → 2.0.7

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 (41) hide show
  1. package/dst/ase-agent-definition-api.d.ts +2 -0
  2. package/dst/ase-agent-definition-core.js +24 -3
  3. package/dst/ase-agent-fleet.js +2 -1
  4. package/dst/ase-agent-runtime-engine.js +22 -4
  5. package/dst/ase-agent-runtime-tool.js +10 -8
  6. package/dst/ase-agent-runtime.js +8 -4
  7. package/dst/ase-man-catalog.js +1 -1
  8. package/dst/ase-task-store-plugin-gitea.js +3 -3
  9. package/dst/man/ase-agent-adhoc.md +25 -6
  10. package/dst/man/ase-agent-condenser.md +7 -0
  11. package/dst/man/ase-agent-editor.md +7 -0
  12. package/dst/man/ase-agent-estimator.md +7 -0
  13. package/dst/man/ase-agent-fleet.md +7 -4
  14. package/dst/man/ase-agent-implementer.md +7 -0
  15. package/dst/man/ase-agent-integrator.md +7 -0
  16. package/dst/man/ase-agent-qualifier.md +7 -0
  17. package/dst/man/ase-agent-rebooter.md +7 -0
  18. package/dst/man/ase-agent-researcher.md +7 -0
  19. package/package.json +5 -5
  20. package/plugin/.claude-plugin/plugin.json +1 -1
  21. package/plugin/.codex-plugin/plugin.json +1 -1
  22. package/plugin/.github/plugin/plugin.json +1 -1
  23. package/plugin/meta/ase-common-task.md +9 -1
  24. package/plugin/meta/ase-control.md +14 -0
  25. package/plugin/meta/ase-format-specbook.yaml +9 -9
  26. package/plugin/meta/ase-skill.md +7 -0
  27. package/plugin/mods/ase-mods-help-hint.ts +1 -1
  28. package/plugin/skills/ase-code-edit/SKILL.md +53 -16
  29. package/plugin/skills/ase-code-edit/help.md +26 -13
  30. package/plugin/skills/ase-code-lint/SKILL.md +7 -3
  31. package/plugin/skills/ase-help-intent/data.md +170 -28
  32. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  33. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  34. package/plugin/skills/ase-repo-changelog/SKILL.md +29 -10
  35. package/plugin/skills/ase-repo-changelog/help.md +5 -1
  36. package/plugin/skills/ase-repo-commit/SKILL.md +4 -1
  37. package/plugin/skills/ase-repo-dissect/help.md +2 -1
  38. package/plugin/skills/ase-repo-stage/SKILL.md +459 -0
  39. package/plugin/skills/ase-repo-stage/help.md +120 -0
  40. package/plugin/skills/ase-spec-edit/SKILL.md +20 -12
  41. package/plugin/skills/ase-spec-edit/help.md +22 -14
@@ -227,10 +227,18 @@ related to this MCP call except the following <template/>:
227
227
  custom dialog according to the expanded `custom-dialog`
228
228
  definition. You *MUST* closely follow this definition:
229
229
 
230
- <expand name="custom-dialog" arg1="--no-other">
230
+ <expand name="custom-dialog" arg1="--other">
231
231
  <content/>
232
232
  </expand>
233
233
 
234
+ If <result/> matches `OTHER: <text/>`, the user typed a free-text
235
+ request instead of choosing an option: treat it as an implicit
236
+ `DONE`, i.e., set <result>DONE</result>, and let the calling skill
237
+ finish along its `DONE` dispatch (output its `DONE` template).
238
+ Its *STOP* then ends only the skill, *not* the current turn:
239
+ immediately afterwards, handle <text/> as a regular user request,
240
+ outside of any skill, without re-opening this dialog.
241
+
234
242
  </define>
235
243
 
236
244
  <define name="task-next-handoff">
@@ -187,3 +187,17 @@ Control Flow Constructs
187
187
  the order of their occurrence in <parallel-body/>. This construct is
188
188
  expanded to its <parallel-body/>. Do not output anything else.
189
189
 
190
+ - *IMPORTANT*: You *MUST* honor the following rule for *all*
191
+ concurrently dispatched sub-agents -- whether invoked through
192
+ <parallel/> or through multiple `Agent` tool invocations emitted in
193
+ one single message:
194
+
195
+ The agent tool may run sub-agents in the *background* (e.g.
196
+ *Anthropic Claude Code CLI* ignores `run_in_background: false`) and
197
+ then notifies you of each returned sub-agent individually. While
198
+ these notifications arrive, you *MUST* *NOT* output anything -- no
199
+ progress messages (like `Batch 3 of 8 is back, 5 still running`),
200
+ no intermediate results, and no waiting notices -- but silently wait
201
+ for the remaining sub-agents. Only once *all* of them have returned,
202
+ continue with the processing which consumes their results.
203
+
@@ -125,7 +125,7 @@
125
125
  id: DG
126
126
  file: 03-REQS-DG-Domain-Glossary.md
127
127
  desc: >
128
- The ubiquitous language of the domain, defining the meaning of each domain term in business language, together with its synonyms, its place in the hierarchy of terms, and the terms it has to be kept apart from, shared consistently across all Artifacts.
128
+ The ubiquitous language of the domain, defining the meaning of each domain term in business language, together with its synonyms, its place in the hierarchy of terms, and the terms it has to be kept apart from, shared consistently across all artifacts.
129
129
  optional: true
130
130
  children:
131
131
  - kind: TERM
@@ -581,7 +581,7 @@
581
581
  optional: true
582
582
  - name: TRIGGER
583
583
  desc: >
584
- The event that starts the use case, stated as a 1-sentence occurrence (e.g. `The attendee opens the event URL.`), as opposed to the `PRE-CONDITION` which is a state that has to hold, and matching the `When <trigger>` of the event-driven Functional Requirements the use case exercises.
584
+ The event that starts the use case, stated as a 1-sentence occurrence (e.g. `The attendee opens the event URL.`), as opposed to the `PRE-CONDITION`, which is a state that has to hold, and matching the `When <trigger>` of the event-driven Functional Requirements the use case exercises.
585
585
  optional: true
586
586
  - name: POST-CONDITION
587
587
  desc: >
@@ -847,7 +847,7 @@
847
847
  The kind of the interface, one of:
848
848
  - `REST`: HTTP resources addressed by URL paths and HTTP methods.
849
849
  - `GraphQL`: A GraphQL schema of queries, mutations, and subscriptions.
850
- - `gRPC`: Protocol Buffers based remote procedure calls.
850
+ - `gRPC`: Protocol Buffers-based remote procedure calls.
851
851
  - `WebSocket`: Messages exchanged over a WebSocket connection.
852
852
  - `MQTT`: Messages published to and subscribed from MQTT topics.
853
853
  - `MCP`: Tools, resources, and prompts of a Model Context Protocol server.
@@ -1322,7 +1322,7 @@
1322
1322
  props:
1323
1323
  - name: MAXIMS
1324
1324
  desc: >
1325
- Comma-separated references to the MAXIM objects the principle concretizes (e.g. a `Stateless Services` principle concretizing a `Scale Out over Scale Up` maxim), so that the principles form a hierarchy below the maxims rather than a flat catalogue; omitted for a principle standing on its own forces alone.
1325
+ Comma-separated references to the MAXIM objects the principle concretizes (e.g. a `Stateless Services` principle concretizing a `Scale Out over Scale Up` maxim), so that the principles form a hierarchy below the maxims rather than a flat catalog; omitted for a principle standing on its own forces alone.
1326
1326
  value: list([[MAXIM:*]])
1327
1327
  optional: true
1328
1328
  - name: DRIVEN-BY
@@ -1362,7 +1362,7 @@
1362
1362
  optional: true
1363
1363
  - name: USES
1364
1364
  desc: >
1365
- Comma-separated references to the smaller ARCHITECTURE-PATTERNS objects the pattern is composed of (e.g. a `Saga` using a `Transactional Outbox` for its steps), so that the patterns form a language of related structures rather than a flat catalogue.
1365
+ Comma-separated references to the smaller ARCHITECTURE-PATTERNS objects the pattern is composed of (e.g. a `Saga` using a `Transactional Outbox` for its steps), so that the patterns form a language of related structures rather than a flat catalog.
1366
1366
  value: list([[PATTERN:*]])
1367
1367
  optional: true
1368
1368
  acyclic: true
@@ -1663,7 +1663,7 @@
1663
1663
  desc: >
1664
1664
  A single technology component, named with a short (2-5 word) summary (e.g. `UI Framework`, `Web Server`, `Relational Database`) and described in a concise (1-3 sentence) paragraph by how the product is used within the solution and how it fits into the overall technology stack, plus a 1-sentence rationale ("why") for choosing this product over the alternatives.
1665
1665
 
1666
- A component states one product in one role on one tier: the product used by several tiers alike belongs to the `Common` tier once, the lock-in carrying trade-off behind the choice is a Design Decisions decision referencing the component through `DECIDES`, and the functional components depending on the product reference it through `USED-BY`.
1666
+ A component states one product in one role on one tier: the product used by several tiers alike belongs to the `Common` tier once, the lock-in-carrying trade-off behind the choice is a Design Decisions decision referencing the component through `DECIDES`, and the functional components depending on the product reference it through `USED-BY`.
1667
1667
  props:
1668
1668
  - name: PRODUCT
1669
1669
  desc: >
@@ -2395,7 +2395,7 @@
2395
2395
  optional: true
2396
2396
  - name: USES
2397
2397
  desc: >
2398
- Comma-separated references to the smaller CODE-PATTERNS objects the pattern is composed of (e.g. an `Endpoint Authorization` using the `Error Propagation` for its rejections), so that the patterns form a language of related shapes rather than a flat catalogue.
2398
+ Comma-separated references to the smaller CODE-PATTERNS objects the pattern is composed of (e.g. an `Endpoint Authorization` using the `Error Propagation` for its rejections), so that the patterns form a language of related shapes rather than a flat catalog.
2399
2399
  value: list([[CODE-PATTERN:*]])
2400
2400
  optional: true
2401
2401
  acyclic: true
@@ -2449,8 +2449,8 @@
2449
2449
  The mandatory, concrete input data or action applied during the test, i.e. the stimulus whose response the `EXPECTED` judges.
2450
2450
  - name: EXPECTED
2451
2451
  desc: >
2452
- The mandatory, concrete, observable response of the solution to the `INPUT` (a message shown, a session issued, a submission rejected) that defines a passing test, as opposed to the `POST-CONDITION` which is the state left behind. When the test case verifies a NON-FUNCTIONAL-REQUIREMENTS object, the expected response restates the `METRIC` threshold of that requirement as the pass criterion (e.g. `p95 latency < 200 ms`) rather than a qualitative phrase (e.g. `remains responsive`).
2452
+ The mandatory, concrete, observable response of the solution to the `INPUT` (a message shown, a session issued, a submission rejected) that defines a passing test, as opposed to the `POST-CONDITION`, which is the state left behind. When the test case verifies a NON-FUNCTIONAL-REQUIREMENTS object, the expected response restates the `METRIC` threshold of that requirement as the pass criterion (e.g. `p95 latency < 200 ms`) rather than a qualitative phrase (e.g. `remains responsive`).
2453
2453
  - name: POST-CONDITION
2454
2454
  desc: >
2455
- The persisted state that must hold after the test completes (e.g. `the authorization token is in state used`), including the state that must not have changed (e.g. `no session token exists`), as opposed to the `EXPECTED` which is the immediate response, and omitted for a test whose input leaves no state behind.
2455
+ The persisted state that must hold after the test completes (e.g. `the authorization token is in state used`), including the state that must not have changed (e.g. `no session token exists`), as opposed to the `EXPECTED`, which is the immediate response, and omitted for a test whose input leaves no state behind.
2456
2456
  optional: true
@@ -232,6 +232,13 @@ Skill Identification
232
232
  ⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<purpose/>**, ▶ status: **skill started**
233
233
  </template>
234
234
 
235
+ You *MUST* output this <template/> *immediately* as the *very first*
236
+ output of the skill, *before* any tool call (including the
237
+ `ase_getopt` call) and *before* any work of the skill, and also when
238
+ the skill was invoked via the `Skill` tool from another skill. Any
239
+ "Do not output anything" instruction of the subsequent steps does
240
+ *NOT* suppress or defer it.
241
+
235
242
  Later (but only if ((`$1` is *NOT* equal to `-h` or `--help`) *AND*
236
243
  (<ase-guidance-level/> is equal to `normal` or `verbose`))), once
237
244
  this skill finally will stop processing, you *MUST* once output the
@@ -29,7 +29,7 @@ const GROUP = /\[(?:[^[\]]|\[[^\]]*\])*\]|\((?:[^()]|\([^)]*\))*\)|\S+/g
29
29
  const NBSP = String.fromCodePoint(0xA0)
30
30
  const SYNTAX = "gray"
31
31
  const REFER = "red"
32
- const INDENT = 4
32
+ const INDENT = 2
33
33
  const TITLE = "[ ⧉ ASE: Show Skill Synopsis ]"
34
34
 
35
35
  /* a hint band: the scroll state of its frame, the skill command as typed,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-edit
3
- argument-hint: "[--help|-h] [--mode|-m auto|craft|refactor|resolve] [--approach|-a] [--grill|-g] [--grill-rounds|-r <n>] [--grill-until|-u MUST|SHOULD|MAY] [--grill-perspective|-p <perspective>] [--grill-ground|-G] [--verify|-v] [--worktree|-w <name>[:<branch>]] [--loop|-l] [<query>|<issue-id>]"
3
+ argument-hint: "[--help|-h] [--mode|-m auto|craft|refactor|resolve] [--approach|-a] [--grill|-g] [--grill-rounds|-r <n>] [--grill-until|-u MUST|SHOULD|MAY] [--grill-perspective|-p <perspective>] [--grill-ground|-G] [--verify|-v light|none|full] [--worktree|-w <name>[:<branch>]] [--loop|-l] [<query>|<issue-id>]"
4
4
  description: >
5
5
  Edit Source Code: Use when the user wants to "edit" the code base in
6
6
  one shot from a query or a bare analyzer issue id like "P1", fusing
@@ -22,7 +22,7 @@ Edit Source Code
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-code-edit"
25
- arg2="--mode|-m=(auto|craft|refactor|resolve) --approach|-a --grill|-g --grill-rounds|-r=1 --grill-until|-u=(MUST|SHOULD|MAY) --grill-perspective|-p= --grill-ground|-G --verify|-v --worktree|-w= --loop|-l">
25
+ arg2="--mode|-m=(auto|craft|refactor|resolve) --approach|-a --grill|-g --grill-rounds|-r=1 --grill-until|-u=(MUST|SHOULD|MAY) --grill-perspective|-p= --grill-ground|-G --verify|-v=(light|none|full) --worktree|-w= --loop|-l">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -238,11 +238,18 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
238
238
  arg3="file and directory paths, identifiers, symbols, types, commands, options, configuration keys, and literal values"
239
239
  arg4="the code base"
240
240
  arg5="">
241
- <if condition="<getopt-option-verify/> is not equal `true`">
241
+ <if condition="<getopt-option-verify/> is equal `none`">
242
242
  Raise *no* questions at all of focus area `REGRESSION`
243
- or `CONFIRMATION`, as without `--verify` no verification
244
- takes place which could honor their decisions.
245
- </if></expand>
243
+ or `CONFIRMATION`, as under `--verify none` no
244
+ verification takes place which could honor their
245
+ decisions.
246
+ </if>
247
+ <elseif condition="<getopt-option-verify/> is equal `light`">
248
+ Raise *no* questions at all of focus area
249
+ `CONFIRMATION`, as under `--verify light` no
250
+ change-specific tests take place which could honor
251
+ their decisions.
252
+ </elseif></expand>
246
253
 
247
254
  If <grill-stop/> is `true`, skip the remaining items of
248
255
  this round and all remaining rounds, and continue with
@@ -388,27 +395,57 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
388
395
 
389
396
  7. **State: verifying:**
390
397
 
391
- Enter this state only if <getopt-option-verify/> is equal `true`.
392
- Otherwise you *MUST* *strictly skip* the entire state and *any*
393
- verification: do *NOT* run any build, tests, linter, or
394
- type-checker, and do *NOT* execute the modified program.
398
+ Enter this state only if <getopt-option-verify/> is equal `light` or
399
+ `full`. Otherwise (`none`) you *MUST* *strictly skip* the entire
400
+ state and *any* verification: do *NOT* run any build, tests, linter,
401
+ or type-checker, and do *NOT* execute the modified program.
395
402
 
396
403
  1. Verify whether the implementation fulfills <todo-what/> and
397
- <todo-how/> by running available verification commands
398
- (build, tests, linter, type-checker)
404
+ <todo-how/>
399
405
  <if condition="<worktree-dir/> is not empty">
400
- , each with <worktree-dir/> as its working directory
401
- </if>.
406
+ , running every command with <worktree-dir/> as its working
407
+ directory
408
+ </if>:
409
+
410
+ - Under `light` and `full`: run the available lint and build
411
+ commands (including the type-checker) and the already
412
+ existing regression test suite, if any.
413
+
414
+ - Under `full` only: additionally perform *individual*,
415
+ *change-specific* manual tests, which exercise the changed
416
+ behavior through ad-hoc scratch tests and program runs.
417
+ Clean up all scratch test files afterwards, so they never
418
+ become part of the change set.
402
419
 
403
420
  If the verification fails, you *MUST* *adjust* the failing parts
404
- of the change set and *RE-VERIFY* until the verification passes!
421
+ of the change set and *RE-VERIFY* -- for at most *ten* rounds
422
+ in total.
423
+
424
+ 2. <if condition="the verification still fails after the last round">
425
+
426
+ Only output the following <template/>, listing one bullet line
427
+ per remaining failure:
428
+
429
+ <template>
430
+ ⧉ **ASE**: ✪ skill: **ase-code-edit**, ▶ status: **verification failed**
405
431
 
406
- 2. Only output the following <template/>:
432
+ <ase-tpl-bullet-signal/> **REMAINING FAILURES**:
433
+
434
+ - <failure/>
435
+ [...]
436
+ </template>
437
+
438
+ </if>
439
+ <else>
440
+
441
+ Only output the following <template/>:
407
442
 
408
443
  <template>
409
444
  ⧉ **ASE**: ✪ skill: **ase-code-edit**, ▶ status: **verification passed**
410
445
  </template>
411
446
 
447
+ </else>
448
+
412
449
  8. **Loop or Finish:**
413
450
 
414
451
  <if condition="<getopt-option-loop/> is equal `true`">
@@ -14,7 +14,7 @@
14
14
  [`--grill-until`|`-u` `MUST`|`SHOULD`|`MAY`]
15
15
  [`--grill-perspective`|`-p` *perspective*]
16
16
  [`--grill-ground`|`-G`]
17
- [`--verify`|`-v`]
17
+ [`--verify`|`-v` `light`|`none`|`full`]
18
18
  [`--worktree`|`-w` *name*[`:`*branch*]]
19
19
  [`--loop`|`-l`]
20
20
  [*query*]
@@ -34,7 +34,8 @@ parts), *discovering* (read the source artifacts related to the query),
34
34
  *grilling* (optionally stress-test the query with rounds of questions),
35
35
  *implementing* (optionally select an approach, then apply the change
36
36
  set in place, honoring the tenet set selected via `--mode`), and
37
- *verifying* (optionally verify the implementation until it passes). The
37
+ *verifying* (verify the implementation until it passes, unless
38
+ disabled via `--verify none`). The
38
39
  *querying* state, every *grilling* round, and the approach selection
39
40
  close with an `EDIT TODO` box showing the established `WHAT` and `HOW`
40
41
  information.
@@ -69,8 +70,9 @@ information.
69
70
  of a round are sorted by descending focus area importance
70
71
  (`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`,
71
72
  `REGRESSION`, `CONFIRMATION`). Questions of focus area
72
- `REGRESSION` and `CONFIRMATION` are raised only together with
73
- `--verify`, as only then a verification honors their decisions.
73
+ `REGRESSION` are raised only under `--verify light` or `full`, and
74
+ those of focus area `CONFIRMATION` only under `--verify full`, as
75
+ only then a verification honors their decisions.
74
76
  All questions of a round are announced together below a
75
77
  `GRILLING ROUND K/L` line (the round numbering is omitted when only
76
78
  a single round is performed) as a `QUESTION`/`ANSWERS` table with
@@ -130,12 +132,17 @@ information.
130
132
  no usable facts are found, a warning is shown and the grilling falls
131
133
  back to model knowledge. Only effective together with `--grill`.
132
134
 
133
- - `--verify`|`-v`:
134
- Verify whether the implementation fulfills the requirements, by
135
- running the available verification commands (build, tests, linter,
136
- type-checker) and adjusting the failing parts of the change set
137
- until the verification passes. Without `--verify`, strictly no
138
- verification is performed at all.
135
+ - `--verify`|`-v` `light`|`none`|`full`:
136
+ Verify whether the implementation fulfills the requirements, and
137
+ adjust the failing parts of the change set until the verification
138
+ passes, for at most ten rounds, listing any failures remaining after
139
+ the last round as `REMAINING FAILURES`. The default `light` runs the
140
+ available lint and build commands (including the type-checker) and
141
+ the already existing regression test suite, if any. The level `full`
142
+ additionally performs individual, change-specific manual tests
143
+ through ad-hoc scratch tests and program runs, which are cleaned up
144
+ afterwards. The level `none` strictly performs no verification at
145
+ all.
139
146
 
140
147
  - `--worktree`|`-w` *name*[`:`*branch*]:
141
148
  Apply the change sets inside the dedicated Git worktree
@@ -176,16 +183,22 @@ information.
176
183
 
177
184
  ## EXAMPLES
178
185
 
179
- Edit in one shot, without any questions or verification:
186
+ Edit in one shot, without any questions, but with light verification:
180
187
 
181
188
  ```text
182
189
  ❯ /ase-code-edit add a --verbose option to the CLI
183
190
  ```
184
191
 
185
- Grill the query with two rounds first, then implement and verify:
192
+ Edit in one shot, without any questions or verification:
193
+
194
+ ```text
195
+ ❯ /ase-code-edit -v none add a --verbose option to the CLI
196
+ ```
197
+
198
+ Grill the query with two rounds first, then implement and fully verify:
186
199
 
187
200
  ```text
188
- ❯ /ase-code-edit -g -r 2 -v refactor the config loading into layers
201
+ ❯ /ase-code-edit -g -r 2 -v full refactor the config loading into layers
189
202
  ```
190
203
 
191
204
  Let the user pick one of several resolution approaches first, then
@@ -10,6 +10,7 @@ effort: high
10
10
  allowed-tools:
11
11
  - "Bash(git rev-parse *)"
12
12
  - "Bash(git -C *)"
13
+ - "Bash(find *)"
13
14
  ---
14
15
 
15
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -123,8 +124,9 @@ related to a set of code quality aspects.
123
124
  `<repo-root/>/`. If `<getopt-arguments/>` is not empty, keep only
124
125
  those files which lie within the source code referenced by it,
125
126
  expanding any directory or wildcard references with the `Glob`
126
- tool. Set <sources/> to the resulting list of individual source
127
- code files, preserving order.
127
+ tool (or, if the `Glob` tool is not available, with the `find`
128
+ command via the `Bash` tool). Set <sources/> to the resulting list
129
+ of individual source code files, preserving order.
128
130
 
129
131
  If <sources/> is empty, only output the following <template/>
130
132
  and then *SKIP* the rest of this STEP 1 and the remaining steps
@@ -139,7 +141,9 @@ related to a set of code quality aspects.
139
141
 
140
142
  For this, first *silently* resolve `<getopt-arguments/>` to the
141
143
  list <sources/> of individual source code files, expanding any
142
- directory or wildcard references with the `Glob` tool.
144
+ directory or wildcard references with the `Glob` tool (or, if the
145
+ `Glob` tool is not available, with the `find` command via the
146
+ `Bash` tool).
143
147
 
144
148
  If <sources/> is empty (no *source-reference* given or none of it
145
149
  resolvable), only output the following <template/> and then *STOP*