@rse/ase 2.0.3 → 2.0.5

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 (198) hide show
  1. package/dst/ase-hook.js +13 -4
  2. package/dst/ase-lib-version.js +14 -5
  3. package/dst/ase-man-catalog.js +229 -0
  4. package/dst/ase-man-render.js +278 -0
  5. package/dst/ase-man-tui.js +636 -0
  6. package/dst/ase-man.js +33 -27
  7. package/dst/ase-setup.js +2 -2
  8. package/dst/ase-spec.js +103 -20
  9. package/dst/ase-task-board-filter.js +5 -4
  10. package/dst/ase-task-board-web-client.js +26 -26
  11. package/dst/man/ase-agent-adhoc.md +1165 -0
  12. package/dst/man/ase-agent-condenser.md +383 -0
  13. package/dst/man/ase-agent-editor.md +441 -0
  14. package/dst/man/ase-agent-estimator.md +477 -0
  15. package/dst/man/ase-agent-fleet.md +358 -0
  16. package/dst/man/ase-agent-implementer.md +521 -0
  17. package/dst/man/ase-agent-integrator.md +449 -0
  18. package/dst/man/ase-agent-qualifier.md +426 -0
  19. package/dst/man/ase-agent-rebooter.md +384 -0
  20. package/dst/man/ase-agent-relay.md +262 -0
  21. package/dst/man/ase-agent-researcher.md +478 -0
  22. package/dst/man/ase-agent.md +628 -0
  23. package/dst/man/ase-artifact-list.md +57 -0
  24. package/dst/man/ase-artifact-name.md +56 -0
  25. package/dst/man/ase-artifact.md +92 -0
  26. package/dst/man/ase-config-delete.md +74 -0
  27. package/dst/man/ase-config-edit.md +83 -0
  28. package/dst/man/ase-config-get.md +70 -0
  29. package/dst/man/ase-config-init.md +110 -0
  30. package/dst/man/ase-config-list.md +68 -0
  31. package/dst/man/ase-config-set.md +92 -0
  32. package/dst/man/ase-config.md +426 -0
  33. package/dst/man/ase-hook-permission-request.md +61 -0
  34. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  35. package/dst/man/ase-hook-session-end.md +71 -0
  36. package/dst/man/ase-hook-session-persona.md +65 -0
  37. package/dst/man/ase-hook-session-start.md +184 -0
  38. package/dst/man/ase-hook-stop.md +52 -0
  39. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  40. package/dst/man/ase-hook.md +93 -0
  41. package/dst/man/ase-man.md +195 -0
  42. package/dst/man/ase-mcp.md +102 -0
  43. package/dst/man/ase-service-log.md +59 -0
  44. package/dst/man/ase-service-send.md +60 -0
  45. package/dst/man/ase-service-start.md +93 -0
  46. package/dst/man/ase-service-status.md +58 -0
  47. package/dst/man/ase-service-stop.md +52 -0
  48. package/dst/man/ase-service.md +124 -0
  49. package/dst/man/ase-setup-disable.md +67 -0
  50. package/dst/man/ase-setup-enable.md +66 -0
  51. package/dst/man/ase-setup-install.md +116 -0
  52. package/dst/man/ase-setup-mcp.md +213 -0
  53. package/dst/man/ase-setup-status.md +101 -0
  54. package/dst/man/ase-setup-statusline.md +162 -0
  55. package/dst/man/ase-setup-telemetry.md +166 -0
  56. package/dst/man/ase-setup-uninstall.md +85 -0
  57. package/dst/man/ase-setup-update.md +117 -0
  58. package/dst/man/ase-setup.md +156 -0
  59. package/dst/man/ase-spec-export.md +99 -0
  60. package/dst/man/ase-spec-init.md +57 -0
  61. package/dst/man/ase-spec-lint.md +74 -0
  62. package/dst/man/ase-spec-preview.md +57 -0
  63. package/dst/man/ase-spec.md +85 -0
  64. package/dst/man/ase-statusline.md +330 -0
  65. package/dst/man/ase-task-assign.md +138 -0
  66. package/dst/man/ase-task-board.md +651 -0
  67. package/dst/man/ase-task-delete.md +46 -0
  68. package/dst/man/ase-task-edit.md +73 -0
  69. package/dst/man/ase-task-idscheme.md +92 -0
  70. package/dst/man/ase-task-lifecycle.md +92 -0
  71. package/dst/man/ase-task-list.md +86 -0
  72. package/dst/man/ase-task-load.md +48 -0
  73. package/dst/man/ase-task-newid.md +100 -0
  74. package/dst/man/ase-task-purge.md +49 -0
  75. package/dst/man/ase-task-rename.md +69 -0
  76. package/dst/man/ase-task-request.md +108 -0
  77. package/dst/man/ase-task-save.md +78 -0
  78. package/dst/man/ase-task-status.md +79 -0
  79. package/dst/man/ase-task-store.md +377 -0
  80. package/dst/man/ase-task-view.md +50 -0
  81. package/dst/man/ase-task.md +335 -0
  82. package/dst/man/ase-util-compat.md +38 -0
  83. package/dst/man/ase-util-diagram.md +140 -0
  84. package/dst/man/ase-util-meta.md +68 -0
  85. package/dst/man/ase-util-metric.md +74 -0
  86. package/dst/man/ase-util-mint.md +85 -0
  87. package/dst/man/ase-util-worktree.md +109 -0
  88. package/dst/man/ase-util.md +81 -0
  89. package/dst/man/ase.md +228 -0
  90. package/package.json +16 -21
  91. package/plugin/.claude-plugin/plugin.json +1 -1
  92. package/plugin/.codex-plugin/plugin.json +1 -1
  93. package/plugin/.github/plugin/plugin.json +1 -1
  94. package/plugin/agents/ase-code-lint.md +3 -3
  95. package/plugin/agents/ase-docs-proofread.md +3 -3
  96. package/plugin/agents/ase-docs-refine.md +3 -3
  97. package/plugin/agents/ase-spec-lint.md +338 -0
  98. package/plugin/mods/ase-mods-common.ts +444 -0
  99. package/plugin/mods/ase-mods-grill.ts +312 -0
  100. package/plugin/mods/ase-mods-help-browse.ts +405 -0
  101. package/plugin/mods/ase-mods-help-compose.ts +561 -0
  102. package/plugin/mods/ase-mods-help-find.ts +426 -0
  103. package/plugin/mods/ase-mods-help-hint.ts +134 -0
  104. package/plugin/mods/ase-mods-help-show.ts +142 -0
  105. package/plugin/mods/ase-mods.ts +214 -381
  106. package/plugin/mods/claude-code.d.ts +26 -3
  107. package/plugin/skills/ase-code-lint/SKILL.md +15 -15
  108. package/plugin/skills/ase-code-lint/help.md +21 -8
  109. package/plugin/skills/ase-help-intent/SKILL.md +2 -1
  110. package/plugin/skills/ase-help-intent/data.md +214 -9
  111. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  112. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  113. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  114. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  115. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  116. package/plugin/skills/ase-spec-edit/help.md +1 -1
  117. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  118. package/plugin/skills/ase-spec-lint/help.md +184 -0
  119. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  120. package/plugin/skills/ase-task-implement/help.md +11 -1
  121. package/dst/man/ase-agent-adhoc.1 +0 -515
  122. package/dst/man/ase-agent-condenser.1 +0 -193
  123. package/dst/man/ase-agent-editor.1 +0 -212
  124. package/dst/man/ase-agent-estimator.1 +0 -214
  125. package/dst/man/ase-agent-fleet.1 +0 -185
  126. package/dst/man/ase-agent-implementer.1 +0 -233
  127. package/dst/man/ase-agent-integrator.1 +0 -213
  128. package/dst/man/ase-agent-qualifier.1 +0 -214
  129. package/dst/man/ase-agent-rebooter.1 +0 -193
  130. package/dst/man/ase-agent-relay.1 +0 -128
  131. package/dst/man/ase-agent-researcher.1 +0 -217
  132. package/dst/man/ase-agent.1 +0 -264
  133. package/dst/man/ase-artifact-list.1 +0 -38
  134. package/dst/man/ase-artifact-name.1 +0 -39
  135. package/dst/man/ase-artifact.1 +0 -56
  136. package/dst/man/ase-config-delete.1 +0 -45
  137. package/dst/man/ase-config-edit.1 +0 -48
  138. package/dst/man/ase-config-get.1 +0 -46
  139. package/dst/man/ase-config-init.1 +0 -60
  140. package/dst/man/ase-config-list.1 +0 -42
  141. package/dst/man/ase-config-set.1 +0 -52
  142. package/dst/man/ase-config.1 +0 -231
  143. package/dst/man/ase-hook-permission-request.1 +0 -36
  144. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  145. package/dst/man/ase-hook-session-end.1 +0 -47
  146. package/dst/man/ase-hook-session-persona.1 +0 -37
  147. package/dst/man/ase-hook-session-start.1 +0 -81
  148. package/dst/man/ase-hook-stop.1 +0 -34
  149. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  150. package/dst/man/ase-hook.1 +0 -51
  151. package/dst/man/ase-man.1 +0 -67
  152. package/dst/man/ase-mcp.1 +0 -61
  153. package/dst/man/ase-service-log.1 +0 -43
  154. package/dst/man/ase-service-send.1 +0 -47
  155. package/dst/man/ase-service-start.1 +0 -54
  156. package/dst/man/ase-service-status.1 +0 -46
  157. package/dst/man/ase-service-stop.1 +0 -37
  158. package/dst/man/ase-service.1 +0 -85
  159. package/dst/man/ase-setup-disable.1 +0 -44
  160. package/dst/man/ase-setup-enable.1 +0 -45
  161. package/dst/man/ase-setup-install.1 +0 -73
  162. package/dst/man/ase-setup-mcp.1 +0 -124
  163. package/dst/man/ase-setup-status.1 +0 -60
  164. package/dst/man/ase-setup-statusline.1 +0 -92
  165. package/dst/man/ase-setup-telemetry.1 +0 -92
  166. package/dst/man/ase-setup-uninstall.1 +0 -59
  167. package/dst/man/ase-setup-update.1 +0 -64
  168. package/dst/man/ase-setup.1 +0 -93
  169. package/dst/man/ase-spec-export.1 +0 -62
  170. package/dst/man/ase-spec-lint.1 +0 -40
  171. package/dst/man/ase-spec-preview.1 +0 -40
  172. package/dst/man/ase-spec.1 +0 -46
  173. package/dst/man/ase-statusline.1 +0 -189
  174. package/dst/man/ase-task-assign.1 +0 -71
  175. package/dst/man/ase-task-board.1 +0 -384
  176. package/dst/man/ase-task-delete.1 +0 -35
  177. package/dst/man/ase-task-edit.1 +0 -46
  178. package/dst/man/ase-task-idscheme.1 +0 -65
  179. package/dst/man/ase-task-lifecycle.1 +0 -57
  180. package/dst/man/ase-task-list.1 +0 -47
  181. package/dst/man/ase-task-load.1 +0 -36
  182. package/dst/man/ase-task-newid.1 +0 -61
  183. package/dst/man/ase-task-purge.1 +0 -37
  184. package/dst/man/ase-task-rename.1 +0 -44
  185. package/dst/man/ase-task-request.1 +0 -61
  186. package/dst/man/ase-task-save.1 +0 -48
  187. package/dst/man/ase-task-status.1 +0 -55
  188. package/dst/man/ase-task-store.1 +0 -194
  189. package/dst/man/ase-task-view.1 +0 -40
  190. package/dst/man/ase-task.1 +0 -160
  191. package/dst/man/ase-util-compat.1 +0 -25
  192. package/dst/man/ase-util-diagram.1 +0 -76
  193. package/dst/man/ase-util-meta.1 +0 -45
  194. package/dst/man/ase-util-metric.1 +0 -54
  195. package/dst/man/ase-util-mint.1 +0 -59
  196. package/dst/man/ase-util-worktree.1 +0 -72
  197. package/dst/man/ase-util.1 +0 -50
  198. package/dst/man/ase.1 +0 -124
