@taskset/cli 5.1.0 → 6.1.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +21 -22
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +212 -113
  5. package/docs/_meta.ts +5 -0
  6. package/docs/agent-closeout.md +69 -0
  7. package/docs/agents/_meta.ts +6 -0
  8. package/docs/agents/commands.md +94 -0
  9. package/docs/agents/index.md +113 -0
  10. package/docs/agents/llms.txt +35 -0
  11. package/docs/agents/query-recipes.md +76 -0
  12. package/docs/agents/workflows.md +60 -0
  13. package/docs/cli-reference.md +53 -34
  14. package/docs/configuration.md +53 -31
  15. package/docs/document-types.md +53 -24
  16. package/docs/getting-started.md +61 -49
  17. package/docs/index.md +37 -25
  18. package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +21 -47
  19. package/docs/maintainers/development/contributing.md +2 -3
  20. package/docs/maintainers/development/documentation.md +32 -49
  21. package/docs/maintainers/index.md +1 -3
  22. package/docs/maintainers/product/vision.md +27 -33
  23. package/docs/memory-model.md +58 -0
  24. package/docs/security-compliance-tracking.md +107 -0
  25. package/docs/task-files.md +19 -13
  26. package/docs/taxonomy-cookbook.md +59 -0
  27. package/package.json +4 -4
  28. package/skills/taskset/SKILL.md +89 -57
  29. package/skills/taskset/references/document-modeling-examples.md +53 -2
  30. package/skills/taskset-implement/SKILL.md +26 -17
  31. package/skills/taskset-implement/references/architecture/documentation-and-generated.md +3 -1
  32. package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +2 -1
  33. package/skills/taskset-implement/references/architecture/product-and-source.md +22 -11
  34. package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +5 -2
  35. package/skills/taskset-implement/references/conventions/naming-and-packages.md +1 -1
  36. package/skills/taskset-implement/references/conventions/task-files.md +9 -4
  37. package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +4 -3
  38. package/src/cli.ts +174 -112
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: taskset
3
- description: Taskset workflow guidance for agents that plan and track work with tasks, stories, user flows, decisions, research, and runbooks stored in .taskset/, including batch imports and cross-package monorepo work. While executing work, agents must create follow-up tasks or subtasks (Taskset child tasks or body checklist items) for newly discovered work, keep parent and subtask progress current mid-work, mark every finished subtask done or checked, create Taskset documents (research, decision, runbook, story, or flow) when work produces reusable evidence, lasting choices, or procedures, link them with --related, and update the session or repository primary skill when lasting lessons should prevent future failures.
3
+ description: Taskset workflow guidance for agents that plan, research, decide, operate, and track delivery with stories, flows, research, decisions, runbooks, lessons, concerns, audits, and tasks stored in .taskset/, including batch imports and cross-package monorepo work. While executing work, agents must create follow-up tasks or subtasks (Taskset child tasks or body checklist items) for newly discovered work, keep parent and subtask progress current mid-work, mark every finished subtask done or checked, create Taskset documents (research, decision, runbook, story, flow, lesson, concern, or audit) when work produces reusable evidence, lasting choices, procedures, recurring patterns, or residual risks, link them with --related, and update the session or repository primary skill when lasting lessons should prevent future failures (especially when a lesson declares --related-skill).
4
4
  ---
5
5
 
6
6
  # Taskset
7
7
 
8
- Use this skill when working in a repository that uses Taskset to store work as human-readable Markdown beside the code.
8
+ Use this skill when working in a repository that uses Taskset to store plans, research, decisions, runbooks, and executable tasks as human-readable Markdown beside the code. Tasks move delivery. Documents preserve the memory that makes delivery coherent.
9
9
 
10
10
  ## Packaged Docs And Skills
11
11
 
@@ -18,7 +18,8 @@ treat those paths as the detailed offline reference set:
18
18
  | `node_modules/@taskset/cli/skills/taskset/SKILL.md` | This skill (agent workflow for tasks and documents) |
19
19
  | `node_modules/@taskset/cli/skills/taskset/references/` | Task modeling, document modeling, monorepo, and Changesets examples |
20
20
  | `node_modules/@taskset/cli/skills/taskset-implement/` | Engineering standards used while developing Taskset itself |
21
- | `node_modules/@taskset/cli/docs/` | User docs: getting started, configuration, CLI reference, task files, document types |
21
+ | `node_modules/@taskset/cli/docs/` | Human docs: getting started, configuration, CLI reference, task files, document types, memory model, closeout, taxonomy |
22
+ | `node_modules/@taskset/cli/docs/agents/` | Agent docs: workflows, command contracts, query recipes, discovery index |
22
23
  | `node_modules/@taskset/cli/docs/maintainers/` | Architecture, ADRs, testing, and maintainer workflows |
