@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.
- package/CHANGELOG.md +30 -0
- package/README.md +21 -22
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +212 -113
- package/docs/_meta.ts +5 -0
- package/docs/agent-closeout.md +69 -0
- package/docs/agents/_meta.ts +6 -0
- package/docs/agents/commands.md +94 -0
- package/docs/agents/index.md +113 -0
- package/docs/agents/llms.txt +35 -0
- package/docs/agents/query-recipes.md +76 -0
- package/docs/agents/workflows.md +60 -0
- package/docs/cli-reference.md +53 -34
- package/docs/configuration.md +53 -31
- package/docs/document-types.md +53 -24
- package/docs/getting-started.md +61 -49
- package/docs/index.md +37 -25
- package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +21 -47
- package/docs/maintainers/development/contributing.md +2 -3
- package/docs/maintainers/development/documentation.md +32 -49
- package/docs/maintainers/index.md +1 -3
- package/docs/maintainers/product/vision.md +27 -33
- package/docs/memory-model.md +58 -0
- package/docs/security-compliance-tracking.md +107 -0
- package/docs/task-files.md +19 -13
- package/docs/taxonomy-cookbook.md +59 -0
- package/package.json +4 -4
- package/skills/taskset/SKILL.md +89 -57
- package/skills/taskset/references/document-modeling-examples.md +53 -2
- package/skills/taskset-implement/SKILL.md +26 -17
- package/skills/taskset-implement/references/architecture/documentation-and-generated.md +3 -1
- package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +2 -1
- package/skills/taskset-implement/references/architecture/product-and-source.md +22 -11
- package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +5 -2
- package/skills/taskset-implement/references/conventions/naming-and-packages.md +1 -1
- package/skills/taskset-implement/references/conventions/task-files.md +9 -4
- package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +4 -3
- package/src/cli.ts +174 -112
|
@@ -1,69 +1,52 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Documentation
|
|
3
|
-
description: How
|
|
3
|
+
description: How Markdown becomes the Taskset documentation website for humans, agents, and maintainers.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Documentation
|
|
7
7
|
|
|
8
|
-
The root `docs/` directory is canonical
|
|
9
|
-
guidance. Top-level pages are for users. Repository maintenance material belongs
|
|
10
|
-
under `docs/maintainers/`.
|
|
8
|
+
The root `docs/` directory is canonical. Split audiences deliberately:
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
- Humans: top-level usage pages
|
|
11
|
+
- Agents: `docs/agents/`, root `AGENTS.md`, and packaged `skills/`
|
|
12
|
+
- Maintainers: `docs/maintainers/`
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
Follow the [Vercel writing guidelines](https://github.com/vercel-labs/writing-guidelines) for public prose.
|
|
15
|
+
|
|
16
|
+
## Recommended website stack
|
|
17
|
+
|
|
18
|
+
Use Next.js App Router, Nextra, `nextra-theme-docs`, and `nextra-theme-blog` in `apps/www`.
|
|
16
19
|
|
|
17
20
|
Why:
|
|
18
21
|
|
|
19
22
|
- `apps/www` owns the public documentation renderer
|
|
20
23
|
- the repository already has a Next.js TypeScript preset
|
|
21
|
-
- Nextra supplies Markdown routing, documentation navigation, blog layout, and
|
|
22
|
-
search
|
|
24
|
+
- Nextra supplies Markdown routing, documentation navigation, blog layout, and search
|
|
23
25
|
- Markdown remains the source rather than a CMS database
|
|
24
26
|
|
|
25
|
-
## Content
|
|
26
|
-
|
|
27
|
-
- Use `.md` unless the page needs an interactive component
|
|
28
|
-
- Add `title` and `
|
|
29
|
-
- Keep conceptual pages separate from current command reference
|
|
30
|
-
- Mark future behavior as planned
|
|
31
|
-
- Link to source files with repository-relative paths
|
|
32
|
-
- Keep generated API reference separate from hand-authored concepts
|
|
33
|
-
- Keep architecture, ADRs, development workflows, and technology preferences
|
|
34
|
-
|
|
35
|
-
- Keep
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
27
|
+
## Content rules
|
|
28
|
+
|
|
29
|
+
- Use `.md` unless the page needs an interactive component
|
|
30
|
+
- Add `title`, `description`, and `contentType` frontmatter for usage and agent pages
|
|
31
|
+
- Keep conceptual pages separate from current command reference
|
|
32
|
+
- Mark future behavior as planned
|
|
33
|
+
- Link to source files with repository-relative paths
|
|
34
|
+
- Keep generated API reference separate from hand-authored concepts
|
|
35
|
+
- Keep architecture, ADRs, development workflows, and technology preferences under `docs/maintainers/`
|
|
36
|
+
- Keep agent operating contracts under `docs/agents/`
|
|
37
|
+
- Keep `/llms.txt` in `apps/www/public/llms.txt`, not under `docs/`, so Nextra does not import it as a page module
|
|
38
|
+
- Keep chronological release and project posts under `apps/www/posts/`
|
|
39
|
+
- Require `title`, `description`, and `date` frontmatter for blog posts
|
|
40
|
+
- Register each post in `apps/www/src/blog/posts.ts` so the static build can enumerate `/posts/[slug]`
|
|
39
41
|
|
|
40
42
|
## Integration
|
|
41
43
|
|
|
42
|
-
`apps/www/content` is a repository-relative symlink to `../../docs`. Nextra
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Usage docs, maintainer docs, and blog pages use separate route layouts and
|
|
50
|
-
receive their own MDX component sets. Do not merge docs and blog themes in the
|
|
51
|
-
global `mdx-components.tsx`; their wrapper components own different page
|
|
52
|
-
contracts. Blog Markdown is loaded from `apps/www/posts/` through the app-local
|
|
53
|
-
post registry.
|
|
54
|
-
|
|
55
|
-
Run the Next.js development and production builds in webpack mode. Turbopack
|
|
56
|
-
does not reliably discover newly added Markdown through the external content
|
|
57
|
-
symlink.
|
|
58
|
-
|
|
59
|
-
Keep stable public site metadata such as `docsRepositoryBase` in the owning app
|
|
60
|
-
configuration. Do not add a root `.env` for a non-secret constant. Use an
|
|
61
|
-
app-local environment variable and checked-in `.env.example` only when a value
|
|
62
|
-
genuinely differs by deployment.
|
|
63
|
-
|
|
64
|
-
The website may generate `.next/`, search data, and build output. These are
|
|
65
|
-
derived and ignored. Root `docs/` Markdown remains authoritative for
|
|
66
|
-
documentation, and `apps/www/posts/` Markdown remains authoritative for blog
|
|
67
|
-
posts.
|
|
44
|
+
`apps/www/content` is a repository-relative symlink to `../../docs`. Nextra’s standard content-directory loader renders that source without copying it. The top-level usage docs route filters `docs/maintainers/` out of its primary navigation, and the dedicated `/maintainers` route renders maintainer Markdown with its own page map.
|
|
45
|
+
|
|
46
|
+
Usage docs, maintainer docs, and blog pages use separate route layouts and receive their own MDX component sets. Do not merge docs and blog themes in the global `mdx-components.tsx`.
|
|
47
|
+
|
|
48
|
+
Run the Next.js development and production builds in webpack mode. Turbopack does not reliably discover newly added Markdown through the external content symlink.
|
|
49
|
+
|
|
50
|
+
The website may generate `.next/`, search data, and build output. These are derived and ignored. Root `docs/` Markdown remains authoritative for documentation, and `apps/www/posts/` Markdown remains authoritative for blog posts.
|
|
68
51
|
|
|
69
52
|
See [ADR 0001](../architecture/decisions/0001-documentation-platform.md).
|
|
@@ -5,9 +5,7 @@ description: Repository maintenance documentation for Taskset contributors.
|
|
|
5
5
|
|
|
6
6
|
# Taskset Maintainer Documentation
|
|
7
7
|
|
|
8
|
-
This section contains repository maintenance material. It
|
|
9
|
-
separate from the primary user guides while remaining available in the same
|
|
10
|
-
Nextra documentation site.
|
|
8
|
+
This section contains repository maintenance material for the Taskset delivery workspace. It stays separate from the primary human and agent guides while remaining available in the same Nextra documentation site.
|
|
11
9
|
|
|
12
10
|
## Contents
|
|
13
11
|
|
|
@@ -7,9 +7,7 @@ description: Maintainer-facing product direction for Taskset.
|
|
|
7
7
|
|
|
8
8
|
## Origin
|
|
9
9
|
|
|
10
|
-
Taskset began from a
|
|
11
|
-
code so developers and AI assistants can understand work immediately without
|
|
12
|
-
switching to a disconnected project-management database.
|
|
10
|
+
Taskset began from a need to keep delivery context offline and inline with the code. Tasks alone were not enough. Teams and agents also needed stories, research, decisions, flows, and runbooks that travel with the repository instead of living in a disconnected project-management database.
|
|
13
11
|
|
|
14
12
|
## Vision
|
|
15
13
|
|
|
@@ -17,18 +15,15 @@ Taskset aims to become the Git-native operating system for software delivery.
|
|
|
17
15
|
|
|
18
16
|
## Mission
|
|
19
17
|
|
|
20
|
-
Store planning,
|
|
21
|
-
files, then provide focused interfaces over that shared task graph.
|
|
18
|
+
Store planning, learning, decisions, operations, and execution as human-readable repository files, then provide focused interfaces over that shared work graph.
|
|
22
19
|
|
|
23
20
|
## Product Goals
|
|
24
21
|
|
|
25
|
-
- Accelerate delivery by reducing context switching
|
|
26
|
-
- Give developers immediate awareness of related tasks, dependencies, specs,
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- Let managers and stakeholders view repository-backed information without
|
|
31
|
-
creating another source of truth.
|
|
22
|
+
- Accelerate delivery by reducing context switching
|
|
23
|
+
- Give developers immediate awareness of related tasks, dependencies, specs, decisions, and releases
|
|
24
|
+
- Give AI systems direct, structured, reviewable project context across plans and execution
|
|
25
|
+
- Make monorepos, packages, applications, and code paths first-class
|
|
26
|
+
- Let managers and stakeholders view repository-backed information without creating another source of truth
|
|
32
27
|
|
|
33
28
|
## Principles
|
|
34
29
|
|
|
@@ -38,39 +33,38 @@ Core workflows must work from a local repository without a network service.
|
|
|
38
33
|
|
|
39
34
|
### Inline with code
|
|
40
35
|
|
|
41
|
-
Project context belongs beside the code it affects and travels with the
|
|
42
|
-
repository.
|
|
36
|
+
Project context belongs beside the code it affects and travels with the repository.
|
|
43
37
|
|
|
44
38
|
### Human and AI readable
|
|
45
39
|
|
|
46
|
-
Markdown carries durable prose. Structured frontmatter carries data that tools
|
|
47
|
-
can validate and query.
|
|
40
|
+
Markdown carries durable prose. Structured frontmatter carries data that tools can validate and query.
|
|
48
41
|
|
|
49
42
|
### Git native
|
|
50
43
|
|
|
51
|
-
Commits, branches, pull requests, diffs, and reviews are normal collaboration
|
|
52
|
-
mechanisms.
|
|
44
|
+
Commits, branches, pull requests, diffs, and reviews are normal collaboration mechanisms.
|
|
53
45
|
|
|
54
46
|
### One source of truth
|
|
55
47
|
|
|
56
|
-
Every interface reads and changes the same canonical `.taskset/` files through
|
|
57
|
-
the same domain rules.
|
|
48
|
+
Every interface reads and changes the same canonical `.taskset/` files through the same domain rules.
|
|
58
49
|
|
|
59
|
-
###
|
|
50
|
+
### Agent first, human readable
|
|
60
51
|
|
|
61
|
-
Taskset
|
|
52
|
+
Taskset optimizes distribution, discovery, and docs for agent operators while keeping Markdown reviewable by humans.
|
|
62
53
|
|
|
63
|
-
|
|
54
|
+
### Memory and execution together
|
|
64
55
|
|
|
65
|
-
|
|
56
|
+
Documents preserve product and engineering memory. Tasks carry ownership, status, and delivery. Relationships bind them into one graph.
|
|
66
57
|
|
|
67
|
-
|
|
68
|
-
- task creation, listing, display, editing, and removal
|
|
69
|
-
- lifecycle transitions
|
|
70
|
-
- deterministic Markdown parsing and serialization
|
|
71
|
-
- validation and repository diagnostics
|
|
72
|
-
- basic search and filtering
|
|
73
|
-
- dependency integrity
|
|
58
|
+
## Current product surface
|
|
74
59
|
|
|
75
|
-
|
|
76
|
-
|
|
60
|
+
The current surface includes:
|
|
61
|
+
|
|
62
|
+
- repository initialization and optional configuration
|
|
63
|
+
- tasks with lifecycle, dependencies, search, and impact queries
|
|
64
|
+
- stories, flows, decisions, research, runbooks, lessons, concerns, and audits
|
|
65
|
+
with the same query and mutation family, plus program rollups and optional
|
|
66
|
+
closeout gates
|
|
67
|
+
- validation, diagnostics, generated views, snapshots, and sync
|
|
68
|
+
- packaged agent skills and dual-audience documentation
|
|
69
|
+
|
|
70
|
+
TUI, MCP, extension, Kanban, Office, and integrations build on the same file and core contracts.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Choose Taskset memory layers
|
|
3
|
+
description: When to use task bodies versus research, decisions, runbooks, lessons, and concerns.
|
|
4
|
+
contentType: Conceptual
|
|
5
|
+
navLabel: Memory Model
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Choose Taskset memory layers
|
|
9
|
+
|
|
10
|
+
Taskset keeps three memory layers in one `.taskset/` store:
|
|
11
|
+
|
|
12
|
+
| Layer | Kinds | Question it answers |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| Delivery | tasks (+ checklist subtasks) | What work is open, blocked, or done? |
|
|
15
|
+
| Decision | research, decision/adr, runbook, story, flow | What did we learn, choose, or need to operate? |
|
|
16
|
+
| Operational | lesson, concern, audit | What recurring mistakes, open risks, and spot-checks must future agents respect? |
|
|
17
|
+
|
|
18
|
+
Do not invent freeform kinds such as `note`, `rfc`, `epic`, or `spec`. Map those intents onto the kinds above.
|
|
19
|
+
|
|
20
|
+
## Quick chooser
|
|
21
|
+
|
|
22
|
+
| Situation | Put it here |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| One-off execution steps for the current outcome | Task body checklist |
|
|
25
|
+
| Independently owned or sequenced deliverable | Child task (`--parent`) |
|
|
26
|
+
| Options, evidence, recommendation still forming | `research` |
|
|
27
|
+
| Lasting architectural or product choice | `decision` / `adr` |
|
|
28
|
+
| Repeatable recovery or ops procedure | `runbook` |
|
|
29
|
+
| User outcome / journey context | `story` / `flow` |
|
|
30
|
+
| Recurring mistake or correct pattern future agents must not rediscover | `lesson` (`antipattern` alias) |
|
|
31
|
+
| Open residual risk (security, authz, money, ops, …) | `concern` |
|
|
32
|
+
| Structured inventory or spot-check pass/fail evidence | `audit` |
|
|
33
|
+
|
|
34
|
+
## Anti-examples
|
|
35
|
+
|
|
36
|
+
Bad: close a security task with the lesson only in chat or the finished task body.
|
|
37
|
+
|
|
38
|
+
Good: create a `lesson`, `--related` the task (and concern if any), and if `--related-skill` is set, update that skill in the same change.
|
|
39
|
+
|
|
40
|
+
Bad: track “remaining authz risk” as an unfinished checklist item forever.
|
|
41
|
+
|
|
42
|
+
Good: create a `concern` with class, trust boundary, residual risk, and review cadence; keep it `active` until mitigated or formally `accepted`.
|
|
43
|
+
|
|
44
|
+
Bad: dump an ADR program into one epic-shaped Markdown note.
|
|
45
|
+
|
|
46
|
+
Good: use a parent task as the program root, child tasks for workstreams, related `concern` / `research` / `audit` documents for residual risk and evidence, and `taskset task program <parent-id> --json` for rollup.
|
|
47
|
+
|
|
48
|
+
Bad: edit a consumer primary skill automatically from Taskset.
|
|
49
|
+
|
|
50
|
+
Good: store the lesson in Taskset; update the skill only when the consumer opts in via `--related-skill` (or an explicit later promote helper). Taskset never auto-edits skills by default.
|
|
51
|
+
|
|
52
|
+
## Related docs
|
|
53
|
+
|
|
54
|
+
- [Document types](document-types.md)
|
|
55
|
+
- [Security and compliance tracking](security-compliance-tracking.md)
|
|
56
|
+
- [Agent closeout contract](agent-closeout.md)
|
|
57
|
+
- [Taxonomy cookbook](taxonomy-cookbook.md)
|
|
58
|
+
- [Query recipes for agents](agents/query-recipes.md)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Track security and compliance in Taskset
|
|
3
|
+
description: Model ADR programs, audits, residual risk, and continuous inventories with concerns, lessons, and program rollups.
|
|
4
|
+
contentType: How-to
|
|
5
|
+
navLabel: Security Tracking
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Track security and compliance in Taskset
|
|
9
|
+
|
|
10
|
+
Use Taskset’s operational memory kinds for security programs without a second tracker.
|
|
11
|
+
|
|
12
|
+
## Model
|
|
13
|
+
|
|
14
|
+
| Artifact | Kind | Role |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Program root | Parent task (optional `program` label/project) | Rollup + closeout owner |
|
|
17
|
+
| Workstreams | Child tasks | Independently trackable delivery |
|
|
18
|
+
| Design choices | `decision` / `adr` | Lasting accepted choices |
|
|
19
|
+
| Spot checks | `audit` | Inventory / matrix pass-fail evidence |
|
|
20
|
+
| Residual risk | `concern` | Living open-risk register |
|
|
21
|
+
| Recurring failure modes | `lesson` | Prevent rediscovery |
|
|
22
|
+
|
|
23
|
+
## Create a concern
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
taskset document create concern \
|
|
27
|
+
--title "Telegram capability must not grant CASL" \
|
|
28
|
+
--class authz \
|
|
29
|
+
--cadence on-release \
|
|
30
|
+
--label security \
|
|
31
|
+
--directory apps/bot \
|
|
32
|
+
--related <task-id> \
|
|
33
|
+
--json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Concern statuses:
|
|
37
|
+
|
|
38
|
+
- open work → `draft` / `ready` / `active`
|
|
39
|
+
- mitigated or formally accepted → `accepted`
|
|
40
|
+
- replaced → `superseded`
|
|
41
|
+
- retired → `archived`
|
|
42
|
+
|
|
43
|
+
## Create a lesson
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
taskset document create lesson \
|
|
47
|
+
--title "Capability flags are enablement only" \
|
|
48
|
+
--severity high \
|
|
49
|
+
--related-skill .agents/skills/security/SKILL.md \
|
|
50
|
+
--pack security \
|
|
51
|
+
--related <concern-or-task-id> \
|
|
52
|
+
--json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
When `--related-skill` is present, agents should update that skill in the same change. Taskset stores the evidence and pattern; it does not auto-edit the skill.
|
|
56
|
+
|
|
57
|
+
## Audits
|
|
58
|
+
|
|
59
|
+
Prefer the `audit` kind for structured inventories:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
taskset document create audit --title "Public route inventory" --related <program-task-id> --json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Template covers scope, method, findings (`pass` | `fail` | `residual`), residual items, required follow-ups, and next due date.
|
|
66
|
+
|
|
67
|
+
## Program health and closeout
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
taskset task program <parent-id> --json
|
|
71
|
+
taskset doctor --json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Optional closeout gates in `taskset.config.ts` (default off):
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { defineConfig } from '@taskset/cli'
|
|
78
|
+
|
|
79
|
+
export default defineConfig({
|
|
80
|
+
closeout: {
|
|
81
|
+
enforceChildCompletion: true,
|
|
82
|
+
blockDoneWithOpenConcerns: true,
|
|
83
|
+
requireLessonWhenLabeled: ['requires-lesson'],
|
|
84
|
+
},
|
|
85
|
+
taxonomy: {
|
|
86
|
+
labels: ['security', 'trust-boundary', 'public-ingress', 'authz', 'concurrency'],
|
|
87
|
+
projects: ['platform', 'bot'],
|
|
88
|
+
concernClasses: ['security', 'privacy', 'authz', 'concurrency', 'ops', 'compliance'],
|
|
89
|
+
mode: 'error',
|
|
90
|
+
},
|
|
91
|
+
doctor: {
|
|
92
|
+
activeConcernRequiresOwner: true,
|
|
93
|
+
staleResearchDays: 14,
|
|
94
|
+
},
|
|
95
|
+
})
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Example label set
|
|
99
|
+
|
|
100
|
+
Reuse stable taxonomy instead of inventing labels each task:
|
|
101
|
+
|
|
102
|
+
- `trust-boundary`
|
|
103
|
+
- `public-ingress`
|
|
104
|
+
- `authz`
|
|
105
|
+
- `concurrency`
|
|
106
|
+
- `adr-NNNN` (link-style labels for named ADRs)
|
|
107
|
+
- `requires-lesson` (closeout gate trigger when configured)
|
package/docs/task-files.md
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
2
|
+
title: Understand Taskset task files
|
|
3
3
|
description: The canonical Markdown representation for Taskset work items.
|
|
4
|
+
contentType: Conceptual
|
|
5
|
+
navLabel: Task Files
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
#
|
|
8
|
+
# Understand Taskset task files
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
Tasks are the executable layer of Taskset. Use them to carry ownership, status, dependencies, and code impact for delivery work. Pair them with [stories, research, decisions, flows, runbooks, lessons, concerns, and audits](document-types.md) when the surrounding memory should stay durable. For multi-task programs, use `taskset task program <parent-id> --json`.
|
|
11
|
+
|
|
12
|
+
Task files live under `.taskset/tasks/`. YAML frontmatter owns structured metadata. The Markdown body owns durable human context for that piece of execution.
|
|
10
13
|
|
|
11
14
|
```markdown
|
|
12
15
|
---
|
|
13
|
-
id:
|
|
16
|
+
id: a1b2c3
|
|
14
17
|
title: Add task validation
|
|
15
18
|
status: doing
|
|
16
19
|
priority: high
|
|
@@ -48,9 +51,10 @@ Explain why the task exists.
|
|
|
48
51
|
## Canonical Data
|
|
49
52
|
|
|
50
53
|
Required fields are `id`, `title`, `status`, `createdAt`, and `updatedAt`.
|
|
51
|
-
Task IDs are immutable
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
Task IDs are immutable 5-6 character lowercase hex values, such as `a1b2c3`.
|
|
55
|
+
Filenames keep a separate display sequence and title slug:
|
|
56
|
+
`0000001-add-task-validation-a1b2c3.md`. Agents and commands reference the short
|
|
57
|
+
`id`, never the mutable sequence prefix.
|
|
54
58
|
|
|
55
59
|
Task files use one strict versionless metadata shape. Optional fields:
|
|
56
60
|
|
|
@@ -74,10 +78,12 @@ back to deterministic task ID ordering.
|
|
|
74
78
|
|
|
75
79
|
## Compatibility Cutover
|
|
76
80
|
|
|
77
|
-
Legacy `TS-` ULIDs remain readable so a
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
Legacy `TS-` ULIDs and sequential `0000001-title` IDs remain readable so a
|
|
82
|
+
repository can migrate safely. Run `taskset sync` or `taskset task migrate-ids`
|
|
83
|
+
to atomically assign short hex IDs, normalize filenames to
|
|
84
|
+
`{sequence}-{slug}-{id}.md`, repair duplicate sequence prefixes by `createdAt`,
|
|
85
|
+
and rewrite relationships plus repository text references. The command prints
|
|
86
|
+
the old-to-new mapping for any ID rewrites.
|
|
81
87
|
|
|
82
88
|
Task metadata is versionless. Versioned task frontmatter is invalid input and
|
|
83
89
|
fails with a schema diagnostic rather than being silently rewritten.
|
|
@@ -126,7 +132,7 @@ text, file, and directory filters. Numeric and timestamp ranges are inclusive:
|
|
|
126
132
|
taskset task list --file packages/core --impact --json
|
|
127
133
|
taskset task list --sort order
|
|
128
134
|
taskset task list --estimate-min 30 --estimate-max 120 --risk high
|
|
129
|
-
taskset task list --duplicate
|
|
135
|
+
taskset task list --duplicate a1b2c3
|
|
130
136
|
```
|
|
131
137
|
|
|
132
138
|
Repeated enum, person, project, file, and directory values use OR within the
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Control Taskset taxonomy
|
|
3
|
+
description: Allowlists for labels, projects, and concern classes with doctor enforcement.
|
|
4
|
+
contentType: How-to
|
|
5
|
+
navLabel: Taxonomy Cookbook
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Control Taskset taxonomy
|
|
9
|
+
|
|
10
|
+
Without allowlists, Taskset accepts any trimmed label, project, or concern class from the built-in concern vocabulary. Configure allowlists when discovery drift becomes expensive.
|
|
11
|
+
|
|
12
|
+
## Config
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { defineConfig } from '@taskset/cli'
|
|
16
|
+
|
|
17
|
+
export default defineConfig({
|
|
18
|
+
taxonomy: {
|
|
19
|
+
labels: [
|
|
20
|
+
'security',
|
|
21
|
+
'trust-boundary',
|
|
22
|
+
'public-ingress',
|
|
23
|
+
'authz',
|
|
24
|
+
'concurrency',
|
|
25
|
+
'requires-lesson',
|
|
26
|
+
'program',
|
|
27
|
+
],
|
|
28
|
+
projects: ['platform', 'bot', 'wallet'],
|
|
29
|
+
concernClasses: ['security', 'privacy', 'authz', 'concurrency', 'ops', 'compliance', 'money'],
|
|
30
|
+
mode: 'error', // or 'warn'
|
|
31
|
+
},
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Rules:
|
|
36
|
+
|
|
37
|
+
- Empty / omitted allowlists keep permissive behavior.
|
|
38
|
+
- `concernClasses` values must be from the canonical set: `security`, `privacy`, `money`, `authz`, `concurrency`, `ops`, `compliance`, `other`.
|
|
39
|
+
- `mode: 'error'` rejects create/update mutations with unknown values and fails doctor.
|
|
40
|
+
- `mode: 'warn'` allows mutations; doctor reports `unknown-taxonomy` warnings and still exits `0` when no errors exist.
|
|
41
|
+
|
|
42
|
+
## Example security taxonomy
|
|
43
|
+
|
|
44
|
+
| Label / class | Use for |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `trust-boundary` | Cross-plane trust assumptions |
|
|
47
|
+
| `public-ingress` | Unauthenticated or internet-facing entry |
|
|
48
|
+
| `authz` | Authorization grants and checks |
|
|
49
|
+
| `concurrency` | Race / idempotency hazards |
|
|
50
|
+
| `adr-NNNN` | Work tied to a named ADR |
|
|
51
|
+
| `requires-lesson` | Closeout must produce a related `lesson` when closeout config enables it |
|
|
52
|
+
|
|
53
|
+
## Doctor
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
taskset doctor --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Look for `unknown-taxonomy`, `missing-template-heading`, `missing-reference`, `closeout-gap`, `missing-owner`, and `stale-research` diagnostics.
|
package/package.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"name": "@taskset/cli",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "
|
|
6
|
-
"description": "
|
|
5
|
+
"version": "6.1.0",
|
|
6
|
+
"description": "CLI for Taskset: plan, research, decide, operate, and track repository work as Markdown.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "junkieshuffle",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"zod": "4.6.5",
|
|
49
|
-
"@taskset/
|
|
50
|
-
"@taskset/
|
|
49
|
+
"@taskset/core": "6.1.0",
|
|
50
|
+
"@taskset/contracts": "6.1.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/node": "^26.6.3",
|