@rse/ase 2.0.2 → 2.0.3

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 (135) 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 +12 -12
  13. package/dst/ase-lib-daemon-cli.js +117 -4
  14. package/dst/ase-lib-server-cli.js +4 -5
  15. package/dst/ase-mcp.js +4 -4
  16. package/dst/ase-service-getopt.js +2 -2
  17. package/dst/ase-service-otel.js +4 -4
  18. package/dst/ase-service-skills.js +5 -15
  19. package/dst/ase-service.js +87 -210
  20. package/dst/ase-setup-common.js +1 -2
  21. package/dst/ase-setup-settings.js +6 -9
  22. package/dst/ase-setup.js +2 -3
  23. package/dst/ase-statusline.js +170 -170
  24. package/dst/ase-task-board-flow.js +7 -6
  25. package/dst/ase-task-board-graph.js +5 -4
  26. package/dst/ase-task-board-tui-control.js +41 -35
  27. package/dst/ase-task-board-tui-model.js +185 -167
  28. package/dst/ase-task-board-tui-popup.js +2 -3
  29. package/dst/ase-task-board-tui-view.js +74 -70
  30. package/dst/ase-task-board-web-client.js +2 -2
  31. package/dst/ase-task-board-web-server.js +2 -2
  32. package/dst/ase-task-board.js +1 -1
  33. package/dst/ase-task-format.js +1 -1
  34. package/dst/ase-task-store-client.js +17 -5
  35. package/dst/ase-task-store-core.js +5 -7
  36. package/dst/ase-task-store-issues.js +16 -1
  37. package/dst/ase-task-store-plugin-ase.js +7 -3
  38. package/dst/ase-task-store-plugin-gitea.js +9 -32
  39. package/dst/ase-task-store-plugin-github.js +3 -12
  40. package/dst/ase-task-store-plugin-gitlab.js +2 -18
  41. package/dst/ase-task.js +51 -23
  42. package/dst/ase-util-compat.js +1 -1
  43. package/dst/ase-util-diagram.js +13 -37
  44. package/dst/ase.js +5 -5
  45. package/dst/man/ase-agent-adhoc.1 +1 -1
  46. package/dst/man/ase-agent-condenser.1 +1 -1
  47. package/dst/man/ase-agent-editor.1 +1 -1
  48. package/dst/man/ase-agent-estimator.1 +1 -1
  49. package/dst/man/ase-agent-fleet.1 +1 -1
  50. package/dst/man/ase-agent-implementer.1 +1 -1
  51. package/dst/man/ase-agent-integrator.1 +1 -1
  52. package/dst/man/ase-agent-qualifier.1 +1 -1
  53. package/dst/man/ase-agent-rebooter.1 +1 -1
  54. package/dst/man/ase-agent-relay.1 +1 -1
  55. package/dst/man/ase-agent-researcher.1 +1 -1
  56. package/dst/man/ase-agent.1 +1 -1
  57. package/dst/man/ase-artifact-list.1 +1 -1
  58. package/dst/man/ase-artifact-name.1 +1 -1
  59. package/dst/man/ase-artifact.1 +1 -1
  60. package/dst/man/ase-config-delete.1 +1 -1
  61. package/dst/man/ase-config-edit.1 +1 -1
  62. package/dst/man/ase-config-get.1 +1 -1
  63. package/dst/man/ase-config-init.1 +1 -1
  64. package/dst/man/ase-config-list.1 +1 -1
  65. package/dst/man/ase-config-set.1 +1 -1
  66. package/dst/man/ase-config.1 +1 -1
  67. package/dst/man/ase-hook-permission-request.1 +1 -1
  68. package/dst/man/ase-hook-pre-tool-use.1 +1 -1
  69. package/dst/man/ase-hook-session-end.1 +1 -1
  70. package/dst/man/ase-hook-session-persona.1 +1 -1
  71. package/dst/man/ase-hook-session-start.1 +1 -1
  72. package/dst/man/ase-hook-stop.1 +1 -1
  73. package/dst/man/ase-hook-user-prompt-submit.1 +1 -1
  74. package/dst/man/ase-hook.1 +1 -1
  75. package/dst/man/ase-man.1 +1 -1
  76. package/dst/man/ase-mcp.1 +1 -1
  77. package/dst/man/ase-service-log.1 +1 -1
  78. package/dst/man/ase-service-send.1 +1 -1
  79. package/dst/man/ase-service-start.1 +1 -1
  80. package/dst/man/ase-service-status.1 +1 -1
  81. package/dst/man/ase-service-stop.1 +1 -1
  82. package/dst/man/ase-service.1 +1 -1
  83. package/dst/man/ase-setup-disable.1 +1 -1
  84. package/dst/man/ase-setup-enable.1 +1 -1
  85. package/dst/man/ase-setup-install.1 +1 -1
  86. package/dst/man/ase-setup-mcp.1 +1 -1
  87. package/dst/man/ase-setup-status.1 +1 -1
  88. package/dst/man/ase-setup-statusline.1 +1 -1
  89. package/dst/man/ase-setup-telemetry.1 +1 -1
  90. package/dst/man/ase-setup-uninstall.1 +1 -1
  91. package/dst/man/ase-setup-update.1 +1 -1
  92. package/dst/man/ase-setup.1 +1 -1
  93. package/dst/man/ase-spec-export.1 +1 -1
  94. package/dst/man/ase-spec-lint.1 +1 -1
  95. package/dst/man/ase-spec-preview.1 +1 -1
  96. package/dst/man/ase-spec.1 +1 -1
  97. package/dst/man/ase-statusline.1 +1 -1
  98. package/dst/man/ase-task-assign.1 +1 -1
  99. package/dst/man/ase-task-board.1 +1 -1
  100. package/dst/man/ase-task-delete.1 +1 -1
  101. package/dst/man/ase-task-edit.1 +1 -1
  102. package/dst/man/ase-task-idscheme.1 +1 -1
  103. package/dst/man/ase-task-lifecycle.1 +1 -1
  104. package/dst/man/ase-task-list.1 +1 -1
  105. package/dst/man/ase-task-load.1 +1 -1
  106. package/dst/man/ase-task-newid.1 +1 -1
  107. package/dst/man/ase-task-purge.1 +1 -1
  108. package/dst/man/ase-task-rename.1 +1 -1
  109. package/dst/man/ase-task-request.1 +1 -1
  110. package/dst/man/ase-task-save.1 +1 -1
  111. package/dst/man/ase-task-status.1 +1 -1
  112. package/dst/man/ase-task-store.1 +1 -1
  113. package/dst/man/ase-task-view.1 +1 -1
  114. package/dst/man/ase-task.1 +1 -1
  115. package/dst/man/ase-util-compat.1 +1 -1
  116. package/dst/man/ase-util-diagram.1 +1 -1
  117. package/dst/man/ase-util-meta.1 +1 -1
  118. package/dst/man/ase-util-metric.1 +1 -1
  119. package/dst/man/ase-util-mint.1 +1 -1
  120. package/dst/man/ase-util-worktree.1 +1 -1
  121. package/dst/man/ase-util.1 +1 -1
  122. package/dst/man/ase.1 +1 -1
  123. package/package.json +1 -1
  124. package/plugin/.claude-plugin/plugin.json +1 -1
  125. package/plugin/.codex-plugin/plugin.json +1 -1
  126. package/plugin/.github/plugin/plugin.json +1 -1
  127. package/plugin/meta/ase-skill.md +7 -0
  128. package/plugin/mods/ase-mods.ts +10 -7
  129. package/plugin/skills/ase-code-analyze/SKILL.md +18 -10
  130. package/plugin/skills/ase-code-analyze/help.md +11 -6
  131. package/plugin/skills/ase-code-lint/SKILL.md +37 -23
  132. package/plugin/skills/ase-code-lint/help.md +10 -5
  133. package/plugin/skills/ase-help-intent/data.md +24 -12
  134. package/plugin/skills/ase-repo-review/SKILL.md +5 -3
  135. package/plugin/skills/ase-repo-review/help.md +3 -1