23
24
 
24
25
  In the Taskset repository itself, prefer the workspace copies at `skills/` and
@@ -27,13 +28,16 @@ In the Taskset repository itself, prefer the workspace copies at `skills/` and
27
28
  under `node_modules/@taskset/cli/` before inventing workflow or command
28
29
  behavior. Useful deep links from an installed package:
29
30
 
30
- - CLI contracts: `node_modules/@taskset/cli/docs/cli-reference.md`
31
- - Document kinds and commands: `node_modules/@taskset/cli/docs/document-types.md`
32
- - Task file shape: `node_modules/@taskset/cli/docs/task-files.md`
33
- - Task modeling examples: `node_modules/@taskset/cli/skills/taskset/references/task-modeling-examples.md`
34
- - Document modeling examples: `node_modules/@taskset/cli/skills/taskset/references/document-modeling-examples.md`
35
- - Monorepo modeling: `node_modules/@taskset/cli/skills/taskset/references/monorepo-task-modeling.md`
36
- - Changesets examples: `node_modules/@taskset/cli/skills/taskset/references/changesets-examples.md`
31
+ - CLI contracts: [`docs/cli-reference.md`](../../docs/cli-reference.md) (installed: `node_modules/@taskset/cli/docs/cli-reference.md`)
32
+ - Document kinds: [`docs/document-types.md`](../../docs/document-types.md)
33
+ - Memory model: [`docs/memory-model.md`](../../docs/memory-model.md)
34
+ - Query recipes: [`docs/agents/query-recipes.md`](../../docs/agents/query-recipes.md)
35
+ - Agent closeout: [`docs/agent-closeout.md`](../../docs/agent-closeout.md)
36
+ - Task file shape: [`docs/task-files.md`](../../docs/task-files.md)
37
+ - Task modeling examples: [references/task-modeling-examples.md](references/task-modeling-examples.md)
38
+ - Document modeling examples: [references/document-modeling-examples.md](references/document-modeling-examples.md)
39
+ - Monorepo modeling: [references/monorepo-task-modeling.md](references/monorepo-task-modeling.md)
40
+ - Changesets examples: [references/changesets-examples.md](references/changesets-examples.md)
37
41
 
38
42
  Relative links inside the packaged skill still resolve against the packaged
39
43
  `docs/` and `skills/` trees because both directories sit at the `@taskset/cli`
@@ -43,19 +47,24 @@ package root.
43
47
 
44
48
  - Treat `.taskset/tasks/` as the canonical task source of truth and the sibling
45
49
  document-kind directories as the canonical durable project-document source.
46
- - Treat `taskset.config.ts` as the repository entrypoint for Taskset behavior and defaults.
50
+ - Treat the nearest `.taskset/` directory as the repository marker. Optional
51
+ `taskset.config.ts` at that root overlays defaults; built-in defaults apply
52
+ when it is absent.
47
53
  - Do not create a second task store, hidden database, or alternate sync layer.
48
54
  - Use Taskset commands to inspect and mutate tasks instead of editing canonical task files by hand when a command exists.
49
- - Prefer `pnpm taskset` in project repositories; use the repo root `pnpm taskset` script when available.
55
+ - Invoke Taskset with whatever runner the environment provides:
56
+ `npx @taskset/cli`, `pnpm dlx @taskset/cli`, `yarn dlx @taskset/cli`,
57
+ `bunx @taskset/cli`, `pnpm exec taskset`, or a global `taskset` binary. Do not
58
+ require `pnpm taskset`.
50
59
  - While executing or working a task, agents MUST create follow-up Taskset tasks or subtasks for newly discovered work. In this skill, "subtask" means either a Taskset child task (`--parent`) or a Markdown checklist item (`- [ ]`) in the parent task body—choose child tasks when independent status, ownership, dependencies, or history are needed; otherwise prefer checklist items. Do not leave that work only in chat, memory, or an informal note.
51
60
  - Agents MUST keep the parent task status and every subtask current mid-work: set Taskset tasks and child tasks to `doing` when work starts, check off completed checklist items as `- [x]`, update statuses when progress or blockers change, and mark each finished child task `done` when its acceptance criteria are met. Do not leave finished checklist items unchecked or finished child tasks open, and do not mark a parent task `done` while any tracked subtask (child task or checklist item) remains unfinished.
