@rse/ase 2.0.2 → 2.0.4

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 (236) hide show
  1. package/dst/ase-agent-definition-core.js +111 -87
  2. package/dst/ase-agent-fleet.js +1 -1
  3. package/dst/ase-agent-runtime-claim.js +5 -3
  4. package/dst/ase-agent-runtime-engine.js +1 -1
  5. package/dst/ase-agent-runtime-phase.js +1 -1
  6. package/dst/ase-agent-runtime-request.js +1 -1
  7. package/dst/ase-agent-runtime.js +3 -5
  8. package/dst/ase-artifact.js +3 -3
  9. package/dst/ase-config-core.js +2 -16
  10. package/dst/ase-config-schema.js +1 -3
  11. package/dst/ase-config.js +2 -0
  12. package/dst/ase-hook.js +13 -13
  13. package/dst/ase-lib-daemon-cli.js +117 -4
  14. package/dst/ase-lib-server-cli.js +4 -5
  15. package/dst/ase-lib-version.js +14 -5
  16. package/dst/ase-man-catalog.js +229 -0
  17. package/dst/ase-man-render.js +278 -0
  18. package/dst/ase-man-tui.js +636 -0
  19. package/dst/ase-man.js +33 -27
  20. package/dst/ase-mcp.js +4 -4
  21. package/dst/ase-service-getopt.js +2 -2
  22. package/dst/ase-service-otel.js +4 -4
  23. package/dst/ase-service-skills.js +5 -15
  24. package/dst/ase-service.js +87 -210
  25. package/dst/ase-setup-common.js +1 -2
  26. package/dst/ase-setup-settings.js +6 -9
  27. package/dst/ase-setup.js +4 -5
  28. package/dst/ase-spec.js +103 -20
  29. package/dst/ase-statusline.js +170 -170
  30. package/dst/ase-task-board-filter.js +5 -4
  31. package/dst/ase-task-board-flow.js +7 -6
  32. package/dst/ase-task-board-graph.js +5 -4
  33. package/dst/ase-task-board-tui-control.js +41 -35
  34. package/dst/ase-task-board-tui-model.js +185 -167
  35. package/dst/ase-task-board-tui-popup.js +2 -3
  36. package/dst/ase-task-board-tui-view.js +74 -70
  37. package/dst/ase-task-board-web-client.js +27 -27
  38. package/dst/ase-task-board-web-server.js +2 -2
  39. package/dst/ase-task-board.js +1 -1
  40. package/dst/ase-task-format.js +1 -1
  41. package/dst/ase-task-store-client.js +17 -5
  42. package/dst/ase-task-store-core.js +5 -7
  43. package/dst/ase-task-store-issues.js +16 -1
  44. package/dst/ase-task-store-plugin-ase.js +7 -3
  45. package/dst/ase-task-store-plugin-gitea.js +9 -32
  46. package/dst/ase-task-store-plugin-github.js +3 -12
  47. package/dst/ase-task-store-plugin-gitlab.js +2 -18
  48. package/dst/ase-task.js +51 -23
  49. package/dst/ase-util-compat.js +1 -1
  50. package/dst/ase-util-diagram.js +13 -37
  51. package/dst/ase.js +5 -5
  52. package/dst/man/ase-agent-adhoc.md +1165 -0
  53. package/dst/man/ase-agent-condenser.md +383 -0
  54. package/dst/man/ase-agent-editor.md +441 -0
  55. package/dst/man/ase-agent-estimator.md +477 -0
  56. package/dst/man/ase-agent-fleet.md +358 -0
  57. package/dst/man/ase-agent-implementer.md +521 -0
  58. package/dst/man/ase-agent-integrator.md +449 -0
  59. package/dst/man/ase-agent-qualifier.md +426 -0
  60. package/dst/man/ase-agent-rebooter.md +384 -0
  61. package/dst/man/ase-agent-relay.md +262 -0
  62. package/dst/man/ase-agent-researcher.md +478 -0
  63. package/dst/man/ase-agent.md +628 -0
  64. package/dst/man/ase-artifact-list.md +57 -0
  65. package/dst/man/ase-artifact-name.md +56 -0
  66. package/dst/man/ase-artifact.md +92 -0
  67. package/dst/man/ase-config-delete.md +74 -0
  68. package/dst/man/ase-config-edit.md +83 -0
  69. package/dst/man/ase-config-get.md +70 -0
  70. package/dst/man/ase-config-init.md +110 -0
  71. package/dst/man/ase-config-list.md +68 -0
  72. package/dst/man/ase-config-set.md +92 -0
  73. package/dst/man/ase-config.md +426 -0
  74. package/dst/man/ase-hook-permission-request.md +61 -0
  75. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  76. package/dst/man/ase-hook-session-end.md +71 -0
  77. package/dst/man/ase-hook-session-persona.md +65 -0
  78. package/dst/man/ase-hook-session-start.md +184 -0
  79. package/dst/man/ase-hook-stop.md +52 -0
  80. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  81. package/dst/man/ase-hook.md +93 -0
  82. package/dst/man/ase-man.md +195 -0
  83. package/dst/man/ase-mcp.md +102 -0
  84. package/dst/man/ase-service-log.md +59 -0
  85. package/dst/man/ase-service-send.md +60 -0
  86. package/dst/man/ase-service-start.md +93 -0
  87. package/dst/man/ase-service-status.md +58 -0
  88. package/dst/man/ase-service-stop.md +52 -0
  89. package/dst/man/ase-service.md +124 -0
  90. package/dst/man/ase-setup-disable.md +67 -0
  91. package/dst/man/ase-setup-enable.md +66 -0
  92. package/dst/man/ase-setup-install.md +116 -0
  93. package/dst/man/ase-setup-mcp.md +213 -0
  94. package/dst/man/ase-setup-status.md +101 -0
  95. package/dst/man/ase-setup-statusline.md +162 -0
  96. package/dst/man/ase-setup-telemetry.md +166 -0
  97. package/dst/man/ase-setup-uninstall.md +85 -0
  98. package/dst/man/ase-setup-update.md +117 -0
  99. package/dst/man/ase-setup.md +156 -0
  100. package/dst/man/ase-spec-export.md +99 -0
  101. package/dst/man/ase-spec-init.md +57 -0
  102. package/dst/man/ase-spec-lint.md +74 -0
  103. package/dst/man/ase-spec-preview.md +57 -0
  104. package/dst/man/ase-spec.md +85 -0
  105. package/dst/man/ase-statusline.md +330 -0
  106. package/dst/man/ase-task-assign.md +138 -0
  107. package/dst/man/ase-task-board.md +651 -0
  108. package/dst/man/ase-task-delete.md +46 -0
  109. package/dst/man/ase-task-edit.md +73 -0
  110. package/dst/man/ase-task-idscheme.md +92 -0
  111. package/dst/man/ase-task-lifecycle.md +92 -0
  112. package/dst/man/ase-task-list.md +86 -0
  113. package/dst/man/ase-task-load.md +48 -0
  114. package/dst/man/ase-task-newid.md +100 -0
  115. package/dst/man/ase-task-purge.md +49 -0
  116. package/dst/man/ase-task-rename.md +69 -0
  117. package/dst/man/ase-task-request.md +108 -0
  118. package/dst/man/ase-task-save.md +78 -0
  119. package/dst/man/ase-task-status.md +79 -0
  120. package/dst/man/ase-task-store.md +377 -0
  121. package/dst/man/ase-task-view.md +50 -0
  122. package/dst/man/ase-task.md +335 -0
  123. package/dst/man/ase-util-compat.md +38 -0
  124. package/dst/man/ase-util-diagram.md +140 -0
  125. package/dst/man/ase-util-meta.md +68 -0
  126. package/dst/man/ase-util-metric.md +74 -0
  127. package/dst/man/ase-util-mint.md +85 -0
  128. package/dst/man/ase-util-worktree.md +109 -0
  129. package/dst/man/ase-util.md +81 -0
  130. package/dst/man/ase.md +228 -0
  131. package/package.json +12 -17
  132. package/plugin/.claude-plugin/plugin.json +1 -1
  133. package/plugin/.codex-plugin/plugin.json +1 -1
  134. package/plugin/.github/plugin/plugin.json +1 -1
  135. package/plugin/agents/ase-code-lint.md +3 -3
  136. package/plugin/agents/ase-docs-proofread.md +3 -3
  137. package/plugin/agents/ase-docs-refine.md +3 -3
  138. package/plugin/agents/ase-spec-lint.md +338 -0
  139. package/plugin/meta/ase-skill.md +7 -0
  140. package/plugin/mods/ase-mods.ts +10 -7
  141. package/plugin/mods/claude-code.d.ts +26 -3
  142. package/plugin/skills/ase-code-analyze/SKILL.md +18 -10
  143. package/plugin/skills/ase-code-analyze/help.md +11 -6
  144. package/plugin/skills/ase-code-lint/SKILL.md +37 -23
  145. package/plugin/skills/ase-code-lint/help.md +10 -5
  146. package/plugin/skills/ase-help-intent/data.md +204 -13
  147. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  148. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  149. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  150. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  151. package/plugin/skills/ase-repo-review/SKILL.md +5 -3
  152. package/plugin/skills/ase-repo-review/help.md +3 -1
  153. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  154. package/plugin/skills/ase-spec-edit/help.md +1 -1
  155. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  156. package/plugin/skills/ase-spec-lint/help.md +171 -0
  157. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  158. package/plugin/skills/ase-task-implement/help.md +11 -1
  159. package/dst/man/ase-agent-adhoc.1 +0 -515
  160. package/dst/man/ase-agent-condenser.1 +0 -193
  161. package/dst/man/ase-agent-editor.1 +0 -212
  162. package/dst/man/ase-agent-estimator.1 +0 -214
  163. package/dst/man/ase-agent-fleet.1 +0 -185
  164. package/dst/man/ase-agent-implementer.1 +0 -233
  165. package/dst/man/ase-agent-integrator.1 +0 -213
  166. package/dst/man/ase-agent-qualifier.1 +0 -214
  167. package/dst/man/ase-agent-rebooter.1 +0 -193
  168. package/dst/man/ase-agent-relay.1 +0 -128
  169. package/dst/man/ase-agent-researcher.1 +0 -217
  170. package/dst/man/ase-agent.1 +0 -264
  171. package/dst/man/ase-artifact-list.1 +0 -38
  172. package/dst/man/ase-artifact-name.1 +0 -39
  173. package/dst/man/ase-artifact.1 +0 -56
  174. package/dst/man/ase-config-delete.1 +0 -45
  175. package/dst/man/ase-config-edit.1 +0 -48
  176. package/dst/man/ase-config-get.1 +0 -46
  177. package/dst/man/ase-config-init.1 +0 -60
  178. package/dst/man/ase-config-list.1 +0 -42
  179. package/dst/man/ase-config-set.1 +0 -52
  180. package/dst/man/ase-config.1 +0 -231
  181. package/dst/man/ase-hook-permission-request.1 +0 -36
  182. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  183. package/dst/man/ase-hook-session-end.1 +0 -47
  184. package/dst/man/ase-hook-session-persona.1 +0 -37
  185. package/dst/man/ase-hook-session-start.1 +0 -81
  186. package/dst/man/ase-hook-stop.1 +0 -34
  187. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  188. package/dst/man/ase-hook.1 +0 -51
  189. package/dst/man/ase-man.1 +0 -67
  190. package/dst/man/ase-mcp.1 +0 -61
  191. package/dst/man/ase-service-log.1 +0 -43
  192. package/dst/man/ase-service-send.1 +0 -47
  193. package/dst/man/ase-service-start.1 +0 -54
  194. package/dst/man/ase-service-status.1 +0 -46
  195. package/dst/man/ase-service-stop.1 +0 -37
  196. package/dst/man/ase-service.1 +0 -85
  197. package/dst/man/ase-setup-disable.1 +0 -44
  198. package/dst/man/ase-setup-enable.1 +0 -45
  199. package/dst/man/ase-setup-install.1 +0 -73
  200. package/dst/man/ase-setup-mcp.1 +0 -124
  201. package/dst/man/ase-setup-status.1 +0 -60
  202. package/dst/man/ase-setup-statusline.1 +0 -92
  203. package/dst/man/ase-setup-telemetry.1 +0 -92
  204. package/dst/man/ase-setup-uninstall.1 +0 -59
  205. package/dst/man/ase-setup-update.1 +0 -64
  206. package/dst/man/ase-setup.1 +0 -93
  207. package/dst/man/ase-spec-export.1 +0 -62
  208. package/dst/man/ase-spec-lint.1 +0 -40
  209. package/dst/man/ase-spec-preview.1 +0 -40
  210. package/dst/man/ase-spec.1 +0 -46
  211. package/dst/man/ase-statusline.1 +0 -189
  212. package/dst/man/ase-task-assign.1 +0 -71
  213. package/dst/man/ase-task-board.1 +0 -384
  214. package/dst/man/ase-task-delete.1 +0 -35
  215. package/dst/man/ase-task-edit.1 +0 -46
  216. package/dst/man/ase-task-idscheme.1 +0 -65
  217. package/dst/man/ase-task-lifecycle.1 +0 -57
  218. package/dst/man/ase-task-list.1 +0 -47
  219. package/dst/man/ase-task-load.1 +0 -36
  220. package/dst/man/ase-task-newid.1 +0 -61
  221. package/dst/man/ase-task-purge.1 +0 -37
  222. package/dst/man/ase-task-rename.1 +0 -44
  223. package/dst/man/ase-task-request.1 +0 -61
  224. package/dst/man/ase-task-save.1 +0 -48
  225. package/dst/man/ase-task-status.1 +0 -55
  226. package/dst/man/ase-task-store.1 +0 -194
  227. package/dst/man/ase-task-view.1 +0 -40
  228. package/dst/man/ase-task.1 +0 -160
  229. package/dst/man/ase-util-compat.1 +0 -25
  230. package/dst/man/ase-util-diagram.1 +0 -76
  231. package/dst/man/ase-util-meta.1 +0 -45
  232. package/dst/man/ase-util-metric.1 +0 -54
  233. package/dst/man/ase-util-mint.1 +0 -59
  234. package/dst/man/ase-util-worktree.1 +0 -72
  235. package/dst/man/ase-util.1 +0 -50
  236. package/dst/man/ase.1 +0 -124
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-lint
3
- argument-hint: "[--help|-h] [--auto|-a] [--severity|-S=(LOW|MEDIUM|HIGH)] [--include|-i=<aspect>[,...]] [--exclude|-e=<aspect>[,...]] [--staged] [--unstaged] [<source-reference>]"
3
+ argument-hint: "[--help|-h] [--auto|-a] [--severity|-S=(AUTO|LOW|MEDIUM|HIGH)] [--include|-i=<aspect>[,...]] [--exclude|-e=<aspect>[,...]] [--staged] [--unstaged] [<source-reference>]"
4
4
  description: >
