@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
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-assign
|
|
3
|
+
argument-hint: "[--help|-h] [<id>:] <assignee>"
|
|
4
|
+
description: >
|
|
5
|
+
Assign the current or given task plan to oneself or to somebody else,
|
|
6
|
+
with assigning it to oneself tracking the AI usage (time, tokens, and
|
|
7
|
+
costs) of the session until the task is given back, which adds the
|
|
8
|
+
accumulated usage to the usage attachment of the task. Use when the user
|
|
9
|
+
wants to "assign", "take", "pick up", "give back", "hand over", or
|
|
10
|
+
"unassign" the "task" or "plan".
|
|
11
|
+
user-invocable: true
|
|
12
|
+
disable-model-invocation: false
|
|
13
|
+
effort: high
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
18
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
19
|
+
|
|
20
|
+
<purpose name="ase-task-assign">
|
|
21
|
+
Assign a Task Plan
|
|
22
|
+
</purpose>
|
|
23
|
+
|
|
24
|
+
<expand name="getopt" arg1="ase-task-assign">
|
|
25
|
+
$ARGUMENTS
|
|
26
|
+
</expand>
|
|
27
|
+
|
|
28
|
+
<objective>
|
|
29
|
+
*Assign* the task plan and *account* the AI usage of the session onto it.
|
|
30
|
+
</objective>
|
|
31
|
+
|
|
32
|
+
Procedure
|
|
33
|
+
---------
|
|
34
|
+
|
|
35
|
+
1. **Determine Task and Assignee:**
|
|
36
|
+
|
|
37
|
+
1. Parse <arguments><getopt-arguments/></arguments> (with any
|
|
38
|
+
leading and trailing whitespace stripped) into a
|
|
39
|
+
whitespace-separated list of tokens. Inherit the always
|
|
40
|
+
existing <ase-task-id/>, <ase-session-id/>, <ase-user-id/>, and
|
|
41
|
+
<ase-agent-tool/> from the current context. Set
|
|
42
|
+
<id><ase-task-id/></id> and <assignee></assignee> (empty).
|
|
43
|
+
Do not output anything.
|
|
44
|
+
|
|
45
|
+
2. <if condition="<arguments/> contains two tokens and the first token ends with `:`">
|
|
46
|
+
Set <id/> to the first token with the trailing `:` removed and
|
|
47
|
+
<assignee/> to the second token. Do not output anything.
|
|
48
|
+
</if>
|
|
49
|
+
|
|
50
|
+
3. <elseif condition="<arguments/> contains exactly one token which does NOT end with `:`">
|
|
51
|
+
Set <assignee/> to the token. Do not output anything.
|
|
52
|
+
</elseif>
|
|
53
|
+
|
|
54
|
+
4. <else>
|
|
55
|
+
Only output the following <template/> and then immediately
|
|
56
|
+
*STOP* processing the entire current skill:
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
⧉ **ASE**: ☻ skill: **ase-task-assign**, ▶ ERROR: expected `[<id>:] <assignee>` arguments (use `none` to unassign)
|
|
60
|
+
</template>
|
|
61
|
+
</else>
|
|
62
|
+
|
|
63
|
+
5. <if condition="<id/> does NOT match the regexp `^[a-zA-Z0-9#][a-zA-Z0-9#_-]*$`">
|
|
64
|
+
Only output the following <template/> and then immediately
|
|
65
|
+
*STOP* processing the entire current skill:
|
|
66
|
+
|
|
67
|
+
<template>
|
|
68
|
+
⧉ **ASE**: ☻ skill: **ase-task-assign**, ▶ ERROR: invalid task id `<id/>` (expected `^[a-zA-Z0-9#][a-zA-Z0-9#_-]*$`)
|
|
69
|
+
</template>
|
|
70
|
+
</if>
|
|
71
|
+
|
|
72
|
+
2. **Perform Assignment:**
|
|
73
|
+
|
|
74
|
+
1. Call the `ase_task_assign(id: "<id/>", assignee: "<assignee/>",
|
|
75
|
+
session: "<ase-session-id/>", tool: "<ase-agent-tool/>")` tool
|
|
76
|
+
of the `ase` MCP server and set <text/> to the `text` output
|
|
77
|
+
field of this tool call. As giving a task back waits for late
|
|
78
|
+
telemetry, this call takes about 10 seconds then. Do not output
|
|
79
|
+
anything related to this MCP tool call.
|
|
80
|
+
|
|
81
|
+
2. - If <text/> starts with `ERROR:`:
|
|
82
|
+
Only output the following <template/>:
|
|
83
|
+
|
|
84
|
+
<template>
|
|
85
|
+
⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **<text/>**
|
|
86
|
+
</template>
|
|
87
|
+
|
|
88
|
+
- If <text/> starts NOT with `ERROR:`:
|
|
89
|
+
<if condition="<assignee/> is equal `me` or <ase-user-id/>, and <id/> is NOT equal <ase-task-id/>">
|
|
90
|
+
Call the `ase_task_id(id: "<id/>", session: "<ase-session-id/>")`
|
|
91
|
+
tool of the `ase` MCP server to switch the task, so the usage
|
|
92
|
+
window of the task observes assignee changes made elsewhere, and
|
|
93
|
+
set <ase-task-id><id/></ase-task-id>. Do not output anything
|
|
94
|
+
related to this MCP tool call.
|
|
95
|
+
</if>
|
|
96
|
+
|
|
97
|
+
Set <result/> to the first line of <text/> with the leading
|
|
98
|
+
`OK: ` prefix stripped and only output the following
|
|
99
|
+
<template/>:
|
|
100
|
+
|
|
101
|
+
<template>
|
|
102
|
+
⧉ **ASE**: ◉ task: **<id/>**, ☺ assignee: **<assignee/>** (*updated*), ▶ <result/>
|
|
103
|
+
</template>
|
|
104
|
+
|
|
105
|
+
If <text/> carries a line `NOTICE: <info/>`, additionally
|
|
106
|
+
output:
|
|
107
|
+
|
|
108
|
+
<template>
|
|
109
|
+
⧉ **ASE**: ◉ task: **<id/>**, ▶ NOTICE: <info/>
|
|
110
|
+
</template>
|
|
111
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-task-assign` - Assign a Task Plan
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-task-assign`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[*id*`:`] *assignee*
|
|
11
|
+
|
|
12
|
+
## DESCRIPTION
|
|
13
|
+
|
|
14
|
+
The `ase-task-assign` skill assigns a *task plan* to an *assignee*, i.e.
|
|
15
|
+
sets its `Assignee:` frontmatter key, via the `ase_task_assign` MCP tool,
|
|
16
|
+
leaving its `Modified:` key alone, as that key tracks changes of the plan
|
|
17
|
+
body only. Additionally, it *accounts* the *AI usage* of the session onto
|
|
18
|
+
the task:
|
|
19
|
+
|
|
20
|
+
- Assigning the task to *oneself* (`me` or the current user id) opens
|
|
21
|
+
the *usage window* of the task, or attaches the session to an already
|
|
22
|
+
open one (e.g. of a previous session). From then on, all turns of the
|
|
23
|
+
session are accounted: the AI request time, the cache read, cache
|
|
24
|
+
write, input, and output tokens, and the costs, as reported by the
|
|
25
|
+
agent tool via *OpenTelemetry* to the ASE service, plus, in addition,
|
|
26
|
+
the human time (the whole real time of the window, as the engineer
|
|
27
|
+
costs money even while waiting for the AI) and its costs at the
|
|
28
|
+
hourly rate of the assignee in `telemetry.prices.hr` (default: 110 USD).
|
|
29
|
+
|
|
30
|
+
- Assigning the task to *anybody else*, or to *nobody* with `none`
|
|
31
|
+
(removing the `Assignee:` key), *gives it back*: it closes the usage
|
|
32
|
+
window and, after a grace period of 10 seconds for late telemetry,
|
|
33
|
+
adds the accumulated usage to the usage attachment of the task
|
|
34
|
+
(`Type: application/yaml; kind="usage"`), whose YAML data carries the
|
|
35
|
+
amounts `time: { ai, hr, real }` (minutes), `token: { cread, cwrite,
|
|
36
|
+
input, output }` (counts), and `cost: { ai, hr }` (USD). Each
|
|
37
|
+
booking *adds* to the existing amounts, atomically, so concurrent
|
|
38
|
+
changes of the task (e.g. by the agents of `ase agent`) are never lost.
|
|
39
|
+
|
|
40
|
+
A usage window also closes and books when its last session *ends*, and
|
|
41
|
+
when the `Assignee:` of the task is changed *elsewhere* (e.g. on the task
|
|
42
|
+
board) while the task is the current task of the session. Conversely,
|
|
43
|
+
changing the `Assignee:` of a task to oneself *elsewhere* (e.g. on the
|
|
44
|
+
task board) opens its usage window, too, and attaches every session of
|
|
45
|
+
the project whose current task it is (also a session switching to it,
|
|
46
|
+
or starting with it, later on), with the window starting *paused*, i.e.,
|
|
47
|
+
accounting from the next AI request of its sessions on. An *unassigned*
|
|
48
|
+
task is even accounted *implicitly*, without any assignment: while it is
|
|
49
|
+
the current task of a session, the session is attached to its usage
|
|
50
|
+
window in the same way, until the session switches to another task, the
|
|
51
|
+
task gets assigned to anybody else, or the session ends (configurable via
|
|
52
|
+
`telemetry.implicit`, default: `true`, never for task `default`), so
|
|
53
|
+
explicitly assigning a task to oneself is needed only for claiming it,
|
|
54
|
+
e.g. against the agents of `ase agent`. Long windows
|
|
55
|
+
additionally book every `telemetry.service.interval` minutes (default: 10).
|
|
56
|
+
Without any AI request for `telemetry.service.idle` minutes (default: 30),
|
|
57
|
+
a usage window *pauses*, and the next AI request (of any kind, not just
|
|
58
|
+
ASE skills) silently *resumes* it, so forgetting a task assigned to
|
|
59
|
+
oneself does not account an idle session endlessly. A usage window without
|
|
60
|
+
any AI request for 7 days is closed and booked.
|
|
61
|
+
|
|
62
|
+
The accounting is *opt-in*: it requires the configuration key
|
|
63
|
+
`telemetry.enabled` to be `true` (via `ase config set telemetry.enabled
|
|
64
|
+
true`) and the telemetry export of the agent tool to be activated once
|
|
65
|
+
via `ase setup telemetry activate --tool` *tool*, otherwise only the
|
|
66
|
+
assignee is set and a `NOTICE` is reported. If *id*`:` is omitted, the *current* task id
|
|
67
|
+
(inherited from the session context) is used, otherwise, on a successful
|
|
68
|
+
assignment to *oneself*, the current task id of the session is switched
|
|
69
|
+
to *id*.
|
|
70
|
+
|
|
71
|
+
## ARGUMENTS
|
|
72
|
+
|
|
73
|
+
- *id*`:`:
|
|
74
|
+
The unique identifier of the task plan, with a trailing colon.
|
|
75
|
+
If omitted, the current task id is used.
|
|
76
|
+
|
|
77
|
+
- *assignee*:
|
|
78
|
+
The assignee: `me` for oneself, `none` for nobody, or any other
|
|
79
|
+
name of a human or agent. If the configuration key `project.users`
|
|
80
|
+
lists the known users, a name which is neither one of them nor the
|
|
81
|
+
name of an agent present at the agent relay is still assigned, but
|
|
82
|
+
reported with a `NOTICE`.
|
|
83
|
+
|
|
84
|
+
## SCENARIOS
|
|
85
|
+
|
|
86
|
+
- You start working on a task and want its AI usage tracked
|
|
87
|
+
- You hand a task over to a colleague or an agent, booking your usage
|
|
88
|
+
- You want to know the AI time, tokens, and costs spent on a task
|
|
89
|
+
|
|
90
|
+
## EXAMPLES
|
|
91
|
+
|
|
92
|
+
Take the current task plan and track the AI usage of the session:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
❯ /ase-task-assign me
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Take a specific task plan:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
❯ /ase-task-assign hello: me
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Give the task plan back to a colleague, booking the AI usage:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
❯ /ase-task-assign alice
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Unassign the task plan, booking the AI usage:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
❯ /ase-task-assign hello: none
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## SEE ALSO
|
|
117
|
+
|
|
118
|
+
[`ase-task-status`](../ase-task-status/help.md), [`ase-task-id`](../ase-task-id/help.md), [`ase-task-view`](../ase-task-view/help.md),
|
|
119
|
+
[`ase-task-list`](../ase-task-list/help.md).
|
|
@@ -21,7 +21,7 @@ Condense a Task Plan
|
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-condense"
|
|
24
|
-
arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|
|
|
24
|
+
arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|DRAFT)... --int-reuse-task">
|
|
25
25
|
$ARGUMENTS
|
|
26
26
|
</expand>
|
|
27
27
|
|
|
@@ -74,8 +74,7 @@ Set <args></args> (set args to empty).
|
|
|
74
74
|
</if>
|
|
75
75
|
|
|
76
76
|
2. <if condition="<task-content/> is empty">
|
|
77
|
-
Complain and tell the user to use the `ase-
|
|
78
|
-
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
77
|
+
Complain and tell the user to use the `ase-task-edit` skill
|
|
79
78
|
first to create a task plan. Then immediately stop processing
|
|
80
79
|
this skill.
|
|
81
80
|
</if>
|
|
@@ -88,17 +87,17 @@ Set <args></args> (set args to empty).
|
|
|
88
87
|
and unchanged*. Honor the following ruleset *strictly*:
|
|
89
88
|
|
|
90
89
|
1. *Preserve-exactly (never alter)*: the plan <format/>
|
|
91
|
-
structure (the frontmatter block with its
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
90
|
+
structure (the entire frontmatter block with all of its keys,
|
|
91
|
+
the headings `#`/`##`, all three `## SPECIFICATION (WHAT)`,
|
|
92
|
+
`## DESIGN (HOW)`, and `## VERIFICATION (WHEN)` sections,
|
|
93
|
+
the `- <box/> <type/>:` bullet-point prefixes with their
|
|
94
|
+
checkbox states, and the entire "backmatter" with all of its
|
|
95
|
+
attachment blocks), all *code spans* and code blocks,
|
|
96
|
+
technical terms, file paths, identifiers, numbers,
|
|
97
|
+
severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and the
|
|
98
|
+
`*<aspect/>*` emphasis highlighting convention.
|
|
99
|
+
|
|
100
|
+
2. *Compress free-text only* (each bullet-point's <text/>):
|
|
102
101
|
- *Drop* filler ("just", "really", "basically", "simply"),
|
|
103
102
|
pleasantries, and hedging ("I think", "maybe", "perhaps").
|
|
104
103
|
- *Use* shorter synonyms and common abbreviations.
|
|
@@ -151,11 +150,11 @@ Set <args></args> (set args to empty).
|
|
|
151
150
|
|
|
152
151
|
<expand name="task-next-select"
|
|
153
152
|
arg1="ase-task-condense"
|
|
154
|
-
arg2="DONE|EDIT|IMPLEMENT|
|
|
153
|
+
arg2="DONE|EDIT|IMPLEMENT|DRAFT">
|
|
155
154
|
Next Step: How would you like to proceed with the plan?
|
|
156
155
|
DONE: Stop processing.
|
|
157
156
|
EDIT: Hand off plan to editing.
|
|
158
|
-
|
|
157
|
+
DRAFT: Hand off plan to implementation drafting.
|
|
159
158
|
IMPLEMENT: Hand off plan to implementation.
|
|
160
159
|
</expand>
|
|
161
160
|
|
|
@@ -190,12 +189,13 @@ Set <args></args> (set args to empty).
|
|
|
190
189
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan condensed -- hand-off to implementation**
|
|
191
190
|
</template>
|
|
192
191
|
|
|
193
|
-
- If <result/> is `
|
|
192
|
+
- If <result/> is `DRAFT`:
|
|
194
193
|
<expand name="handoff-args"/>
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
194
|
+
Set <args><args/> --draft</args>. Only output the following
|
|
195
|
+
<template/> and then call the
|
|
196
|
+
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
197
|
+
to *draft* the implementation of the plan.
|
|
198
198
|
|
|
199
199
|
<template>
|
|
200
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan condensed -- hand-off to
|
|
200
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan condensed -- hand-off to implementation draft**
|
|
201
201
|
</template>
|
|
@@ -16,13 +16,15 @@ The `ase-task-condense` skill *compresses* the wording of an existing
|
|
|
16
16
|
task plan to make it require as little reading as possible, while
|
|
17
17
|
keeping *all semantics fully preserved and unchanged*. It loads the
|
|
18
18
|
current (or given) plan, applies a self-contained, telegrapher-like
|
|
19
|
-
"remove-fluff" ruleset to the *free-text* parts only (the
|
|
20
|
-
|
|
21
|
-
shorter plan back via `ase_task_save`.
|
|
22
|
-
|
|
23
|
-
The plan *structure* is never altered:
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
"remove-fluff" ruleset to the *free-text* parts only (the text of each
|
|
20
|
+
`DOM`, `IFC`, `ARC`, `IMP`, `REG`, and `CON` bullet point), and writes
|
|
21
|
+
the shorter plan back via `ase_task_save`.
|
|
22
|
+
|
|
23
|
+
The plan *structure* is never altered: the frontmatter, all headings,
|
|
24
|
+
the `SPECIFICATION (WHAT)`, `DESIGN (HOW)`, and `VERIFICATION (WHEN)`
|
|
25
|
+
sections, the `- [ ] DOM:`-style bullet prefixes with their checkbox
|
|
26
|
+
states, all attachments, code spans, technical terms, file paths,
|
|
27
|
+
numbers, and severities are kept exactly. Only genuinely
|
|
26
28
|
redundant bullets may be merged, and a shortening that would change
|
|
27
29
|
meaning is always rejected in favor of the longer wording. The condense
|
|
28
30
|
ruleset *overrides* the active session persona, so the plan is compressed
|
|
@@ -33,8 +35,8 @@ further reduction is possible, the plan is left untouched (including its
|
|
|
33
35
|
`Modified:` frontmatter timestamp) and reported as *already condensed*.
|
|
34
36
|
|
|
35
37
|
After condensing, the user is asked whether to stop or hand off to
|
|
36
|
-
`ase-task-edit
|
|
37
|
-
`--next` pre-selects this choice.
|
|
38
|
+
`ase-task-edit` or `ase-task-implement` (optionally with `--draft`),
|
|
39
|
+
unless `--next` pre-selects this choice.
|
|
38
40
|
|
|
39
41
|
## OPTIONS
|
|
40
42
|
|
|
@@ -47,7 +49,7 @@ After condensing, the user is asked whether to stop or hand off to
|
|
|
47
49
|
Recognized tokens at this skill: `none` (default, interactive
|
|
48
50
|
answer required), `DONE` (stop), `EDIT` (hand off to
|
|
49
51
|
`ase-task-edit`), `IMPLEMENT` (hand off to `ase-task-implement`),
|
|
50
|
-
or `
|
|
52
|
+
or `DRAFT` (hand off to `ase-task-implement --draft`). Example:
|
|
51
53
|
`--next EDIT,DONE` condenses, hands off to editing, and the editing
|
|
52
54
|
loop will exit immediately.
|
|
53
55
|
|
|
@@ -42,7 +42,7 @@ Procedure
|
|
|
42
42
|
Do not output anything.
|
|
43
43
|
</if>
|
|
44
44
|
|
|
45
|
-
3. <if condition="<id/> does NOT match the regexp `^[a-zA-
|
|
45
|
+
3. <if condition="<id/> does NOT match the regexp `^[a-zA-Z0-9#][a-zA-Z0-9#_-]*$`">
|
|
46
46
|
Only output the following <template/> and then immediately
|
|
47
47
|
*STOP* processing the entire current skill:
|
|
48
48
|
|
|
@@ -50,7 +50,7 @@ Procedure
|
|
|
50
50
|
2. React on the task id:
|
|
51
51
|
|
|
52
52
|
<if condition="
|
|
53
|
-
<instruction/> matches the regexp `^[a-zA-
|
|
53
|
+
<instruction/> matches the regexp `^[a-zA-Z0-9#][a-zA-Z0-9#_-]*:?$`
|
|
54
54
|
">
|
|
55
55
|
The lone token is the *task id* (with an optional and ignored
|
|
56
56
|
trailing `:`), never a hint. Set
|
|
@@ -68,7 +68,7 @@ Procedure
|
|
|
68
68
|
|
|
69
69
|
<elseif condition="
|
|
70
70
|
<instruction/> has the format `<id/>: <text/>` where
|
|
71
|
-
<id/> matches the regexp `^[a-zA-
|
|
71
|
+
<id/> matches the regexp `^[a-zA-Z0-9#][a-zA-Z0-9#_-]*$`
|
|
72
72
|
">
|
|
73
73
|
Set <instruction><text/></instruction> (set instruction to
|
|
74
74
|
text) and <ase-task-id><id/></ase-task-id> (set task id to
|
|
@@ -106,8 +106,7 @@ Procedure
|
|
|
106
106
|
<expand name="task-load-content"></expand>
|
|
107
107
|
|
|
108
108
|
2. If the <task-content/> is still empty, complain and tell
|
|
109
|
-
the user to use the `ase-
|
|
110
|
-
`ase-code-craft`, or `ase-task-edit` skills first to create a
|
|
109
|
+
the user to use the `ase-task-edit` skill first to create a
|
|
111
110
|
task plan. Then immediately stop processing this skill.
|
|
112
111
|
|
|
113
112
|
3. **Dissect Task Plan:**
|
|
@@ -120,12 +119,16 @@ Procedure
|
|
|
120
119
|
arg2="<dissect-hint/>"
|
|
121
120
|
arg3="<ase-task-id/>"
|
|
122
121
|
>
|
|
123
|
-
the individual bullet points of the `##
|
|
124
|
-
`## VERIFICATION` sections of the
|
|
122
|
+
the individual bullet points of the `## SPECIFICATION (WHAT)`,
|
|
123
|
+
`## DESIGN (HOW)`, and `## VERIFICATION (WHEN)` sections of the
|
|
124
|
+
loaded plan <task-content/>
|
|
125
125
|
</expand>
|
|
126
126
|
|
|
127
|
-
Each `##
|
|
128
|
-
which carries the `##
|
|
127
|
+
Each `## DESIGN (HOW)` bullet point *MUST* land in the very part
|
|
128
|
+
which carries the `## SPECIFICATION (WHAT)` bullet points it
|
|
129
|
+
realizes, and each `## VERIFICATION (WHEN)` bullet point *MUST*
|
|
130
|
+
land in the very part which carries the `## SPECIFICATION (WHAT)`
|
|
131
|
+
and `## DESIGN (HOW)` bullet points it verifies.
|
|
129
132
|
|
|
130
133
|
A *single* bullet point is *not* the smallest unit here: a bullet
|
|
131
134
|
point which itself covers *multiple* domains or concerns *MAY* be
|
|
@@ -133,11 +136,21 @@ Procedure
|
|
|
133
136
|
each of which is a complete bullet point of its own, is formed
|
|
134
137
|
*exclusively* from the wording of the original bullet point, and
|
|
135
138
|
is then assigned to a part like an ordinary bullet point. A split
|
|
136
|
-
`##
|
|
137
|
-
points its fragments verify, so its
|
|
138
|
-
*different* parts.
|
|
139
|
-
|
|
140
|
-
2. *
|
|
139
|
+
`## DESIGN (HOW)` or `## VERIFICATION (WHEN)` bullet point
|
|
140
|
+
follows the bullet points its fragments realize or verify, so its
|
|
141
|
+
fragments *MAY* land in *different* parts.
|
|
142
|
+
|
|
143
|
+
2. *Identify the parts* according to the task id scheme of the
|
|
144
|
+
project: for *every* part in <parts/>, in their derived order,
|
|
145
|
+
call the `ase_task_newid(title: "<scope/>", proposal:
|
|
146
|
+
"<part-id/>", taken: [ <previous/> ])` tool of the `ase` MCP
|
|
147
|
+
server, where <previous/> lists the already re-identified
|
|
148
|
+
<part-id/> of all preceding parts (as the tool reserves ids for
|
|
149
|
+
scheme `seq` only), and replace the <part-id/> of the part with the `id` field
|
|
150
|
+
of its response -- you *MUST* *NEVER* assemble such an id
|
|
151
|
+
yourself. Do not output anything related to these MCP tool calls.
|
|
152
|
+
|
|
153
|
+
3. *Report the parts*:
|
|
141
154
|
|
|
142
155
|
<expand name="dissect-report" arg1="<ase-task-id/>"></expand>
|
|
143
156
|
|
|
@@ -204,50 +217,60 @@ Procedure
|
|
|
204
217
|
following the plan <format/>, where:
|
|
205
218
|
|
|
206
219
|
- the <task-id/> is <part-id/>,
|
|
207
|
-
- the <task-status/> is
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
- the
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
of the
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
220
|
+
- the <task-status/> is the *default* state of the task
|
|
221
|
+
lifecycle model <ase-project-task-lifecycle/>, as every
|
|
222
|
+
part is a *newly created* plan,
|
|
223
|
+
- the `Group:` key carries <ase-task-id/>, the id of the
|
|
224
|
+
epic, so all parts are grouped under it,
|
|
225
|
+
- the `Kind:`, `Phase:`, `Tags:`, `Source:`, `Changeset:`,
|
|
226
|
+
and `Target:` keys are taken over from the epic
|
|
227
|
+
*verbatim* (the kind being
|
|
228
|
+
inferred from the part content if the epic carries no
|
|
229
|
+
`Kind:` key), while the `After:` key of a part lists the
|
|
230
|
+
parts it depends on, if any,
|
|
231
|
+
- the <task-title/> is derived from the part's <scope/>,
|
|
232
|
+
- the `## SPECIFICATION (WHAT)` section carries *exactly*
|
|
233
|
+
the `DOM` and `IFC` bullet points assigned to this part,
|
|
234
|
+
- the `## DESIGN (HOW)` section carries *exactly* the
|
|
235
|
+
`ARC` and `IMP` bullet points assigned to this part, and
|
|
236
|
+
- the `## VERIFICATION (WHEN)` section carries *exactly*
|
|
237
|
+
the `REG` and `CON` bullet points assigned to this part,
|
|
238
|
+
|
|
239
|
+
all bullet points keeping their original wording, checkbox
|
|
240
|
+
state, and type, and no "backmatter" being carried over from
|
|
241
|
+
the epic.
|
|
223
242
|
|
|
224
243
|
For a bullet point which was *split* into fragments, the part
|
|
225
|
-
carries *only* its own fragment: the <
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
<if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
|
|
234
|
-
The epic itself deliberately *omits* the `## VERIFICATION
|
|
235
|
-
section, so you *MUST* omit this section (including
|
|
236
|
-
heading) from <part-content/>, too.
|
|
244
|
+
carries *only* its own fragment: the <text/> keeps the
|
|
245
|
+
*original* wording of the portion this fragment covers, with
|
|
246
|
+
*no* re-interpretation and *no* added scope, and the
|
|
247
|
+
`<box/> <type/>:` prefix is kept *unchanged*. Across all
|
|
248
|
+
parts, the fragments of a split bullet point *MUST* still
|
|
249
|
+
reproduce the original bullet point *completely* and
|
|
250
|
+
*without* duplication.
|
|
251
|
+
|
|
252
|
+
<if condition="<task-content/> does NOT contain a `## VERIFICATION (WHEN)` section heading">
|
|
253
|
+
The epic itself deliberately *omits* the `## VERIFICATION
|
|
254
|
+
(WHEN)` section, so you *MUST* omit this section (including
|
|
255
|
+
its heading) from <part-content/>, too.
|
|
237
256
|
</if>
|
|
238
|
-
<elseif condition="no `## VERIFICATION` bullet point was assigned to this part">
|
|
257
|
+
<elseif condition="no `## VERIFICATION (WHEN)` bullet point was assigned to this part">
|
|
239
258
|
This part carries *no* verification of its own, so you *MUST*
|
|
240
|
-
omit the `## VERIFICATION` section (including its
|
|
241
|
-
from <part-content/>, too -- an *empty* section
|
|
242
|
-
the plan <format/>, and rule 5 forbids
|
|
243
|
-
point.
|
|
259
|
+
omit the `## VERIFICATION (WHEN)` section (including its
|
|
260
|
+
heading) from <part-content/>, too -- an *empty* section
|
|
261
|
+
would violate the plan <format/>, and rule 5 forbids
|
|
262
|
+
inventing a bullet point.
|
|
244
263
|
</elseif>
|
|
245
264
|
|
|
246
265
|
2. Call the `ase_task_save(id: "<part-id/>", text:
|
|
247
|
-
"<part-content/>")` tool of the `ase` MCP server to persist
|
|
266
|
+
"<part-content/>", create: true)` tool of the `ase` MCP server to persist
|
|
248
267
|
the sub-task plan -- this MCP tool call is the *only*
|
|
249
268
|
permitted way to persist it, *NEVER* write the plan file
|
|
250
|
-
via `Write`/`Edit` or by executing a shell command.
|
|
269
|
+
via `Write`/`Edit` or by executing a shell command. If this
|
|
270
|
+
call fails because the task already exists (a concurrent
|
|
271
|
+
session took the same id), re-identify this part as in step
|
|
272
|
+
3.2, replace its <part-id/> in <part-content/>, and save
|
|
273
|
+
again. Do not
|
|
251
274
|
output anything related to this MCP tool call except the
|
|
252
275
|
following <template/>:
|
|
253
276
|
|
|
@@ -22,8 +22,9 @@ it can be implemented, reviewed, and committed entirely on its own.
|
|
|
22
22
|
|
|
23
23
|
The dissection follows a strict ruleset: at least *2* and at most
|
|
24
24
|
*count* parts are derived, *every* bullet point of the epic's
|
|
25
|
-
`##
|
|
26
|
-
|
|
25
|
+
`## SPECIFICATION (WHAT)`, `## DESIGN (HOW)`, and
|
|
26
|
+
`## VERIFICATION (WHEN)` sections is assigned to *exactly one* part,
|
|
27
|
+
mutually dependent bullet points are kept together, and
|
|
27
28
|
nothing beyond the epic's own content is invented. A bullet point which
|
|
28
29
|
itself covers *multiple* domains is *split* into fragments, which are
|
|
29
30
|
then assigned individually -- together they still reproduce the original
|
|
@@ -42,9 +43,11 @@ never the ruleset itself.
|
|
|
42
43
|
The derived parts are first reported as a *dissection table* (part
|
|
43
44
|
number, sub-task id, scope, and rationale). Then -- unless `--dry` is
|
|
44
45
|
given -- each part is materialized as its own *complete* sub-task plan
|
|
45
|
-
(with its own `##
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
(with its own `## SPECIFICATION (WHAT)`, `## DESIGN (HOW)`, and
|
|
47
|
+
`## VERIFICATION (WHEN)` sections, grouped under the epic via its
|
|
48
|
+
`Group:` frontmatter key) and persisted under the task id
|
|
49
|
+
`<task-id>-<feature-slug>`. The epic plan itself always stays
|
|
50
|
+
*untouched*.
|
|
48
51
|
|
|
49
52
|
## OPTIONS
|
|
50
53
|
|
|
@@ -54,9 +57,7 @@ The epic plan itself always stays *untouched*.
|
|
|
54
57
|
|
|
55
58
|
- `--dry`|`-d`:
|
|
56
59
|
*Report only* -- print the dissection table but create *no*
|
|
57
|
-
artifacts at all, so the decision stays fully reversible.
|
|
58
|
-
this meaning differs from `--dry`/`-d` in `ase-code-craft`, where it
|
|
59
|
-
instead omits the `## VERIFICATION` section of the composed plan.
|
|
60
|
+
artifacts at all, so the decision stays fully reversible.
|
|
60
61
|
|
|
61
62
|
- `--force`|`-f`:
|
|
62
63
|
Overwrite already existing sub-task plans. Without this option, the
|
|
@@ -117,5 +118,5 @@ Dissect a specific task plan with a hint:
|
|
|
117
118
|
|
|
118
119
|
## SEE ALSO
|
|
119
120
|
|
|
120
|
-
[`ase-
|
|
121
|
+
[`ase-repo-dissect`](../ase-repo-dissect/help.md), [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-condense`](../ase-task-condense/help.md),
|
|
121
122
|
[`ase-task-implement`](../ase-task-implement/help.md), [`ase-task-list`](../ase-task-list/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|