52
- - While executing a task, agents MUST create a Taskset document in the same change when work produces reusable evidence (`research`), a lasting choice (`decision` / `adr`), an operational procedure (`runbook`), or durable product context (`story` / `flow`). Link the document and originating task with `--related`. Do not leave that material only in chat, memory, or a closed task body. Short scratch notes and one-off checklist steps stay in the task body.
53
- - When the repository or current session designates one or more skills as primary, and task work surfaces a lesson that future agents should reuse—tool or command selection, a bug fix pattern, a repeated failure mode, or an architecture decision—update that primary skill (and its relevant references) in the same change so the failure is not rediscovered later. Prefer skills for lasting how-to; prefer research/decision documents for what was learned or chosen. Do not leave durable guidance only in a closed task body or chat transcript.
61
+ - While executing a task, agents MUST create a Taskset document in the same change when work produces reusable evidence (`research`), a lasting choice (`decision` / `adr`), an operational procedure (`runbook`), durable product context (`story` / `flow`), a recurring mistake or correct pattern (`lesson`), an open residual risk (`concern`), or structured spot-check evidence (`audit`). Link the document and originating task with `--related`. Do not leave that material only in chat, memory, or a closed task body. Short scratch notes and one-off checklist steps stay in the task body.
62
+ - When the repository or current session designates one or more skills as primary, and task work surfaces a lesson that future agents should reuse—tool or command selection, a bug fix pattern, a repeated failure mode, or an architecture decision—create a `lesson` document and update that primary skill (and its relevant references) in the same change so the failure is not rediscovered later. If the lesson uses `--related-skill`, update those skill paths in the same change. Prefer skills for lasting how-to; prefer research/decision documents for what was learned or chosen; prefer `lesson` for recurring incorrect/correct patterns. Taskset never auto-edits skills. Do not leave durable guidance only in a closed task body or chat transcript.
54
63
 
55
64
  ## Recommended Workflow
56
65
 
57
- 1. Confirm the repository root and Taskset config.
58
- 2. Inspect repository health with `taskset config --json` and `taskset doctor`.
66
+ 1. Confirm the repository root with `taskset config --json` (look for `.taskset/`, not a required config file).
67
+ 2. Inspect repository health with `taskset doctor --json`.
59
68
  3. List or show tasks and check their owner and assignees before changing or executing them.
60
69
  4. Resolve whether the current Git user is authorized to take the selected task; obtain confirmation when another person is responsible and the request does not already authorize that specific takeover.
61
70
  5. Create, update, execute, or close tasks with Taskset commands.
@@ -75,24 +84,28 @@ For ownership-gate scenarios, read [owner and assignee examples](references/task
75
84
  ## Common Commands
76
85
 
77
86
  ```bash
78
- pnpm taskset config --json
79
- pnpm taskset doctor
80
- pnpm taskset task list
81
- pnpm taskset task show <task-id>
82
- pnpm taskset task create --title "Describe the work"
83
- pnpm taskset task update <task-id> --status doing
84
- pnpm taskset task status <task-id> done
85
- pnpm taskset task delete <task-id>
86
- pnpm taskset task list --search "multiple terms"
87
- pnpm taskset task list --file packages/core --impact
88
- pnpm taskset document create story --title "Describe the user outcome"
89
- pnpm taskset document create research --title "Evaluate options" --related <task-id>
90
- pnpm taskset document update <document-id> --status ready --type research
91
- pnpm taskset document list research --search "queue" --impact
92
- pnpm taskset document show <document-id> --type research --include-derived --json
93
- pnpm taskset document import docs/adr/0001-example.md --type adr --move
94
- pnpm taskset document batch taskset-documents.json --concurrency 4 --json
95
- pnpm taskset sync
87
+ taskset config --json
88
+ taskset doctor --json
89
+ taskset task list --json
90
+ taskset task show your_task_id_here --json
91
+ taskset task create --title "Describe the work"
92
+ taskset task update your_task_id_here --status doing
93
+ taskset task status your_task_id_here done
94
+ taskset task delete your_task_id_here
95
+ taskset task list --search "multiple terms" --json
96
+ taskset task list --file packages/core --impact --json
97
+ taskset document create story --title "Describe the user outcome"
98
+ taskset document create research --title "Evaluate options" --related your_task_id_here
99
+ taskset document create lesson --title "Capability flags are enablement only" --severity high --related your_task_id_here
100
+ taskset document create concern --title "Open authz residual risk" --class authz --related your_task_id_here
101
+ taskset document update your_document_id_here --status ready --type research
102
+ taskset document list research --search "queue" --impact --json
103
+ taskset document list concern --directory apps/foo --status active --json
104
+ taskset document show your_document_id_here --type research --include-derived --json
105
+ taskset document import docs/adr/0001-example.md --type adr --move
106
+ taskset document batch taskset-documents.json --concurrency 4 --json
107
+ taskset task program your_parent_task_id_here --json
108
+ taskset sync --json
96
109
  ```
97
110
 
98
111
  ## Practical Guidance
@@ -113,24 +126,33 @@ pnpm taskset sync
113
126
  status, update, and delete commands as tasks. Document statuses remain
114
127
  `draft`, `ready`, `active`, `accepted`, `superseded`, and `archived`.
115
128
  - Use `document create` for stories, flows, decisions (`decision`, `adr`, and
116
- `dr` are aliases), research, and runbooks. Use `document import` to preserve
117
- an existing Markdown body in canonical frontmatter; add `--move` only when
118
- the source should be removed after a successful canonical write.
129
+ `dr` are aliases), research, runbooks, lessons (`antipattern` alias),
130
+ concerns, and audits. Use `document import` to preserve an existing Markdown
131
+ body in canonical frontmatter; add `--move` only when the source should be
132
+ removed after a successful canonical write.
119
133
  - Pick the kind by purpose: stories capture user value and acceptance criteria;