5
5
  Lint source code for potential code quality problems.
6
6
  Use when the user wants to "lint" or "check" source code.
@@ -23,7 +23,7 @@ Lint Source Code
23
23
 
24
24
  <expand name="getopt"
25
25
  arg1="ase-code-lint"
26
- arg2="--auto|-a --severity|-S=(LOW|MEDIUM|HIGH) --include|-i=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)... --exclude|-e=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)... --staged --unstaged">
26
+ arg2="--auto|-a --severity|-S=(AUTO|LOW|MEDIUM|HIGH) --include|-i=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)... --exclude|-e=(none|A01|A02|A03|A04|A05|A06|A07|A08|A09|A10|A11|A12|A13|A14|A15|A16|A17|A18|A19|A20|A21)... --staged --unstaged">
27
27
  $ARGUMENTS
28
28
  </expand>
29
29
 
@@ -36,10 +36,11 @@ related to a set of code quality aspects.
36
36
 
37
37
  1. <step id="STEP 1: Investigation">
38
38
 
39
- <if condition="<ase-project-boxing/> is equal `black`">
39
+ <if condition="<ase-project-boxing/> is equal `black` and <getopt-option-severity/> is equal `AUTO`">
40
40
 
41
41
  The project source artifacts are classified as a *black box*, so