@@ -1,4 +1,4 @@
1
- .TH "ASE-TASK-STATUS" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-TASK-STATUS" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-task-status\fR - Get or Set the Lifecycle Status of a Task
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-TASK-STORE" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-TASK-STORE" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-task-store\fR - Manage the per-user task store REST API server
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-TASK-VIEW" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-TASK-VIEW" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-task-view\fR - Show a Task Plan in the Pager
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-TASK" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-TASK" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-task\fR - Manage Persisted Task Plans
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-COMPAT" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-COMPAT" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-compat\fR - Output Expected Probe Values of the Compatibility Self-Test
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-DIAGRAM" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-DIAGRAM" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-diagram\fR - Render Mermaid or D2 Diagrams as Unicode/ASCII Art or SVG
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-META" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-META" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-meta\fR - Output Plugin Meta Files
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-METRIC" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-METRIC" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-metric\fR - Measure the Length Metrics of a Text
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-MINT" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-MINT" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-mint\fR - Mint Hash-Derived Identifiers
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL-WORKTREE" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL-WORKTREE" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util-worktree\fR - Resolve the ASE Worktree Directories
4
4
  .SH "SYNOPSIS"
@@ -1,4 +1,4 @@
1
- .TH "ASE-UTIL" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE-UTIL" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase-util\fR - Utility Commands
4
4
  .SH "SYNOPSIS"