120
134
  flows describe journeys and failure variants; decisions preserve rationale
121
135
  and consequences; research records evidence and recommendations; runbooks
122
- make repeatable operations and recovery safe.
136
+ make repeatable operations and recovery safe; lessons capture recurring
137
+ incorrect/correct patterns; concerns track open residual risk; audits store
138
+ structured inventory or spot-check evidence.
123
139
  - Use `document batch <manifest.json>` for repeatable multi-document create,
124
140
  import, update, and export jobs. Progress belongs on stderr and `--json`
125
141
  output on stdout. Use `sync` after upgrades to ensure canonical directories,
126
- migrate legacy IDs and repository text references, refresh data `.gitignore`
127
- patterns for scoped `.generated/` directories, and rebuild views.
142
+ migrate legacy IDs to short hex IDs, normalize filenames, repair duplicate
143
+ sequence prefixes, rewrite repository text references, refresh data
144
+ `.gitignore` patterns for scoped `.generated/` directories, and rebuild views.
128
145
  - Disposable metadata indexes live beside each entity folder
129
146
  (`.taskset/tasks/.generated/`, `.taskset/stories/.generated/`, and the other
130
147
  document-kind folders), not under a global `.taskset/generated/`.
131
- - New task and document IDs use `0000001-short-title` naming. Use
132
- `task migrate-ids` for legacy task repositories; do not rename task files by
133
- hand because canonical relationships must be rewritten together.
148
+ - New task and document IDs are immutable 5-6 character lowercase hex values
149
+ such as `a1b2c3`. Filenames use `{sequence}-{slug}-{id}.md`. Agents MUST use
150
+ the short `id` in commands, frontmatter relationships, and JSON
151
+ handoffs—never the mutable filename sequence prefix alone. When linking to
152
+ the file in Markdown prose, use the full repository-relative filepath so the
153
+ link is clickable. Use `sync` or `task migrate-ids` for legacy repositories;
154
+ do not rename entity files by hand because canonical relationships must be
155
+ rewritten together.
134
156
  - When a task change affects repository behavior, follow up with the relevant tests, docs, and `git diff --check`.
135
157
 
136
158
  ## Task Modeling
@@ -161,24 +183,27 @@ For multi-task prompts or uncertainty about task granularity and relationships,
161
183
 
162
184
  ## Document Modeling
163
185
 
164
- - Prefer the five document kinds that already exist. Do not invent notes, specs,
186
+ - Prefer the document kinds that already exist. Do not invent notes, specs,
165
187
  epics, or RFCs as new kinds: investigation is `research`, lasting choices are
166
- `decision`, product context is `story` or `flow`, and recovery procedures are
167
- `runbook`. Keep short scratch in the task body.
188
+ `decision`, product context is `story` or `flow`, recovery procedures are
189
+ `runbook`, recurring mistakes are `lesson`, residual risks are `concern`, and
190
+ spot-check inventories are `audit`. Keep short scratch in the task body.
168
191
  - Search existing documents before creating new ones. Update or `--related` a
169
192
  matching document instead of duplicating it.
170
- - Create documents mid-work as soon as the evidence, decision, or procedure is
171
- clear enough to reuse. Link both sides with `--related` to the originating
172
- task when practical.
173
- - Status habits: start research and stories as `draft`; move them to `ready` or
174
- `accepted` when the recommendation or criteria stabilize; record decided ADRs
175
- as `accepted` (the create default); keep usable runbooks `active`.
193
+ - Create documents mid-work as soon as the evidence, decision, procedure,
194
+ lesson, or risk is clear enough to reuse. Link both sides with `--related` to
195
+ the originating task when practical.
196
+ - Status habits: start research, stories, and audits as `draft`; move them to
197
+ `ready` or `accepted` when they stabilize; record decided ADRs as `accepted`
198
+ (the create default); keep usable runbooks, lessons, and open concerns
199
+ `active`; move mitigated concerns to `accepted` and obsolete lessons to
200
+ `superseded` or `archived`.
176
201
  - Attach owner, assignees, labels, projects, files, and directories when they help