42
- the user does *not* want them inspected or their problems surfaced.
42
+ the user does *not* want them inspected or their problems surfaced
43
+ (an *explicitly* given severity floor lifts this skip).
43
44
  *Skip* the entire investigation and reporting: do *not* invoke any
44
45
  `Bash`, `Glob`, or `Agent` tool and do *not* read any source, only
45
46
  output the following <template/> and then *SKIP* the remaining steps
@@ -51,6 +52,11 @@ related to a set of code quality aspects.
51
52
 
52
53
  </if>
53
54
 
55
+ Set <condensed>true</condensed> if <ase-project-boxing/> is equal
56
+ `grey` or `black` (the latter reached only under an explicitly given
57
+ severity floor), and <condensed>false</condensed> otherwise: a
58
+ *condensed* report suppresses the full unified diffs of STEP 3.
59
+
54
60
  First, determine the *effective aspect set* <aspects/>, i.e., the
55
61
  code quality aspects which are checked at all. For this, parse
56
62
  <getopt-option-include/> and <getopt-option-exclude/> as
@@ -179,16 +185,23 @@ related to a set of code quality aspects.
179
185
  `line`, and set <problems/> to that list.
180
186
 
181
187
  Then determine the *effective severity floor* <floor/>: define the
182
- ordinal rank `LOW`=1, `MEDIUM`=2, `HIGH`=3, start from
183
- <floor><getopt-option-severity/></floor> (default `LOW`), and - if
184
- <ase-project-boxing/> is equal `grey` - raise <floor/> to `MEDIUM`
185
- whenever its current rank is below `rank(MEDIUM)` (grey boxing
186
- surfaces only *material* findings of severity `MEDIUM` and above).
188
+ ordinal rank `LOW`=1, `MEDIUM`=2, `HIGH`=3.
189
+
190
+ <if condition="<getopt-option-severity/> is equal `AUTO`">
191
+ Set <floor>MEDIUM</floor> if <ase-project-boxing/> is equal `grey`
192
+ (grey boxing surfaces only *material* findings of severity `MEDIUM`
193
+ and above), and <floor>LOW</floor> otherwise.
194
+ </if>
195
+ <else>
196
+ Set <floor><getopt-option-severity/></floor>: an *explicitly* given
197
+ severity floor always *wins* over the boxing, both over the `grey`
198
+ floor and over the `black` skip.
199
+ </else>
187
200
 