package/dst/man/ase.1 CHANGED
@@ -1,4 +1,4 @@
1
- .TH "ASE" "1" "October 2026" "2.0.2" "Agentic Software Engineering (ASE)"
1
+ .TH "ASE" "1" "October 2026" "2.0.3" "Agentic Software Engineering (ASE)"
2
2
  .SH "NAME"
3
3
  \fBase\fR - Agentic Software Engineering (ASE)
4
4
  .SH "SYNOPSIS"
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "homepage": "https://ase.tools",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "https://github.com/rse/ase/issues" },
9
- "version": "2.0.2",
9
+ "version": "2.0.3",
10
10
  "license": "Apache-2.0",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -306,6 +306,13 @@ Artifact Boxing Transparency
306
306
  above. Where no such branches or instructions exist, the decisions
307
307
  above apply.
308
308
 
309
+ - *IMPORTANT*: Severity rule: an *explicitly* given severity floor
310
+ (option `--severity`|`-S` other than `AUTO`) of a finding-producing
311
+ skill *overrules* the boxing for *which* findings are inspected and
312
+ acted on: it lifts the `black` skip and the `grey` floor `MEDIUM`,
313
+ so e.g. `-S LOW` acts on *all* findings of severity `LOW` and above.
314
+ The boxing still governs the *internals exposed* of each finding.
315
+
309
316
  Guidance Hint Level
310
317
  -------------------
311
318
 
