@rse/ase 1.0.6 → 2.0.0

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 (279) hide show
  1. package/dst/ase-agent-definition-api.d.ts +184 -0
  2. package/dst/ase-agent-definition-api.js +6 -0
  3. package/dst/ase-agent-definition-builtin/condenser.js +42 -0
  4. package/dst/ase-agent-definition-builtin/editor.js +45 -0
  5. package/dst/ase-agent-definition-builtin/estimator.js +98 -0
  6. package/dst/ase-agent-definition-builtin/implementer.js +121 -0
  7. package/dst/ase-agent-definition-builtin/integrator.js +56 -0
  8. package/dst/ase-agent-definition-builtin/qualifier.js +61 -0
  9. package/dst/ase-agent-definition-builtin/rebooter.js +41 -0
  10. package/dst/ase-agent-definition-builtin/researcher.js +77 -0
  11. package/dst/ase-agent-definition-core.js +827 -0
  12. package/dst/ase-agent-fleet.js +772 -0
  13. package/dst/ase-agent-process.js +232 -0
  14. package/dst/ase-agent-relay-client.js +509 -0
  15. package/dst/ase-agent-relay-core.js +213 -0
  16. package/dst/ase-agent-relay-server-bind.js +242 -0
  17. package/dst/ase-agent-relay-server-cli.js +50 -0
  18. package/dst/ase-agent-runtime-claim.js +189 -0
  19. package/dst/ase-agent-runtime-engine.js +1100 -0
  20. package/dst/ase-agent-runtime-exec.js +275 -0
  21. package/dst/ase-agent-runtime-phase.js +581 -0
  22. package/dst/ase-agent-runtime-request.js +272 -0
  23. package/dst/ase-agent-runtime-tool.js +207 -0
  24. package/dst/ase-agent-runtime.js +1316 -0
  25. package/dst/ase-agent.js +65 -0
  26. package/dst/ase-artifact.js +6 -5
  27. package/dst/ase-config-core.js +465 -0
  28. package/dst/ase-config-schema.js +351 -0
  29. package/dst/ase-config-scope.js +172 -0
  30. package/dst/ase-config.js +25 -585
  31. package/dst/ase-hook.js +230 -116
  32. package/dst/ase-lib-daemon-cli.js +130 -0
  33. package/dst/ase-lib-hash.js +20 -0
  34. package/dst/{ase-log.js → ase-lib-log.js} +40 -7
  35. package/dst/ase-lib-server-bind.js +115 -0
  36. package/dst/ase-lib-server-cli.js +474 -0
  37. package/dst/{ase-table.js → ase-lib-table.js} +1 -1
  38. package/dst/{ase-version.js → ase-lib-version.js} +3 -0
  39. package/dst/ase-man.js +96 -0
  40. package/dst/ase-mcp.js +166 -13
  41. package/dst/{ase-getopt.js → ase-service-getopt.js} +82 -80
  42. package/dst/{ase-markdown.js → ase-service-markdown.js} +18 -11
  43. package/dst/ase-service-otel.js +1246 -0
  44. package/dst/{ase-skills.js → ase-service-skills.js} +29 -64
  45. package/dst/ase-service-state.js +101 -0
  46. package/dst/ase-service.js +251 -76
  47. package/dst/ase-setup-common.js +141 -0
  48. package/dst/ase-setup-mcp.js +359 -0
  49. package/dst/ase-setup-settings.js +837 -0
  50. package/dst/ase-setup.js +113 -869
  51. package/dst/ase-spec.js +31 -19
  52. package/dst/ase-statusline.js +108 -43
  53. package/dst/ase-task-board-core.js +739 -0
  54. package/dst/ase-task-board-filter.js +127 -0
  55. package/dst/ase-task-board-flow.js +237 -0
  56. package/dst/ase-task-board-graph.js +497 -0
  57. package/dst/ase-task-board-stats.js +263 -0
  58. package/dst/ase-task-board-tui-control.js +775 -0
  59. package/dst/ase-task-board-tui-model.js +1008 -0
  60. package/dst/ase-task-board-tui-popup.js +626 -0
  61. package/dst/ase-task-board-tui-style.js +106 -0
  62. package/dst/ase-task-board-tui-view.js +847 -0
  63. package/dst/ase-task-board-tui.js +189 -0
  64. package/dst/ase-task-board-web-client.css +1 -0
  65. package/dst/ase-task-board-web-client.html +20 -0
  66. package/dst/ase-task-board-web-client.js +81 -0
  67. package/dst/ase-task-board-web-server.js +823 -0
  68. package/dst/ase-task-board.js +134 -0
  69. package/dst/ase-task-format.js +757 -0
  70. package/dst/ase-task-request.js +208 -0
  71. package/dst/ase-task-store-client.js +495 -0
  72. package/dst/ase-task-store-core.js +804 -0
  73. package/dst/ase-task-store-issues.js +237 -0
  74. package/dst/ase-task-store-plugin-api.js +6 -0
  75. package/dst/ase-task-store-plugin-ase.js +484 -0
  76. package/dst/ase-task-store-plugin-delegate.js +137 -0
  77. package/dst/ase-task-store-plugin-gitea.js +666 -0
  78. package/dst/ase-task-store-plugin-github.js +696 -0
  79. package/dst/ase-task-store-plugin-gitlab.js +668 -0
  80. package/dst/ase-task-store-server-bind.js +538 -0
  81. package/dst/ase-task-store-server-cli.js +154 -0
  82. package/dst/ase-task.js +1335 -357
  83. package/dst/{ase-compat.js → ase-util-compat.js} +2 -2
  84. package/dst/{ase-diagram.js → ase-util-diagram.js} +107 -32
  85. package/dst/{ase-meta.js → ase-util-meta.js} +2 -2
  86. package/dst/{ase-metric.js → ase-util-metric.js} +2 -2
  87. package/dst/{ase-mint.js → ase-util-mint.js} +19 -12
  88. package/dst/{ase-worktree.js → ase-util-worktree.js} +30 -19
  89. package/dst/ase-util.js +20 -0
  90. package/dst/ase.js +108 -32
  91. package/dst/man/ase-agent-adhoc.1 +515 -0
  92. package/dst/man/ase-agent-condenser.1 +193 -0
  93. package/dst/man/ase-agent-editor.1 +212 -0
  94. package/dst/man/ase-agent-estimator.1 +214 -0
  95. package/dst/man/ase-agent-fleet.1 +185 -0
  96. package/dst/man/ase-agent-implementer.1 +233 -0
  97. package/dst/man/ase-agent-integrator.1 +213 -0
  98. package/dst/man/ase-agent-qualifier.1 +214 -0
  99. package/dst/man/ase-agent-rebooter.1 +193 -0
  100. package/dst/man/ase-agent-relay.1 +128 -0
  101. package/dst/man/ase-agent-researcher.1 +217 -0
  102. package/dst/man/ase-agent.1 +264 -0
  103. package/dst/man/ase-artifact-list.1 +38 -0
  104. package/dst/man/ase-artifact-name.1 +39 -0
  105. package/dst/man/ase-artifact.1 +56 -0
  106. package/dst/man/ase-config-delete.1 +45 -0
  107. package/dst/man/ase-config-edit.1 +48 -0
  108. package/dst/man/ase-config-get.1 +46 -0
  109. package/dst/man/ase-config-init.1 +60 -0
  110. package/dst/man/ase-config-list.1 +42 -0
  111. package/dst/man/ase-config-set.1 +52 -0
  112. package/dst/man/ase-config.1 +225 -0
  113. package/dst/man/ase-hook-permission-request.1 +36 -0
  114. package/dst/man/ase-hook-pre-tool-use.1 +59 -0
  115. package/dst/man/ase-hook-session-end.1 +47 -0
  116. package/dst/man/ase-hook-session-persona.1 +37 -0
  117. package/dst/man/ase-hook-session-start.1 +81 -0
  118. package/dst/man/ase-hook-stop.1 +34 -0
  119. package/dst/man/ase-hook-user-prompt-submit.1 +34 -0
  120. package/dst/man/ase-hook.1 +51 -0
  121. package/dst/man/ase-man.1 +67 -0
  122. package/dst/man/ase-mcp.1 +61 -0
  123. package/dst/man/ase-service-log.1 +43 -0
  124. package/dst/man/ase-service-send.1 +47 -0
  125. package/dst/man/ase-service-start.1 +54 -0
  126. package/dst/man/ase-service-status.1 +46 -0
  127. package/dst/man/ase-service-stop.1 +37 -0
  128. package/dst/man/ase-service.1 +85 -0
  129. package/dst/man/ase-setup-disable.1 +44 -0
  130. package/dst/man/ase-setup-enable.1 +45 -0
  131. package/dst/man/ase-setup-install.1 +73 -0
  132. package/dst/man/ase-setup-mcp.1 +124 -0
  133. package/dst/man/ase-setup-status.1 +60 -0
  134. package/dst/man/ase-setup-statusline.1 +92 -0
  135. package/dst/man/ase-setup-telemetry.1 +92 -0
  136. package/dst/man/ase-setup-uninstall.1 +59 -0
  137. package/dst/man/ase-setup-update.1 +64 -0
  138. package/dst/man/ase-setup.1 +93 -0
  139. package/dst/man/ase-spec-export.1 +62 -0
  140. package/dst/man/ase-spec-lint.1 +40 -0
  141. package/dst/man/ase-spec-preview.1 +40 -0
  142. package/dst/man/ase-spec.1 +46 -0
  143. package/dst/man/ase-statusline.1 +189 -0
  144. package/dst/man/ase-task-assign.1 +71 -0
  145. package/dst/man/ase-task-board.1 +384 -0
  146. package/dst/man/ase-task-delete.1 +35 -0
  147. package/dst/man/ase-task-edit.1 +46 -0
  148. package/dst/man/ase-task-idscheme.1 +65 -0
  149. package/dst/man/ase-task-lifecycle.1 +57 -0
  150. package/dst/man/ase-task-list.1 +47 -0
  151. package/dst/man/ase-task-load.1 +36 -0
  152. package/dst/man/ase-task-newid.1 +61 -0
  153. package/dst/man/ase-task-purge.1 +37 -0
  154. package/dst/man/ase-task-rename.1 +44 -0
  155. package/dst/man/ase-task-request.1 +61 -0
  156. package/dst/man/ase-task-save.1 +48 -0
  157. package/dst/man/ase-task-status.1 +55 -0
  158. package/dst/man/ase-task-store.1 +194 -0
  159. package/dst/man/ase-task-view.1 +40 -0
  160. package/dst/man/ase-task.1 +160 -0
  161. package/dst/man/ase-util-compat.1 +25 -0
  162. package/dst/man/ase-util-diagram.1 +76 -0
  163. package/dst/man/ase-util-meta.1 +45 -0
  164. package/dst/man/ase-util-metric.1 +54 -0
  165. package/dst/man/ase-util-mint.1 +59 -0
  166. package/dst/man/ase-util-worktree.1 +72 -0
  167. package/dst/man/ase-util.1 +50 -0
  168. package/dst/man/ase.1 +124 -0
  169. package/package.json +79 -21
  170. package/plugin/.claude-plugin/plugin.json +1 -1
  171. package/plugin/.codex-plugin/plugin.json +1 -1
  172. package/plugin/.github/plugin/plugin.json +1 -1
  173. package/plugin/agents/ase-meta-diagram.md +12 -8
  174. package/plugin/agents/ase-repo-review.md +322 -0
  175. package/plugin/hooks/hooks-codex.json +5 -0
  176. package/plugin/hooks/hooks-copilot.json +5 -0
  177. package/plugin/hooks/hooks.json +8 -0
  178. package/plugin/meta/ase-common-approach.md +117 -0
  179. package/plugin/meta/ase-common-changeset.md +256 -0
  180. package/plugin/meta/ase-common-code.md +10 -173
  181. package/plugin/meta/ase-common-grill.md +317 -0
  182. package/plugin/meta/ase-common-resolve.md +305 -0
  183. package/plugin/meta/ase-common-task.md +83 -4
  184. package/plugin/meta/ase-constitution.md +0 -2
  185. package/plugin/meta/ase-format-specbook.md +208 -25
  186. package/plugin/meta/ase-format-specbook.yaml +242 -851
  187. package/plugin/meta/ase-format-task.md +669 -125
  188. package/plugin/meta/ase-persona.md +3 -4
  189. package/plugin/meta/ase-skill.md +9 -0
  190. package/plugin/mods/ase-mods.ts +409 -0
  191. package/plugin/mods/claude-code.d.ts +13417 -0
  192. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  193. package/plugin/skills/ase-arch-analyze/help.md +2 -2
  194. package/plugin/skills/ase-code-analyze/SKILL.md +59 -8
  195. package/plugin/skills/ase-code-analyze/help.md +29 -4
  196. package/plugin/skills/ase-code-edit/SKILL.md +107 -181
  197. package/plugin/skills/ase-code-edit/help.md +118 -31
  198. package/plugin/skills/ase-code-lint/SKILL.md +64 -13
  199. package/plugin/skills/ase-code-lint/help.md +32 -2
  200. package/plugin/skills/ase-docs-proofread/SKILL.md +4 -4
  201. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  202. package/plugin/skills/ase-docs-refine/SKILL.md +4 -4
  203. package/plugin/skills/ase-docs-shorten/SKILL.md +4 -4
  204. package/plugin/skills/ase-help-intent/data.md +2164 -1087
  205. package/plugin/skills/ase-help-intent/help.md +1 -1
  206. package/plugin/skills/ase-help-skill/catalog.md +12 -9
  207. package/plugin/skills/ase-meta-brainstorm/SKILL.md +1 -1
  208. package/plugin/skills/ase-meta-config/SKILL.md +3 -4
  209. package/plugin/skills/ase-meta-config/help.md +31 -10
  210. package/plugin/skills/ase-meta-mint/SKILL.md +5 -5
  211. package/plugin/skills/ase-meta-mint/help.md +10 -5
  212. package/plugin/skills/ase-meta-why/help.md +1 -1
  213. package/plugin/skills/ase-meta-workflow/SKILL.md +7 -7
  214. package/plugin/skills/ase-meta-workflow/help.md +4 -4
  215. package/plugin/skills/ase-meta-workflow/sample.md +3 -3
  216. package/plugin/skills/ase-meta-workflow/workflow.txt +22 -18
  217. package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/SKILL.md +4 -3
  218. package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/help.md +5 -5
  219. package/plugin/skills/{ase-meta-commit → ase-repo-commit}/SKILL.md +6 -6
  220. package/plugin/skills/{ase-meta-commit → ase-repo-commit}/help.md +5 -5
  221. package/plugin/skills/{ase-meta-diff → ase-repo-diff}/SKILL.md +6 -6
  222. package/plugin/skills/{ase-meta-diff → ase-repo-diff}/help.md +8 -8
  223. package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/SKILL.md +19 -19
  224. package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/help.md +10 -12
  225. package/plugin/skills/ase-repo-merge/SKILL.md +346 -0
  226. package/plugin/skills/ase-repo-merge/help.md +107 -0
  227. package/plugin/skills/ase-repo-resolve/SKILL.md +158 -0
  228. package/plugin/skills/ase-repo-resolve/help.md +102 -0
  229. package/plugin/skills/ase-repo-review/SKILL.md +406 -0
  230. package/plugin/skills/ase-repo-review/help.md +181 -0
  231. package/plugin/skills/ase-spec-edit/SKILL.md +117 -183
  232. package/plugin/skills/ase-spec-edit/help.md +107 -26
  233. package/plugin/skills/ase-sync-reconcile/help.md +1 -1
  234. package/plugin/skills/ase-task-assign/SKILL.md +111 -0
  235. package/plugin/skills/ase-task-assign/help.md +119 -0
  236. package/plugin/skills/ase-task-condense/SKILL.md +21 -21
  237. package/plugin/skills/ase-task-condense/help.md +12 -10
  238. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  239. package/plugin/skills/ase-task-dissect/SKILL.md +71 -48
  240. package/plugin/skills/ase-task-dissect/help.md +10 -9
  241. package/plugin/skills/ase-task-edit/SKILL.md +379 -94
  242. package/plugin/skills/ase-task-edit/help.md +95 -22
  243. package/plugin/skills/ase-task-estimate/SKILL.md +492 -0
  244. package/plugin/skills/ase-task-estimate/help.md +158 -0
  245. package/plugin/skills/ase-task-grill/SKILL.md +246 -138
  246. package/plugin/skills/ase-task-grill/help.md +129 -26
  247. package/plugin/skills/ase-task-id/SKILL.md +8 -1
  248. package/plugin/skills/ase-task-id/help.md +6 -3
  249. package/plugin/skills/ase-task-implement/SKILL.md +535 -145
  250. package/plugin/skills/ase-task-implement/help.md +138 -47
  251. package/plugin/skills/ase-task-integrate/SKILL.md +549 -0
  252. package/plugin/skills/ase-task-integrate/help.md +187 -0
  253. package/plugin/skills/ase-task-list/SKILL.md +55 -23
  254. package/plugin/skills/ase-task-list/help.md +45 -21
  255. package/plugin/skills/ase-task-reboot/SKILL.md +84 -43
  256. package/plugin/skills/ase-task-reboot/help.md +28 -8
  257. package/plugin/skills/ase-task-rename/SKILL.md +10 -2
  258. package/plugin/skills/ase-task-research/SKILL.md +386 -0
  259. package/plugin/skills/ase-task-research/help.md +102 -0
  260. package/plugin/skills/ase-task-status/SKILL.md +137 -0
  261. package/plugin/skills/ase-task-status/help.md +80 -0
  262. package/plugin/skills/ase-task-view/SKILL.md +49 -24
  263. package/plugin/skills/ase-task-view/help.md +19 -9
  264. package/plugin/agents/ase-meta-review.md +0 -187
  265. package/plugin/skills/ase-code-craft/SKILL.md +0 -264
  266. package/plugin/skills/ase-code-craft/help.md +0 -122
  267. package/plugin/skills/ase-code-refactor/SKILL.md +0 -232
  268. package/plugin/skills/ase-code-refactor/help.md +0 -109
  269. package/plugin/skills/ase-code-resolve/SKILL.md +0 -289
  270. package/plugin/skills/ase-code-resolve/help.md +0 -116
  271. package/plugin/skills/ase-meta-review/SKILL.md +0 -210
  272. package/plugin/skills/ase-meta-review/help.md +0 -96
  273. package/plugin/skills/ase-task-preflight/SKILL.md +0 -166
  274. package/plugin/skills/ase-task-preflight/help.md +0 -82
  275. /package/dst/{ase-ignore.js → ase-lib-ignore.js} +0 -0
  276. /package/dst/{ase-stdio.js → ase-lib-stdio.js} +0 -0
  277. /package/dst/{ase-kv.js → ase-service-kv.js} +0 -0
  278. /package/dst/{ase-sleep.js → ase-service-sleep.js} +0 -0
  279. /package/dst/{ase-timestamp.js → ase-service-timestamp.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-spec-edit
3
- argument-hint: "[--help|-h] [--grill|-g] [--grill-rounds|-r <n>] [--verify|-v] [--worktree|-w] [--loop|-l] [<query>]"
3
+ argument-hint: "[--help|-h] [--approach|-a] [--grill|-g] [--grill-rounds|-r <n>] [--grill-until|-u MUST|SHOULD|MAY] [--grill-perspective|-p <perspective>] [--grill-ground|-G] [--verify|-v] [--worktree|-w <name>[:<branch>]] [--loop|-l] [<query>]"
4
4
  description: >
5
5
  Edit Specification: Use when the user wants to "edit" the
6
6
  SpecBook-based specification (SPEC) in one shot from a query, with
@@ -22,7 +22,7 @@ Edit Specification
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-spec-edit"
25
- arg2="--grill|-g --grill-rounds|-r=1 --verify|-v --worktree|-w --loop|-l">
25
+ arg2="--approach|-a --grill|-g --grill-rounds|-r=1 --grill-until|-u=(MUST|SHOULD|MAY) --grill-perspective|-p= --grill-ground|-G --verify|-v --worktree|-w= --loop|-l">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -36,6 +36,8 @@ pruning its statements in one shot -- through the states *querying*,
36
36
  @${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md
37
37
  @${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
38
38
  @${CLAUDE_SKILL_DIR}/../../meta/ase-common-grill.md
39
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-common-changeset.md
40
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-common-approach.md
39
41
 
40
42
  Procedure
41
43
  ---------
@@ -80,6 +82,12 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
80
82
  ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ ERROR: invalid `--grill-rounds` value: **<getopt-option-grill-rounds/>**
81
83
  </template>
82
84
 
85
+ 3. Resolve a potentially misparsed former boolean `--worktree`
86
+ option:
87
+
88
+ <expand name="changeset-ambiguity"
89
+ arg1="✪ skill: **ase-spec-edit**"></expand>
90
+
83
91
  2. **Iterate:**
84
92
 
85
93
  Perform the states (1) *querying*, (2) *discovering*, (3) *grilling*,
@@ -135,18 +143,50 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
135
143
 
136
144
  4. **State: discovering:**
137
145
 
138
- 1. Resolve the `SPEC` artifacts by calling the
139
- `ase_artifact_list(kind: [ "spec" ])` tool of the `ase` MCP
140
- server *once* and reading the returned `artifacts` array of
141
- `{ kind, files }` objects to obtain the project-relative file
146
+ 1. <if condition="<getopt-option-worktree/> is not empty and <worktree-dir/> is empty">
147
+
148
+ One *single* worktree serves the whole skill run: it is
149
+ prepared *once* before the first discovery, so discovering,
150
+ grilling, and implementing all operate on the *same* tree, and
151
+ all further `--loop` iterations land in it, too.
152
+
153
+ <expand name="changeset-context"
154
+ arg1="<getopt-option-worktree/>"
155
+ arg2="✪ skill: **ase-spec-edit**"
156
+ arg3="true"
157
+ arg4="true"></expand>
158
+
159
+ Set <worktree-dir><context-dir/></worktree-dir>. Do not output
160
+ anything.
161
+
162
+ </if>
163
+
164
+ 2. <if condition="<worktree-dir/> is not empty">
165
+ <expand name="changeset-land" arg1="<worktree-dir/>"></expand>
166
+ </if>
167
+
168
+ 3. Resolve the `SPEC` artifacts to their project-relative file
142
169
  list. Do not output anything.
143
170
 
144
- 2. Read the **SpecBook SCHEMA Model** of the project (resolved as
171
+ <if condition="<worktree-dir/> is not empty">
172
+ Run the command `ase artifact list --kind spec` *once* with
173
+ <worktree-dir/> as its working directory and parse its
174
+ `- <file/>` output lines into the file list -- the
175
+ `ase_artifact_list` tool always resolves against the *project*
176
+ working copy and hence *MUST* *NOT* be used here.
177
+ </if>
178
+ <else>
179
+ Call the `ase_artifact_list(kind: [ "spec" ])` tool of the `ase`
180
+ MCP server *once* and read the returned `artifacts` array of
181
+ `{ kind, files }` objects into the file list.
182
+ </else>
183
+
184
+ 4. Read the **SpecBook SCHEMA Model** of the project (resolved as
145
185
  described in `ase-format-spec.md`) to learn the allowed object
146
186
  kinds, properties, nestings, and value constraints. Do not
147
187
  output anything.
148
188
 
149
- 3. Read all resolved `SPEC` artifacts which are related to
189
+ 5. Read all resolved `SPEC` artifacts which are related to
150
190
  <todo-what/> and <todo-how/>, and check the structure of the
151
191
  existing specification -- its artifacts, object kinds, ids,
152
192
  properties, descriptions, and `[[xxx]]` references -- to
@@ -161,10 +201,21 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
161
201
 
162
202
  1. Understand what "grilling" is about:
163
203
 
164
- <expand name="grill-understanding" arg1="the edit query in <todo-what/> and <todo-how/>"></expand>
204
+ <expand name="grill-understanding"
205
+ arg1="the edit query in <todo-what/> and <todo-how/>"
206
+ arg2="<getopt-option-grill-perspective/>"
207
+ arg3="<getopt-option-grill-ground/>"></expand>
165
208
 
166
- 2. Perform <getopt-option-grill-rounds/> grilling *rounds*,
167
- numbered <m/> (1-<getopt-option-grill-rounds/>).
209
+ 2. Ground the grilling:
210
+
211
+ <expand name="grill-ground"
212
+ arg1="the edit query in <todo-what/> and <todo-how/>"
213
+ arg2="<worktree-dir/>"></expand>
214
+
215
+ 3. Perform *at most* <getopt-option-grill-rounds/> grilling
216
+ *rounds*, numbered <m/> (1-<getopt-option-grill-rounds/>) --
217
+ the round count is a *maximum* only, as every round can
218
+ *stop* the grilling *early* in its item 2 below.
168
219
 
169
220
  For each round:
170
221
 
@@ -172,7 +223,8 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
172
223
 
173
224
  Explicitly start *from scratch* from *only* the current
174
225
  <todo-what/> and <todo-how/> and *forget* all information
175
- gathered in previous rounds. Set <round-id/> to
226
+ gathered in previous rounds -- except the grounding facts
227
+ <grill-facts/>. Set <round-id/> to
176
228
  `GRILLING ROUND <m/>/<getopt-option-grill-rounds/>` if
177
229
  <getopt-option-grill-rounds/> is greater than 1, or to
178
230
  `GRILLING` otherwise (a single round needs no round
@@ -180,82 +232,23 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
180
232
 
181
233
  2. DETERMINE QUESTIONS:
182
234
 
183
- Determine the questions, comprised of a round-local id
184
- <question-N-id/> of `Q<N/>` -- where <N/> restarts at `1`
185
- in *every* round, independent of the numbering of previous
186
- rounds --, and a very brief but precise question text
187
- <question-N-text/>. Each question is chosen to
188
- resolve the open points related to the above understanding
189
- of grilling, by focusing on the mentioned *Focus Areas*.
190
-
191
- For <question-N-text/> use the format `Shall...?` for
192
- questions of focus area `DOMAIN` and `INTERFACE`, the format
193
- `Should...?` for questions of focus area `ARCHITECTURE`,
194
- and the format `May...?` for questions of focus area
195
- `IMPLEMENTATION`.
196
-
197
- In every <question-N-text/>, encode all *literal aspects*
198
- -- file paths, artifact ids, object kinds, object ids,
199
- property keys, references, and literal values -- with
200
- backticks.
201
-
202
- Keep every <question-N-text/> at most *200 characters* long
203
- -- compact the text until it fits --, as a longer question
204
- overflows its table cell and silently degrades the entire
205
- table into a plain text rendering.
206
-
207
- 3. DETERMINE CONTEXT:
208
-
209
- For each question, determine its focus area
210
- <context-N-focus/> from the mentioned *Focus Areas*, a 1-3
211
- word hint <context-N-topic/>, describing what the question
212
- is about, and a <context-N-severity/>, describing how
213
- important this question is.
214
-
215
- Set <context-N-id/> to `DOM` for <context-N-focus/> of
216
- `DOMAIN`, `IFC` for <context-N-focus/> of `INTERFACE`, `ARC`
217
- for <context-N-focus/> of `ARCHITECTURE`, and `IMP` for
218
- <context-N-focus/> of `IMPLEMENTATION`.
219
-
220
- 4. SORT QUESTIONS:
221
-
222
- Finally, *sort* the questions by descending focus area
223
- order -- first all `DOMAIN`, then all `INTERFACE`, then all
224
- `ARCHITECTURE`, and then all `IMPLEMENTATION` ones -- and
225
- renumber <N/> according to this order, starting at `1`.
226
- Truncate the list after a maximum of 10 questions and set
227
- <n/> to the number of remaining questions. Do not output
228
- anything.
229
-
230
- Finally, assemble the <question-N/> out of
231
- `**<question-N-id/>** ▶ **<context-N-id/>** ▷
232
- **<context-N-topic/>**: <question-N-text/>`.
233
-
234
- 5. DETERMINE ANSWERS:
235
-
236
- For all remaining <question-N/>, check the specification and
237
- your world knowledge to find *two to three* grounded answer
238
- alternatives <answer-N-K/> with a question-local id
239
- <answer-N-K-id/> of `A<K/>` -- where <K/> restarts at `1`
240
- for *every* question, independent of the numbering of other
241
- questions --, a 1-3 word label <answer-N-K-label/>, and
242
- an ultra brief description <answer-N-K-description/> of
243
- at most *10 words*. For the answer which reflects the
244
- current <todo-what/>/<todo-how/> understanding, append
245
- ` ⚑` to its <answer-N-K-label/>.
246
-
247
- Assemble an <answer-N/> out of `**<answer-N-1-id/>**
248
- ▶ **<answer-N-1-label/>**: <answer-N-1-description/>,
249
- **<answer-N-2-id/>** ▶ **<answer-N-2-label/>**:
250
- <answer-N-2-description/>[, ...]`.
251
-
252
- Keep every assembled <answer-N/> at most *240 characters*
253
- long -- drop the least relevant alternative and compact the
254
- descriptions until it fits -- as a longer answer overflows
255
- its table cell and silently degrades the entire table into a
256
- plain text rendering.
257
-
258
- 6. INTERACTIVE DIALOG:
235
+ <expand name="grill-questions"
236
+ arg1="<getopt-option-grill-until/>"
237
+ arg2="✪ skill: **ase-spec-edit**"
238
+ arg3="file paths, artifact ids, object kinds, object ids, property keys, references, and literal values"
239
+ arg4="the specification"
240
+ arg5="">
241
+ <if condition="<getopt-option-verify/> is not equal `true`">
242
+ Raise *no* questions at all of focus area `REGRESSION`
243
+ or `CONFIRMATION`, as without `--verify` no verification
244
+ takes place which could honor their decisions.
245
+ </if></expand>
246
+
247
+ If <grill-stop/> is `true`, skip the remaining items of
248
+ this round and all remaining rounds, and continue with
249
+ the *implementing* state.
250
+
251
+ 3. INTERACTIVE DIALOG:
259
252
 
260
253
  In the following, you *MUST* *NOT* use your built-in
261
254
  <user-dialog-tool/> tool! Instead, you *MUST* just show a
@@ -265,8 +258,8 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
265
258
  `SKIP GRILLING` and `STOP SKILL`, dispatched as follows:
266
259
 
267
260
  - If a <result/> is `SKIP GRILLING` or `CANCEL`, ask no
268
- further questions, continue with item 7 below (merging
269
- the answers gathered so far), and after item 8 skip all
261
+ further questions, continue with item 4 below (merging
262
+ the answers gathered so far), and after item 5 skip all
270
263
  remaining rounds and continue with the *implementing*
271
264
  state.
272
265
 
@@ -278,54 +271,31 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
278
271
  ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ status: **editing stopped**
279
272
  </template>
280
273
 
281
- 1. Output only the following <template/> -- it lists *all*
282
- questions of the round up-front, one table row per
283
- aspect, so the subsequent dialog only has to ask for the
284
- combined answer. Align all column edges of the table.
285
-
286
- In every table cell you *MUST* escape each literal pipe
287
- character outside a code span as `\|` and you *MUST*
288
- open *and* close every backtick code span within the
289
- *same* cell -- an unescaped pipe or an unbalanced
290
- backtick run splits the cell and silently degrades the
291
- entire table into a plain text rendering:
292
-
293
- <template>
294
- ⧉ **ASE**: <round-id/>: *Relentless Interviewing Until Clarity*
295
-
296
- | QUESTION | ANSWERS |
297
- | ------------- | ----------- |
298
- | <question-1/> | <answer-1/> |
299
- | <question-2/> | <answer-2/> |
300
- | [...] | [...] |
301
-
302
- Legend: **DOM**: Domain (MUST), **IFC**: Interface (MUST), **ARC**: Architecture (SHOULD), **IMP**: Implementation (MAY)
303
- **Qn**: round-local question id, **An**: question-local answer id, ⚑: current decision state
304
- </template>
305
-
306
- 2. Show a custom dialog. Its only answer options are the
307
- two fixed ones, so the user normally answers all aspects in
308
- *one* free-text reply:
274
+ Show a custom dialog. Its only answer options are the
275
+ two fixed ones, so the user normally answers all aspects in
276
+ *one* free-text reply:
309
277
 
310
- <expand name="custom-dialog" arg1="--other">
311
- <round-id/>: What is your (combined) answer to all (or a subset) of the above questions? (keywords or `Qn:An` references are sufficient)
312
- SKIP GRILLING: skip all remaining grilling and continue with the implementation
313
- STOP SKILL: stop the entire skill immediately
314
- </expand>
278
+ <expand name="custom-dialog" arg1="--other">
279
+ <round-id/>: What is your (combined) answer to all (or a subset) of the above questions? (keywords or `nX` short responses are sufficient)
280
+ SKIP GRILLING: skip all remaining grilling and continue with the implementation
281
+ STOP SKILL: stop the entire skill immediately
282
+ </expand>
315
283
 
316
- Dispatch `SKIP GRILLING`, `STOP SKILL`, and `CANCEL` as
317
- defined above. Otherwise, strip any leading `OTHER: `
318
- prefix from <result/> and treat the remainder as the
319
- combined free-text answers to all questions of the
320
- round.
284
+ Dispatch `SKIP GRILLING`, `STOP SKILL`, and `CANCEL` as
285
+ defined above. Otherwise, strip any leading `OTHER: `
286
+ prefix from <result/> and treat the remainder as the
287
+ combined free-text answers to all questions of the
288
+ round.
321
289
 
322
- 7. MERGE ANSWERS INTO TODO:
290
+ 4. MERGE ANSWERS INTO TODO:
323
291
 
324
292
  Merge all gathered answers in <result/> of the round -- the
325
293
  combined reply -- *exclusively* back into <todo-what/> and
326
294
  <todo-how/>. Do not output anything.
327
295
 
328
- 8. SHOW CURRENT TODO:
296
+ <expand name="grill-short-responses"></expand>
297
+
298
+ 5. SHOW UPDATED TODO:
329
299
 
330
300
  Set <round-suffix/> to
331
301
  ` round <m/>/<getopt-option-grill-rounds/>` if
@@ -344,58 +314,28 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
344
314
  the following creation and updating of specification content. Do
345
315
  not output anything.
346
316
 
347
- 2. <if condition="<getopt-option-worktree/> is equal `true` and <worktree-dir/> is empty">
348
-
349
- One *single* worktree serves the whole skill run: it is created
350
- *once* before the first change set is applied, and all further
351
- `--loop` iterations land in it, too.
352
-
353
- 1. Set <worktree-name/> to a unique name, derived from
354
- <todo-what/>, which consists of two lower-case words
355
- concatenated with a `-` character. Do not output anything.
317
+ 2. <if condition="<getopt-option-approach/> is equal `true`">
356
318
 
357
- 2. Determine the *worktree directory* by calling the
358
- `ase_worktree_path(id: "<worktree-name/>", create: true)`
359
- tool of the `ase` MCP server and capturing its output into
360
- <worktree-dir/>. You *MUST* *NEVER* assemble this path
361
- yourself. If this tool call fails, only output the following
362
- <template/> and then immediately *STOP* processing the
363
- entire current skill, leaving the working copy *untouched*:
364
-
365
- <template>
366
- ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ ERROR: no Git repository or unsafe worktree directory -- cannot create worktree
367
- </template>
368
-
369
- 3. Determine the *existing worktrees* and *existing branches*
370
- by running the commands `git worktree list --porcelain` and
371
- `git branch --list` (taken exactly as given) and capturing
372
- their outputs. If the worktree directory <worktree-dir/> or
373
- the branch <worktree-name/> already exists, only output the
374
- following <template/> and then immediately *STOP* processing
375
- the entire current skill, leaving the existing worktree, its
376
- branch, and the working copy *untouched*:
319
+ Determine the overall approach of the edit, based on
320
+ <todo-what/> and <todo-how/> plus the information gathered in
321
+ the *discovering* state:
377
322
 
378
- <template>
379
- ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ ERROR: worktree or branch **<worktree-name/>** already exists
380
- </template>
323
+ <expand name="approach-select"
324
+ arg1="specification"
325
+ arg2="✪ skill: **ase-spec-edit**"></expand>
381
326
 
382
- 4. Create the worktree by running the command
383
- `git worktree add "<worktree-dir/>"` (taken exactly as
384
- given), which creates the directory *and* -- named after its
385
- last path component -- the branch <worktree-name/> from
386
- `HEAD`. If this command fails, only output the following
387
- <template/> and then immediately *STOP* processing the
388
- entire current skill, leaving the working copy *untouched*:
327
+ If <chosen-approach/> is empty, only output the following <template/>
328
+ and then immediately *STOP* processing the entire current skill:
389
329
 
390
- <template>
391
- ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ ERROR: worktree **<worktree-name/>** failed to create
392
- </template>
330
+ <template>
331
+ ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ status: **editing stopped**
332
+ </template>
393
333
 
394
- 5. Only output the following <template/>:
334
+ Otherwise, merge <chosen-approach/> *exclusively* into <todo-how/>,
335
+ where the chosen approach overrides any conflicting
336
+ implementation detail, and expand the following:
395
337
 
396
- <template>
397
- ⧉ **ASE**: ✪ skill: **ase-spec-edit**, ◉ worktree: **.ase/worktree/<worktree-name/>**, ▶ status: **worktree created**
398
- </template>
338
+ <expand name="todo-box" arg1="current state (after approaching)"></expand>
399
339
 
400
340
  </if>
401
341
 
@@ -427,13 +367,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
427
367
  there, too.
428
368
 
429
369
  <if condition="<worktree-dir/> is not empty">
430
- The change set *MUST* land *exclusively inside* the worktree
431
- <worktree-dir/>: resolve *every* file path relative to
432
- <worktree-dir/> instead of the original working copy. You *MUST*
433
- *NEVER* modify, stage, stash, revert, or commit anything
434
- *outside* of this worktree. Leave the worktree *uncommitted*:
435
- do *not* run `git add` and do *not* run `git commit`, so the
436
- user keeps full control over the final commit.
370
+ <expand name="changeset-land" arg1="<worktree-dir/>"></expand>
437
371
  </if>
438
372
 
439
373
  5. Output only the following <template/>. You *MUST* *NOT* output a
@@ -7,10 +7,14 @@
7
7
 
8
8
  `ase-spec-edit`
9
9
  [`--help`|`-h`]
10
+ [`--approach`|`-a`]
10
11
  [`--grill`|`-g`]
11
12
  [`--grill-rounds`|`-r` *n*]
13
+ [`--grill-until`|`-u` `MUST`|`SHOULD`|`MAY`]
14
+ [`--grill-perspective`|`-p` *perspective*]
15
+ [`--grill-ground`|`-G`]
12
16
  [`--verify`|`-v`]
13
- [`--worktree`|`-w`]
17
+ [`--worktree`|`-w` *name*[`:`*branch*]]
14
18
  [`--loop`|`-l`]
15
19
  [*query*]
16
20
 
@@ -31,11 +35,12 @@ WHAT and its implementation-detail HOW parts), *discovering* (resolve
31
35
  the `SPEC` artifacts, read the *SpecBook* schema configuration of the
32
36
  project, and read the specification artifacts related to the query),
33
37
  *grilling* (optionally stress-test the query with rounds of questions),
34
- *implementing* (apply the change set in place, honoring the GENERIC and
35
- SPECIFYING tenets and the `SPEC` format contract), and *verifying*
36
- (optionally validate the specification until it passes). The *querying*
37
- state and every *grilling* round close with an `EDIT TODO` box showing
38
- the established `WHAT` and `HOW` information.
38
+ *implementing* (optionally select an approach, then apply the change set
39
+ in place, honoring the GENERIC and SPECIFYING tenets and the `SPEC`
40
+ format contract), and *verifying* (optionally validate the specification
41
+ until it passes). The *querying* state, every *grilling* round, and the
42
+ approach selection close with an `EDIT TODO` box showing the established
43
+ `WHAT` and `HOW` information.
39
44
 
40
45
  The change set stays strictly restricted to the `SPEC` artifacts -- the
41
46
  artifact kinds `CODE`, `DOCS`, `TASK`, `INFR`, and `OTHR` are never
@@ -45,6 +50,15 @@ timestamp refreshed.
45
50
 
46
51
  ## OPTIONS
47
52
 
53
+ - `--approach`|`-a`:
54
+ Before applying the change set, propose one or more specification
55
+ approaches with pros and cons, recommend one of them, and let the
56
+ user pick the preferred one via an interactive dialog (or, under the
57
+ `black` project boxing or in headless mode, automatically pick the
58
+ recommended one). The chosen approach is merged into the HOW part of
59
+ the query. Without `--approach`, no approaches are determined at
60
+ all.
61
+
48
62
  - `--grill`|`-g`:
49
63
  Grill the query before implementing, similar to `ase-task-grill`:
50
64
  raise 1-10 questions per round which resolve the open points of the
@@ -52,11 +66,16 @@ timestamp refreshed.
52
66
  (domain-specifics, must be clarified), `INTERFACE` (externally
53
67
  observable behavior or UI/API interfaces, must be clarified),
54
68
  `ARCHITECTURE` (structure, wiring, placement, or dependencies,
55
- should be clarified), or `IMPLEMENTATION` (inner technical details,
56
- can be clarified) -- and a 1-3 word `TOPIC` hint. The questions of a
57
- round are sorted by descending focus area importance (`DOMAIN`,
58
- `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`) and are announced
59
- together below a `GRILLING ROUND K/L` line (the round numbering is
69
+ should be clarified), `IMPLEMENTATION` (inner technical details,
70
+ can be clarified), `REGRESSION` (what must not break, should be
71
+ clarified), or `CONFIRMATION` (what proves the specified behavior,
72
+ should be clarified) -- and a 1-3 word `TOPIC` hint. The questions
73
+ of a round are sorted by descending focus area importance
74
+ (`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`,
75
+ `REGRESSION`, `CONFIRMATION`). Questions of focus area
76
+ `REGRESSION` and `CONFIRMATION` are raised only together with
77
+ `--verify`, as only then a verification honors their decisions.
78
+ All questions of a round are announced together below a `GRILLING ROUND K/L` line (the round numbering is
60
79
  omitted when only a single round is performed) as a
61
80
  `QUESTION`/`ANSWERS` table with one row per question, each row
62
81
  carrying two to three grounded answer alternatives (with the
@@ -65,15 +84,54 @@ timestamp refreshed.
65
84
  whose question asks for the combined answer to all (or a subset) of
66
85
  the listed questions and whose only answer options are the fixed
67
86
  `SKIP GRILLING` (skip the remaining grilling) and `STOP SKILL` (stop
68
- the skill) ones, plus free-text input. The answers are merged back
69
- into the WHAT and HOW parts of the query. Without `--grill`, no
70
- questions are asked at all.
87
+ the skill) ones, plus free-text input. The questions are numbered
88
+ `1`, `2`, etc. and their answer alternatives are lettered `A`, `B`,
89
+ etc., so the free-text input can cherry-pick answers with short
90
+ responses matching `\d+[a-zA-Z]` (like `1A 2c`), freely mixed with
91
+ keyword text. The answers are merged back into the WHAT and HOW
92
+ parts of the query. Without `--grill`, no questions are asked at
93
+ all.
71
94
 
72
95
  - `--grill-rounds`|`-r` *n*:
73
- The number of grill rounds to apply (default: `1`). Each round
74
- starts from scratch from only the current WHAT and HOW parts,
96
+ The *maximum* number of grill rounds to apply (default: `1`). Each
97
+ round starts from scratch from only the current WHAT and HOW parts,
75
98
  forgetting all information of previous rounds, and closes with an
76
- `EDIT TODO` box. Only effective together with `--grill`.
99
+ `EDIT TODO` box. The grilling stops early -- announced by a
100
+ `grilling finished early` status line -- once a round, even the
101
+ first one, finds the open points clear enough according to
102
+ `--grill-until`. Only effective together with `--grill`.
103
+
104
+ - `--grill-until`|`-u` `MUST`|`SHOULD`|`MAY`:
105
+ Grill until at least all open points of the given severity or
106
+ higher are clear (default: `MUST`), where the severity follows from
107
+ the focus area: `MUST` (`DOMAIN`, `INTERFACE`), `SHOULD`
108
+ (`ARCHITECTURE`, `REGRESSION`, `CONFIRMATION`), and `MAY`
109
+ (`IMPLEMENTATION`). Independent of this, every open point is rated
110
+ with an individual impact (`HIGH`, `MEDIUM`, or `LOW`), which
111
+ decides which points are raised as questions and in which order
112
+ within a focus area. Only effective together with `--grill`.
113
+
114
+ - `--grill-perspective`|`-p` *perspective*:
115
+ Grill exclusively from the logical *perspective* -- a keyword or
116
+ short hint like `domain`, `performance`, or `security`. The
117
+ perspective acts as an exclusive lens: only open points relevant from
118
+ this perspective are raised as questions, while every question still
119
+ carries its focus area, severity, and impact. The active perspective
120
+ is shown in the announcement line, like `GRILLING (security)`.
121
+ Without a perspective, the grilling is holistic. Only effective together with `--grill`.
122
+
123
+ - `--grill-ground`|`-G`:
124
+ Ground the grilling in facts instead of the world knowledge of the
125
+ model alone: once before the first round, the artifacts of all kinds
126
+ (`SPEC`, `CODE`, `DOCS`, `INFR`, and `OTHR`) are scanned for
127
+ the project facts relevant to the grilled subject (from the given
128
+ perspective, if any) and the Internet/Web is searched for the
129
+ established practices, standards, patterns, and pitfalls about it.
130
+ These facts serve all rounds, both for raising the questions and for
131
+ preferably deriving their answer alternatives. The grounding is shown
132
+ in the announcement line, like `GRILLING (security, grounded)`. If
133
+ no usable facts are found, a warning is shown and the grilling falls
134
+ back to model knowledge. Only effective together with `--grill`.
77
135
 
78
136
  - `--verify`|`-v`:
79
137
  Verify the edited specification by validating it via *SpecBook*
@@ -82,14 +140,22 @@ timestamp refreshed.
82
140
  the last round are listed as `REMAINING DIAGNOSTICS`. Without
83
141
  `--verify`, strictly no validation is performed at all.
84
142
 
85
- - `--worktree`|`-w`:
86
- Apply the change sets inside a dedicated Git worktree (as
87
- `ase-task-implement --worktree`) instead of the current working
88
- copy. One single worktree, named by a two-word id derived from the
89
- first query, serves the whole skill run: all `--loop` iterations
90
- land in it and it is left uncommitted for review. Under `--verify`,
91
- the validation then runs as the `ase spec lint` command inside the
92
- worktree.
143
+ - `--worktree`|`-w` *name*[`:`*branch*]:
144
+ Apply the change sets inside the dedicated Git worktree
145
+ `.ase/worktree/<name>` instead of the current working copy. The
146
+ worktree is *reused* if it already exists -- then switched to
147
+ *branch* if given and it has no uncommitted changes --, otherwise
148
+ it is *created* with the branch *branch* (default: *name*),
149
+ checked out if it exists or created from `HEAD` otherwise. One
150
+ single worktree serves the whole skill run: it is prepared before
151
+ the first discovery, so discovering, grilling, and implementing all
152
+ operate on it, all `--loop` iterations land in it, and it is left
153
+ uncommitted for review. Under
154
+ `--verify`, the validation then runs as the `ase spec lint` command
155
+ inside the worktree. If *name* is a bare lower-case word naming no
156
+ existing worktree and a *query* follows (like `-w fix the crash`, a
157
+ former boolean `-w` usage), the skill asks whether *name* is the
158
+ worktree name or the first query word.
93
159
 
94
160
  - `--loop`|`-l`:
95
161
  Loop the whole state cycle: after each iteration, ask for the next
@@ -110,6 +176,7 @@ timestamp refreshed.
110
176
  - You want `SPEC` changes without the task plan ceremony
111
177
  - You want the query stress-tested by grilling before the spec is edited
112
178
  - You want specification edits validated by SpecBook linting
179
+ - You want the change set to land on a specific Git branch or worktree
113
180
 
114
181
  ## EXAMPLES
115
182
 
@@ -125,10 +192,24 @@ Grill the query with two rounds first, then edit and validate:
125
192
  ❯ /ase-spec-edit -g -r 2 -v split the Event entity into Event and EventSeries
126
193
  ```
127
194
 
195
+ Let the user pick one of several specification approaches first, then
196
+ edit:
197
+
198
+ ```text
199
+ ❯ /ase-spec-edit -a model the access permissions of the personas
200
+ ```
201
+
202
+ Grill the query exclusively from the domain perspective, grounded in
203
+ the project artifacts and the Internet/Web, then edit:
204
+
205
+ ```text
206
+ ❯ /ase-spec-edit -g -p domain -G add recurring events to the Event model
207
+ ```
208
+
128
209
  Loop over multiple specification edits inside a dedicated Git worktree:
129
210
 
130
211
  ```text
131
- ❯ /ase-spec-edit -l -w
212
+ ❯ /ase-spec-edit -l -w event-series
132
213
  ```
133
214
 
134
215
  ## SEE ALSO
@@ -134,5 +134,5 @@ specification as a unified diff, without applying it:
134
134
 
135
135
  ## SEE ALSO
136
136
 
137
- [`ase-meta-changelog`](../ase-meta-changelog/help.md),
137
+ [`ase-repo-changelog`](../ase-repo-changelog/help.md),
138
138
  [`ase-task-implement`](../ase-task-implement/help.md).