188
201
  Then *apply the effective severity floor* <floor/>: *Keep* a problem
189
202
  in <problems/> if and only if its `severity` field is `ACCEPTED` *or*
190
203
  `rank(severity)` is greater than or equal to `rank(<floor/>)`;
191
- *silently drop* all other problems. With the default floor `LOW`, all
204
+ *silently drop* all other problems. With the floor `LOW`, all
192
205
  problems are kept. `ACCEPTED` problems are *never* dropped.
193
206
 
194
207
  Finally, sort the surviving problems in <problems/> by their
@@ -270,7 +283,7 @@ related to a set of code quality aspects.
270
283
  1. Set <file/> to the `file` field of <item/>.
271
284
  Set <change-hunks/> to the `change-hunks` field of <item/>.
272
285
 
273
- Unless <ase-project-boxing/> is equal `grey` (where the
286
+ Unless <condensed/> is equal `true` (where the
274
287
  full unified diff is suppressed and no context lines are
275
288
  rendered at all), *silently* read the current content of
276
289
  <file/> with the `Read` tool - reusing the content read
@@ -284,7 +297,7 @@ related to a set of code quality aspects.
284
297
  context lines of substep 2 below, so the rendered diff
285
298
  shows real context even when a sub-agent supplied none.
286
299
 
287
- Unless <ase-project-boxing/> is equal `grey` (where the
300
+ Unless <condensed/> is equal `true` (where the
288
301
  full unified diff is suppressed and this per-file header is
289
302
  unused), set <diff-file/> to the following <template/>:
290
303
 
@@ -328,8 +341,8 @@ related to a set of code quality aspects.
328
341
  Keep the sub-agent supplied values only when
329
342
  <file-lines/> is empty.
330
343
 
331
- 2. *Skip* this substep entirely when <ase-project-boxing/>
332
- is equal `grey` - the full unified diff is suppressed
344
+ 2. *Skip* this substep entirely when <condensed/>
345
+ is equal `true` - the full unified diff is suppressed
333
346
  there, so none of the <hunk-body/>, <old-count/>,
334
347
  <new-count/>, <old-start/>, or <new-start/> values
335
348
  below are consumed (substep 4 builds only the condensed
@@ -384,10 +397,10 @@ related to a set of code quality aspects.
384
397
 
385
398
  <template>`<file/>`:<line/></template>
386
399
 
387
- 4. <if condition="<ase-project-boxing/> is equal `grey`">
400
+ 4. <if condition="<condensed/> is equal `true`">
388
401
 
389
- The full unified diff is *suppressed* under grey boxing
390
- (see substep 5 below), so *skip* the full-diff append
402
+ The full unified diff is *suppressed* in a condensed
403
+ report (see substep 5 below), so *skip* the full-diff append
391
404
  and instead build only a *condensed* one-line
392
405
  representation of this hunk: determine <old-snippet/>
393
406
  as the *single-line* collapse of <old-text/> (join its
@@ -417,7 +430,7 @@ related to a set of code quality aspects.
417
430
 
418
431
  </for>
419
432
 
420
- 3. Unless <ase-project-boxing/> is equal `grey` (where
433
+ 3. Unless <condensed/> is equal `true` (where
421
434
  <diff-file/> is unused), append <diff-file/> to <diff/>.
422
435
 
423
436
  </for>
@@ -433,10 +446,11 @@ related to a set of code quality aspects.
433
446
 
434
447
  5. <if condition="<getopt-option-auto/> is not equal `true`">
435
448
 
436
- <if condition="<ase-project-boxing/> is equal `grey`">
449
+ <if condition="<condensed/> is equal `true`">
437
450
 
438
- The project source artifacts are classified as a *grey box*, so
439
- the user does *not* want the full artifact internals surfaced:
451
+ The project source artifacts are classified as a *grey box* (or
452
+ *black box*), so the user does *not* want the full artifact
453
+ internals surfaced:
440
454
  *suppress* the full unified diff and instead show only the
441
455
  *condensed* one-line-per-hunk representation. Report the
442
456
  solution with the following <template/>:
@@ -505,8 +519,8 @@ related to a set of code quality aspects.
505
519
  - <if condition="<result/> is 'ACCEPT'">
506
520
  Invoke the `Edit` tool to apply the changes exactly
507
521
  as given by the hunks of the current <change-set/>
508
- (rendered as <diff/>, unless suppressed under grey
509
- boxing). The operation will be auto-approved by the ASE
522
+ (rendered as <diff/>, unless suppressed in a condensed
523
+ report). The operation will be auto-approved by the ASE
510
524
  `pre-tool-use` hook (which tracks the active skill),
511
525
  so *no* interactive permission prompt will appear.
512
526
  After applying the changes, just continue with the next
@@ -8,7 +8,7 @@
8
8
  `ase-code-lint`
9
9
  [`--help`|`-h`]
10
10
  [`--auto`|`-a`]
11
- [`--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`)]
11
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
12
12
  [`--include`|`-i`=*aspect*[`,`...]]
13
13
  [`--exclude`|`-e`=*aspect*[`,`...]]
14
14
  [`--staged`]
@@ -60,11 +60,16 @@ the code, and comments contradicting the code.
60
60
  Automatically apply every proposed correction without asking the
61
61
  user via the interactive dialog.
62
62
 
63
- - `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`):
64
- Set the *severity floor* (default `LOW`): findings below the chosen
63
+ - `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`):
64
+ Set the *severity floor* (default `AUTO`): findings below the chosen
65
65
  threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
66
- `HIGH`. The default `LOW` keeps all findings; `ACCEPTED` findings are
67
- never suppressed. Surviving findings are reported in *descending
66
+ `HIGH`. The default `AUTO` means `MEDIUM` for a project with `grey`
67
+ boxing, no linting at all for a project with `black` boxing, and
68
+ `LOW` (keep all findings) otherwise; an explicitly given floor always
69
+ wins over the boxing, i.e. it also lints a project with `black`
70
+ boxing and, e.g. with `LOW`, acts on all findings of a project with
71
+ `grey` boxing. `ACCEPTED` findings are never suppressed. Surviving
72
+ findings are reported in *descending
68
73
  severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the
69
74
  `file`/`line` order within the same severity.
70
75
 
@@ -175,7 +175,7 @@ Discover HTTP clients, flagging any without a release in the last 12 months:
175
175
  [`--help`|`-h`]
176
176
  [`--performance`|`-p`]
177
177
  [`--security`|`-s`]
178
- [`--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`)]
178
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
179
179
  [`--prefix`|`-P` *prefix*]
180
180
  [`--staged`]
181
181
  [`--unstaged`]
@@ -198,11 +198,16 @@ The *analysis lens* depends on the selected options:
198
198
 
199
199
  The `--performance` and `--security` options are *mutually exclusive*.
200
200
 
201
- The `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`) option sets a *severity
202
- floor* (default `LOW`): problems below the chosen threshold are silently
203
- suppressed (neither reported nor persisted), ordered `LOW` < `MEDIUM` <
204
- `HIGH`. The default `LOW` keeps all problems; `ACCEPTED` problems are
205
- never suppressed. Surviving problems are reported in *descending
201
+ The `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`) option sets a
202
+ *severity floor* (default `AUTO`): problems below the chosen threshold
203
+ are silently suppressed (neither reported nor persisted), ordered `LOW`
204
+ < `MEDIUM` < `HIGH`. The default `AUTO` means `MEDIUM` for a project
205
+ with `grey` boxing, no analysis at all for a project with `black`
206
+ boxing, and `LOW` (keep all problems) otherwise; an explicitly given
207
+ floor always wins over the boxing, i.e. it also analyzes a project with
208
+ `black` boxing and, e.g. with `LOW`, reports all problems of a project
209
+ with `grey` boxing. `ACCEPTED` problems are never suppressed. Surviving
210
+ problems are reported in *descending
206
211
  severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED` - keeping the
207
212
  `file`/`line` order within the same severity - and are renumbered
208
213
  contiguously as `P<n>`, so `P1` is the most severe problem.
@@ -627,7 +632,7 @@ Get insights into a specific subsystem:
627
632
  `ase-code-lint`
628
633
  [`--help`|`-h`]
629
634
  [`--auto`|`-a`]
630
- [`--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`)]
635
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
631
636
  [`--include`|`-i`=*aspect*[`,`...]]
632
637
  [`--exclude`|`-e`=*aspect*[`,`...]]
633
638
  [`--staged`]
@@ -679,11 +684,16 @@ the code, and comments contradicting the code.
679
684
  Automatically apply every proposed correction without asking the
680
685
  user via the interactive dialog.
681
686
 
682
- - `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`):
683
- Set the *severity floor* (default `LOW`): findings below the chosen
687
+ - `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`):
688
+ Set the *severity floor* (default `AUTO`): findings below the chosen
684
689
  threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
685
- `HIGH`. The default `LOW` keeps all findings; `ACCEPTED` findings are
686
- never suppressed. Surviving findings are reported in *descending
690
+ `HIGH`. The default `AUTO` means `MEDIUM` for a project with `grey`
691
+ boxing, no linting at all for a project with `black` boxing, and
692
+ `LOW` (keep all findings) otherwise; an explicitly given floor always
693
+ wins over the boxing, i.e. it also lints a project with `black`
694
+ boxing and, e.g. with `LOW`, acts on all findings of a project with
695
+ `grey` boxing. `ACCEPTED` findings are never suppressed. Surviving
696
+ findings are reported in *descending
687
697
  severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the
688
698
  `file`/`line` order within the same severity.
689
699
 
@@ -3170,7 +3180,9 @@ before it is committed or merged.
3170
3180
  threshold are suppressed, ordered `LOW` < `MEDIUM` < `HIGH`. The
3171
3181
  default `AUTO` means `MEDIUM` for a project with `grey` boxing and
3172
3182
  `LOW` (keep all findings) otherwise; an explicitly given floor always
3173
- wins over the boxing. `ACCEPTED` findings are never suppressed, and
3183
+ wins over the boxing, i.e. it also reviews a project with `black`
3184
+ boxing and, e.g. with `LOW`, shows all findings of a project with
3185
+ `grey` boxing. `ACCEPTED` findings are never suppressed, and
3174
3186
  the number of suppressed findings is always reported. Surviving
3175
3187
  findings are rendered in *descending severity* order `HIGH`,
3176
3188
  `MEDIUM`, `LOW`, `ACCEPTED`. The floor only affects the rendered
@@ -3562,6 +3574,175 @@ Loop over multiple specification edits inside a dedicated Git worktree:
3562
3574
  ❯ /ase-spec-edit -l -w event-series
3563
3575
  ```