177
202
  discovery the same way they do on tasks. Use `--depends-on` and `--parent`
178
203
  only for real document-to-document prerequisites within Taskset documents.
179
204
  - Do not dump raw research into a primary skill. Capture the evidence in a
180
- research document, the choice in a decision document, and only the lasting
181
- how-to in the skill.
205
+ research document, the choice in a decision document, the recurring pattern in
206
+ a lesson, and only the lasting how-to in the skill.
182
207
 
183
208
  For paired good and bad examples, read [document-modeling examples](references/document-modeling-examples.md).
184
209
 
@@ -217,11 +242,18 @@ For paired examples of required, multi-package, and unnecessary changesets, read
217
242
  - Read the task and the surrounding repository context first.
218
243
  - Before mutating or executing a task, compare its owner and assignees with the current Git user and obtain confirmation when another person is responsible.
219
244
  - While executing, create follow-up tasks, child tasks, or checklist subtasks for every distinct piece of newly discovered work before moving on or closing the current task.
220
- - While executing, create research, decision, runbook, story, or flow documents for reusable evidence, lasting choices, procedures, or product context; link them with `--related`.
221
- - Keep parent status and every subtask current mid-work: check off finished checklist items, mark finished child tasks `done`, and only then close the parent.
222
- - When lasting lessons emerge and a primary skill is in play, update that skill so future sessions avoid the same tool-choice, bug-fix, repeated-failure, or architecture mistake.
245
+ - While executing, create research, decision, runbook, story, flow, lesson, concern, or audit documents for reusable evidence, lasting choices, procedures, product context, recurring patterns, or residual risks; link them with `--related`.
246
+ - Keep parent status and every subtask current mid-work: check off finished checklist items, mark finished child tasks `done`, and only then close the parent. Use `taskset task program <parent-id> --json` for multi-task program health.
247
+ - When lasting lessons emerge, create a `lesson` and update any primary or `--related-skill` skill so future sessions avoid the same tool-choice, bug-fix, repeated-failure, or architecture mistake.
223
248
  - In monorepos, verify affected packages and consumers against the workspace and task-runner graphs rather than relying only on the initially named directory.
224
249
  - In repositories using Changesets, reconcile the task's declared Changeset requirement with the actual affected packages before completion.
225
250
  - Prefer the smallest Taskset command that proves the intended state.
251
+ - Use short hex `id` values (`a1b2c3`) with `task show`, `task update`,
252
+ `--related`, `--depends-on`, and `--parent`. Filename sequence prefixes are
253
+ display metadata only—never identity and never Markdown link targets.
254
+ - When writing a Markdown hyperlink to a Taskset entity, doc, or skill file,
255
+ use the repository-relative filepath (for example
256
+ `.taskset/lessons/0000001-…-a1b2c3.md` or `docs/memory-model.md`). Inline
257
+ mentions may still show the short `id` for humans and CLI copy-paste.
226
258
  - Avoid editing generated output, caches, or any non-canonical `.taskset/` artifacts.
227
259
  - Report validation failures plainly and only claim success after the command has run.
@@ -12,10 +12,14 @@ Good: create a research document, keep the task focused on the delivery outcome,
12
12
  and link both.
13
13
 
14
14
  ```bash
15
- pnpm taskset document create research --title "Evaluate queue providers" --related <task-id>
16
- pnpm taskset task update <task-id> --related <research-id>
15
+ taskset document create research --title "Evaluate queue providers" --related <task-id>
16
+ taskset task update <task-id> --related <research-id>
17
17
  ```
18
18
 
19
+ In Markdown prose, link the created file by filepath (for example
20
+ `.taskset/research/0000001-evaluate-queue-providers-<research-id>.md`), not by
21
+ a bare hex id as the link target.
22
+
19
23
  ## Decision Versus Research
20
24
 
21
25
  Bad: write an ADR before evidence exists, or leave a chosen architecture only as
@@ -61,3 +65,50 @@ implementation tasks that `--related` that document and carry the code work.
61
65
  pnpm taskset document create story --title "Member signs in via SSO"
62
66
  pnpm taskset task create --title "Add SSO callback handler" --related <story-id> --file packages/api/src/auth.ts
