@taskset/cli 4.0.0 → 6.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/CHANGELOG.md +38 -0
- package/README.md +23 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +538 -71
- package/docs/_meta.ts +9 -0
- package/docs/agents/_meta.ts +5 -0
- package/docs/agents/commands.md +70 -0
- package/docs/agents/index.md +99 -0
- package/docs/agents/llms.txt +28 -0
- package/docs/agents/workflows.md +50 -0
- package/docs/cli-reference.md +461 -0
- package/docs/configuration.md +63 -0
- package/docs/document-types.md +103 -0
- package/docs/getting-started.md +106 -0
- package/docs/index.md +43 -0
- package/docs/maintainers/_meta.ts +7 -0
- package/docs/maintainers/architecture/_meta.ts +5 -0
- package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +44 -0
- package/docs/maintainers/architecture/decisions/0002-code-architecture.md +31 -0
- package/docs/maintainers/architecture/decisions/0003-snapshot-policy.md +31 -0
- package/docs/maintainers/architecture/decisions/_meta.ts +5 -0
- package/docs/maintainers/architecture/overview.md +111 -0
- package/docs/maintainers/architecture/synchronization.md +56 -0
- package/docs/maintainers/development/_meta.ts +6 -0
- package/docs/maintainers/development/contributing.md +58 -0
- package/docs/maintainers/development/documentation.md +52 -0
- package/docs/maintainers/development/engineering.md +59 -0
- package/docs/maintainers/development/testing.md +89 -0
- package/docs/maintainers/index.md +20 -0
- package/docs/maintainers/product/_meta.ts +3 -0
- package/docs/maintainers/product/vision.md +68 -0
- package/docs/maintainers/technology.md +55 -0
- package/docs/task-files.md +180 -0
- package/package.json +8 -6
- package/skills/taskset/SKILL.md +240 -0
- package/skills/taskset/references/changesets-examples.md +97 -0
- package/skills/taskset/references/document-modeling-examples.md +63 -0
- package/skills/taskset/references/monorepo-task-modeling.md +125 -0
- package/skills/taskset/references/task-modeling-examples.md +249 -0
- package/skills/taskset-implement/SKILL.md +240 -0
- package/skills/taskset-implement/agents/openai.yaml +4 -0
- package/skills/taskset-implement/references/architecture/client-and-server.md +69 -0
- package/skills/taskset-implement/references/architecture/documentation-and-generated.md +72 -0
- package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +108 -0
- package/skills/taskset-implement/references/architecture/product-and-source.md +81 -0
- package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +45 -0
- package/skills/taskset-implement/references/architecture.md +34 -0
- package/skills/taskset-implement/references/conventions/backend-and-tooling.md +33 -0
- package/skills/taskset-implement/references/conventions/design.md +38 -0
- package/skills/taskset-implement/references/conventions/interfaces-and-ui.md +50 -0
- package/skills/taskset-implement/references/conventions/naming-and-packages.md +64 -0
- package/skills/taskset-implement/references/conventions/task-files.md +94 -0
- package/skills/taskset-implement/references/conventions/tests-and-docs.md +55 -0
- package/skills/taskset-implement/references/conventions/typescript-and-exports.md +41 -0
- package/skills/taskset-implement/references/conventions.md +40 -0
- package/skills/taskset-implement/references/release.md +135 -0
- package/skills/taskset-implement/references/workflows/dependencies-and-docs-site.md +54 -0
- package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +109 -0
- package/skills/taskset-implement/references/workflows/persisted-data-and-git.md +30 -0
- package/skills/taskset-implement/references/workflows/validation.md +34 -0
- package/skills/taskset-implement/references/workflows/vitest-and-test-strategy.md +82 -0
- package/skills/taskset-implement/references/workflows.md +33 -0
- package/src/cli.ts +640 -87
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Look up Taskset CLI commands
|
|
3
|
+
description: Complete reference for the taskset command-line interface.
|
|
4
|
+
contentType: Reference
|
|
5
|
+
navLabel: CLI Reference
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Look up Taskset CLI commands
|
|
9
|
+
|
|
10
|
+
The `taskset` command is a thin adapter over `@taskset/core` for the full Taskset surface: stories, flows, research, decisions, runbooks, and tasks. It parses arguments, validates options, calls core operations, and renders human or JSON output.
|
|
11
|
+
|
|
12
|
+
Invoke it with `npx @taskset/cli`, `pnpm dlx @taskset/cli`, `yarn dlx @taskset/cli`, `bunx @taskset/cli`, a project binary, or a global install. Examples below use `taskset` directly.
|
|
13
|
+
|
|
14
|
+
## Common Behavior
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
taskset help
|
|
18
|
+
taskset --help
|
|
19
|
+
taskset -h
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Running without a command also prints usage. These help paths exit with code
|
|
23
|
+
`0`.
|
|
24
|
+
|
|
25
|
+
Most repository commands accept:
|
|
26
|
+
|
|
27
|
+
| Option | Description |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `--cwd <path>` | Resolve repository discovery from another working directory. |
|
|
30
|
+
| `--json` | Emit structured JSON instead of human-readable text where supported. |
|
|
31
|
+
|
|
32
|
+
Stdout is reserved for requested output. Diagnostics, validation failures, and
|
|
33
|
+
best-effort generated-view refresh warnings are written to stderr.
|
|
34
|
+
|
|
35
|
+
Exit codes:
|
|
36
|
+
|
|
37
|
+
| Code | Meaning |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `0` | Command succeeded. |
|
|
40
|
+
| `1` | Repository or domain operation failed, such as invalid task state or delete blockers. |
|
|
41
|
+
| `2` | CLI usage, argument validation, path normalization, or parse validation failed. |
|
|
42
|
+
|
|
43
|
+
## Repository Commands
|
|
44
|
+
|
|
45
|
+
### `init`
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
taskset init [--config] [--cwd <path>]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Initializes a Taskset repository. The command resolves a root from an existing `.taskset/`, Git or workspace markers, or the working directory, then creates `.taskset/` task and document directories plus `.taskset/.gitignore` when they do not already exist. Pass `--config` to also write optional `taskset.config.ts`.
|
|
52
|
+
|
|
53
|
+
Human output:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
Initialized Taskset in <root-directory>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### `config`
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
taskset config [--json] [--cwd <path>]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Discovers the nearest `.taskset/` directory by walking upward from the working directory. Optional `taskset.config.ts` at that root overlays defaults when present.
|
|
66
|
+
|
|
67
|
+
Human output is the config file path when a config exists, or `defaults (<root-directory>)` when it does not. JSON output contains:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"rootDirectory": "...",
|
|
72
|
+
"configPath": "...",
|
|
73
|
+
"hasConfig": false,
|
|
74
|
+
"dataDirectory": "...",
|
|
75
|
+
"config": {}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### `doctor`
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
taskset doctor [--json] [--cwd <path>]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Validates the repository without modifying files. It scans canonical task
|
|
86
|
+
metadata, paths, and graph relationships.
|
|
87
|
+
|
|
88
|
+
Human success output:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Taskset repository is valid (<count> tasks)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Human failure output is tab-separated:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
<code> <path-or-> <message> <remediation>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
JSON output is the full doctor result, including `valid`, `taskCount`, and
|
|
101
|
+
diagnostics.
|
|
102
|
+
|
|
103
|
+
### `generate`
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
taskset generate [--json] [--cwd <path>]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Rebuilds disposable generated views under each entity folder's `.generated/`
|
|
110
|
+
directory (for example `.taskset/tasks/.generated/` and
|
|
111
|
+
`.taskset/stories/.generated/`). Removes any legacy `.taskset/generated/` tree.
|
|
112
|
+
|
|
113
|
+
Human output:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
Generated <count> views in <directory>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
JSON output is the generated-views result with the target directory and written
|
|
120
|
+
files.
|
|
121
|
+
|
|
122
|
+
## Snapshot Commands
|
|
123
|
+
|
|
124
|
+
Snapshots are non-authoritative safety checkpoints under `.taskset/snapshots/`.
|
|
125
|
+
Git remains the normal history and collaboration mechanism.
|
|
126
|
+
|
|
127
|
+
### `snapshot create`
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
taskset snapshot create [--json] [--cwd <path>]
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Creates an immutable archive of canonical task files.
|
|
134
|
+
|
|
135
|
+
Human output is the snapshot ID. JSON output is the snapshot manifest.
|
|
136
|
+
|
|
137
|
+
### `snapshot list`
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
taskset snapshot list [--json] [--cwd <path>]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Lists available snapshots.
|
|
144
|
+
|
|
145
|
+
Human output is tab-separated:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
<snapshot-id> <created-at> <file-count>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
JSON output is an array of snapshot manifests.
|
|
152
|
+
|
|
153
|
+
### `snapshot restore`
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
taskset snapshot restore <snapshot-id> [--apply] [--json] [--cwd <path>]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Previews or restores canonical task files from a snapshot. The default is a dry
|
|
160
|
+
run. Use `--apply` to mutate task files.
|
|
161
|
+
|
|
162
|
+
Human output:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
Would restore <count> task files from <snapshot-id>
|
|
166
|
+
Restored <count> task files from <snapshot-id>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
JSON output is the restore result, including `applied` and `changes`.
|
|
170
|
+
|
|
171
|
+
## Task Metadata Options
|
|
172
|
+
|
|
173
|
+
`task create` and `task update` accept the same metadata options unless noted.
|
|
174
|
+
Array options are repeatable.
|
|
175
|
+
|
|
176
|
+
| Option | Field | Notes |
|
|
177
|
+
| --- | --- | --- |
|
|
178
|
+
| `--title <title>` | `title` | Required for create, optional for update. |
|
|
179
|
+
| `--status <status>` | `status` | One of `todo`, `doing`, `blocked`, `done`, `canceled`. |
|
|
180
|
+
| `--priority <priority>` | `priority` | One of `low`, `medium`, `high`, `urgent`. |
|
|
181
|
+
| `--order <number>` | `order` | Nonnegative finite number. Lower values sort first. |
|
|
182
|
+
| `--label <label>` | `labels` | Repeatable. |
|
|
183
|
+
| `--depends-on <task-id>` | `dependsOn` | Repeatable. |
|
|
184
|
+
| `--file <path>` | `files` | Repeatable; normalized to a repository-relative POSIX path. |
|
|
185
|
+
| `--owner <owner>` | `owner` | Trimmed string. |
|
|
186
|
+
| `--assignee <assignee>` | `assignees` | Repeatable. |
|
|
187
|
+
| `--reviewer <reviewer>` | `reviewers` | Repeatable. |
|
|
188
|
+
| `--team <team>` | `team` | Trimmed string. |
|
|
189
|
+
| `--estimate <minutes>` | `estimate` | Nonnegative integer. |
|
|
190
|
+
| `--effort <value>` | `effort` | Nonnegative finite number. |
|
|
191
|
+
| `--risk <risk>` | `risk` | One of `low`, `medium`, `high`. |
|
|
192
|
+
| `--due-date <date>` | `dueDate` | `YYYY-MM-DD` or `YYYY-MM-DD HH:mm UTC`. |
|
|
193
|
+
| `--related <task-id>` | `related` | Repeatable. |
|
|
194
|
+
| `--duplicate <task-id>` | `duplicates` | Repeatable. |
|
|
195
|
+
| `--parent <task-id>` | `parent` | Single task ID. |
|
|
196
|
+
| `--directory <path>` | `directories` | Repeatable; normalized to a repository-relative POSIX path. |
|
|
197
|
+
| `--project <project>` | `projects` | Repeatable. |
|
|
198
|
+
| `--body <markdown>` | body | Replaces the Markdown body. |
|
|
199
|
+
| `--json` | output | Emit a task record as JSON. |
|
|
200
|
+
| `--cwd <path>` | discovery | Resolve repository discovery from another directory. |
|
|
201
|
+
|
|
202
|
+
## Task Commands
|
|
203
|
+
|
|
204
|
+
### `task create`
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
taskset task create --title <title> [metadata options] [--json] [--cwd <path>]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Creates a versionless task file using repository defaults for omitted
|
|
211
|
+
configured fields.
|
|
212
|
+
|
|
213
|
+
Human output is the task ID. JSON output is a task record containing
|
|
214
|
+
`relativePath` and metadata fields.
|
|
215
|
+
|
|
216
|
+
### `task list`
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
taskset task list [query options] [--json] [--cwd <path>]
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Lists tasks using metadata, relationship, planning, timestamp, text, path, and
|
|
223
|
+
impact filters.
|
|
224
|
+
|
|
225
|
+
Filter options:
|
|
226
|
+
|
|
227
|
+
| Option | Description |
|
|
228
|
+
| --- | --- |
|
|
229
|
+
| `--status <status>` | Repeatable; OR within statuses. |
|
|
230
|
+
| `--priority <priority>` | Repeatable; OR within priorities. |
|
|
231
|
+
| `--label <label>` | Repeatable; every requested label must be present. |
|
|
232
|
+
| `--owner <owner>` | Repeatable; OR within owners. |
|
|
233
|
+
| `--assignee <assignee>` | Repeatable; OR within assignees. |
|
|
234
|
+
| `--reviewer <reviewer>` | Repeatable; OR within reviewers. |
|
|
235
|
+
| `--team <team>` | Repeatable; OR within teams. |
|
|
236
|
+
| `--risk <risk>` | Repeatable; OR within risks. |
|
|
237
|
+
| `--project <project>` | Repeatable; OR within projects. |
|
|
238
|
+
| `--depends-on <task-id>` | Match a direct dependency. |
|
|
239
|
+
| `--related <task-id>` | Match a related task. |
|
|
240
|
+
| `--duplicate <task-id>` | Match a duplicate task relationship. |
|
|
241
|
+
| `--parent <task-id>` | Match a direct parent. |
|
|
242
|
+
| `--file <path>` | Repeatable; unified containment query over `files` and `directories`. |
|
|
243
|
+
| `--directory <path>` | Repeatable; containment query over `directories` only. |
|
|
244
|
+
| `--estimate-min <minutes>` | Inclusive minimum estimate. |
|
|
245
|
+
| `--estimate-max <minutes>` | Inclusive maximum estimate. |
|
|
246
|
+
| `--effort-min <value>` | Inclusive minimum effort. |
|
|
247
|
+
| `--effort-max <value>` | Inclusive maximum effort. |
|
|
248
|
+
| `--due-before <date>` | Inclusive due-date upper bound. |
|
|
249
|
+
| `--due-after <date>` | Inclusive due-date lower bound. |
|
|
250
|
+
| `--created-before <date>` | Inclusive created-at upper bound. |
|
|
251
|
+
| `--created-after <date>` | Inclusive created-at lower bound. |
|
|
252
|
+
| `--updated-before <date>` | Inclusive updated-at upper bound. |
|
|
253
|
+
| `--updated-after <date>` | Inclusive updated-at lower bound. |
|
|
254
|
+
| `--search <text>` | Search task title and Markdown body; every whitespace-separated term must match. |
|
|
255
|
+
| `--sort <key>` | Sort key. |
|
|
256
|
+
| `--direction <asc|desc>` | Sort direction. |
|
|
257
|
+
| `--impact` | Add tasks that transitively depend on direct matches. |
|
|
258
|
+
| `--include-derived` | Include derived relationship projections in JSON output. |
|
|
259
|
+
|
|
260
|
+
Sort keys are `id`, `title`, `status`, `priority`, `order`, `owner`, `team`,
|
|
261
|
+
`estimate`, `effort`, `risk`, `dueDate`, `createdAt`, and `updatedAt`. With
|
|
262
|
+
`--sort order`, tasks without `order` sort after ordered tasks; duplicate
|
|
263
|
+
values fall back to task ID ordering.
|
|
264
|
+
|
|
265
|
+
Different filter categories compose with AND. Repeated enum, person, project,
|
|
266
|
+
file, and directory values use OR within their category. Repeated labels are
|
|
267
|
+
stricter and require all requested labels.
|
|
268
|
+
|
|
269
|
+
Search is Unicode-normalized and case-insensitive. Its terms may occur in any
|
|
270
|
+
order or location across the combined title and Markdown body, so
|
|
271
|
+
`--search "cache invalidation"` does not require that exact phrase.
|
|
272
|
+
|
|
273
|
+
Without `--impact`, human output is:
|
|
274
|
+
|
|
275
|
+
```text
|
|
276
|
+
<task-id> <status> <title>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
With `--impact`, human output prefixes direct and impacted rows:
|
|
280
|
+
|
|
281
|
+
```text
|
|
282
|
+
direct <task-id> <status> <title>
|
|
283
|
+
impact <task-id> <status> <title>
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
JSON output without `--impact` is an array of task records. JSON output with
|
|
287
|
+
`--impact` is:
|
|
288
|
+
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"direct": [],
|
|
292
|
+
"impacted": []
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Use `--include-derived` to include `blockedBy`, `blocks`, `children`, and
|
|
297
|
+
`subtasks` projections in each JSON record.
|
|
298
|
+
|
|
299
|
+
### `task show`
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
taskset task show <task-id> [--include-derived] [--json] [--cwd <path>]
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Shows one task by ID.
|
|
306
|
+
|
|
307
|
+
Human output is the serialized task Markdown. JSON output contains:
|
|
308
|
+
|
|
309
|
+
```json
|
|
310
|
+
{
|
|
311
|
+
"relativePath": ".taskset/tasks/0000001-short-title-a1b2c3.md",
|
|
312
|
+
"metadata": {},
|
|
313
|
+
"body": "...",
|
|
314
|
+
"derived": {}
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
The `derived` property is present only with `--include-derived`.
|
|
319
|
+
|
|
320
|
+
### `task update`
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
taskset task update <task-id> [metadata options] [clear options] [--json] [--cwd <path>]
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Updates one task. At least one non-control option is required. A field cannot
|
|
327
|
+
be set and cleared in the same command.
|
|
328
|
+
|
|
329
|
+
Clear options:
|
|
330
|
+
|
|
331
|
+
| Option | Effect |
|
|
332
|
+
| --- | --- |
|
|
333
|
+
| `--clear-priority` | Remove `priority`. |
|
|
334
|
+
| `--clear-order` | Remove `order`. |
|
|
335
|
+
| `--clear-labels` | Replace `labels` with an empty list. |
|
|
336
|
+
| `--clear-dependencies` | Replace `dependsOn` with an empty list. |
|
|
337
|
+
| `--clear-files` | Replace `files` with an empty list. |
|
|
338
|
+
| `--clear-owner` | Remove `owner`. |
|
|
339
|
+
| `--clear-assignees` | Replace `assignees` with an empty list. |
|
|
340
|
+
| `--clear-reviewers` | Replace `reviewers` with an empty list. |
|
|
341
|
+
| `--clear-team` | Remove `team`. |
|
|
342
|
+
| `--clear-estimate` | Remove `estimate`. |
|
|
343
|
+
| `--clear-effort` | Remove `effort`. |
|
|
344
|
+
| `--clear-risk` | Remove `risk`. |
|
|
345
|
+
| `--clear-due-date` | Remove `dueDate`. |
|
|
346
|
+
| `--clear-related` | Replace `related` with an empty list. |
|
|
347
|
+
| `--clear-duplicates` | Replace `duplicates` with an empty list. |
|
|
348
|
+
| `--clear-parent` | Remove `parent`. |
|
|
349
|
+
| `--clear-directories` | Replace `directories` with an empty list. |
|
|
350
|
+
| `--clear-projects` | Replace `projects` with an empty list. |
|
|
351
|
+
|
|
352
|
+
Human output is the task ID. JSON output is the updated task record.
|
|
353
|
+
|
|
354
|
+
### `task status`
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
taskset task status <task-id> <status> [--json] [--cwd <path>]
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
Updates only task status and enforces lifecycle transition rules. `done` and
|
|
361
|
+
`canceled` are terminal states.
|
|
362
|
+
|
|
363
|
+
Human output is the task ID. JSON output is the updated task record.
|
|
364
|
+
|
|
365
|
+
### `task delete`
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
taskset task delete <task-id> [--remove-dependencies] [--json] [--cwd <path>]
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
Deletes one task. By default, deletion is blocked while another task has an
|
|
372
|
+
inbound canonical dependency on the target. Use `--remove-dependencies` to
|
|
373
|
+
remove those inbound references and delete the target in one mutation.
|
|
374
|
+
|
|
375
|
+
Human output is the deleted task ID. JSON output contains `deleted: true`
|
|
376
|
+
alongside the deleted task record.
|
|
377
|
+
|
|
378
|
+
### `task migrate-ids`
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
taskset task migrate-ids [--json] [--cwd <path>]
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
Atomically converts legacy `TS-` and sequential task IDs to immutable short hex
|
|
385
|
+
IDs, normalizes filenames to `{sequence}-{slug}-{id}.md`, repairs duplicate
|
|
386
|
+
sequence prefixes by `createdAt`, and rewrites canonical relationships plus
|
|
387
|
+
references in repository text files. Dependencies, Git internals, build output,
|
|
388
|
+
caches, generated views, indexes, and snapshots are excluded. Human output is a
|
|
389
|
+
tab-separated old-to-new mapping; JSON emits the same mapping as objects.
|
|
390
|
+
|
|
391
|
+
### `sync`
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
taskset sync [--concurrency <count>] [--json] [--cwd <path>]
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
Ensures every canonical document directory exists under `.taskset`, migrates
|
|
398
|
+
legacy task and document IDs to short hex IDs, normalizes filenames, repairs
|
|
399
|
+
duplicate sequence prefixes by `createdAt`, rewrites repository text
|
|
400
|
+
references, and rebuilds generated views. Progress counts and percentages are
|
|
401
|
+
sent to stderr.
|
|
402
|
+
|
|
403
|
+
## Document Commands
|
|
404
|
+
|
|
405
|
+
`document` may be shortened to `doc`. Supported types are `story`, `flow`,
|
|
406
|
+
`decision`, `research`, and `runbook`; `adr` and `dr` alias `decision`.
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
taskset document create <type> --title <title> [metadata options]
|
|
410
|
+
taskset document import <markdown-path> [--type <type>] [--title <title>] [--move]
|
|
411
|
+
taskset document batch <manifest.json> [--concurrency <count>] [--json]
|
|
412
|
+
taskset document list [type] [query options]
|
|
413
|
+
taskset document show <document-id> [--type <type>] [--include-derived] [--json]
|
|
414
|
+
taskset document update <document-id> [metadata options] [--type <type>]
|
|
415
|
+
taskset document status <document-id> <status> [--type <type>] [--json]
|
|
416
|
+
taskset document delete <document-id> [--type <type>] [--remove-dependencies] [--json]
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Create uses the type-specific template unless `--body` is supplied and accepts
|
|
420
|
+
the same metadata options as `task create`. Import preserves the Markdown body
|
|
421
|
+
and infers type from a recognized parent directory when possible. It copies by
|
|
422
|
+
default; `--move` deletes the source only after the canonical document is
|
|
423
|
+
written successfully.
|
|
424
|
+
|
|
425
|
+
List, show, update, status, and delete mirror the task commands, including
|
|
426
|
+
search, filters, sort, impact, derived relationships, clear flags, and
|
|
427
|
+
guarded deletion. Document statuses are `draft`, `ready`, `active`, `accepted`,
|
|
428
|
+
`superseded`, and `archived`.
|
|
429
|
+
|
|
430
|
+
Batch manifests contain an array of `create`, `import`, `update`, and `export`
|
|
431
|
+
operations. Work is paced with bounded concurrency, results preserve manifest
|
|
432
|
+
order, progress is sent to stderr, and `--json` reserves stdout for the result
|
|
433
|
+
array. See [Document Types](document-types.md#batch-workflows) for a complete
|
|
434
|
+
manifest example.
|
|
435
|
+
|
|
436
|
+
## Generated-View Warnings
|
|
437
|
+
|
|
438
|
+
Task and document creation, update, status changes, deletion, and snapshot
|
|
439
|
+
restore mutate canonical Markdown first and then refresh disposable generated
|
|
440
|
+
views. If that refresh fails after the canonical mutation succeeds, the command
|
|
441
|
+
still succeeds and writes a stderr warning:
|
|
442
|
+
|
|
443
|
+
```text
|
|
444
|
+
warning: <message>
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Run `taskset generate` later to rebuild generated views explicitly.
|
|
448
|
+
|
|
449
|
+
## Compatibility Notes
|
|
450
|
+
|
|
451
|
+
`tasks-for-file` was removed. Use:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
taskset task list --file <path> --impact
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Task files are versionless. Frontmatter that still contains a legacy version
|
|
458
|
+
field is invalid and must be converted by removing that field while preserving
|
|
459
|
+
the rest of the task metadata and Markdown body. Snapshot restore previews by
|
|
460
|
+
default; pass `--apply` only when the displayed plan is the mutation you intend
|
|
461
|
+
to commit.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Configure Taskset defaults
|
|
3
|
+
description: Optionally add taskset.config.ts to overlay defaults and vocabulary on a `.taskset/` repository.
|
|
4
|
+
contentType: How-to
|
|
5
|
+
navLabel: Configuration
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Configure Taskset defaults
|
|
9
|
+
|
|
10
|
+
Taskset repositories are identified by a `.taskset/` directory. `taskset.config.ts` is optional. When the file is absent, built-in statuses, priorities, and creation defaults apply.
|
|
11
|
+
|
|
12
|
+
## When to add a config file
|
|
13
|
+
|
|
14
|
+
Add `taskset.config.ts` when you need at least one of these:
|
|
15
|
+
|
|
16
|
+
- A repository `project.name`
|
|
17
|
+
- Different task creation defaults
|
|
18
|
+
- A reduced or reordered status or priority vocabulary
|
|
19
|
+
|
|
20
|
+
Create one during init:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
taskset init --config
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or author the file beside `.taskset/`:
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { defineConfig } from '@taskset/cli'
|
|
30
|
+
|
|
31
|
+
export default defineConfig({
|
|
32
|
+
project: {
|
|
33
|
+
name: 'taskset',
|
|
34
|
+
},
|
|
35
|
+
tasks: {
|
|
36
|
+
defaults: {
|
|
37
|
+
status: 'todo',
|
|
38
|
+
priority: 'medium',
|
|
39
|
+
labels: ['taskset'],
|
|
40
|
+
},
|
|
41
|
+
statuses: ['todo', 'doing', 'blocked', 'done', 'canceled'],
|
|
42
|
+
priorities: ['low', 'medium', 'high', 'urgent'],
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Contract
|
|
48
|
+
|
|
49
|
+
- `project.name` is optional repository metadata
|
|
50
|
+
- `tasks.defaults.status`, `priority`, and `labels` are optional creation defaults
|
|
51
|
+
- `tasks.statuses` selects and orders the active status vocabulary from Taskset’s canonical values
|
|
52
|
+
- `tasks.priorities` selects and orders the active priority vocabulary from Taskset’s canonical values
|
|
53
|
+
- `urgent` is the highest supported priority
|
|
54
|
+
- Unknown fields, invalid enum values, empty names, and duplicate default labels or vocabulary values are rejected
|
|
55
|
+
- The config file is trusted project TypeScript and may use erasable syntax supported by your Node version
|
|
56
|
+
|
|
57
|
+
The config identifies behavior. It is not task storage. Canonical task state remains under `.taskset/tasks/`.
|
|
58
|
+
|
|
59
|
+
## Discovery
|
|
60
|
+
|
|
61
|
+
Commands started in nested directories walk upward until they find `.taskset/`. If `taskset.config.ts` exists at that root, Taskset loads and validates it. Otherwise it uses built-in defaults.
|
|
62
|
+
|
|
63
|
+
Use `taskset config --json` to inspect the discovered root, whether a config file is present, and the resolved defaults.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Choose a Taskset document type
|
|
3
|
+
description: Canonical stories, flows, decisions, research, and runbooks.
|
|
4
|
+
contentType: Conceptual
|
|
5
|
+
navLabel: Document Types
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Choose a Taskset document type
|
|
9
|
+
|
|
10
|
+
Documents are how Taskset keeps product and engineering memory: what to build, what you learned, what you decided, and how to recover. Use them when the material should outlive a single task. Each type has strict common frontmatter and a body template suited to its purpose. Documents share planning, people, path, and relationship fields with tasks, and use document-specific statuses.
|
|
11
|
+
|
|
12
|
+
| Type | Directory | Template focus |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| `story` | `.taskset/stories/` | user outcome and acceptance criteria |
|
|
15
|
+
| `flow` | `.taskset/flows/` | preconditions, journey, variants, checks |
|
|
16
|
+
| `decision` (`adr`, `dr`) | `.taskset/decisions/` | context, decision, alternatives, consequences |
|
|
17
|
+
| `research` | `.taskset/research/` | question, sources, findings, recommendation |
|
|
18
|
+
| `runbook` | `.taskset/runbooks/` | symptoms, checks, actions, rollback, escalation |
|
|
19
|
+
|
|
20
|
+
Create a document from its template:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
taskset document create story --title "Member signs in via SSO"
|
|
24
|
+
taskset document create flow --title "Recover a delayed deposit"
|
|
25
|
+
taskset document create adr --title "Use transactional outbox"
|
|
26
|
+
taskset document create research --title "Evaluate queue providers" --related your_task_id_here
|
|
27
|
+
taskset document create runbook --title "Recover consumer lag"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Document IDs are immutable 5-6 character lowercase hex values. Filenames keep a
|
|
31
|
+
per-type display sequence and title slug, for example
|
|
32
|
+
`.taskset/flows/0000001-member-signs-in-via-sso-a1b2c3.md`. Agents and commands
|
|
33
|
+
reference the short `id`. Disposable metadata indexes for that kind live beside
|
|
34
|
+
the files in `.taskset/flows/.generated/`.
|
|
35
|
+
|
|
36
|
+
## Query And Mutation
|
|
37
|
+
|
|
38
|
+
Documents support the same command surface as tasks:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
taskset document list research --search "queue" --owner platform --impact
|
|
42
|
+
taskset document show <document-id> --type research --include-derived --json
|
|
43
|
+
taskset document update <document-id> --status ready --label infra --file packages/core
|
|
44
|
+
taskset document status <document-id> accepted --type decision
|
|
45
|
+
taskset document delete <document-id> --remove-dependencies
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Statuses are `draft`, `ready`, `active`, `accepted`, `superseded`, and
|
|
49
|
+
`archived`. `--related` may point at tasks or documents. `--depends-on` and
|
|
50
|
+
`--parent` must resolve to other Taskset documents.
|
|
51
|
+
|
|
52
|
+
## Import Existing Markdown
|
|
53
|
+
|
|
54
|
+
Use `document import` when a repository already has material under paths such
|
|
55
|
+
as `docs/stories`, `docs/flows`, `docs/adr`, `docs/research`, or
|
|
56
|
+
`docs/runbooks`:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
taskset document import docs/flows/0001-sign-in.md
|
|
60
|
+
taskset document import docs/architecture/use-postgres.md --type decision
|
|
61
|
+
taskset document import docs/runbooks/consumer-lag.md --move
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The type is inferred from recognized parent directory names when `--type` is
|
|
65
|
+
omitted. `adr`, `dr`, `decision`, and `decisions` all normalize to `decision`.
|
|
66
|
+
The first H1 supplies the title unless `--title` is passed. Existing
|
|
67
|
+
frontmatter is replaced with Taskset's canonical metadata while the Markdown
|
|
68
|
+
body is preserved. Import copies by default; `--move` removes the source only
|
|
69
|
+
after the canonical file has been written successfully.
|
|
70
|
+
|
|
71
|
+
Use `document list [type]`, `document show <id>`, and `--json` for inspection
|
|
72
|
+
and automation. Sequences are per type, so pass `--type` to `document show`
|
|
73
|
+
when the same ID exists in more than one kind.
|
|
74
|
+
|
|
75
|
+
## Batch Workflows
|
|
76
|
+
|
|
77
|
+
Use a JSON manifest when an agent or migration needs to create, import, update,
|
|
78
|
+
or export many documents. Operations run through a bounded TanStack Pacer queue;
|
|
79
|
+
progress such as `3/8 (38%)` is written to stderr, while `--json` keeps stdout
|
|
80
|
+
safe for automation.
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
[
|
|
84
|
+
{ "action": "create", "input": { "type": "story", "title": "Member upgrades" } },
|
|
85
|
+
{ "action": "import", "sourcePath": "docs/flows/checkout.md", "options": { "type": "flow" } },
|
|
86
|
+
{ "action": "update", "id": "a1b2c3", "type": "story", "input": { "status": "ready" } },
|
|
87
|
+
{ "action": "export", "id": "a1b2c3", "type": "story", "targetPath": "exports/member-upgrades.md" }
|
|
88
|
+
]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
taskset document batch taskset-documents.json --concurrency 4 --json
|
|
93
|
+
taskset sync --concurrency 8
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`taskset sync` creates missing document-kind directories inside `.taskset`,
|
|
97
|
+
migrates legacy task and document IDs to short hex IDs, normalizes
|
|
98
|
+
`{sequence}-{slug}-{id}.md` filenames, repairs duplicate sequence prefixes by
|
|
99
|
+
`createdAt`, rewrites repository text references, refreshes data `.gitignore`
|
|
100
|
+
rules for scoped `.generated/` directories, removes legacy global
|
|
101
|
+
`.taskset/generated/`, and rebuilds generated views. Build outputs,
|
|
102
|
+
dependencies, caches, snapshots, and Git internals are excluded from reference
|
|
103
|
+
rewriting.
|