3564
3576
 
3577
+ </purpose>
3578
+ <purpose name="ase-spec-lint">
3579
+
3580
+ ## NAME
3581
+
3582
+ `ase-spec-lint` - Lint Specification
3583
+
3584
+ ## SYNOPSIS
3585
+
3586
+ `ase-spec-lint`
3587
+ [`--help`|`-h`]
3588
+ [`--auto`|`-a`]
3589
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
3590
+ [`--include`|`-i`=*aspect*[`,`...]]
3591
+ [`--exclude`|`-e`=*aspect*[`,`...]]
3592
+ [`--staged`]
3593
+ [`--unstaged`]
3594
+ [*spec-reference*]
3595
+
3596
+ ## DESCRIPTION
3597
+
3598
+ The `ase-spec-lint` skill lints the *SpecBook*-based specification
3599
+ (SPEC) for *potential quality problems* related to a fixed set of
3600
+ specification quality aspects: from its syntax and formatting, over
3601
+ its individual statements, up to the logical gaps of its model and its
3602
+ completeness for an implementation. The investigation is dispatched to
3603
+ sub-agents (`ase:ase-spec-lint`) so that scanning details do not leak
3604
+ into the user-visible transcript.
3605
+
3606
+ For each detected problem, the skill renders a unified-diff *SOLUTION*
3607
+ preview and either asks the user to `ACCEPT` or `REJECT` the proposed
3608
+ correction interactively (or refine it via a free-text hint, which
3609
+ re-proposes the correction without limit) or - with `--auto` - applies
3610
+ all corrections automatically. Every applied correction refreshes the
3611
+ `Modified:` timestamp of the changed specification files.
3612
+
3613
+ By default all ten specification quality aspects are checked. The
3614
+ `--include` and `--exclude` options narrow this to an *effective aspect
3615
+ set*: with `--include` only, exactly the listed aspects are checked;
3616
+ with `--exclude` only, all aspects except the listed ones; with both,
3617
+ the included ones minus the excluded ones. An unknown aspect id, or a
3618
+ combination which cancels out to an empty set, aborts the skill with an
3619
+ error. The ten aspect ids are:
3620
+
3621
+ ```text
3622
+ S01 SYNTAX S04 AMBIGUITY S07 REDUNDANCY S10 COMPLETENESS
3623
+ S02 FORMAT S05 ATOMICITY S08 CONSISTENCY
3624
+ S03 RATIONALE S06 REALIZATION S09 LOGIC
3625
+ ```
3626
+
3627
+ The `S01 SYNTAX` aspect reports the diagnostics of the specification
3628
+ linting against the *SpecBook* schema configuration of the project and
3629
+ of the generic Markdown linting via *markdownlint* (both as with `ase
3630
+ spec lint --markdown`), mapping the severity `error` onto `HIGH` and
3631
+ `warning` onto `MEDIUM`. The `S02 FORMAT` aspect checks the formatting
3632
+ against the *SpecBook* format variants and the prevailing conventions
3633
+ of the specification itself. The aspects `S03 RATIONALE` up to `S07
3634
+ REDUNDANCY` check the statements against the *Specifying Tenets* of
3635
+ *ASE*: a `, BECAUSE` rationale per statement, unambiguous and
3636
+ verifiable statements, atomic statements, intent instead of
3637
+ realization, and a single source of truth per fact.
3638
+
3639
+ The *model-wide* aspects `S07 REDUNDANCY` up to `S10 COMPLETENESS` are
3640
+ judged on the *entire* specification, even if only parts of it are
3641
+ linted: `S08 CONSISTENCY` checks for contradictions and drifting
3642
+ terminology, `S09 LOGIC` for logical gaps in the specification model
3643
+ (like unreachable states or entities without any relationship), and
3644
+ `S10 COMPLETENESS` for open ends which would force an implementer to
3645
+ guess. As the corrections of `S09 LOGIC` and `S10 COMPLETENESS` fill
3646
+ gaps with *best-guess* content, they are proposed for review only and
3647
+ are *never* applied under `--auto`.
3648
+
3649
+ ## OPTIONS
3650
+
3651
+ - `--auto`|`-a`:
3652
+ Automatically apply every proposed correction without asking the
3653
+ user via the interactive dialog, except for the best-guess
3654
+ corrections of the aspects `S09 LOGIC` and `S10 COMPLETENESS`,
3655
+ which are only reported.
3656
+
3657
+ - `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`):
3658
+ Set the *severity floor* (default `AUTO`): findings below the chosen
3659
+ threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
3660
+ `HIGH`. The default `AUTO` means `MEDIUM` for a project with `grey`
3661
+ boxing, no linting at all for a project with `black` boxing, and
3662
+ `LOW` (keep all findings) otherwise; an explicitly given floor always
3663
+ wins over the boxing, i.e. it also lints a project with `black`
3664
+ boxing and, e.g. with `LOW`, acts on all findings of a project with
3665
+ `grey` boxing. `ACCEPTED` findings are never suppressed. Surviving
3666
+ findings are reported in *descending severity* order `HIGH`,
3667
+ `MEDIUM`, `LOW`, `ACCEPTED`, keeping the `file`/`line` order within
3668
+ the same severity.
3669
+
3670
+ - `--include`|`-i`=*aspect*[`,`...]:
3671
+ Restrict the checked specification quality aspects to the given
3672
+ comma-separated list of aspect ids (e.g. `S01,S02`). Without this
3673
+ option, all ten aspects are checked.
3674
+
3675
+ - `--exclude`|`-e`=*aspect*[`,`...]:
3676
+ Remove the given comma-separated list of aspect ids from the checked
3677
+ specification quality aspects. Applied *after* `--include`, so
3678
+ `-i S09,S10 -e S10` checks `S09` only.
3679
+
3680
+ - `--staged`:
3681
+ Restrict the linting to the specification files with *staged* Git
3682
+ changes. Deleted files are skipped, and the files are linted in
3683
+ their current working copy state. Combined with `--unstaged`, lint
3684
+ the specification files with *any* uncommitted Git changes.
3685
+
3686
+ - `--unstaged`:
3687
+ Restrict the linting to the specification files with *unstaged* Git
3688
+ changes plus the *untracked* specification files. Deleted files are
3689
+ skipped. Combined with `--staged`, lint the specification files with
3690
+ *any* uncommitted Git changes.
3691
+
3692
+ ## ARGUMENTS
3693
+
3694
+ - *spec-reference*:
3695
+ A file, directory, or wildcard reference to the specification files
3696
+ to lint. Without it, the *entire* specification is linted, resp.
3697
+ under `--staged` or `--unstaged` all changed specification files.
3698
+
3699
+ ## SCENARIOS
3700
+
3701
+ - You want your specification checked for specification quality problems
3702
+ - You want to know whether your specification is sufficient for an implementation
3703
+ - You want logical gaps in your specification model detected
3704
+ - You want corrections proposed which you accept or reject one by one
3705
+ - You want all mechanical corrections applied automatically
3706
+ - You want only your staged or unstaged specification changes linted before committing
3707
+
3708
+ ## EXAMPLES
3709
+
3710
+ Lint the entire specification interactively:
3711
+
3712
+ ```text
3713
+ ❯ /ase-spec-lint
3714
+ ```
3715
+
3716
+ Lint a single specification file and automatically apply all corrections:
3717
+
3718
+ ```text
3719
+ ❯ /ase-spec-lint --auto docs/spec/data-model.md
3720
+ ```
3721
+
3722
+ Lint the specification for its syntax and formatting only:
3723
+
3724
+ ```text
3725
+ ❯ /ase-spec-lint -i S01,S02
3726
+ ```
3727
+
3728
+ Check the specification model for logical gaps and completeness only:
3729
+
3730
+ ```text
3731
+ ❯ /ase-spec-lint -i S09,S10
3732
+ ```
3733
+
3734
+ Lint the specification, reporting only `MEDIUM` and `HIGH` findings:
3735
+
3736
+ ```text
3737
+ ❯ /ase-spec-lint -S MEDIUM
3738
+ ```
3739
+
3740
+ Lint only the specification files with staged Git changes:
3741
+
3742
+ ```text
3743
+ ❯ /ase-spec-lint --staged
3744
+ ```
3745
+
3565
3746
  </purpose>
