@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.
- 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 +230 -116
- 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
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-task-estimate` - Estimate the Effort of a Task Plan
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-task-estimate`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--force`|`-f`]
|
|
11
|
+
[`--dry-run`|`-d`]
|
|
12
|
+
[`--all`|`-a`]
|
|
13
|
+
[*id* ...]
|
|
14
|
+
|
|
15
|
+
`ase-task-estimate`
|
|
16
|
+
`--calibrate`|`-c`
|
|
17
|
+
[`--save`|`-s`]
|
|
18
|
+
|
|
19
|
+
## DESCRIPTION
|
|
20
|
+
|
|
21
|
+
The `ase-task-estimate` skill *estimates* the effort of task plans and
|
|
22
|
+
stores it in their `Effort:` frontmatter key. The effort is the expected
|
|
23
|
+
*human time* of the *entire* lifecycle of a task (including its
|
|
24
|
+
planning), matching the human time `time.hr` booked on the usage
|
|
25
|
+
attachment of the task (see `ase-task-assign`), expressed as one of the
|
|
26
|
+
T-shirt sizes `XS`, `S`, `M`, `L`, or `XL`. The sizes are bands on a
|
|
27
|
+
*logarithmic* scale with the upper bounds `15`, `60`, `240`, and `960`
|
|
28
|
+
human minutes for `XS` to `L` (configuration `project.task.effort.scale`),
|
|
29
|
+
while `XL` is open-ended. A task without an `Effort:` key is *not
|
|
30
|
+
estimated*.
|
|
31
|
+
|
|
32
|
+
The estimation of a plan combines:
|
|
33
|
+
|
|
34
|
+
- an *attention score*: the weighted number of the distinct
|
|
35
|
+
requirements, behaviors, or changes stated by its checklist items
|
|
36
|
+
(`DOM` 5.0, `IFC` 4.0, `ARC` 3.0, `IMP` 1.0, `REG` 0.5, `CON` 1.0),
|
|
37
|
+
converted via `project.task.effort.factor` (default: `1`) human
|
|
38
|
+
minutes per point,
|
|
39
|
+
|
|
40
|
+
- a *volume score*: the code impact of its `ARC` and `IMP` items,
|
|
41
|
+
predicted read-only from the plan and the code base (never measured
|
|
42
|
+
from an already existing change set), converted via
|
|
43
|
+
`project.task.effort.file` (default: `1`) human review minutes per
|
|
44
|
+
touched file and `project.task.effort.line` (default: `0.025`)
|
|
45
|
+
human minutes per predicted changed line, which also cover the edge
|
|
46
|
+
cases and polishing no plan describes, where a newly written line
|
|
47
|
+
weighs three times a changed one,
|
|
48
|
+
|
|
49
|
+
- a *risk surcharge*: 20% more per applying risk out of `dependency`,
|
|
50
|
+
`ambiguity`, `untested`, `concurrency`, `security`, and
|
|
51
|
+
`persistence`, but at most 40% in total, where risks applying to
|
|
52
|
+
virtually every task of the project do not count,
|
|
53
|
+
|
|
54
|
+
- an *iteration multiplier*: `project.task.effort.iteration`
|
|
55
|
+
(default: `2.5`) times the minutes for a task whose main
|
|
56
|
+
deliverable is an interactive or visual user interface, as such
|
|
57
|
+
work needs many rounds of post-adjustment,
|
|
58
|
+
|
|
59
|
+
- a *plausibility check*: a comparable realization already existing
|
|
60
|
+
in the code base, whose deviating size lowers the reported
|
|
61
|
+
*confidence*, and
|
|
62
|
+
|
|
63
|
+
- *analogues*: finished tasks with an effort and a usage attachment,
|
|
64
|
+
whose disagreement lowers the reported *confidence*.
|
|
65
|
+
|
|
66
|
+
Cancelled (`[-]`) and deferred (`[>]`) items never count. The skill
|
|
67
|
+
reports the size, the confidence, and the main drivers of each
|
|
68
|
+
estimation, and for `XL` additionally warns and suggests splitting the
|
|
69
|
+
task via `ase-task-dissect` -- an `XL` effort never blocks the
|
|
70
|
+
lifecycle.
|
|
71
|
+
|
|
72
|
+
The effort is *bound* to the plan content it was given for: once the
|
|
73
|
+
plan content changes, the effort becomes *invalid* and is dropped, while
|
|
74
|
+
mere checkbox state changes and whitespace-only edits keep it. Hence,
|
|
75
|
+
an estimation never needs to be cleaned up by hand. Writing the effort
|
|
76
|
+
neither changes the `Modified:` key nor the lifecycle status of a task.
|
|
77
|
+
Empty plans and explicit epic tasks (whose effort is the sum of their
|
|
78
|
+
member tasks) are skipped, and so are tasks already carrying a valid
|
|
79
|
+
effort, unless `--force` is given.
|
|
80
|
+
|
|
81
|
+
With `--calibrate`, the skill instead re-estimates the successfully
|
|
82
|
+
finished tasks with the *current* rates and compares the results with
|
|
83
|
+
their *actual* human time (only tasks with at least `5` human minutes
|
|
84
|
+
count, as agent-driven tasks book little human time), so a repeated
|
|
85
|
+
calibration converges, and reports the estimated vs. actual band matrix,
|
|
86
|
+
the hit rate, the bias, the best-fitting rates (factor, file, and line
|
|
87
|
+
minutes), and alternatively fitting scale bounds.
|
|
88
|
+
|
|
89
|
+
The `ase agent estimator` command estimates the tasks automatically in
|
|
90
|
+
the background, and with `--mode request` on request, in any unfinished
|
|
91
|
+
status, via `ase task request <id> estimate <prompt>` or key `R` of the
|
|
92
|
+
task boards.
|
|
93
|
+
|
|
94
|
+
## OPTIONS
|
|
95
|
+
|
|
96
|
+
- `--force`|`-f`:
|
|
97
|
+
Re-estimate tasks which already carry a valid effort.
|
|
98
|
+
|
|
99
|
+
- `--dry-run`|`-d`:
|
|
100
|
+
Estimate and report only, but do not store the effort.
|
|
101
|
+
|
|
102
|
+
- `--all`|`-a`:
|
|
103
|
+
Estimate all unfinished tasks without a valid effort (with `--force`,
|
|
104
|
+
all unfinished tasks), instead of the current or given ones.
|
|
105
|
+
|
|
106
|
+
- `--calibrate`|`-c`:
|
|
107
|
+
Report the calibration of the estimation against the finished tasks
|
|
108
|
+
instead of estimating any task.
|
|
109
|
+
|
|
110
|
+
- `--save`|`-s`:
|
|
111
|
+
Together with `--calibrate`, store the fitted rates as
|
|
112
|
+
`project.task.effort.factor`, `project.task.effort.file`, and
|
|
113
|
+
`project.task.effort.line` on the `project` scope. The fitted scale
|
|
114
|
+
bounds always stay a suggestion only.
|
|
115
|
+
|
|
116
|
+
## ARGUMENTS
|
|
117
|
+
|
|
118
|
+
- *id* ...:
|
|
119
|
+
The unique identifiers of the tasks to estimate. If omitted (and
|
|
120
|
+
without `--all`), the *current* task is estimated.
|
|
121
|
+
|
|
122
|
+
## SCENARIOS
|
|
123
|
+
|
|
124
|
+
- You want to know how much human time a planned task will need
|
|
125
|
+
- You want to size all open tasks for planning a sprint or release
|
|
126
|
+
- You want to check whether a task is too large and should be split
|
|
127
|
+
- You want to tune the estimation to the actual pace of your team
|
|
128
|
+
|
|
129
|
+
## EXAMPLES
|
|
130
|
+
|
|
131
|
+
Estimate the current task plan:
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
❯ /ase-task-estimate
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Estimate all unestimated tasks, without storing the results:
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
❯ /ase-task-estimate --all --dry-run
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Re-estimate two specific tasks:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
❯ /ase-task-estimate --force export-json import-csv
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Calibrate the estimation and store the fitted rates:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
❯ /ase-task-estimate --calibrate --save
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## SEE ALSO
|
|
156
|
+
|
|
157
|
+
[`ase-task-view`](../ase-task-view/help.md), [`ase-task-list`](../ase-task-list/help.md), [`ase-task-dissect`](../ase-task-dissect/help.md),
|
|
158
|
+
[`ase-task-assign`](../ase-task-assign/help.md), [`ase-meta-config`](../ase-meta-config/help.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-task-grill
|
|
3
|
-
argument-hint: "[--help|-h] [--rounds|-r <n>] [--next|-n <option>[,...]] [<id>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--rounds|-r <n>] [--until|-u MUST|SHOULD|MAY] [--perspective|-p <perspective>] [--ground|-G] [--focus|-f <section>[,...]] [--force|-F] [--next|-n <option>[,...]] [<id>]"
|
|
4
4
|
description: >
|
|
5
5
|
Interview the user relentlessly about the task plan until reaching a
|
|
6
6
|
shared understanding, resolving each branch of the question decision
|
|
@@ -22,7 +22,7 @@ Iteratively Grill a Task Plan
|
|
|
22
22
|
|
|
23
23
|
<expand name="getopt"
|
|
24
24
|
arg1="ase-task-grill"
|
|
25
|
-
arg2="--rounds|-r=1 --next|-n=(none|DONE|EDIT|IMPLEMENT|
|
|
25
|
+
arg2="--rounds|-r=1 --until|-u=(MUST|SHOULD|MAY) --perspective|-p= --ground|-G --focus|-f=(all|SPECIFICATION|SPEC|DESIGN|DES|VERIFICATION|VER)... --force|-F --next|-n=(none|DONE|GRILL|EDIT|IMPLEMENT|DRAFT)... --int-reuse-task">
|
|
26
26
|
$ARGUMENTS
|
|
27
27
|
</expand>
|
|
28
28
|
|
|
@@ -61,7 +61,31 @@ Set <args>--int-reuse-task</args>.
|
|
|
61
61
|
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--rounds` value: **<getopt-option-rounds/>**
|
|
62
62
|
</template>
|
|
63
63
|
|
|
64
|
-
3.
|
|
64
|
+
3. Treat <getopt-option-focus/> as a comma-separated list of
|
|
65
|
+
*section tokens*. Trim and upper-case every token, then expand
|
|
66
|
+
the abbreviations `SPEC`, `DES`, and `VER` to `SPECIFICATION`,
|
|
67
|
+
`DESIGN`, and `VERIFICATION`, and expand the sentinel `ALL`
|
|
68
|
+
(the default) to `SPECIFICATION,DESIGN,VERIFICATION`. Set
|
|
69
|
+
<sections/> to the resulting list, *keeping the given order*.
|
|
70
|
+
The getopt parser validates only the *first* token, so you
|
|
71
|
+
*MUST* validate each token yourself: if any token is *empty*,
|
|
72
|
+
*not* one of the recognized sections or abbreviations, or
|
|
73
|
+
results in a section already present in <sections/>, bind
|
|
74
|
+
<token/> to that offending token, then only output the
|
|
75
|
+
following <template/> and immediately *STOP* processing the
|
|
76
|
+
entire current skill:
|
|
77
|
+
|
|
78
|
+
<template>
|
|
79
|
+
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--focus` token: **<token/>**
|
|
80
|
+
</template>
|
|
81
|
+
|
|
82
|
+
Each section in <sections/> selects its *focus areas* of the
|
|
83
|
+
grilling: `SPECIFICATION` selects `DOMAIN` and `INTERFACE`,
|
|
84
|
+
`DESIGN` selects `ARCHITECTURE` and `IMPLEMENTATION`, and
|
|
85
|
+
`VERIFICATION` selects `REGRESSION` and `CONFIRMATION`. Do not
|
|
86
|
+
output anything.
|
|
87
|
+
|
|
88
|
+
4. React on task id:
|
|
65
89
|
|
|
66
90
|
<expand name="task-react-id" arg1="ase-task-grill"></expand>
|
|
67
91
|
|
|
@@ -72,166 +96,226 @@ Set <args>--int-reuse-task</args>.
|
|
|
72
96
|
<expand name="task-load-content"></expand>
|
|
73
97
|
|
|
74
98
|
2. <if condition="<task-content/> is empty">
|
|
75
|
-
Complain and tell the user to use the `ase-
|
|
76
|
-
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
99
|
+
Complain and tell the user to use the `ase-task-edit` skill
|
|
77
100
|
first to create a task plan. Then immediately stop processing
|
|
78
101
|
this skill.
|
|
79
102
|
</if>
|
|
80
103
|
|
|
81
|
-
3.
|
|
104
|
+
3. Determine the *grilling scope* of each section in <sections/>,
|
|
105
|
+
in order to grill an *already grilled* section again *only* where
|
|
106
|
+
questions are still *open*:
|
|
82
107
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
108
|
+
- If <getopt-option-force/> is `true`, *ignore* any
|
|
109
|
+
`grilled:<section/>` tag: the scope of *every* section is the
|
|
110
|
+
*entire* section, so already grilled sections are *re-grilled*
|
|
111
|
+
completely. Skip the following two cases.
|
|
86
112
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
For each round:
|
|
94
|
-
|
|
95
|
-
1. INITIALIZE ROUND:
|
|
96
|
-
|
|
97
|
-
Set <round-id/> to `GRILLING ROUND <m/>/<getopt-option-rounds/>`
|
|
98
|
-
if <getopt-option-rounds/> is greater than 1, or to
|
|
99
|
-
`GRILLING` otherwise (a single round needs no round
|
|
100
|
-
numbering). Then output only the following <template/>:
|
|
113
|
+
- If the `Tags:` frontmatter key of <task-content/> carries
|
|
114
|
+
the tag `grilled:<section/>` (with <section/> being the
|
|
115
|
+
*lower-case* name of the section) and the section contains
|
|
116
|
+
*no* bullet-point in checkbox state `[?]`, the section is
|
|
117
|
+
*already grilled* and nothing is open: *remove* it from
|
|
118
|
+
<sections/> and only output the following <template/>:
|
|
101
119
|
|
|
102
120
|
<template>
|
|
103
|
-
⧉ **ASE**:
|
|
121
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **section <section/> already grilled -- skipped (use `--force` to re-grill)**
|
|
104
122
|
</template>
|
|
105
123
|
|
|
106
|
-
|
|
124
|
+
- If the `Tags:` frontmatter key carries the tag
|
|
125
|
+
`grilled:<section/>` and the section contains *at least one*
|
|
126
|
+
bullet-point in checkbox state `[?]`, *restrict* the scope of
|
|
127
|
+
the section to *exactly* these `[?]` bullet-points, so the
|
|
128
|
+
grilling re-asks only the *still open* questions.
|
|
107
129
|
|
|
108
|
-
|
|
109
|
-
two-word-long short identifier like `Foo` or `Bar-Baz`, also
|
|
110
|
-
serving as the topic hint) and the corresponding, very brief
|
|
111
|
-
but precise decision/question <question-N/> where a shared
|
|
112
|
-
understanding is required. Each question is chosen to
|
|
113
|
-
resolve the open points related to the above understanding
|
|
114
|
-
of grilling, by focusing on the mentioned *Focus Areas* and
|
|
115
|
-
checking the mentioned *Indicators*.
|
|
116
|
-
|
|
117
|
-
For <question-N/> use the format `Shall...?` for
|
|
118
|
-
questions of focus area `DOMAIN` and `INTERFACE`, the format
|
|
119
|
-
`Should...?` for questions of focus area `ARCHITECTURE`,
|
|
120
|
-
and the format `May...?` for questions of focus area
|
|
121
|
-
`IMPLEMENTATION`.
|
|
122
|
-
|
|
123
|
-
In every <question-N/>, encode all *literal aspects*
|
|
124
|
-
-- file and directory paths, identifiers, symbols, types,
|
|
125
|
-
commands, options, configuration keys, and literal values --
|
|
126
|
-
with backticks. Do not output anything.
|
|
127
|
-
|
|
128
|
-
3. DETERMINE CONTEXT:
|
|
129
|
-
|
|
130
|
-
For each question, determine its focus area
|
|
131
|
-
<context-N-focus/> from the mentioned *Focus Areas*.
|
|
132
|
-
<context-N-severity/>, describing how important this
|
|
133
|
-
question is.
|
|
134
|
-
|
|
135
|
-
4. SORT QUESTIONS:
|
|
136
|
-
|
|
137
|
-
Create a decisions/questions tree for the questions,
|
|
138
|
-
capturing the dependencies between the decisions. Then
|
|
139
|
-
*sort* the questions *primarily* by descending focus area
|
|
140
|
-
order -- first all `DOMAIN`, then all `INTERFACE`, then all
|
|
141
|
-
`ARCHITECTURE`, and then all `IMPLEMENTATION` ones -- and
|
|
142
|
-
*secondarily*, within each focus area, by the decision tree
|
|
143
|
-
order, so that each decision is asked *after* the decisions
|
|
144
|
-
it depends on. Renumber <N/> according to this order,
|
|
145
|
-
starting at `1` in *every* round, independent of the
|
|
146
|
-
numbering of previous rounds. Truncate the list after a
|
|
147
|
-
maximum of 10 questions and set <n/> to the number of
|
|
148
|
-
remaining questions. Do not output anything.
|
|
149
|
-
|
|
150
|
-
5. For each question <question-N/> in the iteration cycle <N/>,
|
|
151
|
-
*one at a time*:
|
|
152
|
-
|
|
153
|
-
1. Output the following <template/>:
|
|
130
|
+
- Otherwise, the scope of the section is the *entire* section.
|
|
154
131
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
132
|
+
Independent of the scope, bullet-points in checkbox state `[-]`
|
|
133
|
+
(cancelled) or `[>]` (deferred) are *inert*: they are *never*
|
|
134
|
+
subject of a question and their checkbox is *never* changed.
|
|
158
135
|
|
|
159
|
-
|
|
136
|
+
<if condition="<sections/> is empty afterwards">
|
|
137
|
+
Skip the entire step 3 below -- the plan is *neither* updated
|
|
138
|
+
*nor* saved -- and continue directly with step 4.
|
|
139
|
+
</if>
|
|
160
140
|
|
|
161
|
-
|
|
162
|
-
which reflects the current plan.
|
|
141
|
+
3. **Iterate Over Task Plan Aspects:**
|
|
163
142
|
|
|
164
|
-
|
|
165
|
-
use this information to find *up to three* grounded
|
|
166
|
-
alternative answers <answer-N-K/> (K={2,3,4}), so there
|
|
167
|
-
are between two and four answer options in total.
|
|
143
|
+
1. Understand what "grilling" is about:
|
|
168
144
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
<answer-N-K-description/> which reflects the current
|
|
174
|
-
plan. Do not output anything.
|
|
145
|
+
<expand name="grill-understanding"
|
|
146
|
+
arg1="the task plan in <task-content/>"
|
|
147
|
+
arg2="<getopt-option-perspective/>"
|
|
148
|
+
arg3="<getopt-option-ground/>"></expand>
|
|
175
149
|
|
|
176
|
-
|
|
177
|
-
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
178
|
-
custom dialog according to the expanded `custom-dialog`
|
|
179
|
-
definition. You *MUST* closely follow this definition.
|
|
150
|
+
Ground the grilling:
|
|
180
151
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
the alternatives <answer-N-K/> you actually determined in
|
|
185
|
-
the previous step (between two and four lines in total),
|
|
186
|
-
followed by the fixed `SKIP GRILLING` answer option:
|
|
152
|
+
<expand name="grill-ground"
|
|
153
|
+
arg1="the task plan in <task-content/>"
|
|
154
|
+
arg2=""></expand>
|
|
187
155
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
[...]
|
|
193
|
-
SKIP GRILLING: skip all remaining grilling and continue with the plan update
|
|
194
|
-
</expand>
|
|
156
|
+
2. <if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
|
|
157
|
+
Set <timestamp-created><text/></timestamp-created> (set
|
|
158
|
+
timestamp-created to extracted text).
|
|
159
|
+
</if>
|
|
195
160
|
|
|
196
|
-
|
|
161
|
+
3. Perform *at most* <getopt-option-rounds/> grilling *rounds*,
|
|
162
|
+
numbered <m/> (1-<getopt-option-rounds/>) -- the round count is
|
|
163
|
+
a *maximum* only, as every round can *stop* the grilling *early*
|
|
164
|
+
in its item 2 below.
|
|
197
165
|
|
|
198
|
-
|
|
199
|
-
<template/> and then immediately *STOP* processing
|
|
200
|
-
the entire current skill, leaving the plan *untouched*:
|
|
166
|
+
For each round:
|
|
201
167
|
|
|
202
|
-
|
|
203
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **grilling stopped**
|
|
204
|
-
</template>
|
|
168
|
+
1. INITIALIZE ROUND:
|
|
205
169
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
170
|
+
Explicitly start *from scratch* from *only* the *current*
|
|
171
|
+
<task-content/> -- as updated by all previous rounds -- and
|
|
172
|
+
*forget* all questions and answers gathered in previous
|
|
173
|
+
rounds -- except the grounding facts <grill-facts/>. Set
|
|
174
|
+
<round-id/> to
|
|
175
|
+
`GRILLING ROUND <m/>/<getopt-option-rounds/>` if
|
|
176
|
+
<getopt-option-rounds/> is greater than 1, or to
|
|
177
|
+
`GRILLING` otherwise (a single round needs no round
|
|
178
|
+
numbering). Do not output anything.
|
|
211
179
|
|
|
212
|
-
|
|
213
|
-
<result/> and set <answer-N/> to the remainder.
|
|
180
|
+
2. DETERMINE QUESTIONS:
|
|
214
181
|
|
|
215
|
-
|
|
182
|
+
<expand name="grill-questions"
|
|
183
|
+
arg1="<getopt-option-until/>"
|
|
184
|
+
arg2="◉ task: **<ase-task-id/>**"
|
|
185
|
+
arg3="file and directory paths, identifiers, symbols, types, commands, options, configuration keys, and literal values"
|
|
186
|
+
arg4="the <task-content/>, the code base,"
|
|
187
|
+
arg5=", and *finally* by the decision tree order, which *overrides* the impact order wherever a decision has to be asked *after* the decisions it depends on">
|
|
188
|
+
Focus *only* on the *Focus Areas* selected by
|
|
189
|
+
<sections/> -- the *themes* of the focused sections,
|
|
190
|
+
*within* the *grilling scope* of each section as
|
|
191
|
+
determined in step 2.3, while the *entire*
|
|
192
|
+
<task-content/> stays the context -- and check the
|
|
193
|
+
mentioned *Indicators*. For a section restricted to its
|
|
194
|
+
`[?]` bullet-points, derive the questions from *exactly*
|
|
195
|
+
these bullet-points only. Never raise a question about a
|
|
196
|
+
`[-]` or `[>]` bullet-point. Create a decisions/questions
|
|
197
|
+
tree for the questions, capturing the dependencies
|
|
198
|
+
between the decisions.
|
|
199
|
+
|
|
200
|
+
For each question, set <items-N/> to the bullet-points of
|
|
201
|
+
<task-content/> the question is about -- possibly *none*,
|
|
202
|
+
if the question concerns an aspect the plan does not
|
|
203
|
+
cover yet.
|
|
204
|
+
</expand>
|
|
205
|
+
|
|
206
|
+
If <grill-stop/> is `true`, skip the items 3, 4, and 6 of
|
|
207
|
+
this round, perform item 5 of this round (as the focused
|
|
208
|
+
sections are clear, they are tagged as grilled), then skip
|
|
209
|
+
all remaining rounds and continue with step 4.
|
|
210
|
+
|
|
211
|
+
3. INTERACTIVE DIALOG:
|
|
212
|
+
|
|
213
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
214
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
215
|
+
custom dialog according to the expanded `custom-dialog`
|
|
216
|
+
definition. You *MUST* closely follow this definition. The
|
|
217
|
+
dialog below carries the fixed answer option
|
|
218
|
+
`SKIP GRILLING`, dispatched as follows:
|
|
219
|
+
|
|
220
|
+
- If a <result/> is `SKIP GRILLING`, ask no further
|
|
221
|
+
questions -- *all* questions of this round stay
|
|
222
|
+
*unanswered* --, continue with items 4 to 6 below
|
|
223
|
+
(updating and saving the plan with the answers of the
|
|
224
|
+
previous rounds), and afterwards skip all remaining
|
|
225
|
+
rounds and continue with step 4.
|
|
226
|
+
|
|
227
|
+
- If a <result/> is `CANCEL`, only output the following
|
|
228
|
+
<template/> and then immediately *STOP* processing the
|
|
229
|
+
entire current skill, *not* updating the plan with the
|
|
230
|
+
current round (the plan updates saved by previous
|
|
231
|
+
rounds are kept):
|
|
216
232
|
|
|
217
233
|
<template>
|
|
218
|
-
|
|
234
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **grilling stopped**
|
|
219
235
|
</template>
|
|
220
236
|
|
|
221
|
-
|
|
222
|
-
|
|
237
|
+
Show a custom dialog. Its only answer option is the fixed
|
|
238
|
+
one, so the user normally answers all aspects in *one*
|
|
239
|
+
free-text reply:
|
|
240
|
+
|
|
241
|
+
<expand name="custom-dialog" arg1="--other">
|
|
242
|
+
<round-id/>: What is your (combined) answer to all (or a subset) of the above questions? (keywords or `nX` short responses are sufficient)
|
|
243
|
+
SKIP GRILLING: skip all remaining grilling and continue with the plan update
|
|
244
|
+
</expand>
|
|
245
|
+
|
|
246
|
+
Dispatch `SKIP GRILLING` and `CANCEL` as defined above.
|
|
247
|
+
Otherwise, strip any leading `OTHER: ` prefix from
|
|
248
|
+
<result/> and treat the remainder as the combined free-text
|
|
249
|
+
answers to all questions of the round.
|
|
250
|
+
|
|
251
|
+
4. MERGE ANSWERS INTO PLAN:
|
|
252
|
+
|
|
253
|
+
Merge all gathered answers in <result/> of the round -- the
|
|
254
|
+
combined reply -- *exclusively* back into <task-content/>.
|
|
255
|
+
|
|
256
|
+
<expand name="grill-short-responses"></expand>
|
|
257
|
+
|
|
258
|
+
A question *not* addressed by the combined reply accepts its
|
|
259
|
+
answer marked with `⚑` (the current plan) if one exists, and
|
|
260
|
+
otherwise stays *unanswered*. Additionally, record the
|
|
261
|
+
*open* questions in the checkboxes of the body
|
|
262
|
+
bullet-points, changing *only* checkboxes in state `[ ]` or
|
|
263
|
+
`[?]` and leaving every `[/]`, `[x]`, `[-]`, and `[>]`
|
|
264
|
+
checkbox *untouched*:
|
|
265
|
+
|
|
266
|
+
- For each *answered* question, set the checkbox of every
|
|
267
|
+
bullet-point in <items-N/> to `[ ]`, as the question is
|
|
268
|
+
resolved now.
|
|
269
|
+
|
|
270
|
+
- For each *unanswered* question, set the checkbox of every
|
|
271
|
+
bullet-point in <items-N/> to `[?]`, as the question is
|
|
272
|
+
still open. If <items-N/> is *empty*, *add* a new `[?]`
|
|
273
|
+
bullet-point to the section of the question's focus area
|
|
274
|
+
<context-N-focus/>, with the corresponding <type/>, a
|
|
275
|
+
<summary/> derived from <context-N-topic/>, and a <text/>
|
|
276
|
+
stating the open <question-N-text/>, so a later grilling
|
|
277
|
+
can re-ask it.
|
|
278
|
+
|
|
279
|
+
Set <changes/> to all bullet-points of <task-content/> which
|
|
280
|
+
were changed or added in this round. Do not output anything.
|
|
281
|
+
|
|
282
|
+
5. SAVE PLAN:
|
|
283
|
+
|
|
284
|
+
For each section in <sections/>, *set* the tag
|
|
285
|
+
`grilled:<section/>` -- with <section/> being the
|
|
286
|
+
*lower-case* name of the section (`specification`,
|
|
287
|
+
`design`, or `verification`) -- in the `Tags:` frontmatter
|
|
288
|
+
key of <task-content/>: keep an already present identical
|
|
289
|
+
tag as is, otherwise append it, keeping all other already
|
|
290
|
+
present tags (including `grilled:` tags of other sections)
|
|
291
|
+
and *creating* the whole key at its position in the key
|
|
292
|
+
order of the plan <format/> if the plan carries none. A
|
|
293
|
+
fully grilled plan hence carries the tags
|
|
294
|
+
`grilled:specification, grilled:design,
|
|
295
|
+
grilled:verification`.
|
|
296
|
+
|
|
297
|
+
<expand name="task-save-content" arg1="plan updated"></expand>
|
|
298
|
+
|
|
299
|
+
6. SHOW PLAN CHANGES:
|
|
300
|
+
|
|
301
|
+
Set <round-suffix/> to
|
|
302
|
+
` round <m/>/<getopt-option-rounds/>` if
|
|
303
|
+
<getopt-option-rounds/> is greater than 1, or to empty
|
|
304
|
+
otherwise, and only output the following <template/>, which
|
|
305
|
+
shows every bullet-point of <changes/> in its plan format
|
|
306
|
+
`- <box/> <type/>: **<summary/>**: <text/>`, grouped below
|
|
307
|
+
a `**<SECTION>**:` line per plan section, where an empty
|
|
308
|
+
<changes/> renders as `(none)` -- this intentionally closes
|
|
309
|
+
*every* round, so the intermediate plan changes stay
|
|
310
|
+
visible:
|
|
223
311
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
timestamp-created to extracted text).
|
|
227
|
-
</if>
|
|
312
|
+
<template>
|
|
313
|
+
<ase-tpl-head title="PLAN CHANGES" subtitle="after grilling<round-suffix/>"/>
|
|
228
314
|
|
|
229
|
-
|
|
230
|
-
<task-content/> if it is still absent, keeping all already
|
|
231
|
-
present values and *creating* the whole key (with the single
|
|
232
|
-
value `grilled`) if the plan carries none.
|
|
315
|
+
<changes/>
|
|
233
316
|
|
|
234
|
-
|
|
317
|
+
<ase-tpl-foot title="PLAN CHANGES" subtitle="after grilling<round-suffix/>"/>
|
|
318
|
+
</template>
|
|
235
319
|
|
|
236
320
|
4. **Decide Next Step:**
|
|
237
321
|
|
|
@@ -239,11 +323,12 @@ Set <args>--int-reuse-task</args>.
|
|
|
239
323
|
|
|
240
324
|
<expand name="task-next-select"
|
|
241
325
|
arg1="ase-task-grill"
|
|
242
|
-
arg2="DONE|EDIT|IMPLEMENT|
|
|
326
|
+
arg2="DONE|GRILL|EDIT|IMPLEMENT|DRAFT">
|
|
243
327
|
Next Step: How would you like to proceed with the plan?
|
|
244
328
|
DONE: Stop processing.
|
|
329
|
+
GRILL: Re-grill the entire plan again.
|
|
245
330
|
EDIT: Hand off plan to editing.
|
|
246
|
-
|
|
331
|
+
DRAFT: Hand off plan to implementation drafting.
|
|
247
332
|
IMPLEMENT: Hand off plan to implementation.
|
|
248
333
|
</expand>
|
|
249
334
|
|
|
@@ -257,6 +342,27 @@ Set <args>--int-reuse-task</args>.
|
|
|
257
342
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- done**
|
|
258
343
|
</template>
|
|
259
344
|
|
|
345
|
+
- If <result/> is `GRILL`:
|
|
346
|
+
<expand name="handoff-args"/>
|
|
347
|
+
Set <args><args/> --force --rounds <getopt-option-rounds/> --until <getopt-option-until/> --focus <getopt-option-focus/></args>.
|
|
348
|
+
<if condition="<getopt-option-perspective/> is not empty">
|
|
349
|
+
Set <args><args/> --perspective <getopt-option-perspective/></args>,
|
|
350
|
+
with the value shell-quoted if it contains spaces or special characters.
|
|
351
|
+
</if>
|
|
352
|
+
<if condition="<getopt-option-ground/> is `true`">
|
|
353
|
+
Set <args><args/> --ground</args>.
|
|
354
|
+
</if>
|
|
355
|
+
Only output the following <template/> and then call the
|
|
356
|
+
tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
357
|
+
to invoke the `ase:ase-task-grill` skill again in order to
|
|
358
|
+
*re-grill* the updated plan with the same grilling options.
|
|
359
|
+
Immediately stop processing the current skill once the
|
|
360
|
+
`Skill` tool was used.
|
|
361
|
+
|
|
362
|
+
<template>
|
|
363
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- hand-off to re-grilling**
|
|
364
|
+
</template>
|
|
365
|
+
|
|
260
366
|
- If <result/> is `EDIT`:
|
|
261
367
|
<expand name="handoff-args"/>
|
|
262
368
|
Only output the following <template/> and then call the
|
|
@@ -269,14 +375,15 @@ Set <args>--int-reuse-task</args>.
|
|
|
269
375
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- hand-off to edit**
|
|
270
376
|
</template>
|
|
271
377
|
|
|
272
|
-
- If <result/> is `
|
|
378
|
+
- If <result/> is `DRAFT`:
|
|
273
379
|
<expand name="handoff-args"/>
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
380
|
+
Set <args><args/> --draft</args>. Only output the following
|
|
381
|
+
<template/> and then call the
|
|
382
|
+
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
383
|
+
to *draft* the implementation of the plan.
|
|
277
384
|
|
|
278
385
|
<template>
|
|
279
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- hand-off to
|
|
386
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- hand-off to implementation draft**
|
|
280
387
|
</template>
|
|
281
388
|
|
|
282
389
|
- If <result/> is `IMPLEMENT`:
|
|
@@ -288,3 +395,4 @@ Set <args>--int-reuse-task</args>.
|
|
|
288
395
|
<template>
|
|
289
396
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan updated -- hand-off to implementation**
|
|
290
397
|
</template>
|
|
398
|
+
|