63
67
  ```
68
+
69
+ ## Lesson Versus Closed Task Note
70
+
71
+ Bad: rediscover “channel capability ≠ authz grant” in chat after the fixing task
72
+ is already `done`, or paste the pattern only into a skill with no Taskset trail.
73
+
74
+ Good: create a `lesson` with trigger, incorrect pattern, correct pattern,
75
+ severity, prevention, and evidence; relate the originating task/concern; and if
76
+ `--related-skill` is set, update that skill in the same change.
77
+
78
+ ```bash
79
+ pnpm taskset document create lesson \
80
+ --title "Capability flags are enablement only" \
81
+ --severity high \
82
+ --related-skill .agents/skills/security/SKILL.md \
83
+ --related <task-id>
84
+ ```
85
+
86
+ ## Concern Versus ADR Or Runbook
87
+
88
+ Bad: leave residual authz risk as an unfinished checklist forever, or write an
89
+ ADR that only says “still risky” with no review cadence.
90
+
91
+ Good: create a `concern` for living open/residual risk (class, trust boundary,
92
+ evidence, residual risk, mitigation/acceptance, cadence). Use `decision` for the
93
+ chosen design and `runbook` for recovery steps.
94
+
95
+ ```bash
96
+ pnpm taskset document create concern \
97
+ --title "Telegram capability must not grant CASL" \
98
+ --class authz \
99
+ --cadence on-release \
100
+ --related <task-id>
101
+ ```
102
+
103
+ ## Audit Versus Informal Research Dump
104
+
105
+ Bad: paste a route inventory into a research body with no findings status or
106
+ follow-ups.
107
+
108
+ Good: use `audit` for structured spot-checks with scope, method, findings
109
+ (`pass` | `fail` | `residual`), residual items, required follow-ups, and next
110
+ due date.
111
+
112
+ ```bash
113
+ pnpm taskset document create audit --title "Public route inventory" --related <program-task-id>
114
+ ```
@@ -85,9 +85,9 @@ listed in Preserve Product Invariants, the invariant takes precedence. Explain
85
85
  the conflict to the user and request an explicit override with rationale before
86
86
  proceeding.
87
87
 
88
- The repository is currently an early scaffold. Do not turn accidental manifest
89
- mistakes, empty packages, or placeholder dependencies into conventions. Report
90
- them and follow the intended `@taskset/<directory-name>` ownership model.
88
+ Do not turn accidental manifest mistakes, empty packages, or placeholder
89
+ dependencies into conventions. Report them and follow the intended
90
+ `@taskset/<directory-name>` ownership model.
91
91
 
92
92
  ## Preserve Product Invariants
93
93
 
@@ -117,29 +117,38 @@ Non-negotiable rules:
117
117
  - Canonical task files use one strict versionless metadata shape. Versioned
118
118
  task frontmatter and unknown fields are rejected.
119
119
  - Canonical supporting documents live in kind-specific `.taskset/` directories:
120
- stories, flows, decisions, research, and runbooks. Use their shared strict
121
- metadata (aligned with task planning, people, path, and relationship fields)
122
- and kind-specific body templates instead of modeling every durable document
123
- as a task. Documents expose the same create, update, status, delete, list
124
- query, search, impact, and derived-relationship operations as tasks, with
125
- document-specific statuses.
120
+ stories, flows, decisions, research, runbooks, lessons, concerns, and audits.
121
+ Use their shared strict metadata (aligned with task planning, people, path,
122
+ and relationship fields), kind-specific optional fields (`severity` /
123
+ `relatedSkills` / `packs` for lessons; `class` / `cadence` for concerns), and
124
+ kind-specific body templates instead of modeling every durable document as a
125
+ task. Documents expose the same create, update, status, delete, list query,
126
+ search, impact, and derived-relationship operations as tasks, with
127
+ document-specific statuses. Optional closeout gates, taxonomy allowlists, and
128
+ `taskset task program` rollups extend delivery without a second tracker.
126
129
  - Document mutations, imports, exports, and batches belong to core. The CLI
127
130
  validates manifests and renders output only. Use TanStack Pacer for bounded
128
131
  heavy batches and migrations, emit count and percentage progress, preserve
129
- manifest result order, and serialize writes that allocate sequential IDs.
132
+ manifest result order, and serialize writes that allocate short hex IDs plus
133
+ filename display sequences.
130
134
  - Disposable metadata indexes live in each entity folder's `.generated/`
131
135
  directory (for example `.taskset/tasks/.generated/` and
132
136
  `.taskset/research/.generated/`), not a global `.taskset/generated/` tree.
133
137
  - Repository sync is the maintenance entrypoint: ensure canonical `.taskset/`
134
- directories, migrate task IDs and repository text references atomically,
138
+ directories, migrate task and document IDs to immutable short hex IDs,
139
+ normalize `{sequence}-{slug}-{id}.md` filenames, repair duplicate sequence
140
+ prefixes by `createdAt`, rewrite repository text references atomically,
135
141
  refresh data `.gitignore` rules for scoped generated output, remove legacy
136
142
  global generated directories, then rebuild disposable generated views.
137
- - `taskset.config.ts` marks the repository root and configures validated project
138
- metadata and task creation defaults. It never relocates canonical
139
- `.taskset/` data or becomes a second task store.
140
- - Taskset is developed using its own root config, CLI, and canonical task
141
- files. Keep that dogfooding workflow operational when changing core, CLI,
142
- workspace commands, or persisted contracts.
143
+ - The nearest `.taskset/` directory marks the repository root. Optional
144
+ `taskset.config.ts` at that root configures validated project metadata and
145
+ task creation defaults. Missing config uses built-in defaults. Config never
146
+ relocates canonical `.taskset/` data or becomes a second task store.
147
+ - Taskset is developed using its own `.taskset/` data, optional root config,
148
+ CLI, and canonical task files. Keep that dogfooding workflow operational when
149
+ changing core, CLI, workspace commands, or persisted contracts.
150
+ - Public docs split three audiences: humans (`docs/`), agents (`docs/agents/`
151
+ plus `skills/` and root `AGENTS.md`), and maintainers (`docs/maintainers/`).
143
152
 
144
153
  ## Organize by Ownership
145
154
 
@@ -31,7 +31,9 @@ Recommended website stack:
31
31
  Register blog posts in the app-local post registry so static export can
32
32
  enumerate `/posts/[slug]`. Keep blog posts in plain Markdown by default with
33
33
  `title`, `description`, and `date` frontmatter. Do not merge docs and blog theme
34
- wrappers in the global MDX component map.
34
+ wrappers in the global MDX component map. Agent operating pages live under
35
+ `docs/agents/` and appear in usage navigation; maintainer pages stay under
36
+ `/maintainers`.
35
37
 
36
38
  Keep architectural decisions under
37
39
  `docs/maintainers/architecture/decisions/`.
@@ -39,7 +39,8 @@ surfaces such as package names, the CLI command, `taskset.config.ts`, and
39
39
  `.taskset/`.
40
40
 
41
41
  Taskset dogfoods these boundaries. The root workspace installs core and CLI,
42
- loads `taskset.config.ts`, and stores its own planned work in `.taskset/tasks/`.
42
+ may load optional `taskset.config.ts`, and stores its own planned work in
43
+ `.taskset/tasks/`.
43
44
 
44
45
  ## Dependency Flow
45
46
 
@@ -4,13 +4,13 @@ Product direction and the canonical source-of-truth model.
4
4
 
5
5
  ## Product Direction
6
6
 
7
- Taskset began as an offline, inline, AI-friendly, human-readable task manager
8
- designed to accelerate software delivery and give development teams immediate
9
- awareness of the work surrounding their code.
7
+ Taskset began as an offline, inline, AI-friendly, human-readable delivery
8
+ workspace: not only tasks, but the plans, research, decisions, flows, and
9
+ runbooks that make delivery coherent.
10
10
 
11
- It grows from that core into a Git-native software delivery platform. Tasks,
12
- stories, flows, decisions, research, runbooks, and related project knowledge
13
- live beside the code as human-readable Markdown.
11
+ It is a Git-native software delivery platform. Stories, flows, decisions,
12
+ research, runbooks, lessons, concerns, audits, and tasks live beside the code as
13
+ human-readable Markdown.
14
14
 
15
15
  Vision: become the Git-native operating system for software delivery.
16
16
 
@@ -31,7 +31,10 @@ Design for:
31
31
  repositories
32
32
 
33
33
  Near-term work should keep the task and supporting-document workflows coherent
34
- before inventing additional entity kinds or investing heavily in new interfaces.
34
+ before inventing freeform kinds (`note`, `rfc`, `epic`, `spec`) or investing
35
+ heavily in new interfaces. Operational memory kinds (`lesson`, `concern`,
36
+ `audit`) are first-class document kinds under the existing document command
37
+ surface.
35
38
 
36
39
  ## Source-of-Truth Model
37
40
 
@@ -51,6 +54,12 @@ Canonical project state lives under `.taskset/`.
51
54
  │ └── .generated/
52
55
  ├── runbooks/
53
56
  │ └── .generated/
57
+ ├── lessons/
58
+ │ └── .generated/
59
+ ├── concerns/
60
+ │ └── .generated/
61
+ ├── audits/
62
+ │ └── .generated/
54
63
  ├── snapshots/
55
64
  └── cache/
56
65
  ```