3566
3747
  <purpose name="ase-sync-export">
3567
3748
 
@@ -4835,6 +5016,7 @@ Switch to a specific task:
4835
5016
  [`--source`|`-s` *source*]
4836
5017
  [`--changeset`|`-c` *changeset*]
4837
5018
  [`--draft`|`-d`]
5019
+ [`--no-cleanup`|`-K`]
4838
5020
  [`--stateless`|`-S`]
4839
5021
  [*id*]
4840
5022
 
@@ -4877,7 +5059,9 @@ overridable via `--changeset`:
4877
5059
  - `branch:`*name*: the change set is *committed* onto the branch
4878
5060
  *name* -- created from the source if missing -- inside the worktree
4879
5061
  in which this branch is checked out, or inside a newly created
4880
- worktree `.ase/worktree/<name>`.
5062
+ worktree `.ase/worktree/<name>`, which is removed again after the
5063
+ commit (unless `--no-cleanup` is given), while an already existing
5064
+ worktree is always kept.
4881
5065
  - `attachment:`*name*: the change set is made and verified in a
4882
5066
  *temporary* worktree, detached at the source commit, and stored as
4883
5067
  the attachment block of type `text/x-diff; charset=utf-8;
@@ -4984,6 +5168,13 @@ plan, unless `--next` pre-selects this choice.
4984
5168
  *implementation draft* of the plan only, leaving all artifacts
4985
5169
  untouched (a dry-run). Mutually exclusive with `--changeset`.
4986
5170
 
5171
+ - `--no-cleanup`|`-K`:
5172
+ For a `branch:` changeset, keep the worktree `.ase/worktree/<name>`
5173
+ newly created by this run, instead of removing it after the commit,
5174
+ so the change set can be reviewed, built, and tested there. Without
5175
+ this option, the worktree is removed only if it has no uncommitted
5176
+ changes, as the change set lives on the branch alone.
5177
+
4987
5178
  - `--stateless`|`-S`:
4988
5179
  Leave the plan's `Status:` key untouched.
4989
5180
 
@@ -23,6 +23,7 @@
23
23
  ⎈ **SPECIFICATION**
24
24
  ○ `ase-spec-activate`: Activate Specification Know-How
25
25
  ○ `ase-spec-edit`: Edit Specification
26
+ ○ `ase-spec-lint`: Lint Specification
26
27
 
27
28
  ⎈ **CODING**
28
29
  ○ `ase-code-analyze`: Analyze Source Code
@@ -15,6 +15,7 @@ START -> ase-arch-discover
15
15
  START -> ase-code-insight
16
16
  START -> ase-code-explain
17
17
  START -> ase-code-lint
18
+ START -> ase-spec-lint
18
19
  START -> ase-docs-shorten
19
20
  START -> ase-docs-refine
20
21
  START -> ase-docs-proofread
@@ -46,6 +47,7 @@ ase-arch-discover -> END
46
47
  ase-code-insight -> END
47
48
  ase-code-explain -> END
48
49
  ase-code-lint -> END
50
+ ase-spec-lint -> END
49
51
  ase-docs-shorten -> END
50
52
  ase-docs-refine -> END
51
53
  ase-docs-proofread -> END
@@ -71,6 +71,7 @@ currently staged Git changes.
71
71
  - Use imperative mood ("add" not "added")
72
72
  - Use *no* period at the end
73
73
  - Use *no* Markdown formatting
74
+ - Never add `Co-Authored-By` trailers to commit messages
74
75
 
75
76
  Output this crafted commit message with the following <template/>:
76
77
 
@@ -121,6 +121,7 @@ processing the entire current skill:
121
121
  imperative-mood summary without a trailing period, without
122
122
  Markdown formatting, and without any double-quote (`"`),
