@rse/ase 1.0.7 → 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.
- package/dst/ase-agent-definition-api.d.ts +184 -0
- package/dst/ase-agent-definition-api.js +6 -0
- package/dst/ase-agent-definition-builtin/condenser.js +42 -0
- package/dst/ase-agent-definition-builtin/editor.js +45 -0
- package/dst/ase-agent-definition-builtin/estimator.js +98 -0
- package/dst/ase-agent-definition-builtin/implementer.js +121 -0
- package/dst/ase-agent-definition-builtin/integrator.js +56 -0
- package/dst/ase-agent-definition-builtin/qualifier.js +61 -0
- package/dst/ase-agent-definition-builtin/rebooter.js +41 -0
- package/dst/ase-agent-definition-builtin/researcher.js +77 -0
- package/dst/ase-agent-definition-core.js +827 -0
- package/dst/ase-agent-fleet.js +772 -0
- package/dst/ase-agent-process.js +232 -0
- package/dst/ase-agent-relay-client.js +509 -0
- package/dst/ase-agent-relay-core.js +213 -0
- package/dst/ase-agent-relay-server-bind.js +242 -0
- package/dst/ase-agent-relay-server-cli.js +50 -0
- package/dst/ase-agent-runtime-claim.js +189 -0
- package/dst/ase-agent-runtime-engine.js +1100 -0
- package/dst/ase-agent-runtime-exec.js +275 -0
- package/dst/ase-agent-runtime-phase.js +581 -0
- package/dst/ase-agent-runtime-request.js +272 -0
- package/dst/ase-agent-runtime-tool.js +207 -0
- package/dst/ase-agent-runtime.js +1316 -0
- package/dst/ase-agent.js +65 -0
- package/dst/ase-artifact.js +6 -5
- package/dst/ase-config-core.js +465 -0
- package/dst/ase-config-schema.js +351 -0
- package/dst/ase-config-scope.js +172 -0
- package/dst/ase-config.js +25 -585
- package/dst/ase-hook.js +228 -111
- package/dst/ase-lib-daemon-cli.js +130 -0
- package/dst/ase-lib-hash.js +20 -0
- package/dst/{ase-log.js → ase-lib-log.js} +40 -7
- package/dst/ase-lib-server-bind.js +115 -0
- package/dst/ase-lib-server-cli.js +474 -0
- package/dst/{ase-table.js → ase-lib-table.js} +1 -1
- package/dst/{ase-version.js → ase-lib-version.js} +3 -0
- package/dst/ase-man.js +96 -0
- package/dst/ase-mcp.js +166 -13
- package/dst/{ase-getopt.js → ase-service-getopt.js} +82 -80
- package/dst/{ase-markdown.js → ase-service-markdown.js} +18 -11
- package/dst/ase-service-otel.js +1246 -0
- package/dst/{ase-skills.js → ase-service-skills.js} +29 -64
- package/dst/ase-service-state.js +101 -0
- package/dst/ase-service.js +251 -76
- package/dst/ase-setup-common.js +141 -0
- package/dst/ase-setup-mcp.js +359 -0
- package/dst/ase-setup-settings.js +837 -0
- package/dst/ase-setup.js +113 -869
- package/dst/ase-spec.js +31 -19
- package/dst/ase-statusline.js +108 -43
- package/dst/ase-task-board-core.js +739 -0
- package/dst/ase-task-board-filter.js +127 -0
- package/dst/ase-task-board-flow.js +237 -0
- package/dst/ase-task-board-graph.js +497 -0
- package/dst/ase-task-board-stats.js +263 -0
- package/dst/ase-task-board-tui-control.js +775 -0
- package/dst/ase-task-board-tui-model.js +1008 -0
- package/dst/ase-task-board-tui-popup.js +626 -0
- package/dst/ase-task-board-tui-style.js +106 -0
- package/dst/ase-task-board-tui-view.js +847 -0
- package/dst/ase-task-board-tui.js +189 -0
- package/dst/ase-task-board-web-client.css +1 -0
- package/dst/ase-task-board-web-client.html +20 -0
- package/dst/ase-task-board-web-client.js +81 -0
- package/dst/ase-task-board-web-server.js +823 -0
- package/dst/ase-task-board.js +134 -0
- package/dst/ase-task-format.js +757 -0
- package/dst/ase-task-request.js +208 -0
- package/dst/ase-task-store-client.js +495 -0
- package/dst/ase-task-store-core.js +804 -0
- package/dst/ase-task-store-issues.js +237 -0
- package/dst/ase-task-store-plugin-api.js +6 -0
- package/dst/ase-task-store-plugin-ase.js +484 -0
- package/dst/ase-task-store-plugin-delegate.js +137 -0
- package/dst/ase-task-store-plugin-gitea.js +666 -0
- package/dst/ase-task-store-plugin-github.js +696 -0
- package/dst/ase-task-store-plugin-gitlab.js +668 -0
- package/dst/ase-task-store-server-bind.js +538 -0
- package/dst/ase-task-store-server-cli.js +154 -0
- package/dst/ase-task.js +1335 -357
- package/dst/{ase-compat.js → ase-util-compat.js} +2 -2
- package/dst/{ase-diagram.js → ase-util-diagram.js} +107 -32
- package/dst/{ase-meta.js → ase-util-meta.js} +2 -2
- package/dst/{ase-metric.js → ase-util-metric.js} +2 -2
- package/dst/{ase-mint.js → ase-util-mint.js} +19 -12
- package/dst/{ase-worktree.js → ase-util-worktree.js} +30 -19
- package/dst/ase-util.js +20 -0
- package/dst/ase.js +108 -32
- package/dst/man/ase-agent-adhoc.1 +515 -0
- package/dst/man/ase-agent-condenser.1 +193 -0
- package/dst/man/ase-agent-editor.1 +212 -0
- package/dst/man/ase-agent-estimator.1 +214 -0
- package/dst/man/ase-agent-fleet.1 +185 -0
- package/dst/man/ase-agent-implementer.1 +233 -0
- package/dst/man/ase-agent-integrator.1 +213 -0
- package/dst/man/ase-agent-qualifier.1 +214 -0
- package/dst/man/ase-agent-rebooter.1 +193 -0
- package/dst/man/ase-agent-relay.1 +128 -0
- package/dst/man/ase-agent-researcher.1 +217 -0
- package/dst/man/ase-agent.1 +264 -0
- package/dst/man/ase-artifact-list.1 +38 -0
- package/dst/man/ase-artifact-name.1 +39 -0
- package/dst/man/ase-artifact.1 +56 -0
- package/dst/man/ase-config-delete.1 +45 -0
- package/dst/man/ase-config-edit.1 +48 -0
- package/dst/man/ase-config-get.1 +46 -0
- package/dst/man/ase-config-init.1 +60 -0
- package/dst/man/ase-config-list.1 +42 -0
- package/dst/man/ase-config-set.1 +52 -0
- package/dst/man/ase-config.1 +225 -0
- package/dst/man/ase-hook-permission-request.1 +36 -0
- package/dst/man/ase-hook-pre-tool-use.1 +59 -0
- package/dst/man/ase-hook-session-end.1 +47 -0
- package/dst/man/ase-hook-session-persona.1 +37 -0
- package/dst/man/ase-hook-session-start.1 +81 -0
- package/dst/man/ase-hook-stop.1 +34 -0
- package/dst/man/ase-hook-user-prompt-submit.1 +34 -0
- package/dst/man/ase-hook.1 +51 -0
- package/dst/man/ase-man.1 +67 -0
- package/dst/man/ase-mcp.1 +61 -0
- package/dst/man/ase-service-log.1 +43 -0
- package/dst/man/ase-service-send.1 +47 -0
- package/dst/man/ase-service-start.1 +54 -0
- package/dst/man/ase-service-status.1 +46 -0
- package/dst/man/ase-service-stop.1 +37 -0
- package/dst/man/ase-service.1 +85 -0
- package/dst/man/ase-setup-disable.1 +44 -0
- package/dst/man/ase-setup-enable.1 +45 -0
- package/dst/man/ase-setup-install.1 +73 -0
- package/dst/man/ase-setup-mcp.1 +124 -0
- package/dst/man/ase-setup-status.1 +60 -0
- package/dst/man/ase-setup-statusline.1 +92 -0
- package/dst/man/ase-setup-telemetry.1 +92 -0
- package/dst/man/ase-setup-uninstall.1 +59 -0
- package/dst/man/ase-setup-update.1 +64 -0
- package/dst/man/ase-setup.1 +93 -0
- package/dst/man/ase-spec-export.1 +62 -0
- package/dst/man/ase-spec-lint.1 +40 -0
- package/dst/man/ase-spec-preview.1 +40 -0
- package/dst/man/ase-spec.1 +46 -0
- package/dst/man/ase-statusline.1 +189 -0
- package/dst/man/ase-task-assign.1 +71 -0
- package/dst/man/ase-task-board.1 +384 -0
- package/dst/man/ase-task-delete.1 +35 -0
- package/dst/man/ase-task-edit.1 +46 -0
- package/dst/man/ase-task-idscheme.1 +65 -0
- package/dst/man/ase-task-lifecycle.1 +57 -0
- package/dst/man/ase-task-list.1 +47 -0
- package/dst/man/ase-task-load.1 +36 -0
- package/dst/man/ase-task-newid.1 +61 -0
- package/dst/man/ase-task-purge.1 +37 -0
- package/dst/man/ase-task-rename.1 +44 -0
- package/dst/man/ase-task-request.1 +61 -0
- package/dst/man/ase-task-save.1 +48 -0
- package/dst/man/ase-task-status.1 +55 -0
- package/dst/man/ase-task-store.1 +194 -0
- package/dst/man/ase-task-view.1 +40 -0
- package/dst/man/ase-task.1 +160 -0
- package/dst/man/ase-util-compat.1 +25 -0
- package/dst/man/ase-util-diagram.1 +76 -0
- package/dst/man/ase-util-meta.1 +45 -0
- package/dst/man/ase-util-metric.1 +54 -0
- package/dst/man/ase-util-mint.1 +59 -0
- package/dst/man/ase-util-worktree.1 +72 -0
- package/dst/man/ase-util.1 +50 -0
- package/dst/man/ase.1 +124 -0
- package/package.json +79 -21
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-meta-diagram.md +12 -8
- package/plugin/agents/ase-repo-review.md +322 -0
- package/plugin/hooks/hooks-codex.json +5 -0
- package/plugin/hooks/hooks-copilot.json +5 -0
- package/plugin/hooks/hooks.json +8 -0
- package/plugin/meta/ase-common-approach.md +117 -0
- package/plugin/meta/ase-common-changeset.md +256 -0
- package/plugin/meta/ase-common-code.md +10 -173
- package/plugin/meta/ase-common-grill.md +317 -0
- package/plugin/meta/ase-common-resolve.md +305 -0
- package/plugin/meta/ase-common-task.md +83 -4
- package/plugin/meta/ase-constitution.md +0 -2
- package/plugin/meta/ase-format-specbook.md +208 -25
- package/plugin/meta/ase-format-specbook.yaml +242 -851
- package/plugin/meta/ase-format-task.md +669 -125
- package/plugin/meta/ase-persona.md +3 -4
- package/plugin/meta/ase-skill.md +9 -0
- package/plugin/mods/ase-mods.ts +409 -0
- package/plugin/mods/claude-code.d.ts +13417 -0
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +2 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +59 -8
- package/plugin/skills/ase-code-analyze/help.md +29 -4
- package/plugin/skills/ase-code-edit/SKILL.md +107 -181
- package/plugin/skills/ase-code-edit/help.md +118 -31
- package/plugin/skills/ase-code-lint/SKILL.md +64 -13
- package/plugin/skills/ase-code-lint/help.md +32 -2
- package/plugin/skills/ase-docs-proofread/SKILL.md +4 -4
- package/plugin/skills/ase-docs-proofread/help.md +1 -1
- package/plugin/skills/ase-docs-refine/SKILL.md +4 -4
- package/plugin/skills/ase-docs-shorten/SKILL.md +4 -4
- package/plugin/skills/ase-help-intent/data.md +2164 -1087
- package/plugin/skills/ase-help-intent/help.md +1 -1
- package/plugin/skills/ase-help-skill/catalog.md +12 -9
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +1 -1
- package/plugin/skills/ase-meta-config/SKILL.md +3 -4
- package/plugin/skills/ase-meta-config/help.md +31 -10
- package/plugin/skills/ase-meta-mint/SKILL.md +5 -5
- package/plugin/skills/ase-meta-mint/help.md +10 -5
- package/plugin/skills/ase-meta-why/help.md +1 -1
- package/plugin/skills/ase-meta-workflow/SKILL.md +7 -7
- package/plugin/skills/ase-meta-workflow/help.md +4 -4
- package/plugin/skills/ase-meta-workflow/sample.md +3 -3
- package/plugin/skills/ase-meta-workflow/workflow.txt +22 -18
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/SKILL.md +4 -3
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/help.md +5 -5
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/help.md +5 -5
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/help.md +8 -8
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/SKILL.md +19 -19
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/help.md +10 -12
- package/plugin/skills/ase-repo-merge/SKILL.md +346 -0
- package/plugin/skills/ase-repo-merge/help.md +107 -0
- package/plugin/skills/ase-repo-resolve/SKILL.md +158 -0
- package/plugin/skills/ase-repo-resolve/help.md +102 -0
- package/plugin/skills/ase-repo-review/SKILL.md +406 -0
- package/plugin/skills/ase-repo-review/help.md +181 -0
- package/plugin/skills/ase-spec-edit/SKILL.md +117 -183
- package/plugin/skills/ase-spec-edit/help.md +107 -26
- package/plugin/skills/ase-sync-reconcile/help.md +1 -1
- package/plugin/skills/ase-task-assign/SKILL.md +111 -0
- package/plugin/skills/ase-task-assign/help.md +119 -0
- package/plugin/skills/ase-task-condense/SKILL.md +21 -21
- package/plugin/skills/ase-task-condense/help.md +12 -10
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +71 -48
- package/plugin/skills/ase-task-dissect/help.md +10 -9
- package/plugin/skills/ase-task-edit/SKILL.md +379 -94
- package/plugin/skills/ase-task-edit/help.md +95 -22
- package/plugin/skills/ase-task-estimate/SKILL.md +492 -0
- package/plugin/skills/ase-task-estimate/help.md +158 -0
- package/plugin/skills/ase-task-grill/SKILL.md +246 -138
- package/plugin/skills/ase-task-grill/help.md +129 -26
- package/plugin/skills/ase-task-id/SKILL.md +8 -1
- package/plugin/skills/ase-task-id/help.md +6 -3
- package/plugin/skills/ase-task-implement/SKILL.md +535 -145
- package/plugin/skills/ase-task-implement/help.md +138 -47
- package/plugin/skills/ase-task-integrate/SKILL.md +549 -0
- package/plugin/skills/ase-task-integrate/help.md +187 -0
- package/plugin/skills/ase-task-list/SKILL.md +55 -23
- package/plugin/skills/ase-task-list/help.md +45 -21
- package/plugin/skills/ase-task-reboot/SKILL.md +84 -43
- package/plugin/skills/ase-task-reboot/help.md +28 -8
- package/plugin/skills/ase-task-rename/SKILL.md +10 -2
- package/plugin/skills/ase-task-research/SKILL.md +386 -0
- package/plugin/skills/ase-task-research/help.md +102 -0
- package/plugin/skills/ase-task-status/SKILL.md +137 -0
- package/plugin/skills/ase-task-status/help.md +80 -0
- package/plugin/skills/ase-task-view/SKILL.md +49 -24
- package/plugin/skills/ase-task-view/help.md +19 -9
- package/plugin/agents/ase-meta-review.md +0 -187
- package/plugin/skills/ase-code-craft/SKILL.md +0 -264
- package/plugin/skills/ase-code-craft/help.md +0 -122
- package/plugin/skills/ase-code-refactor/SKILL.md +0 -232
- package/plugin/skills/ase-code-refactor/help.md +0 -109
- package/plugin/skills/ase-code-resolve/SKILL.md +0 -289
- package/plugin/skills/ase-code-resolve/help.md +0 -116
- package/plugin/skills/ase-meta-review/SKILL.md +0 -210
- package/plugin/skills/ase-meta-review/help.md +0 -96
- package/plugin/skills/ase-task-preflight/SKILL.md +0 -166
- package/plugin/skills/ase-task-preflight/help.md +0 -82
- /package/dst/{ase-ignore.js → ase-lib-ignore.js} +0 -0
- /package/dst/{ase-stdio.js → ase-lib-stdio.js} +0 -0
- /package/dst/{ase-kv.js → ase-service-kv.js} +0 -0
- /package/dst/{ase-sleep.js → ase-service-sleep.js} +0 -0
- /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.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|
|
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.
|
|
167
|
-
|
|
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
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
`
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
269
|
-
the answers gathered so far), and after item
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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
|
-
|
|
379
|
-
|
|
380
|
-
|
|
323
|
+
<expand name="approach-select"
|
|
324
|
+
arg1="specification"
|
|
325
|
+
arg2="✪ skill: **ase-spec-edit**"></expand>
|
|
381
326
|
|
|
382
|
-
|
|
383
|
-
|
|
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
|
-
|
|
391
|
-
|
|
392
|
-
|
|
330
|
+
<template>
|
|
331
|
+
⧉ **ASE**: ✪ skill: **ase-spec-edit**, ▶ status: **editing stopped**
|
|
332
|
+
</template>
|
|
393
333
|
|
|
394
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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* (
|
|
35
|
-
SPECIFYING tenets and the `SPEC`
|
|
36
|
-
(optionally validate the specification
|
|
37
|
-
state
|
|
38
|
-
|
|
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),
|
|
56
|
-
can be clarified)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
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
|
|
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.
|
|
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
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|