@@ -58,8 +67,10 @@ Canonical project state lives under `.taskset/`.
58
67
  Rules:
59
68
 
60
69
  - Entity Markdown files are authoritative persisted state.
61
- - `taskset.config.ts` is the discoverable repository usage configuration. It
62
- controls validated behavior and defaults, not canonical entity state.
70
+ - The nearest `.taskset/` directory is the discoverable repository marker.
71
+ Optional `taskset.config.ts` at that root overlays validated behavior and
72
+ defaults. Missing config uses built-in defaults. Config never owns entity
73
+ state.
63
74
  - YAML frontmatter contains structured metadata. Markdown bodies contain
64
75
  durable human context.
65
76
  - Do not store the same field independently in frontmatter and body.
@@ -73,8 +84,8 @@ Rules:
73
84
  state, or another hidden store as an undeclared authority.
74
85
  - Git is the versioning and collaboration layer around the files. Do not assume
75
86
  it provides database transactions or conflict-free identifiers.
76
- - Repository discovery walks upward for exactly `taskset.config.ts`; canonical
77
- storage remains fixed under `.taskset/`.
87
+ - Repository discovery walks upward for `.taskset/`; canonical storage remains
88
+ fixed under that directory.
78
89
 
79
90
  Any persisted format change must define validation, compatibility, migration,