@@ -2593,7 +2593,7 @@ declare module 'claude-code' {
2593
2593
  call: EventCalls['tool']['call'];
2594
2594
  /**
2595
2595
  * Asks the engine's permission decision for a tool call now: the event
2596
- * `tool.check`, resolved to `{ decision, reason?, rule? }`.
2596
+ * `tool.check`, resolved to its verdict (`{ decision, reason?, ... }`).
2597
2597
  *
2598
2598
  * The hooks run (the calling hook's own frame skipped, `next.origin` this
2599
2599
  * plugin, no `tool_use_id`); nothing runs, no dialog opens, no PreToolUse
@@ -3719,7 +3719,7 @@ declare module 'claude-code' {
3719
3719
  */
3720
3720
  'tool.call': ToolCallResult;
3721
3721
  /**
3722
- * `{ decision, reason?, rule?, hook?, ceiling? }`.
3722
+ * `{ decision, reason?, rule?, hook?, setting?, decider?, ceiling? }`.
3723
3723
  */
3724
3724
  'tool.check': ToolCheckResult;
3725
3725
  /**
@@ -10123,6 +10123,12 @@ declare module 'claude-code' {
10123
10123
  */
10124
10124
  type ToolCheckArgs = Pick<ToolCheckInput, 'tool' | 'input'>;
10125
10125
 
10126
+ /**
10127
+ * Who an ask is put to, where that is not a dialog here: `host`, the program
10128
+ * that answers a hosted session's asks, or a served call's own session.
10129
+ */
10130
+ type ToolCheckDecider = 'host';
10131
+
10126
10132
  /**
10127
10133
  * The verdict of `tool.check`: run the tool, put it to the mode's decider
10128
10134
  * (the dialog, the auto-mode classifier, a headless host), or refuse it.
@@ -10158,7 +10164,7 @@ declare module 'claude-code' {
10158
10164
 
10159
10165
  /**
10160
10166
  * What a `tool.check` hook returns and what `next(e)` resolves to: the
10161
- * verdict, why, and the rule, classic hook or ceiling behind it, if any.
10167
+ * verdict, why, what stands behind it, and who answers core's ask.
10162
10168
  *
10163
10169
  * From core, the engine's declarative decision for the session's mode and
10164
10170
  * rules. A hook may answer any verdict in either direction; the last word up
@@ -10188,6 +10194,23 @@ declare module 'claude-code' {
10188
10194
  * Absent on a `$.tool.check` query, which runs no classic hook.
10189
10195
  */
10190
10196
  hook?: string;
10197
+ /**
10198
+ * The key of the option whose own check asked, whoever configured it
10199
+ * (`permissions.blockReadsOutsideWorkingDirectories`).
10200
+ *
10201
+ * From core, for the read block: its ask on a shell command that reads
10202
+ * outside the working directories or, the block on, leaves the sandbox.
10203
+ */
10204
+ setting?: string;
10205
+ /**
10206
+ * Who an ask is put to, where that is not a dialog here: `host`, a hosted
10207
+ * session's permission callback or the cloud session a served call is for.
10208
+ *
10209
+ * From core, on its own ask, only where a host would be asked: an ask the
10210
+ * mode or the loop refuses with nobody asked (dontAsk, no prompt to show)
10211
+ * names none, and neither does a host whose card the person answers.
10212
+ */
10213
+ decider?: ToolCheckDecider;
10191
10214
  /**
10192
10215
  * The most permissive verdict the organization lets a call of the tool
10193
10216
  * reach (`ask`), as its administrators set it on a connector's tool.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-lint
3
- argument-hint: "[--help|-h] [--auto|-a] [--severity|-S=(AUTO|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)] [--force|-f] [--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=(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">
26
+ arg2="--auto|-a --severity|-S=(AUTO|LOW|MEDIUM|HIGH) --force|-f --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,11 +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` and <getopt-option-severity/> is equal `AUTO`">
39
+ <if condition="<ase-project-boxing/> is equal `black` and <getopt-option-force/> is not equal `true`">
40
40
 
41
41
  The project source artifacts are classified as a *black box*, so
42
42
  the user does *not* want them inspected or their problems surfaced
43
- (an *explicitly* given severity floor lifts this skip).
43
+ (the `--force` option lifts this skip).
44
44
  *Skip* the entire investigation and reporting: do *not* invoke any
45
45
  `Bash`, `Glob`, or `Agent` tool and do *not* read any source, only
46
46
  output the following <template/> and then *SKIP* the remaining steps
@@ -53,9 +53,9 @@ related to a set of code quality aspects.
53
53
  </if>
54
54
 
55
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.
56
+ `grey` and <getopt-option-force/> is not equal `true`, and
57
+ <condensed>false</condensed> otherwise: a *condensed* report
58
+ suppresses the full unified diffs of STEP 3.
59
59
 
60
60
  First, determine the *effective aspect set* <aspects/>, i.e., the
61
61
  code quality aspects which are checked at all. For this, parse
@@ -189,13 +189,13 @@ related to a set of code quality aspects.
189
189
 
190
190
  <if condition="<getopt-option-severity/> is equal `AUTO`">
191
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.
192
+ and <getopt-option-force/> is not equal `true` (grey boxing surfaces
193
+ only *material* findings of severity `MEDIUM` and above), and
194
+ <floor>LOW</floor> otherwise.
194
195
  </if>
195
196
  <else>
196
197
  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.
198
+ severity floor always *wins* over the `grey` boxing floor.
199
199
  </else>
200
200
 
201
201
  Then *apply the effective severity floor* <floor/>: *Keep* a problem
@@ -448,9 +448,9 @@ related to a set of code quality aspects.
448
448
 
449
449
  <if condition="<condensed/> is equal `true`">
450
450
 
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:
451
+ The project source artifacts are classified as a *grey box*,
452
+ so the user does *not* want the full artifact internals
453
+ surfaced:
454
454
  *suppress* the full unified diff and instead show only the
455
455
  *condensed* one-line-per-hunk representation. Report the
456
456
  solution with the following <template/>:
@@ -578,7 +578,7 @@ related to a set of code quality aspects.
578
578
 
579
579
  <if condition="<getopt-option-auto/> is not equal `true`">
580
580
  <ase-tpl-hint level="verbose">
581
- Use `/ase-code-lint --auto` to apply all corrections unattended, `--severity` to raise the reporting floor, `--include`/`--exclude` to narrow the checked aspects, and `--staged`/`--unstaged` to lint only the changed files.
581
+ Use `/ase-code-lint --auto` to apply all corrections unattended, `--severity` to raise the reporting floor, `--force` to ignore the project boxing, `--include`/`--exclude` to narrow the checked aspects, and `--staged`/`--unstaged` to lint only the changed files.
582
582
  </ase-tpl-hint>
583
583
  </if>
584
584
 
@@ -9,6 +9,7 @@
9
9
  [`--help`|`-h`]
10
10
  [`--auto`|`-a`]
11
11
  [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
12
+ [`--force`|`-f`]
12
13
  [`--include`|`-i`=*aspect*[`,`...]]
13
14
  [`--exclude`|`-e`=*aspect*[`,`...]]
14
15
  [`--staged`]
@@ -64,14 +65,20 @@ the code, and comments contradicting the code.
64
65
  Set the *severity floor* (default `AUTO`): findings below the chosen
65
66
  threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
66
67
  `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
73
- severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the
74
- `file`/`line` order within the same severity.
68
+ boxing (unless `--force` is given) and `LOW` (keep all findings)
69
+ otherwise; an explicitly given floor always wins over the `grey`
70
+ boxing, i.e. e.g. with `LOW`, it acts on all findings of a project
71
+ with `grey` boxing. `ACCEPTED` findings are never suppressed.
72
+ Surviving findings are reported in *descending severity* order
73
+ `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the `file`/`line` order
74
+ within the same severity.
75
+
76
+ - `--force`|`-f`:
77
+ Ignore the project boxing entirely: lint a project with `black`
78
+ boxing (which is otherwise not linted at all), and show the full
79
+ unified diffs and the default `LOW` severity floor for a project
80
+ with `grey` boxing (which otherwise shows only condensed one-line
81
+ diffs and defaults to the `MEDIUM` severity floor).
75
82
 
76
83
  - `--include`|`-i`=*aspect*[`,`...]:
77
84
  Restrict the checked code quality aspects to the given
@@ -132,6 +139,12 @@ Lint a directory, reporting only `MEDIUM` and `HIGH` findings:
132
139
  ❯ /ase-code-lint -S MEDIUM src/handlers/
133
140
  ```
134
141
 
142
+ Lint a directory regardless of the project boxing:
143
+
144
+ ```text
145
+ ❯ /ase-code-lint --force src/handlers/
146
+ ```
147
+
135
148
  Lint a source file for the formatting and spelling aspects only:
136
149
 
137
150
  ```text
@@ -72,7 +72,8 @@ catalog you match <intent/> against:
72
72
  Match the current <intent/> against the <corpus/> and select
73
73
  *every* skill that adequately fits it -- judging the fit
74
74
  primarily by each skill's `## SCENARIOS` ("You want ...") and
75
- `## DESCRIPTION` sections. Order the selected skills from
75
+ `## DESCRIPTION` sections, and secondarily by its `## NAME`
76
+ and `## SYNOPSIS` sections. Order the selected skills from
76
77
  best-fitting to worst-fitting and keep at most the *8* best
77
78
  ones, so the dispatch dialog of sub-step 4 stays addressable.
78
79
  Set <count/> to the number of kept skills. Then, for each kept
@@ -633,6 +633,7 @@ Get insights into a specific subsystem:
633
633
  [`--help`|`-h`]
634
634
  [`--auto`|`-a`]
635
635
  [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
636
+ [`--force`|`-f`]
636
637
  [`--include`|`-i`=*aspect*[`,`...]]
637
638
  [`--exclude`|`-e`=*aspect*[`,`...]]
638
639
  [`--staged`]
@@ -688,14 +689,20 @@ the code, and comments contradicting the code.
688
689
  Set the *severity floor* (default `AUTO`): findings below the chosen
689
690
  threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
690
691
  `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
697
- severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the
698
- `file`/`line` order within the same severity.
692
+ boxing (unless `--force` is given) and `LOW` (keep all findings)
693
+ otherwise; an explicitly given floor always wins over the `grey`
694
+ boxing, i.e. e.g. with `LOW`, it acts on all findings of a project
695
+ with `grey` boxing. `ACCEPTED` findings are never suppressed.
696
+ Surviving findings are reported in *descending severity* order
697
+ `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the `file`/`line` order
698
+ within the same severity.
699
+
700
+ - `--force`|`-f`:
701
+ Ignore the project boxing entirely: lint a project with `black`
702
+ boxing (which is otherwise not linted at all), and show the full
703
+ unified diffs and the default `LOW` severity floor for a project
704
+ with `grey` boxing (which otherwise shows only condensed one-line
705
+ diffs and defaults to the `MEDIUM` severity floor).
699
706
 
700
707
  - `--include`|`-i`=*aspect*[`,`...]:
701
708
  Restrict the checked code quality aspects to the given
@@ -756,6 +763,12 @@ Lint a directory, reporting only `MEDIUM` and `HIGH` findings:
756
763
  ❯ /ase-code-lint -S MEDIUM src/handlers/
757
764
  ```
758
765
 
766
+ Lint a directory regardless of the project boxing:
767
+
768
+ ```text
769
+ ❯ /ase-code-lint --force src/handlers/
770
+ ```
771
+
759
772
  Lint a source file for the formatting and spelling aspects only:
760
773
 
761
774
  ```text
@@ -3574,6 +3587,188 @@ Loop over multiple specification edits inside a dedicated Git worktree:
3574
3587
  ❯ /ase-spec-edit -l -w event-series
3575
3588
  ```
3576
3589
 
3590
+ </purpose>
3591
+ <purpose name="ase-spec-lint">
3592
+
3593
+ ## NAME
3594
+
3595
+ `ase-spec-lint` - Lint Specification
3596
+
3597
+ ## SYNOPSIS
3598
+
3599
+ `ase-spec-lint`
3600
+ [`--help`|`-h`]
3601
+ [`--auto`|`-a`]
3602
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
3603
+ [`--force`|`-f`]
3604
+ [`--include`|`-i`=*aspect*[`,`...]]
3605
+ [`--exclude`|`-e`=*aspect*[`,`...]]
3606
+ [`--staged`]
3607
+ [`--unstaged`]
3608
+ [*spec-reference*]
3609
+
3610
+ ## DESCRIPTION
3611
+
3612
+ The `ase-spec-lint` skill lints the *SpecBook*-based specification
3613
+ (SPEC) for *potential quality problems* related to a fixed set of
3614
+ specification quality aspects: from its syntax and formatting, over
3615
+ its individual statements, up to the logical gaps of its model and its
3616
+ completeness for an implementation. The investigation is dispatched to
3617
+ sub-agents (`ase:ase-spec-lint`) so that scanning details do not leak
3618
+ into the user-visible transcript.
3619
+
3620
+ For each detected problem, the skill renders a unified-diff *SOLUTION*
3621
+ preview and either asks the user to `ACCEPT` or `REJECT` the proposed
3622
+ correction interactively (or refine it via a free-text hint, which
3623
+ re-proposes the correction without limit) or - with `--auto` - applies
3624
+ all corrections automatically. Every applied correction refreshes the
3625
+ `Modified:` timestamp of the changed specification files.
3626
+
3627
+ By default all ten specification quality aspects are checked. The
3628
+ `--include` and `--exclude` options narrow this to an *effective aspect
3629
+ set*: with `--include` only, exactly the listed aspects are checked;
3630
+ with `--exclude` only, all aspects except the listed ones; with both,
3631
+ the included ones minus the excluded ones. An unknown aspect id, or a
3632
+ combination which cancels out to an empty set, aborts the skill with an
3633
+ error. The ten aspect ids are:
3634
+
3635
+ ```text
3636
+ S01 SYNTAX S04 AMBIGUITY S07 REDUNDANCY S10 COMPLETENESS
3637
+ S02 FORMAT S05 ATOMICITY S08 CONSISTENCY
3638
+ S03 RATIONALE S06 REALIZATION S09 LOGIC
3639
+ ```
3640
+
3641
+ The `S01 SYNTAX` aspect reports the diagnostics of the specification
3642
+ linting against the *SpecBook* schema configuration of the project and
3643
+ of the generic Markdown linting via *markdownlint* (both as with `ase
3644
+ spec lint --markdown`), mapping the severity `error` onto `HIGH` and
3645
+ `warning` onto `MEDIUM`. The `S02 FORMAT` aspect checks the formatting
3646
+ against the *SpecBook* format variants and the prevailing conventions
3647
+ of the specification itself. The aspects `S03 RATIONALE` up to `S07
3648
+ REDUNDANCY` check the statements against the *Specifying Tenets* of
3649
+ *ASE*: a `, BECAUSE` rationale per statement, unambiguous and
3650
+ verifiable statements, atomic statements, intent instead of
3651
+ realization, and a single source of truth per fact.
3652
+
3653
+ The *model-wide* aspects `S07 REDUNDANCY` up to `S10 COMPLETENESS` are
3654
+ judged on the *entire* specification, even if only parts of it are
3655
+ linted: `S08 CONSISTENCY` checks for contradictions and drifting
3656
+ terminology, `S09 LOGIC` for logical gaps in the specification model
3657
+ (like unreachable states or entities without any relationship), and
3658
+ `S10 COMPLETENESS` for open ends which would force an implementer to
3659
+ guess. As the corrections of `S09 LOGIC` and `S10 COMPLETENESS` fill
3660
+ gaps with *best-guess* content, they are proposed for review only and
3661
+ are *never* applied under `--auto`.
3662
+
3663
+ ## OPTIONS
3664
+
3665
+ - `--auto`|`-a`:
3666
+ Automatically apply every proposed correction without asking the
3667
+ user via the interactive dialog, except for the best-guess
3668
+ corrections of the aspects `S09 LOGIC` and `S10 COMPLETENESS`,
3669
+ which are only reported.
3670
+
3671
+ - `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`):
3672
+ Set the *severity floor* (default `AUTO`): findings below the chosen
3673
+ threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
3674
+ `HIGH`. The default `AUTO` means `MEDIUM` for a project with `grey`
3675
+ boxing (unless `--force` is given) and `LOW` (keep all findings)
3676
+ otherwise; an explicitly given floor always wins over the `grey`
3677
+ boxing, i.e. e.g. with `LOW`, it acts on all findings of a project
3678
+ with `grey` boxing. `ACCEPTED` findings are never suppressed.
3679
+ Surviving findings are reported in *descending severity* order
3680
+ `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`, keeping the `file`/`line` order
3681
+ within the same severity.
3682
+
3683
+ - `--force`|`-f`:
3684
+ Ignore the project boxing entirely: lint a project with `black`
3685
+ boxing (which is otherwise not linted at all), and show the full
3686
+ unified diffs and the default `LOW` severity floor for a project
3687
+ with `grey` boxing (which otherwise shows only condensed one-line
3688
+ diffs and defaults to the `MEDIUM` severity floor).
3689
+
3690
+ - `--include`|`-i`=*aspect*[`,`...]:
3691
+ Restrict the checked specification quality aspects to the given
3692
+ comma-separated list of aspect ids (e.g. `S01,S02`). Without this
3693
+ option, all ten aspects are checked.
3694
+
3695
+ - `--exclude`|`-e`=*aspect*[`,`...]:
3696
+ Remove the given comma-separated list of aspect ids from the checked
3697
+ specification quality aspects. Applied *after* `--include`, so
3698
+ `-i S09,S10 -e S10` checks `S09` only.
3699
+
3700
+ - `--staged`:
3701
+ Restrict the linting to the specification files with *staged* Git
3702
+ changes. Deleted files are skipped, and the files are linted in
3703
+ their current working copy state. Combined with `--unstaged`, lint
3704
+ the specification files with *any* uncommitted Git changes.
3705
+
3706
+ - `--unstaged`:
3707
+ Restrict the linting to the specification files with *unstaged* Git
3708
+ changes plus the *untracked* specification files. Deleted files are
3709
+ skipped. Combined with `--staged`, lint the specification files with
3710
+ *any* uncommitted Git changes.
3711
+
3712
+ ## ARGUMENTS
3713
+
3714
+ - *spec-reference*:
3715
+ A file, directory, or wildcard reference to the specification files
3716
+ to lint. Without it, the *entire* specification is linted, resp.
3717
+ under `--staged` or `--unstaged` all changed specification files.
3718
+
3719
+ ## SCENARIOS
3720
+
3721
+ - You want your specification checked for specification quality problems
3722
+ - You want to know whether your specification is sufficient for an implementation
3723
+ - You want logical gaps in your specification model detected
3724
+ - You want corrections proposed which you accept or reject one by one
3725
+ - You want all mechanical corrections applied automatically
3726
+ - You want only your staged or unstaged specification changes linted before committing
3727
+
3728
+ ## EXAMPLES
3729
+
3730
+ Lint the entire specification interactively:
3731
+
3732
+ ```text
3733
+ ❯ /ase-spec-lint
3734
+ ```
3735
+
3736
+ Lint a single specification file and automatically apply all corrections:
3737
+
3738
+ ```text
3739
+ ❯ /ase-spec-lint --auto docs/spec/data-model.md
3740
+ ```
3741
+
3742
+ Lint the specification for its syntax and formatting only:
3743
+
3744
+ ```text
3745
+ ❯ /ase-spec-lint -i S01,S02
3746
+ ```
3747
+
3748
+ Check the specification model for logical gaps and completeness only:
3749
+
3750
+ ```text
3751
+ ❯ /ase-spec-lint -i S09,S10
3752
+ ```
3753
+
3754
+ Lint the specification, reporting only `MEDIUM` and `HIGH` findings:
3755
+
3756
+ ```text
3757
+ ❯ /ase-spec-lint -S MEDIUM
3758
+ ```
3759
+
3760
+ Lint the specification regardless of the project boxing:
3761
+
3762
+ ```text
3763
+ ❯ /ase-spec-lint --force
3764
+ ```
3765
+
3766
+ Lint only the specification files with staged Git changes:
3767
+
3768
+ ```text
3769
+ ❯ /ase-spec-lint --staged
3770
+ ```
3771
+
3577
3772
  </purpose>
3578
3773
  <purpose name="ase-sync-export">
3579
3774
 
@@ -4847,6 +5042,7 @@ Switch to a specific task:
4847
5042
  [`--source`|`-s` *source*]
4848
5043
  [`--changeset`|`-c` *changeset*]
4849
5044
  [`--draft`|`-d`]
5045
+ [`--no-cleanup`|`-K`]
4850
5046
  [`--stateless`|`-S`]
4851
5047
  [*id*]
4852
5048
 
@@ -4889,7 +5085,9 @@ overridable via `--changeset`:
4889
5085
  - `branch:`*name*: the change set is *committed* onto the branch
4890
5086
  *name* -- created from the source if missing -- inside the worktree
4891
5087
  in which this branch is checked out, or inside a newly created
4892
- worktree `.ase/worktree/<name>`.
5088
+ worktree `.ase/worktree/<name>`, which is removed again after the
5089
+ commit (unless `--no-cleanup` is given), while an already existing
5090
+ worktree is always kept.
4893
5091
  - `attachment:`*name*: the change set is made and verified in a
4894
5092
  *temporary* worktree, detached at the source commit, and stored as
4895
5093
  the attachment block of type `text/x-diff; charset=utf-8;
@@ -4996,6 +5194,13 @@ plan, unless `--next` pre-selects this choice.
4996
5194
  *implementation draft* of the plan only, leaving all artifacts
4997
5195
  untouched (a dry-run). Mutually exclusive with `--changeset`.
4998
5196
 
5197
+ - `--no-cleanup`|`-K`:
5198
+ For a `branch:` changeset, keep the worktree `.ase/worktree/<name>`
5199
+ newly created by this run, instead of removing it after the commit,
5200
+ so the change set can be reviewed, built, and tested there. Without
5201
+ this option, the worktree is removed only if it has no uncommitted
5202
+ changes, as the change set lives on the branch alone.
5203
+
4999
5204
  - `--stateless`|`-S`:
5000
5205
  Leave the plan's `Status:` key untouched.
5001
5206
 
@@ -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,
@@ -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).