123
123
  backtick (`` ` ``), dollar (`$`), or backslash (`\`) characters.
124
+ Never add `Co-Authored-By` trailers to commit messages.
124
125
 
125
126
  4. Commit the changes by running the command
126
127
  `git -C "<source-dir/>" commit -m "<message/>"`. If it fails,
@@ -224,11 +224,12 @@ Procedure
224
224
 
225
225
  2. <step id="STEP 2: Review Investigation">
226
226
 
227
- <if condition="<ase-project-boxing/> is equal `black`">
227
+ <if condition="<ase-project-boxing/> is equal `black` and <getopt-option-severity/> is equal `AUTO`">
228
228
 
229
229
  The project source artifacts are classified as a *black box*, so
230
230
  the user does *not* want the changes scrutinized or their
231
- findings surfaced. *Skip* the entire review investigation: do
231
+ findings surfaced (an *explicitly* given severity floor lifts this
232
+ skip). *Skip* the entire review investigation: do
232
233
  *not* invoke the `Agent` tool and do *not* read any change, set
233
234
  <findings/> to the *empty* list, set <hidden/> to `0`, set
234
235
  <verdict/> to `SKIPPED (boxing: black)`, set <summary/> to a
@@ -288,7 +289,8 @@ Procedure
288
289
  <else>
289
290
  Set <floor><getopt-option-severity/></floor> and
290
291
  <floor-origin>--severity <getopt-option-severity/></floor-origin>:
291
- an *explicitly* given severity floor always *wins* over the boxing.
292
+ an *explicitly* given severity floor always *wins* over the boxing,
293
+ both over the `grey` floor and over the `black` skip.
292
294
  </else>
293
295
 
294
296
  Then *apply the effective severity floor* <floor/>: *Keep* a finding
@@ -75,7 +75,9 @@ before it is committed or merged.
75
75
  threshold are suppressed, ordered `LOW` < `MEDIUM` < `HIGH`. The
76
76
  default `AUTO` means `MEDIUM` for a project with `grey` boxing and
77
77
  `LOW` (keep all findings) otherwise; an explicitly given floor always
78
- wins over the boxing. `ACCEPTED` findings are never suppressed, and
78
+ wins over the boxing, i.e. it also reviews a project with `black`
79
+ boxing and, e.g. with `LOW`, shows all findings of a project with
80
+ `grey` boxing. `ACCEPTED` findings are never suppressed, and
79
81
  the number of suppressed findings is always reported. Surviving
80
82
  findings are rendered in *descending severity* order `HIGH`,
81
83
  `MEDIUM`, `LOW`, `ACCEPTED`. The floor only affects the rendered
@@ -393,9 +393,9 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
393
393
 
394
394
  <if condition="<worktree-dir/> is not empty">
395
395
  Run the command `ase spec lint` with <worktree-dir/> as its
396
- working directory and parse its
397
- `<file/>:<line/>:<column/>: <message/>` output lines into
398
- <diagnostics/> -- the `ase_specbook_lint` tool always validates
396
+ working directory and parse its logged
397
+ `lint: specbook: <file/>:<line/>:<column/>: <message/>` lines
398
+ (on standard error) into <diagnostics/> -- the `ase_specbook_lint` tool always validates
399
399
  the *project* working copy and hence *MUST* *NOT* be used here.
400
400
  </if>
401
401
  <else>
@@ -215,5 +215,5 @@ Loop over multiple specification edits inside a dedicated Git worktree:
215
215
 
216
216
  ## SEE ALSO
217
217
 
218
- [`ase-spec-activate`](../ase-spec-activate/help.md), [`ase-code-edit`](../ase-code-edit/help.md), [`ase-sync-import`](../ase-sync-import/help.md),
218
+ [`ase-spec-activate`](../ase-spec-activate/help.md), [`ase-spec-lint`](../ase-spec-lint/help.md), [`ase-code-edit`](../ase-code-edit/help.md), [`ase-sync-import`](../ase-sync-import/help.md),
219
219
  [`ase-sync-reconcile`](../ase-sync-reconcile/help.md), [`ase-sync-export`](../ase-sync-export/help.md), [`ase-task-grill`](../ase-task-grill/help.md).