80
91
  and failure behavior before implementation.
@@ -9,8 +9,11 @@ Storage, graph, and snapshot rules for canonical repository data.
9
9
  expressions.
10
10
  - Normalize stored code references to repository-relative POSIX paths.
11
11
  - Reject paths that escape the repository or `.taskset/` ownership boundary.
12
- - Keep IDs immutable. Do not adopt sequential IDs without a documented
13
- branch-collision strategy.
12
+ - Keep entity IDs immutable short hex values for commands and canonical
13
+ relationships. Filename display sequences are mutable maintenance metadata
14
+ repaired by `sync`; they are not identity. Markdown hyperlinks to entity or
15
+ documentation files must use repository-relative filepaths, not bare hex ids
16
+ or sequence prefixes.
14
17
  - Store one canonical direction for inverse relationships unless the schema
15
18
  explicitly defines otherwise. Derive `blocks` from `dependsOn`, for example,
16
19
  rather than allowing silent divergence.
@@ -55,7 +55,7 @@ taskset task list --file packages/core --impact
55
55
  taskset context-bundle
56
56
  ```
57
57
 
58
- The root usage configuration is exactly `taskset.config.ts`. Export a
58
+ Optional root usage configuration is exactly `taskset.config.ts`. Export a
59
59
  versionless object, preferably through `defineConfig` from `@taskset/core`.
60
60
  Keep configuration fields behavioral; never use config to redirect canonical
61
61
  entity storage outside `.taskset/`.
@@ -8,7 +8,7 @@ Use YAML frontmatter for machine metadata and Markdown for human context:
8
8
 
9
9
  ```markdown
10
10
  ---
11
- id: 0000001-add-task-validation
11
+ id: a1b2c3
12
12
  title: Add task validation
13
13
  status: doing
14
14
  priority: high
@@ -31,6 +31,8 @@ Describe why the work exists.
31
31
  - [ ] Invalid statuses produce an actionable diagnostic.
32
32
  ```
33
33
 
34
+ Filename: `0000001-add-task-validation-a1b2c3.md`
35
+
34
36
  Rules:
35
37
 
36
38
  - Require `id`, `title`, `status`, `createdAt`, and `updatedAt`.
@@ -53,9 +55,12 @@ Rules:
53
55
  reading the documented legacy ISO 8601 UTC form until a compatibility change
54
56
  explicitly removes it.
55
57
  - Keep IDs immutable and compare them exactly.
56
- - Format new task IDs as a seven-digit sequence plus a lowercase title slug.
57
- Keep legacy `TS-` ULIDs readable only so `task migrate-ids` can rewrite them
58
- and all canonical relationships atomically.
58
+ - Format new task and document IDs as 5-6 character lowercase hex values.
59
+ Store display order in the filename as `{sequence}-{slug}-{id}.md`. Keep
60
+ legacy `TS-` ULIDs and sequential `0000001-title` IDs readable only so
61
+ `sync` / `task migrate-ids` can rewrite them, normalize filenames, repair
62
+ duplicate sequence prefixes by `createdAt`, and update canonical
63
+ relationships atomically.
59
64
  - Preserve user-authored body text and meaningful list order.
60
65
  - Use stable key ordering and one final newline in generated output.
61
66
  - Generated metadata indexes cover supported non-ID metadata fields, group
@@ -96,9 +96,10 @@ must remain available. Root-only architecture tests run once after Turbo rather
96
96
  than being duplicated inside every package. There is no `transit` script;
97
97
  Turbo's dependency traversal is orchestration, not another test suite.
98
98
 
99
- `taskset.config.ts` is loaded as trusted project code using Node's native
100
- erasable TypeScript support. Keep it free of syntax that requires TypeScript
101
- code generation.
99
+ Optional `taskset.config.ts` is loaded as trusted project code using Node's
100
+ native erasable TypeScript support when present. Keep it free of syntax that
101
+ requires TypeScript code generation. Repository discovery uses `.taskset/`, not
102
+ the config file.
102
103
 
103
104
  If Turbo reports duplicate workspace names, fix the incorrect package manifest.
104
105
  Do not work around the graph with directory filters or aliases.