@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,155 +1,404 @@
|
|
|
1
1
|
|
|
2
|
-
Task
|
|
3
|
-
|
|
2
|
+
Task Format
|
|
3
|
+
-----------
|
|
4
4
|
|
|
5
|
-
Every *task* uses a strict and fixed format:
|
|
5
|
+
Every *task* uses a strict and fixed textual format:
|
|
6
6
|
|
|
7
7
|
<format>
|
|
8
8
|
---
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
Type: text/vnd.ase.task
|
|
10
|
+
Id: <task-id/>
|
|
11
|
+
Created: <timestamp-created/>
|
|
12
|
+
Modified: <timestamp-modified/>
|
|
13
|
+
Group: <task-group/>
|
|
14
|
+
Phase: <task-phase/>
|
|
15
|
+
After: <task-after/>
|
|
16
|
+
Status: <task-status/>
|
|
17
|
+
Assignee: <task-assignee/>
|
|
18
|
+
Kind: <task-kind/>
|
|
19
|
+
Effort: <task-effort/>
|
|
20
|
+
Tags: <task-tags/>
|
|
21
|
+
Source: <task-source/>
|
|
22
|
+
Changeset: <task-changeset/>
|
|
23
|
+
Target: <task-target/>
|
|
15
24
|
---
|
|
16
25
|
|
|
17
|
-
# TASK: <title/>
|
|
26
|
+
# TASK: <task-title/>
|
|
18
27
|
|
|
19
|
-
##
|
|
28
|
+
## SPECIFICATION (WHAT)
|
|
20
29
|
|
|
21
|
-
- **
|
|
30
|
+
- [ ] DOM: **[...]**: [...]
|
|
22
31
|
|
|
23
|
-
-
|
|
32
|
+
- [...]
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
- [ ] IFC: **[...]**: [...]
|
|
26
35
|
|
|
27
36
|
- [...]
|
|
28
37
|
|
|
38
|
+
## DESIGN (HOW)
|
|
39
|
+
|
|
40
|
+
- [ ] ARC: **[...]**: [...]
|
|
41
|
+
|
|
29
42
|
- [...]
|
|
30
43
|
|
|
31
|
-
|
|
44
|
+
- [ ] IMP: **[...]**: [...]
|
|
32
45
|
|
|
33
46
|
- [...]
|
|
34
47
|
|
|
48
|
+
## VERIFICATION (WHEN)
|
|
49
|
+
|
|
50
|
+
- [ ] REG: **[...]**: [...]
|
|
51
|
+
|
|
35
52
|
- [...]
|
|
36
53
|
|
|
54
|
+
- [ ] CON: **[...]**: [...]
|
|
55
|
+
|
|
56
|
+
- [...]
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
Type: <task-attachment-type/>
|
|
60
|
+
Desc: <task-attachment-desc/>
|
|
61
|
+
Created: <task-attachment-created/>
|
|
62
|
+
Modified: <task-attachment-modified/>
|
|
63
|
+
Data: |4+
|
|
64
|
+
<task-attachment-payload/>
|
|
65
|
+
---
|
|
66
|
+
Type: <task-attachment-type/>
|
|
67
|
+
Desc: <task-attachment-desc/>
|
|
68
|
+
Created: <task-attachment-created/>
|
|
69
|
+
Modified: <task-attachment-modified/>
|
|
70
|
+
File: <task-attachment-file/>
|
|
37
71
|
</format>
|
|
38
72
|
|
|
39
73
|
You *MUST* honor the following hints on this *task* format:
|
|
40
74
|
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- The *
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
- A task consists of at least two blocks, each *starting* with a `---` line.
|
|
76
|
+
There is *no* terminating line: a block ends where the next block starts
|
|
77
|
+
or where the file ends. The first block is named the "frontmatter" and is
|
|
78
|
+
a YAML metadata block with the task's metadata. The second block is named
|
|
79
|
+
the "body" and is a Markdown task plan. The third and following blocks are
|
|
80
|
+
named the "backmatter" and are zero or more attachment blocks, each based
|
|
81
|
+
on a YAML metadata block.
|
|
82
|
+
|
|
83
|
+
- The content *MUST* begin with the `---` line starting the
|
|
84
|
+
*frontmatter* as its very *first* line -- there is *no* leading empty line,
|
|
85
|
+
as any line before the `---` would degrade the frontmatter into ordinary
|
|
86
|
+
Markdown. You *MUST* always keep the empty line between the `---` line
|
|
87
|
+
starting the "body" and the `#` heading, and always keep the last empty
|
|
88
|
+
line of the Markdown "body" (second block) just before the `---` line starting
|
|
89
|
+
the "backmatter" or the end of the file. If one of them is missing, add it
|
|
90
|
+
back. This trailing empty line is required for the Markdown "body" *only*.
|
|
91
|
+
|
|
92
|
+
- As `---` lines start the blocks, the *body* *MUST NOT* contain a line
|
|
93
|
+
consisting of just `---` outside a fenced code block, as it could be read
|
|
94
|
+
as the start of the "backmatter" -- use `***` for a Markdown horizontal
|
|
95
|
+
rule instead. Inside a fenced code block, `---` lines are fine, but every
|
|
96
|
+
fenced code block of the *body* *MUST* be closed.
|
|
97
|
+
|
|
98
|
+
- The *frontmatter* can carry the keys `Type`, `Id`, `Created`, `Modified`,
|
|
99
|
+
`Group`, `Phase`, `After`, `Status`, `Assignee`, `Kind`, `Effort`, `Tags`, `Source`,
|
|
100
|
+
`Changeset`, and `Target` in exactly this order, with their values being
|
|
101
|
+
*unquoted* plain scalars and vertically aligned at a *fixed* column: each
|
|
102
|
+
`<key/>:` is padded with spaces to a width of 11 characters, so every value
|
|
103
|
+
starts at column 12 (one space after `Changeset:`) -- independent of which
|
|
104
|
+
keys are actually present. Only `Type` and `Id` are *mandatory* -- every
|
|
105
|
+
other key is *optional* and, when absent, falls back to its default value.
|
|
106
|
+
A skill *writing* an optional key which is still *absent* inserts it at its
|
|
107
|
+
position in the key order above, aligned at the same fixed column.
|
|
108
|
+
|
|
109
|
+
- The `Type` frontmatter key has to use the value `text/vnd.ase.task` for
|
|
110
|
+
consistency (with the backmatter) and identification reasons. A plan
|
|
111
|
+
*lacking* the `Type` key is a *legacy* plan, whose `Status` value is
|
|
112
|
+
migrated onto the current task lifecycle model on load.
|
|
113
|
+
|
|
114
|
+
- The <task-id/> of the `Id` frontmatter key has to be substituted
|
|
66
115
|
with the current value of <ase-task-id/> in the current session
|
|
67
|
-
context.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
one of the following eight states:
|
|
74
|
-
|
|
75
|
-
- `DRAFTED`: plan exists but is still provisional and not yet
|
|
76
|
-
cleared for implementation.
|
|
77
|
-
- `REJECTED`: plan was reviewed and refused, and has to be reworked
|
|
78
|
-
before it can be approved.
|
|
79
|
-
- `APPROVED`: plan is accepted as authoritative and cleared for
|
|
80
|
-
implementation, but no work has begun.
|
|
81
|
-
- `DEFERRED`: plan is approved and unobstructed, but its start was
|
|
82
|
-
deliberately postponed.
|
|
83
|
-
- `STARTED`: implementation of the plan is actively underway.
|
|
84
|
-
- `BLOCKED`: implementation is halted by an impediment which
|
|
85
|
-
someone has to remove before it can resume.
|
|
86
|
-
- `COMPLETED`: plan was implemented in full and reached its
|
|
87
|
-
intended outcome.
|
|
88
|
-
- `CANCELLED`: plan was terminated before completion, because it
|
|
89
|
-
failed, was called off, or became obsolete.
|
|
90
|
-
|
|
91
|
-
- The eight states form a *state machine*. Whoever sets the `Status:`
|
|
92
|
-
key *MUST* only move along one of the following transitions, whereby
|
|
93
|
-
a *single* operation *MAY* traverse *several* transitions at once if
|
|
94
|
-
it performs the corresponding stages in one go:
|
|
95
|
-
|
|
96
|
-
```text
|
|
97
|
-
DRAFTED ──reject───▶ REJECTED STARTED ──block────▶ BLOCKED
|
|
98
|
-
REJECTED ──redraft──▶ DRAFTED BLOCKED ──unblock──▶ STARTED
|
|
99
|
-
DRAFTED ──approve──▶ APPROVED STARTED ──complete─▶ COMPLETED
|
|
100
|
-
APPROVED ──defer────▶ DEFERRED
|
|
101
|
-
DEFERRED ──resume───▶ APPROVED any non-terminal state
|
|
102
|
-
APPROVED ──start────▶ STARTED ──cancel───▶ CANCELLED
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
`COMPLETED` and `CANCELLED` are the two *terminal* states: a plan
|
|
106
|
-
which reached one of them is *finished* and leaves the state machine.
|
|
107
|
-
|
|
108
|
-
- The `Properties:` frontmatter key states which *stages* the task
|
|
109
|
-
plan already passed through. The <task-properties/> value is
|
|
110
|
-
*strictly* either `none` or a comma-separated list of the values
|
|
111
|
-
`grilled`, `preflighted`, `implemented`, and `verified`, listed in
|
|
112
|
-
exactly this order, each at most once. The key is *optional* and
|
|
113
|
-
defaults to `none`: an *absent* key reads as `none`, and a *newly
|
|
114
|
-
created* plan carries `none` explicitly. The list only ever
|
|
115
|
-
*accumulates*: a skill *adds* its own value if still absent and
|
|
116
|
-
*MUST NOT* drop any value already present, except when a plan is
|
|
117
|
-
*recreated from scratch*, which resets it to `none`.
|
|
118
|
-
|
|
119
|
-
- The `Kind:` frontmatter key states the *kind of change* the task plan
|
|
120
|
-
describes, and hence which *operation-specific tenet set* of the
|
|
121
|
-
**ASE Tenets** a subsequent preflight or implementation has to
|
|
122
|
-
honor. The <task-kind/> value is *strictly* one of `CRAFTING`,
|
|
123
|
-
`REFACTORING`, or `RESOLVING`.
|
|
124
|
-
|
|
125
|
-
- The `Kind:` frontmatter key is *optional*: a skill *authoring* or
|
|
126
|
-
*updating* a task plan *CAN* update an already present key or pass
|
|
127
|
-
it through *verbatim* and *MAY* create a missing one by *inferring*
|
|
128
|
-
the kind from the plan content (defaulting to `CRAFTING`). A
|
|
129
|
-
`--dry` run *never* drops this key, as `--dry` only omits the
|
|
130
|
-
`## VERIFICATION` section.
|
|
131
|
-
|
|
132
|
-
- A skill *writing* an optional key which is still *absent* inserts it
|
|
133
|
-
at its position in the key order above and re-aligns the values of
|
|
134
|
-
the whole frontmatter block.
|
|
135
|
-
|
|
136
|
-
- The <timestamp-created/> of the `Created:` frontmatter key is the
|
|
116
|
+
context. A task id consists of the characters `A-Z`, `a-z`, `0-9`,
|
|
117
|
+
`#`, `_`, and `-` only, and a *new* task id is always obtained via
|
|
118
|
+
the `ase_task_newid` MCP tool, which honors the task id scheme of
|
|
119
|
+
the project.
|
|
120
|
+
|
|
121
|
+
- The <timestamp-created/> of the `Created` frontmatter key is the
|
|
137
122
|
timestamp when this task plan was created. The <timestamp-modified/>
|
|
138
|
-
of the `Modified
|
|
139
|
-
task plan was last modified
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
123
|
+
of the `Modified` frontmatter key is the timestamp when the *body*
|
|
124
|
+
of this task plan was last modified: a change to *frontmatter* keys
|
|
125
|
+
only (like `Status` or `Changeset`) or to the *backmatter* only *MUST
|
|
126
|
+
NOT* refresh it. Both use an ISO-style format value. The value of
|
|
127
|
+
both has to be determined by a call to the `ase_timestamp(format:
|
|
128
|
+
"yyyy-LL-dd HH:mm")` tool of the `ase` MCP server, using the `text`
|
|
129
|
+
field of its response.
|
|
130
|
+
|
|
131
|
+
- The `Group` frontmatter key content-wise places the task into a single group.
|
|
132
|
+
The <task-group/> usually is the unique name of a "master task" or "epic".
|
|
133
|
+
An epic is created either *implicitly*, by just using the same plain
|
|
134
|
+
<task-group/> in the `Group` key of all its member tasks, or *explicitly*,
|
|
135
|
+
by an additional task whose `Id` equals the <task-group/> and whose
|
|
136
|
+
own `Group` equals its `Id`, too. Such an explicit epic task implicitly
|
|
137
|
+
comes `After` all other member tasks of its group, i.e., these need
|
|
138
|
+
not be listed in its `After` key.
|
|
139
|
+
|
|
140
|
+
- The `Phase` frontmatter key chronologically places the task into a single phase.
|
|
141
|
+
The <task-phase/> usually is the unique name of a "phase", "stage", or "sprint".
|
|
142
|
+
|
|
143
|
+
- The `After` frontmatter key places the task execution *after* one or more
|
|
144
|
+
other referenced tasks. The <task-after/> has to be a comma-and-space-separated
|
|
145
|
+
list of <task-id/> identifiers and hence should be formatted
|
|
146
|
+
`<task-id-1/>, <task-id-2/>[, ...]`.
|
|
147
|
+
|
|
148
|
+
- The `Status` frontmatter key states the current *lifecycle state*
|
|
149
|
+
of the task, as defined by **Task Lifecycle Models** below. A *newly
|
|
150
|
+
created* task carries the *default* state explicitly. The <task-status/>
|
|
151
|
+
value is *strictly* one of the pre-defined states of the task lifecycle
|
|
152
|
+
model configured for the current project.
|
|
153
|
+
|
|
154
|
+
- The `Assignee` frontmatter key states the current *assignee* of the task,
|
|
155
|
+
which is either a human or an agent. A *newly created* task carries no
|
|
156
|
+
assignee and there is no default value. The <task-assignee/> is an arbitrary
|
|
157
|
+
but unique name of the assignee.
|
|
158
|
+
|
|
159
|
+
- The `Kind` frontmatter key states the *kind of change* the task plan
|
|
160
|
+
describes, and hence which *operation-specific tenet set* of the **ASE
|
|
161
|
+
Tenets** a subsequent draft or implementation has to honor. The
|
|
162
|
+
<task-kind/> value is *strictly* one of `SPECIFYING`, `CRAFTING`,
|
|
163
|
+
`REFACTORING`, or `RESOLVING`. The `Kind` frontmatter key is *optional*:
|
|
164
|
+
a skill *authoring* or *updating* a task plan *CAN* update an already
|
|
165
|
+
present key or pass it through *verbatim* and *MAY* create a missing one by
|
|
166
|
+
*inferring* the kind from the plan content (defaulting to `CRAFTING`).
|
|
167
|
+
|
|
168
|
+
- The `Effort` frontmatter key states the *estimated effort* of the task: the
|
|
169
|
+
expected *human time* of its *entire* lifecycle (including planning), which
|
|
170
|
+
matches the human time `time.hr` of its usage attachment. The <task-effort/>
|
|
171
|
+
value is formatted `<size/> <hash/>`, with <size/> *strictly* one of the
|
|
172
|
+
T-shirt sizes `XS`, `S`, `M`, `L`, or `XL` -- bands on a *logarithmic* scale
|
|
173
|
+
(factor 4) with the upper bounds `15`, `60`, `240`, and `960` human minutes
|
|
174
|
+
for `XS` to `L` (configuration `project.task.effort.scale`), while `XL` is
|
|
175
|
+
open-ended -- and <hash/> the short *content hash* of the "body" the size was
|
|
176
|
+
given for. The `Effort` frontmatter key is *optional*: an absent key means
|
|
177
|
+
*not estimated*, and explicit epic tasks carry none, as their effort is the
|
|
178
|
+
sum of their member tasks. It is written by `ase-task-estimate` (or by hand)
|
|
179
|
+
and *never* refreshes the `Modified` key.
|
|
180
|
+
|
|
181
|
+
The size is *bound* to the plan *content*: the content hash covers the
|
|
182
|
+
"body" with its checkboxes and whitespace left out and its bullet-points in
|
|
183
|
+
the inert states `[-]` and `[>]` left out entirely. Hence, mere checkbox state
|
|
184
|
+
changes and whitespace-only edits (like re-wrapping) keep the size valid, while
|
|
185
|
+
every other content change (including cancelling or deferring a bullet-point)
|
|
186
|
+
makes it *stale*. The task store *drops* a stale `Effort` key on load and save,
|
|
187
|
+
and *stamps* a key given without <hash/> (like `Effort: M`) with the content
|
|
188
|
+
hash of the current "body" on save. Every skill *rewriting* a plan passes the
|
|
189
|
+
key through *verbatim*, and *never* invents or changes a <hash/>. A skill
|
|
190
|
+
persisting a plan again from its *own* copy of a previous save (like the
|
|
191
|
+
`text` argument of a previous `ase_task_save`) *MUST* first take over the
|
|
192
|
+
`Effort` key *as stored* by that save (stamped, or dropped) into its copy
|
|
193
|
+
-- or else load the plan again -- as a key without <hash/> would otherwise
|
|
194
|
+
be stamped again on the next save, even against a meanwhile changed "body".
|
|
195
|
+
|
|
196
|
+
- The `Tags` frontmatter key can be used to tag a task with arbitrary key/value
|
|
197
|
+
information. The <task-tags/> value has to be a comma-and-space-separated
|
|
198
|
+
list of `<key/>:<value/>` or plain `<key/>` identifiers and hence should be
|
|
199
|
+
formatted `<key/>[:<value/>], <key/>[:<value/>][, ...]`. A plain `<key/>`
|
|
200
|
+
tag is a boolean marker, e.g. `foo` marks the task as `foo`.
|
|
201
|
+
|
|
202
|
+
- The `Source`, `Changeset`, and `Target` frontmatter keys control the *flow*
|
|
203
|
+
of the change set of the task: `ase-task-implement` creates the change set
|
|
204
|
+
from the `Source` into the `Changeset`, and `ase-task-integrate` delivers
|
|
205
|
+
the change set from the `Changeset` into the `Target`. Their `worktree`
|
|
206
|
+
values refer to the *origin working copy* (the current Git working copy)
|
|
207
|
+
for `Source` and `Target`, and to the *context worktree* for `Changeset`:
|
|
208
|
+
the ASE worktree `.ase/worktree/<name/>` selected by the
|
|
209
|
+
`--worktree <name/>` option of these skills, or else the origin working
|
|
210
|
+
copy itself.
|
|
211
|
+
|
|
212
|
+
- The <task-source/> of the `Source` key is the *code basis* of the
|
|
213
|
+
change set: `worktree` (built-in default) is the origin working copy with its
|
|
214
|
+
checked-out branch, and `branch:<name/>` is the existing Git branch
|
|
215
|
+
<name/>.
|
|
216
|
+
|
|
217
|
+
- The <task-changeset/> of the `Changeset` key is the *location* of the
|
|
218
|
+
change set: `worktree` (built-in default) leaves it *uncommitted* in the context
|
|
219
|
+
worktree, `branch:<name/>` *commits* it onto the Git branch <name/>
|
|
220
|
+
(created from the `Source` if missing) inside a worktree carrying this
|
|
221
|
+
branch, and `attachment:<name/>` stores it as a *unified diff* in the
|
|
222
|
+
attachment block of `Type: text/x-diff; charset=utf-8; kind="<name/>"`
|
|
223
|
+
of the task, leaving all artifacts untouched.
|
|
224
|
+
|
|
225
|
+
- The <task-target/> of the `Target` key is the *integration target* of
|
|
226
|
+
the change set: `worktree` is the origin working copy with its
|
|
227
|
+
checked-out branch, `branch:<name/>` is the existing Git branch
|
|
228
|
+
<name/>, and `source` (built-in default) is whatever the `Source` key refers to.
|
|
229
|
+
|
|
230
|
+
A branch <name/> is non-empty, consists of the characters `A-Z`, `a-z`,
|
|
231
|
+
`0-9`, `_`, `-`, `.`, and `/` only, does *not* start with `-`, `.`, or
|
|
232
|
+
`/`, does *not* end with `/`, `.`, or `.lock`, and does *not* contain
|
|
233
|
+
`..` or `//`. An attachment <name/> is non-empty and consists of the
|
|
234
|
+
characters `A-Z`, `a-z`, `0-9`, `_`, and `-` only. The attachment name
|
|
235
|
+
`draft` is the *implementation draft*, selected by the `--draft` option
|
|
236
|
+
of `ase-task-implement` and `ase-task-integrate`.
|
|
237
|
+
|
|
238
|
+
A branch or attachment <name/> can carry the placeholder `{id}`, which
|
|
239
|
+
reads as the task id with every character other than `A-Z`, `a-z`,
|
|
240
|
+
`0-9`, `_`, and `-` replaced by `-`, then every run of multiple `-`
|
|
241
|
+
reduced to a single `-`, and finally all leading and trailing `-`
|
|
242
|
+
and `_` removed (e.g., the `Changeset` value
|
|
243
|
+
`branch:cs-{id}` commits the change set of the task `foo` onto the
|
|
244
|
+
branch `cs-foo`, and the one of the task `#12` onto the branch
|
|
245
|
+
`cs-12`). The placeholder is mainly intended for the
|
|
246
|
+
configured defaults, giving every task its own branch or attachment.
|
|
247
|
+
|
|
248
|
+
An *absent* `Source`, `Changeset`, or `Target` key reads as its
|
|
249
|
+
*configured default* at the time of use: <ase-project-task-default-source/>,
|
|
250
|
+
<ase-project-task-default-changeset/>, resp. <ase-project-task-default-target/>
|
|
251
|
+
(configuration `project.task.default.{source,changeset,target}`, with the
|
|
252
|
+
built-in defaults `worktree`, `worktree`, resp. `source`). Hence, a skill
|
|
253
|
+
*creating* or *rebooting* a task plan *MUST* leave these keys *out*, and a
|
|
254
|
+
skill *writing* one of these keys *MUST* leave it out if its value equals
|
|
255
|
+
the configured default (with the placeholder `{id}` of both replaced),
|
|
256
|
+
so the plan keeps following the configuration.
|
|
257
|
+
|
|
258
|
+
- A task can have zero or more attachments in the "backmatter". Each attachment is
|
|
259
|
+
realized with its own dedicated block. When no attachments exist, these
|
|
260
|
+
"backmatter" blocks are omitted. Each attachment block in the "backmatter"
|
|
261
|
+
carries the *mandatory* `Type` key and *exactly one* of the keys `Data`
|
|
262
|
+
or `File`. The `Type` key has the value <task-attachment-type/> which
|
|
263
|
+
is a regular MIME type, but has to be not equal to the vendor MIME type
|
|
264
|
+
`text/vnd.ase.task`.
|
|
265
|
+
|
|
266
|
+
For embedded content, the `Data` key contains the content data as a YAML
|
|
267
|
+
"literal block scalar" with the block header `|4+`, i.e., with an explicit
|
|
268
|
+
indentation of exactly 4 spaces (which are stripped from the content) and
|
|
269
|
+
with all trailing blank lines kept as part of the content -- except for
|
|
270
|
+
*one* blank line directly before the `---` line of the next block, which
|
|
271
|
+
only separates the blocks. Content without
|
|
272
|
+
a trailing newline instead uses the block header `|4-`, and empty content
|
|
273
|
+
is given as an empty `Data:` value.
|
|
274
|
+
|
|
275
|
+
When loaded via `ase_task_load` (by default), the content of a `Data` key
|
|
276
|
+
is *elided*, i.e., given as the single-line marker value
|
|
277
|
+
`[elided: <n/> lines]` instead. Keep such a marker *verbatim* to keep the
|
|
278
|
+
content unchanged, as `ase_task_save` restores it from the stored
|
|
279
|
+
attachment. Fetch the content via `ase_task_attachment` only if it has
|
|
280
|
+
to be read or changed, and then replace the marker with the complete
|
|
281
|
+
changed content. A marker *MUST* *NEVER* be copied into another block or
|
|
282
|
+
another task.
|
|
283
|
+
|
|
284
|
+
For referenced content, the `File` key contains the filename relative to the
|
|
285
|
+
task storage location. Every attachment can optionally have a `Desc` key
|
|
286
|
+
where <task-attachment-desc/> is a short and concise single-line description
|
|
287
|
+
of the attachment, and the optional keys `Created` and `Modified`, whose
|
|
288
|
+
values <task-attachment-created/> and <task-attachment-modified/> are the
|
|
289
|
+
timestamps when the attachment was created and last modified, in the same
|
|
290
|
+
format and determined the same way as their frontmatter counterparts.
|
|
291
|
+
|
|
292
|
+
The keys of an attachment block are ordered `Type`, `Desc`, `Created`,
|
|
293
|
+
`Modified`, and `Data` or `File`, with their values aligned at the same
|
|
294
|
+
*fixed* column as the frontmatter keys (each `<key/>:` padded to a width of
|
|
295
|
+
11 characters).
|
|
296
|
+
|
|
297
|
+
- An attachment is *stale* when its `Modified` key is *absent* or *older*
|
|
298
|
+
than the `Modified` key of the frontmatter, as its content was then
|
|
299
|
+
produced for an *earlier* version of the plan "body". In particular, a
|
|
300
|
+
*change set* attachment produced by the skill `ase-task-implement` for a
|
|
301
|
+
`Changeset` of `attachment:<name/>` (like the *implementation draft*
|
|
302
|
+
of `--draft`) carries the `Type` key value `text/x-diff; charset=utf-8;
|
|
303
|
+
kind="<name/>"` and is delivered by the skill `ase-task-integrate` only
|
|
304
|
+
while it is *not* stale. Its `Desc` key carries `base <commit/>`, the full Git commit id the
|
|
305
|
+
unified diff is based on. Once it is delivered and kept (`ase-task-integrate --no-cleanup`),
|
|
306
|
+
its `Desc` key additionally carries `, merged <commit/>`, the full Git commit id of the target
|
|
307
|
+
branch after the integration, and the attachment is *delivered*: it is then neither delivered
|
|
308
|
+
again by `ase-task-integrate` nor re-applied by `ase-task-implement`.
|
|
309
|
+
|
|
310
|
+
For a `Changeset` of `worktree` or `branch:<name/>`, the `ase agent`
|
|
311
|
+
agents `implementer` and `integrator` (and every agent configured with
|
|
312
|
+
`--attach-changeset`) additionally maintain the *change set snapshot*: a
|
|
313
|
+
*view-only*, text-only unified diff of the change set, which makes it
|
|
314
|
+
viewable wherever the task is visible (e.g. on the task boards during its
|
|
315
|
+
qualification). The skills never create or change it, but pass it through
|
|
316
|
+
*verbatim*. It carries the `Type` key value
|
|
317
|
+
`text/x-diff; charset=utf-8; kind="<kind/>"` (with <kind/> being
|
|
318
|
+
`changeset` for the built-in agents), is *replaced* in place on every run
|
|
319
|
+
(keeping its `Created` key), and its `Desc` key carries `base <commit/>`
|
|
320
|
+
(plus `, partial` for an incomplete change set) after an implementation,
|
|
321
|
+
resp. `base <commit/>, merged <commit/>` after an integration. It is
|
|
322
|
+
*never* delivered by `ase-task-integrate`, unless the `Changeset` is
|
|
323
|
+
`attachment:<kind/>`, in which case this attachment *is* the change set
|
|
324
|
+
itself. A stale snapshot just shows an outdated change set.
|
|
325
|
+
|
|
326
|
+
The *usage attachment* carries the *accumulated AI and human usage* of the
|
|
327
|
+
task, as booked by `ase-task-assign` and the `ase agent` jobs. It carries the
|
|
328
|
+
`Type` key value `application/yaml; kind="usage"`, is created on the first
|
|
329
|
+
booking, and is *replaced* in place on every booking (keeping its `Created`
|
|
330
|
+
key and refreshing its `Modified` key, but leaving the `Modified` key of the
|
|
331
|
+
frontmatter alone). Its `Data` is YAML with the amounts `time: { ai, hr,
|
|
332
|
+
real }` (AI request, human, and real time, in minutes), `token: { cread,
|
|
333
|
+
cwrite, input, output }` (cache read, cache write, uncached input, and output
|
|
334
|
+
tokens), and `cost: { ai, hr }` (AI and human costs, in USD). As it does not
|
|
335
|
+
depend on the "body", it is *never* stale, and a skill *never* changes it:
|
|
336
|
+
the task store keeps it on every overwrite of the plan (silently ignoring a
|
|
337
|
+
changed, removed, or added usage attachment), and the entity tag of a
|
|
338
|
+
conditional save does not cover it, so a booking meanwhile never fails a save.
|
|
339
|
+
|
|
340
|
+
A skill which changes the content of an attachment refreshes its `Modified`
|
|
341
|
+
key with the current timestamp -- the very same value it writes into the
|
|
342
|
+
`Modified` key of the frontmatter if it changes the "body", too. Hence,
|
|
343
|
+
`ase-task-implement` stamps a change set attachment with the same value
|
|
344
|
+
it writes into the frontmatter when ticking checkboxes, so the attachment
|
|
345
|
+
does not fall behind the plan it was produced for.
|
|
346
|
+
|
|
347
|
+
- A skill which *rewrites* the "frontmatter" or the "body" of a task *MUST*
|
|
348
|
+
pass the entire "backmatter" through *verbatim* -- every attachment block
|
|
349
|
+
byte-for-byte (with its elided `Data` marker), in its original order -- unless the skill *explicitly*
|
|
350
|
+
manages attachments itself. Attachments are *never* dropped, reordered,
|
|
351
|
+
re-indented, or re-flowed as a side-effect of a body rewrite.
|
|
352
|
+
|
|
353
|
+
- All content is contained in bullet-points. Those bullet-points use
|
|
354
|
+
the format `- <box/> <type/>: **<summary/>**: <text/>`.
|
|
355
|
+
|
|
356
|
+
The embedded checkbox <box/> allows the following variants to express states of <text/>:
|
|
357
|
+
|
|
358
|
+
- `[ ]`: todo (the bullet-point was still not resolved)
|
|
359
|
+
- `[?]`: question (the bullet-point was still not resolved due to a question)
|
|
360
|
+
- `[/]`: incomplete (the bullet-point was only partially resolved)
|
|
361
|
+
- `[x]`: done (the bullet-point was fully resolved)
|
|
362
|
+
- `[-]`: cancelled (the bullet-point was cancelled and should not be resolved)
|
|
363
|
+
- `[>]`: deferred (the bullet-point was deferred and should be resolved later)
|
|
364
|
+
|
|
365
|
+
The `[?]` state is *set* by grilling on every bullet-point whose
|
|
366
|
+
grilling question stayed *unanswered* and *reset* to `[ ]` once the
|
|
367
|
+
question is answered in a later grilling. The `[-]` and `[>]` states
|
|
368
|
+
make a bullet-point *inert*: grilling asks *no* question about it,
|
|
369
|
+
drafting and implementation neither realize nor check it, and
|
|
370
|
+
*every* skill leaves its checkbox *untouched* until the user changes it.
|
|
371
|
+
On implementation, a `[?]` bullet-point is a *regular* todo like `[ ]`,
|
|
372
|
+
a `[x]` bullet-point is *skipped* as already resolved, and a `[/]`
|
|
373
|
+
bullet-point is *re-examined* for its still unresolved parts.
|
|
374
|
+
|
|
375
|
+
The <type/> classifies the <text/>:
|
|
376
|
+
|
|
377
|
+
- `DOM`: Domain (what to change from Domain perspective)
|
|
378
|
+
- `IFC`: Interface (what to change from Interface perspective)
|
|
379
|
+
- `ARC`: Architecture (how to change Architecture details)
|
|
380
|
+
- `IMP`: Implementation (how to change Implementation details)
|
|
381
|
+
- `REG`: Regression (ensure change does not break anything)
|
|
382
|
+
- `CON`: Confirmation (ensure change behaves as specified)
|
|
383
|
+
|
|
384
|
+
Changes to `CHANGELOG.md` files should be classified as `IMP`. Running linting (static code
|
|
385
|
+
analysis) and build (generating files) procedures should be classified as `REG`.
|
|
386
|
+
|
|
387
|
+
Bullet-points of types `DOM` and `IFC` (in this order) belong to the `SPECIFICATION (WHAT)` section.
|
|
388
|
+
Bullet-points of types `ARC` and `IMP` (in this order) belong to the `DESIGN (HOW)` section.
|
|
389
|
+
Bullet-points of types `REG` and `CON` (in this order) belong to the `VERIFICATION (WHEN)` section.
|
|
390
|
+
|
|
391
|
+
The <summary/> summarizes <text/> and is 1-3 words only. It is for
|
|
392
|
+
quickly identifying upfront what <text/> is about.
|
|
393
|
+
|
|
394
|
+
The <text/> can span multiple lines. In all <text/> parts, highlight
|
|
395
|
+
*code* as <template>`<code/>`</template> and *key aspects* as
|
|
396
|
+
<template>*<aspect/>*</template>. Each <text/> should be just 1-3 sentences
|
|
397
|
+
and be *very precise*, but also *ultra brief* and *ultra concise*.
|
|
398
|
+
|
|
399
|
+
- Section `SPECIFICATION` tells `WHAT` is changed,
|
|
400
|
+
section `DESIGN` tells `HOW` it is changed, and
|
|
401
|
+
section `VERIFICATION` tells `WHEN` the change counts as complete and correct.
|
|
153
402
|
|
|
154
403
|
- In all sections, break all lines with a newline character
|
|
155
404
|
after about 100 characters per line for better subsequent
|
|
@@ -161,3 +410,298 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
161
410
|
backtick or *after* its closing backtick, even if this means
|
|
162
411
|
breaking the line noticeably earlier than after 100 characters.
|
|
163
412
|
|
|
413
|
+
- The <task-title/> is a short summary of the task, usually by summarizing the
|
|
414
|
+
`DOM` bullet-points of the `SPECIFICATION (WHAT)` section. It is no longer
|
|
415
|
+
than 50 characters. It has to be catchy and expressive.
|
|
416
|
+
|
|
417
|
+
Task Lifecycle Models
|
|
418
|
+
---------------------
|
|
419
|
+
|
|
420
|
+
Every **ASE** *task* carries an optional `Status` frontmatter key, stating its current *lifecycle
|
|
421
|
+
state*. The `Status` key is the *attribute*; its value is always one of the *states* of the task
|
|
422
|
+
lifecycle model. When `Status` is absent, the task is in the *default* state of the selected task
|
|
423
|
+
lifecycle model.
|
|
424
|
+
|
|
425
|
+
The lifecycle model is a *state machine*. Whoever sets the `Status` frontmatter key *MUST* only move
|
|
426
|
+
along one of the defined state transitions, whereby a *single* operation *MAY* traverse *several*
|
|
427
|
+
transitions at once if it performs the corresponding stages in one go.
|
|
428
|
+
|
|
429
|
+
**ASE** pre-defines three reusable task lifecycle models. The lifecycle model of the current project
|
|
430
|
+
is defined by <ase-project-task-lifecycle/>, with allowed values `solo` (default), `team`, and
|
|
431
|
+
`enterprise`.
|
|
432
|
+
|
|
433
|
+
### Solo Task Lifecycle Model (`solo`)
|
|
434
|
+
|
|
435
|
+
The 1+3 states and the transitions between them form the following state machine which realizes a
|
|
436
|
+
task management scheme based on just a single activity phase. It is intended for local use of a solo
|
|
437
|
+
developer.
|
|
438
|
+
|
|
439
|
+
```mermaid
|
|
440
|
+
stateDiagram-v2
|
|
441
|
+
[*] --> OPEN
|
|
442
|
+
|
|
443
|
+
OPEN --> SHELVED
|
|
444
|
+
SHELVED --> OPEN
|
|
445
|
+
|
|
446
|
+
OPEN --> CLOSED
|
|
447
|
+
|
|
448
|
+
OPEN --> CANCELLED
|
|
449
|
+
SHELVED --> CANCELLED
|
|
450
|
+
|
|
451
|
+
CLOSED --> [*]
|
|
452
|
+
CANCELLED --> [*]
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
```txt
|
|
456
|
+
●
|
|
457
|
+
│
|
|
458
|
+
▼
|
|
459
|
+
┏━━━━━━━━━━━━┓ ┌────────────┐
|
|
460
|
+
┃ OPEN ┃─────▶│ SHELVED │
|
|
461
|
+
┃ ┃◀─────│ │
|
|
462
|
+
┗━━━━━━━━━━━━┛ └────────────┘
|
|
463
|
+
│ │ │
|
|
464
|
+
│ └──────────────┴───────────┐
|
|
465
|
+
▼ │
|
|
466
|
+
┌────────────┐ ┌────────────┐ │
|
|
467
|
+
│ CLOSED │ │ CANCELLED │◀───┘
|
|
468
|
+
│ │ │ │
|
|
469
|
+
└────────────┘ └────────────┘
|
|
470
|
+
│ │
|
|
471
|
+
├───────────────────┘
|
|
472
|
+
│
|
|
473
|
+
▼
|
|
474
|
+
◉
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
The 1 "activity" state expresses:
|
|
478
|
+
|
|
479
|
+
- `OPEN`: task is currently work in progress (idea to code-base).
|
|
480
|
+
|
|
481
|
+
The 3 "rest" states express:
|
|
482
|
+
|
|
483
|
+
- `SHELVED`: task was temporarily shelved into backlog.
|
|
484
|
+
- `CLOSED`: task was implemented and reached its intended outcome.
|
|
485
|
+
- `CANCELLED`: task was cancelled at any time, because it failed, was called off, or became obsolete.
|
|
486
|
+
|
|
487
|
+
The *default* state is the "activity" state `OPEN`.
|
|
488
|
+
|
|
489
|
+
### Team Task Lifecycle Model (`team`)
|
|
490
|
+
|
|
491
|
+
The 2+4 states and the transitions between them form the following state machine which realizes a
|
|
492
|
+
task management scheme based on the two activity phases Planning and Implementation. It is intended
|
|
493
|
+
for distributed use by a small team of developers.
|
|
494
|
+
|
|
495
|
+
```mermaid
|
|
496
|
+
stateDiagram-v2
|
|
497
|
+
[*] --> PLANNING
|
|
498
|
+
|
|
499
|
+
PLANNING --> SHELVED
|
|
500
|
+
SHELVED --> PLANNING
|
|
501
|
+
|
|
502
|
+
PLANNING --> IMPLEMENTING
|
|
503
|
+
IMPLEMENTING --> PLANNING
|
|
504
|
+
IMPLEMENTING --> STALLED
|
|
505
|
+
STALLED --> IMPLEMENTING
|
|
506
|
+
|
|
507
|
+
IMPLEMENTING --> IMPLEMENTED
|
|
508
|
+
|
|
509
|
+
PLANNING --> CANCELLED
|
|
510
|
+
SHELVED --> CANCELLED
|
|
511
|
+
IMPLEMENTING --> CANCELLED
|
|
512
|
+
STALLED --> CANCELLED
|
|
513
|
+
|
|
514
|
+
IMPLEMENTED --> [*]
|
|
515
|
+
CANCELLED --> [*]
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
```txt
|
|
519
|
+
●
|
|
520
|
+
│
|
|
521
|
+
▼
|
|
522
|
+
┏━━━━━━━━━━━━┓ ┌────────────┐
|
|
523
|
+
┌───▶┃ PLANNING ┃─────▶│ SHELVED │
|
|
524
|
+
│ ┃ ┃◀─────│ │
|
|
525
|
+
│ ┗━━━━━━━━━━━━┛ └────────────┘
|
|
526
|
+
│ │ │ │
|
|
527
|
+
│ │ └──────────────┴───────────┐
|
|
528
|
+
│ ▼ │
|
|
529
|
+
│ ┏━━━━━━━━━━━━┓ ┌────────────┐ │
|
|
530
|
+
└────┃IMPLEMENTING┃─────▶│ STALLED │ │
|
|
531
|
+
┃ ┃◀─────│ │ │
|
|
532
|
+
┗━━━━━━━━━━━━┛ └────────────┘ │
|
|
533
|
+
│ │ │ │
|
|
534
|
+
│ └──────────────┴───────────┤
|
|
535
|
+
▼ │
|
|
536
|
+
┌────────────┐ ┌────────────┐ │
|
|
537
|
+
│IMPLEMENTED │ │ CANCELLED │◀───┘
|
|
538
|
+
│ │ │ │
|
|
539
|
+
└────────────┘ └────────────┘
|
|
540
|
+
│ │
|
|
541
|
+
├───────────────────┘
|
|
542
|
+
│
|
|
543
|
+
▼
|
|
544
|
+
◉
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
The 2 "activity" states express:
|
|
548
|
+
|
|
549
|
+
- `PLANNING`: task is currently in change planning (idea to plan).
|
|
550
|
+
- `IMPLEMENTING`: task is currently in change implementation (plan to code-base).
|
|
551
|
+
|
|
552
|
+
The 4 "rest" states express:
|
|
553
|
+
|
|
554
|
+
- `SHELVED`: task was shelved during planning into backlog.
|
|
555
|
+
- `STALLED`: task was stalled during implementation by an impediment.
|
|
556
|
+
- `IMPLEMENTED`: task was implemented and reached its intended outcome.
|
|
557
|
+
- `CANCELLED`: task was cancelled at any time, because it failed, was called off, or became obsolete.
|
|
558
|
+
|
|
559
|
+
The *default* state is the "activity" state `PLANNING`.
|
|
560
|
+
|
|
561
|
+
### Enterprise Task Lifecycle Model (`enterprise`)
|
|
562
|
+
|
|
563
|
+
The 4+10 states and the transitions between them form the following state machine which realizes
|
|
564
|
+
a task management scheme based on the four activity phases Planning, Implementation, Qualification
|
|
565
|
+
and Integration. It is intended for distributed use by an enterprise where engineers and agents act
|
|
566
|
+
in a gated development pipeline.
|
|
567
|
+
|
|
568
|
+
```mermaid
|
|
569
|
+
stateDiagram-v2
|
|
570
|
+
[*] --> DRAFTED
|
|
571
|
+
DRAFTED --> SHELVED
|
|
572
|
+
SHELVED --> DRAFTED
|
|
573
|
+
DRAFTED --> PLANNING
|
|
574
|
+
PLANNING --> DRAFTED
|
|
575
|
+
PLANNING --> SHELVED
|
|
576
|
+
|
|
577
|
+
PLANNING --> PLANNED
|
|
578
|
+
PLANNED --> STALLED
|
|
579
|
+
STALLED --> PLANNED
|
|
580
|
+
PLANNED --> IMPLEMENTING
|
|
581
|
+
IMPLEMENTING --> PLANNED
|
|
582
|
+
IMPLEMENTING --> STALLED
|
|
583
|
+
|
|
584
|
+
IMPLEMENTING --> IMPLEMENTED
|
|
585
|
+
IMPLEMENTED --> DECLINED
|
|
586
|
+
DECLINED --> IMPLEMENTED
|
|
587
|
+
IMPLEMENTED --> QUALIFYING
|
|
588
|
+
QUALIFYING --> IMPLEMENTED
|
|
589
|
+
QUALIFYING --> DECLINED
|
|
590
|
+
|
|
591
|
+
QUALIFYING --> QUALIFIED
|
|
592
|
+
QUALIFIED --> DEFERRED
|
|
593
|
+
DEFERRED --> QUALIFIED
|
|
594
|
+
QUALIFIED --> INTEGRATING
|
|
595
|
+
INTEGRATING --> QUALIFIED
|
|
596
|
+
INTEGRATING --> DEFERRED
|
|
597
|
+
|
|
598
|
+
INTEGRATING --> INTEGRATED
|
|
599
|
+
|
|
600
|
+
IMPLEMENTING --> DRAFTED
|
|
601
|
+
QUALIFYING --> DRAFTED
|
|
602
|
+
QUALIFYING --> PLANNED
|
|
603
|
+
INTEGRATING --> DRAFTED
|
|
604
|
+
INTEGRATING --> PLANNED
|
|
605
|
+
|
|
606
|
+
DRAFTED --> CANCELLED
|
|
607
|
+
SHELVED --> CANCELLED
|
|
608
|
+
PLANNING --> CANCELLED
|
|
609
|
+
PLANNED --> CANCELLED
|
|
610
|
+
STALLED --> CANCELLED
|
|
611
|
+
IMPLEMENTING --> CANCELLED
|
|
612
|
+
IMPLEMENTED --> CANCELLED
|
|
613
|
+
DECLINED --> CANCELLED
|
|
614
|
+
QUALIFYING --> CANCELLED
|
|
615
|
+
QUALIFIED --> CANCELLED
|
|
616
|
+
DEFERRED --> CANCELLED
|
|
617
|
+
INTEGRATING --> CANCELLED
|
|
618
|
+
|
|
619
|
+
INTEGRATED --> [*]
|
|
620
|
+
CANCELLED --> [*]
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
```txt
|
|
624
|
+
●
|
|
625
|
+
│
|
|
626
|
+
│ ┌──────────────────────────────┐
|
|
627
|
+
▼ │ │
|
|
628
|
+
┌──────────────┐ ┌──────────────┐ │
|
|
629
|
+
┌────▶│ DRAFTED │──────▶│ SHELVED │─────┤
|
|
630
|
+
│ │ │◀──────│ │ │
|
|
631
|
+
│ └──────────────┘ └──────────────┘ │
|
|
632
|
+
│ │ ▲ ▲ │
|
|
633
|
+
│ ▼ │ │ │
|
|
634
|
+
│ ┏━━━━━━━━━━━━━━┓ │ │
|
|
635
|
+
│ ┃ PLANNING ┃──────────────┘ │
|
|
636
|
+
│ ┃ ┃────────────────────────────┤
|
|
637
|
+
│ ┗━━━━━━━━━━━━━━┛ │
|
|
638
|
+
│ │ ┌──────────────────────────────┤
|
|
639
|
+
│ ▼ │ │
|
|
640
|
+
│ ┌──────────────┐ ┌──────────────┐ │
|
|
641
|
+
├────▶│ PLANNED │──────▶│ STALLED │─────┤
|
|
642
|
+
│ │ │◀──────│ │ │
|
|
643
|
+
│ └──────────────┘ └──────────────┘ │
|
|
644
|
+
│ │ ▲ ▲ │
|
|
645
|
+
│ ▼ │ │ │
|
|
646
|
+
│ ┏━━━━━━━━━━━━━━┓ │ │
|
|
647
|
+
├─────┃ IMPLEMENTING ┃──────────────┘ │
|
|
648
|
+
│ ┃ ┃────────────────────────────┤
|
|
649
|
+
│ ┗━━━━━━━━━━━━━━┛ │
|
|
650
|
+
│ │ ┌──────────────────────────────┤
|
|
651
|
+
│ ▼ │ │
|
|
652
|
+
│ ┌──────────────┐ ┌──────────────┐ │
|
|
653
|
+
│ │ IMPLEMENTED │──────▶│ DECLINED │─────┤
|
|
654
|
+
│ │ │◀──────│ │ │
|
|
655
|
+
│ └──────────────┘ └──────────────┘ │
|
|
656
|
+
│ │ ▲ ▲ │
|
|
657
|
+
│ ▼ │ │ │
|
|
658
|
+
│ ┏━━━━━━━━━━━━━━┓ │ │
|
|
659
|
+
├─────┃ QUALIFYING ┃──────────────┘ │
|
|
660
|
+
│ ┃ ┃────────────────────────────┤
|
|
661
|
+
│ ┗━━━━━━━━━━━━━━┛ │
|
|
662
|
+
│ │ ┌──────────────────────────────┤
|
|
663
|
+
│ ▼ │ │
|
|
664
|
+
│ ┌──────────────┐ ┌──────────────┐ │
|
|
665
|
+
│ │ QUALIFIED │──────▶│ DEFERRED │─────┤
|
|
666
|
+
│ │ │◀──────│ │ │
|
|
667
|
+
│ └──────────────┘ └──────────────┘ │
|
|
668
|
+
│ │ ▲ ▲ │
|
|
669
|
+
│ ▼ │ │ │
|
|
670
|
+
│ ┏━━━━━━━━━━━━━━┓ │ │
|
|
671
|
+
└─────┃ INTEGRATING ┃──────────────┘ │
|
|
672
|
+
┃ ┃────────────────────────────┤
|
|
673
|
+
┗━━━━━━━━━━━━━━┛ │
|
|
674
|
+
│ │
|
|
675
|
+
▼ │
|
|
676
|
+
┌──────────────┐ ┌──────────────┐ │
|
|
677
|
+
│ INTEGRATED │ │ CANCELLED │◀────┘
|
|
678
|
+
│ │ │ │
|
|
679
|
+
└──────────────┘ └──────────────┘
|
|
680
|
+
│ │
|
|
681
|
+
├──────────────────────┘
|
|
682
|
+
│
|
|
683
|
+
▼
|
|
684
|
+
◉
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
The 4 "activity" states express:
|
|
688
|
+
|
|
689
|
+
- `PLANNING`: task is currently in change planning (idea to plan).
|
|
690
|
+
- `IMPLEMENTING`: task is currently in change implementation (plan to change-set).
|
|
691
|
+
- `QUALIFYING`: task is currently in change qualification (change-set to decision).
|
|
692
|
+
- `INTEGRATING`: task is currently in change integration (change-set to code-base).
|
|
693
|
+
|
|
694
|
+
The 10 "rest" states express:
|
|
695
|
+
|
|
696
|
+
- `DRAFTED`: task is still provisional, incoherent and incomplete.
|
|
697
|
+
- `SHELVED`: task was shelved during planning into backlog.
|
|
698
|
+
- `PLANNED`: task is coherent and complete and ready for implementation.
|
|
699
|
+
- `STALLED`: task was stalled during implementation by an impediment.
|
|
700
|
+
- `IMPLEMENTED`: task is implemented and is ready for qualification.
|
|
701
|
+
- `DECLINED`: task was declined during qualification.
|
|
702
|
+
- `QUALIFIED`: task is qualified and ready for integration.
|
|
703
|
+
- `DEFERRED`: task was deferred during integration due to release decision.
|
|
704
|
+
- `INTEGRATED`: task is integrated and reached its intended outcome.
|
|
705
|
+
- `CANCELLED`: task was cancelled at any time, because it failed, was called off, or became obsolete.
|
|
706
|
+
|
|
707
|
+
The *default* state is the "rest" state `DRAFTED`.
|