@@ -236,7 +236,7 @@ export const register: Register = (on, options) => {
236
236
  /* the last known width of the terminal, the already seen tables, the
237
237
  latest (still unanswered) table, the picks and the selected question of the
238
238
  still unsubmitted prompt, and the frozen picks of the already answered tables */
239
- let columns = 80
239
+ let columns = 80
240
240
  const seen = new Set<string>()
241
241
  let latest: string | undefined
242
242
  let picks = new Map<number, string>()
@@ -326,22 +326,25 @@ export const register: Register = (on, options) => {
326
326
  }
327
327
 
328
328
  /* draw a line of a cell: its styled runs, padded to the column width */
329
- const paint = (chars: Char[], columns: number): (string | RenderElement)[] => [
329
+ const paint = (chars: Char[], span: number): (string | RenderElement)[] => [
330
330
  ...split(chars).map(({ text, bold, color }) =>
331
331
  bold || color !== undefined ? Text({ bold, color, children: text }) : text),
332
- " ".repeat(Math.max(0, columns - width(chars)))
332
+ " ".repeat(Math.max(0, span - width(chars)))
333
333
  ]
334
334
 
335
335
  /* insert the number of a clicked question or the short response of a clicked
336
336
  answer into the prompt and refresh the picks and the selection from it */
337
337
  const press = (number: number, letter?: string) => () => {
338
- void $.prompt.read()
338
+ $.prompt.read()
339
339
  .then(({ text }) => $.prompt.fill({ text: insert(text, number, letter) }))
340
340
  .then((box) => {
341
341
  picks = pick(box.text)
342
342
  selected = select(box.text)
343
343
  $.ui.invalidate("ui.render")
344
344
  })
345
+ .catch(() => {
346
+ /* ignore a prompt which is no longer accessible */
347
+ })
345
348
  }
346
349
 
347
350
  /* draw a line of a cell: in the latest table as the styled text inside a
@@ -351,11 +354,11 @@ export const register: Register = (on, options) => {
351
354
  the run's bold style, but not its color, as its hover style, because the
352
355
  engine leaves the space cells uncolored) on top of it; otherwise as
353
356
  styled text only */
354
- const draw = (chars: Char[], columns: number, group: string, line: number,
357
+ const draw = (chars: Char[], span: number, group: string, line: number,
355
358
  onPress: () => void): RenderElement[] => {
356
359
  const w = width(chars)
357
360
  if (e.requestId !== latest || w === 0)
358
- return [ Text({ children: paint(chars, columns) }) ]
361
+ return [ Text({ children: paint(chars, span) }) ]
359
362
  const buttons = split(chars).map(({ text, bold }, r) =>
360
363
  Button({ key: `${group}/${line}/${r}`, label: text, plain: true, onPress,
361
364
  hover: { scope: group, inverse: true, bold } }))
@@ -365,7 +368,7 @@ export const register: Register = (on, options) => {
365
368
  Box({ position: "absolute", top: 0, left: 0, display: "none",
366
369
  hover: { scope: group, display: "flex" }, flexDirection: "row", children: buttons })
367
370
  ] }),
368
- Text({ children: " ".repeat(Math.max(0, columns - w)) })
371
+ Text({ children: " ".repeat(Math.max(0, span - w)) })
369
372
  ]
370
373
  }
371
374
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-analyze
3
- argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(LOW|MEDIUM|HIGH)] [--prefix|-P=<prefix>] [--staged] [--unstaged] [<source-reference>]"
3
+ argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(AUTO|LOW|MEDIUM|HIGH)] [--prefix|-P=<prefix>] [--staged] [--unstaged] [<source-reference>]"
4
4
  description: >
5
5
  Analyze the source code for problems in either the logic and
6
6
  semantics and its related control flow, performance and efficiency,
@@ -25,7 +25,7 @@ Analyze Source Code
25
25
 
26
26
  <expand name="getopt"
27
27
  arg1="ase-code-analyze"
28
- arg2="--performance|-p --security|-s --severity|-S=(LOW|MEDIUM|HIGH) --prefix|-P= --staged --unstaged">
28
+ arg2="--performance|-p --security|-s --severity|-S=(AUTO|LOW|MEDIUM|HIGH) --prefix|-P= --staged --unstaged">
29
29
  $ARGUMENTS
30
30
  </expand>
31
31
 
@@ -56,10 +56,11 @@ problems in *performance* and *efficiency*, or problems in *security*.
56
56
 
57
57
  2. <step id="STEP 2: Investigate Code Base">
58
58
 
59
- <if condition="<ase-project-boxing/> is equal `black`">
59
+ <if condition="<ase-project-boxing/> is equal `black` and <getopt-option-severity/> is equal `AUTO`">
60
60
 
61
61
  The project source artifacts are classified as a *black box*, so
62
- the user does *not* want them inspected or their problems surfaced.
62
+ the user does *not* want them inspected or their problems surfaced
63
+ (an *explicitly* given severity floor lifts this skip).
63
64
  *Skip* the entire investigation and analysis: do *not* invoke any
64
65
  `Bash`, `Glob`, or `Agent` tool and do *not* read any source, only
65
66
  output the following <template/> and then *SKIP* the remaining step
@@ -191,17 +192,24 @@ problems in *performance* and *efficiency*, or problems in *security*.
191
192
  do not overwrite each other.
192
193
 
193
194
  Before reporting, determine the *effective severity floor* <floor/>:
194
- define the ordinal rank `LOW`=1, `MEDIUM`=2, `HIGH`=3, start from
195
- <floor><getopt-option-severity/></floor> (default `LOW`), and - if
196
- <ase-project-boxing/> is equal `grey` - raise <floor/> to `MEDIUM`
197
- whenever its current rank is below `rank(MEDIUM)` (grey boxing
198
- surfaces only *material* findings of severity `MEDIUM` and above).
195
+ define the ordinal rank `LOW`=1, `MEDIUM`=2, `HIGH`=3.
196
+
197
+ <if condition="<getopt-option-severity/> is equal `AUTO`">
198
+ Set <floor>MEDIUM</floor> if <ase-project-boxing/> is equal `grey`
199
+ (grey boxing surfaces only *material* findings of severity `MEDIUM`
200
+ and above), and <floor>LOW</floor> otherwise.
201
+ </if>
202
+ <else>
203
+ Set <floor><getopt-option-severity/></floor>: an *explicitly* given
204
+ severity floor always *wins* over the boxing, both over the `grey`
205
+ floor and over the `black` skip.
206
+ </else>
199
207
 
200
208
  Then *apply the effective severity floor* <floor/>: *Keep* a detected
201
209
  problem if and only if its `severity` field is `ACCEPTED` *or*
202
210
  `rank(severity)` is greater than or equal to `rank(<floor/>)`;
203
211
  *silently drop* all other problems (they are neither reported nor
204
- persisted). With the default floor `LOW`, all problems are kept.
212
+ persisted). With the floor `LOW`, all problems are kept.
205
213
  `ACCEPTED` problems are *never* dropped.
206
214
 
207
215
  Then sort the surviving problems in <problems/> by their `severity`
@@ -9,7 +9,7 @@
9
9
  [`--help`|`-h`]
10
10
  [`--performance`|`-p`]
11
11
  [`--security`|`-s`]
12
- [`--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`)]
12
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
13
13
  [`--prefix`|`-P` *prefix*]
14
14
  [`--staged`]
15
15
  [`--unstaged`]
@@ -32,11 +32,16 @@ The *analysis lens* depends on the selected options:
32
32
 
33
33
  The `--performance` and `--security` options are *mutually exclusive*.
34
34
 
35
- The `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`) option sets a *severity
36
- floor* (default `LOW`): problems below the chosen threshold are silently
37
- suppressed (neither reported nor persisted), ordered `LOW` < `MEDIUM` <
38
- `HIGH`. The default `LOW` keeps all problems; `ACCEPTED` problems are
39
- never suppressed. Surviving problems are reported in *descending
35
+ The `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`) option sets a
36
+ *severity floor* (default `AUTO`): problems below the chosen threshold
37
+ are silently suppressed (neither reported nor persisted), ordered `LOW`
38
+ < `MEDIUM` < `HIGH`. The default `AUTO` means `MEDIUM` for a project
39
+ with `grey` boxing, no analysis at all for a project with `black`
40
+ boxing, and `LOW` (keep all problems) otherwise; an explicitly given
41
+ floor always wins over the boxing, i.e. it also analyzes a project with
42
+ `black` boxing and, e.g. with `LOW`, reports all problems of a project
43
+ with `grey` boxing. `ACCEPTED` problems are never suppressed. Surviving
44
+ problems are reported in *descending
40
45
  severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED` - keeping the
41
46
  `file`/`line` order within the same severity - and are renumbered
42
47
  contiguously as `P<n>`, so `P1` is the most severe problem.
@@ -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
@@ -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