@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.
Files changed (63) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +23 -20
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +538 -71
  5. package/docs/_meta.ts +9 -0
  6. package/docs/agents/_meta.ts +5 -0
  7. package/docs/agents/commands.md +70 -0
  8. package/docs/agents/index.md +99 -0
  9. package/docs/agents/llms.txt +28 -0
  10. package/docs/agents/workflows.md +50 -0
  11. package/docs/cli-reference.md +461 -0
  12. package/docs/configuration.md +63 -0
  13. package/docs/document-types.md +103 -0
  14. package/docs/getting-started.md +106 -0
  15. package/docs/index.md +43 -0
  16. package/docs/maintainers/_meta.ts +7 -0
  17. package/docs/maintainers/architecture/_meta.ts +5 -0
  18. package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +44 -0
  19. package/docs/maintainers/architecture/decisions/0002-code-architecture.md +31 -0
  20. package/docs/maintainers/architecture/decisions/0003-snapshot-policy.md +31 -0
  21. package/docs/maintainers/architecture/decisions/_meta.ts +5 -0
  22. package/docs/maintainers/architecture/overview.md +111 -0
  23. package/docs/maintainers/architecture/synchronization.md +56 -0
  24. package/docs/maintainers/development/_meta.ts +6 -0
  25. package/docs/maintainers/development/contributing.md +58 -0
  26. package/docs/maintainers/development/documentation.md +52 -0
  27. package/docs/maintainers/development/engineering.md +59 -0
  28. package/docs/maintainers/development/testing.md +89 -0
  29. package/docs/maintainers/index.md +20 -0
  30. package/docs/maintainers/product/_meta.ts +3 -0
  31. package/docs/maintainers/product/vision.md +68 -0
  32. package/docs/maintainers/technology.md +55 -0
  33. package/docs/task-files.md +180 -0
  34. package/package.json +8 -6
  35. package/skills/taskset/SKILL.md +240 -0
  36. package/skills/taskset/references/changesets-examples.md +97 -0
  37. package/skills/taskset/references/document-modeling-examples.md +63 -0
  38. package/skills/taskset/references/monorepo-task-modeling.md +125 -0
  39. package/skills/taskset/references/task-modeling-examples.md +249 -0
  40. package/skills/taskset-implement/SKILL.md +240 -0
  41. package/skills/taskset-implement/agents/openai.yaml +4 -0
  42. package/skills/taskset-implement/references/architecture/client-and-server.md +69 -0
  43. package/skills/taskset-implement/references/architecture/documentation-and-generated.md +72 -0
  44. package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +108 -0
  45. package/skills/taskset-implement/references/architecture/product-and-source.md +81 -0
  46. package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +45 -0
  47. package/skills/taskset-implement/references/architecture.md +34 -0
  48. package/skills/taskset-implement/references/conventions/backend-and-tooling.md +33 -0
  49. package/skills/taskset-implement/references/conventions/design.md +38 -0
  50. package/skills/taskset-implement/references/conventions/interfaces-and-ui.md +50 -0
  51. package/skills/taskset-implement/references/conventions/naming-and-packages.md +64 -0
  52. package/skills/taskset-implement/references/conventions/task-files.md +94 -0
  53. package/skills/taskset-implement/references/conventions/tests-and-docs.md +55 -0
  54. package/skills/taskset-implement/references/conventions/typescript-and-exports.md +41 -0
  55. package/skills/taskset-implement/references/conventions.md +40 -0
  56. package/skills/taskset-implement/references/release.md +135 -0
  57. package/skills/taskset-implement/references/workflows/dependencies-and-docs-site.md +54 -0
  58. package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +109 -0
  59. package/skills/taskset-implement/references/workflows/persisted-data-and-git.md +30 -0
  60. package/skills/taskset-implement/references/workflows/validation.md +34 -0
  61. package/skills/taskset-implement/references/workflows/vitest-and-test-strategy.md +82 -0
  62. package/skills/taskset-implement/references/workflows.md +33 -0
  63. package/src/cli.ts +640 -87
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Start a Taskset repository
3
+ description: Install the CLI, initialize `.taskset/`, and capture your first plan, decision, and task in any language repository.
4
+ contentType: Tutorial
5
+ navLabel: Getting Started
6
+ ---
7
+
8
+ # Start a Taskset repository
9
+
10
+ This guide initializes Taskset in a repository and walks one delivery loop: capture intent, record research or a decision, then track the work. You do not need a JavaScript app, and you do not need `taskset.config.ts`.
11
+
12
+ ## Requirements
13
+
14
+ - Node.js 24 or newer to run the published CLI
15
+ - Any Git repository or project root you can write to
16
+
17
+ ## Install the CLI
18
+
19
+ Pick one install style:
20
+
21
+ ```bash
22
+ npx @taskset/cli@latest --help
23
+ ```
24
+
25
+ ```bash
26
+ pnpm add --save-dev @taskset/cli
27
+ ```
28
+
29
+ ```bash
30
+ npm install --global @taskset/cli
31
+ ```
32
+
33
+ The package exposes the `taskset` executable. Package runners work in repositories that never declare a Node dependency.
34
+
35
+ ## Initialize the repository
36
+
37
+ Run init from the repository root, or from a nested directory when Git or workspace markers identify the root:
38
+
39
+ ```bash
40
+ taskset init
41
+ ```
42
+
43
+ This creates:
44
+
45
+ ```text
46
+ .taskset/
47
+ ├── .gitignore
48
+ ├── tasks/
49
+ ├── stories/
50
+ ├── flows/
51
+ ├── decisions/
52
+ ├── research/
53
+ └── runbooks/
54
+ ```
55
+
56
+ Add an optional config file only when you need custom task defaults:
57
+
58
+ ```bash
59
+ taskset init --config
60
+ ```
61
+
62
+ The nested ignore file excludes `.taskset/cache/`, per-entity `.generated/` directories, and `.taskset/snapshots/`. Snapshots are non-authoritative safety checkpoints. Markdown under `.taskset/` remains canonical.
63
+
64
+ ## Capture intent, then track delivery
65
+
66
+ Start with the durable context, then create the task that implements it:
67
+
68
+ ```bash
69
+ taskset document create story --title "Member signs in via SSO"
70
+ taskset document create research --title "Compare SSO providers" --related your_story_id_here
71
+ taskset document create adr --title "Use OIDC for member SSO" --related your_research_id_here
72
+ taskset task create --title "Add SSO callback handler" --related your_decision_id_here --file packages/api/src/auth.ts
73
+ taskset task list
74
+ taskset document list --json
75
+ ```
76
+
77
+ You can read every file directly in the editor without the CLI. Cite entities by short hex `id`, never by filename sequence prefixes.
78
+
79
+ ## Query and validate the graph
80
+
81
+ ```bash
82
+ taskset task list --status doing --label core --json
83
+ taskset document list research --search "SSO" --json
84
+ taskset task list --file packages/api --impact --json
85
+ taskset doctor
86
+ ```
87
+
88
+ File and directory filters use repository-relative containment. With `--impact`, list output groups direct matches and work that transitively depends on them. `doctor` reports readable format and graph failures in one non-mutating pass.
89
+
90
+ ## Finish or remove work
91
+
92
+ ```bash
93
+ taskset task status your_task_id_here done
94
+ taskset document status your_research_id_here accepted --type research
95
+ taskset task delete your_task_id_here
96
+ ```
97
+
98
+ Completed and canceled tasks are terminal. Deletion fails while another task depends on the target. Use `--remove-dependencies` only when Taskset should remove those inbound references and the task together.
99
+
100
+ ## Next
101
+
102
+ - [Choose a document type](document-types.md)
103
+ - [Understand task files](task-files.md)
104
+ - [Configure defaults](configuration.md)
105
+ - [Use the complete CLI reference](cli-reference.md)
106
+ - [Follow the agent guide](agents/index.md)
package/docs/index.md ADDED
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: Keep the whole delivery story beside the code
3
+ description: Taskset stores plans, research, decisions, runbooks, and tasks as Markdown in your repository for agents and humans.
4
+ contentType: Landing
5
+ navLabel: Overview
6
+ ---
7
+
8
+ # Keep the whole delivery story beside the code
9
+
10
+ Taskset is a local-first delivery workspace. You keep stories, research, decisions, flows, runbooks, and executable tasks as Markdown under `.taskset/`, so agents and humans share one reviewable source of truth.
11
+
12
+ Install the CLI as `@taskset/cli` from npm. Run it with `npx`, `pnpm dlx`, `yarn dlx`, `bunx`, a project dependency, or a global install.
13
+
14
+ ## What belongs in Taskset
15
+
16
+ - **Plan**: stories and flows that define outcomes and journeys
17
+ - **Learn**: research that captures evidence and recommendations
18
+ - **Decide**: decisions and ADRs that lock lasting choices
19
+ - **Operate**: runbooks that make recovery safe to repeat
20
+ - **Deliver**: tasks that carry ownership, status, dependencies, and code impact
21
+
22
+ Documents preserve memory. Tasks move work. Relationships keep the graph honest.
23
+
24
+ ## What you get
25
+
26
+ - Project knowledge stays in the repository it describes
27
+ - Markdown remains readable without Taskset installed
28
+ - Agents and humans inspect the same plans, decisions, and work
29
+ - CLI, skills, and future interfaces share one domain model
30
+ - Monorepo paths and code relationships are first-class
31
+
32
+ ## What the CLI covers
33
+
34
+ The CLI initializes repositories, manages optional configuration, creates and queries tasks and documents, runs diagnostics, builds generated views, snapshots state, and syncs the tree after upgrades or repairs.
35
+
36
+ ## Choose your path
37
+
38
+ - [Start a Taskset repository](getting-started.md)
39
+ - [Choose a document type](document-types.md)
40
+ - [Understand task files](task-files.md)
41
+ - [Configure defaults when you need them](configuration.md)
42
+ - [Look up every CLI command](cli-reference.md)
43
+ - [Read agent workflows and contracts](agents/index.md)
@@ -0,0 +1,7 @@
1
+ export default {
2
+ index: 'Overview',
3
+ technology: 'Technology',
4
+ product: 'Product',
5
+ architecture: 'Architecture',
6
+ development: 'Development',
7
+ }
@@ -0,0 +1,5 @@
1
+ export default {
2
+ overview: 'Overview',
3
+ synchronization: 'Synchronization',
4
+ decisions: 'Decisions',
5
+ }
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: "ADR 0001: Documentation Platform"
3
+ description: Render canonical documentation through the Taskset website for humans, agents, and maintainers.
4
+ ---
5
+
6
+ # ADR 0001: Documentation Platform
7
+
8
+ - Status: Accepted
9
+ - Date: 2026-06-12
10
+ - Updated: 2026-10-03
11
+
12
+ ## Context
13
+
14
+ Taskset needs one documentation source that is readable on Git hosts and can also power a documentation website. Human usage guidance, agent operating contracts, and repository maintenance material have different audiences and should remain visibly separated.
15
+
16
+ ## Decision
17
+
18
+ - Keep canonical documentation in the root `docs/` directory
19
+ - Keep human usage pages at the top level of `docs/`
20
+ - Keep agent operating guidance under `docs/agents/`, with root `AGENTS.md` and packaged `skills/` as offline entrypoints
21
+ - Keep contributor, product, architecture, ADR, testing, and technology material under `docs/maintainers/`
22
+ - Publish an agent discovery index at `apps/www/public/llms.txt` (served as `/llms.txt`); copy it into the packaged CLI docs for offline use
23
+ - Use plain Markdown by default and MDX only for interactive pages
24
+ - Build `apps/www` with Next.js App Router, Nextra, and the stock Nextra docs and blog themes
25
+ - Expose root `docs/` as the app’s Nextra `content` directory through a repository-relative symlink
26
+ - Render top-level usage docs (including `docs/agents/`) and `docs/maintainers/` through separate route layouts and page maps
27
+ - Keep chronological release and project posts under `apps/www/posts/`
28
+ - Follow the [Vercel writing guidelines](https://github.com/vercel-labs/writing-guidelines) for public prose voice and structure
29
+
30
+ ## Why
31
+
32
+ This keeps one Markdown source of truth while matching how agent-first tools expose denser contracts beside human onboarding. Maintainer material stays out of the primary product navigation. Agent pages and `llms.txt` give coding agents a short index without inventing a second product truth.
33
+
34
+ ## Implementation Contract
35
+
36
+ `apps/www/content` points to `../../docs`. The usage docs catch-all route loads top-level content, including `docs/agents/`, and excludes `docs/maintainers/` from its page map. The `/maintainers` route loads the same content directory with a maintainer-rooted page map. Root `AGENTS.md` is repository-local agent guidance and may be linked from docs, but docs remain canonical for published pages. Do not place non-Markdown discovery files such as `llms.txt` under `docs/`; Nextra imports the content tree as modules and only Markdown/MDX pages belong there.
37
+
38
+ ## Consequences
39
+
40
+ - Documentation changes are reviewable without building the site
41
+ - Blog posts are reviewable as app-local Markdown without a CMS
42
+ - New agent pages belong under `docs/agents/` and appear in usage navigation
43
+ - Maintainer documentation remains in its own `/maintainers` navigation section
44
+ - Broken links and invalid frontmatter should fail CI
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: "ADR 0002: Client and Server Code Architecture"
3
+ description: Use FBA for interfaces and a DDD-lite modular monolith for core and server code.
4
+ ---
5
+
6
+ # ADR 0002: Client and Server Code Architecture
7
+
8
+ - Status: Accepted
9
+ - Date: 2026-06-12
10
+
11
+ ## Context
12
+
13
+ Feature-based architecture fits user-facing surfaces, but applying it alone to
14
+ domain-heavy storage and workflow code can mix business rules with adapters.
15
+ Full enterprise DDD would add unnecessary ceremony to an early product.
16
+
17
+ ## Decision
18
+
19
+ - Use FBA for CLI, TUI, MCP, extension, Kanban, Office, and website surfaces.
20
+ - Use a DDD-lite modular monolith for `@taskset/core` and any future server.
21
+ - Organize core by domain module first.
22
+ - Within a module, use `domain`, `application`, and `infrastructure` only when
23
+ those boundaries contain meaningful code.
24
+ - Keep one deployable unit and direct in-process module calls.
25
+
26
+ ## Consequences
27
+
28
+ - Domain rules remain reusable across every interface.
29
+ - Filesystem and Git details stay replaceable and testable.
30
+ - Teams avoid premature services, queues, and distributed state.
31
+ - Small modules are allowed to stay flat until complexity justifies layers.
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: "ADR 0003: Snapshot Policy"
3
+ description: Use Git for history and reserve Taskset snapshots for explicit safety checkpoints.
4
+ ---
5
+
6
+ # ADR 0003: Snapshot Policy
7
+
8
+ - Status: Accepted
9
+ - Date: 2026-06-12
10
+
11
+ ## Context
12
+
13
+ Taskset needs safe mutation and recovery, but Git already records durable
14
+ project history. A second automatic history system would duplicate state and
15
+ confuse authority.
16
+
17
+ ## Decision
18
+
19
+ - Git remains the normal task history and rollback system.
20
+ - Prefer dry runs, atomic writes, validation, diffs, and Git-aware warnings.
21
+ - The explicit snapshot subsystem protects uncommitted state before schema
22
+ migrations and supports user-invoked safety checkpoints.
23
+ - Snapshots are immutable, non-authoritative, conflict-aware on restore, and
24
+ removable without changing current project state.
25
+ - Migration and restore preview by default. Migration snapshots before apply;
26
+ restore requires an explicit `--apply`.
27
+
28
+ ## Consequences
29
+
30
+ Snapshots add a bounded recovery mechanism without becoming hidden history.
31
+ They live under `.taskset/snapshots/`, remain disposable, and never replace Git.
@@ -0,0 +1,5 @@
1
+ export default {
2
+ '0001-documentation-platform': 'ADR 0001: Documentation Platform',
3
+ '0002-code-architecture': 'ADR 0002: Code Architecture',
4
+ '0003-snapshot-policy': 'ADR 0003: Snapshot Policy',
5
+ }
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Architecture Overview
3
+ description: Maintainer-facing package boundaries, runtime flow, and code organization.
4
+ ---
5
+
6
+ # Architecture Overview
7
+
8
+ Taskset is a local-first modular system built around canonical Markdown files.
9
+
10
+ ```text
11
+ CLI / TUI / MCP / Extension / Kanban / Office
12
+ |
13
+ @taskset/core
14
+ |
15
+ parse -> validate -> operate -> serialize
16
+ |
17
+ .taskset/ Markdown files
18
+ |
19
+ disposable indexes and views
20
+ ```
21
+
22
+ ## Package Direction
23
+
24
+ ```text
25
+ contracts utils
26
+ \ /
27
+ core
28
+ |
29
+ cli tui mcp extension kanban office
30
+ ```
31
+
32
+ - `@taskset/contracts` owns shared runtime schemas and TypeScript contracts.
33
+ - `@taskset/utils` owns domain-light reusable primitives.
34
+ - `@taskset/core` owns domain behavior and persistence orchestration.
35
+ - Interface packages own input, rendering, transport, and interaction.
36
+ - Client packages do not become domain APIs for each other.
37
+
38
+ ## Client Organization
39
+
40
+ UI and interaction surfaces use feature-based architecture. Each feature
41
+ colocates its components, state, adapters, fixtures, and tests. Shared code is
42
+ promoted only when several features genuinely depend on it.
43
+
44
+ ## Core and Server Organization
45
+
46
+ Core uses a DDD-lite modular monolith:
47
+
48
+ ```text
49
+ src/
50
+ ├── tasks/
51
+ │ ├── domain/
52
+ │ ├── application/
53
+ │ └── infrastructure/
54
+ ├── diagnostics/
55
+ ├── graph/
56
+ ├── generated/
57
+ ├── indexing/
58
+ ├── projects/
59
+ ├── search/
60
+ ├── snapshots/
61
+ ├── sync/
62
+ └── repository/
63
+ ```
64
+
65
+ This is not ceremonial DDD:
66
+
67
+ - organize by domain module first
68
+ - keep pure invariants in `domain`
69
+ - coordinate use cases in `application`
70
+ - isolate filesystem, Git, and framework code in `infrastructure`
71
+ - omit layers that have no meaningful behavior
72
+ - keep one process and deployable unit
73
+
74
+ If hosted collaboration requires a server, `apps/server` becomes a thin
75
+ composition root over core. It owns transport, authentication, authorization,
76
+ repository checkout, concurrency, and process lifecycle, not duplicate domain
77
+ rules. Prefer TypeScript and add NestJS only when the service boundary benefits
78
+ from its module and transport model. Use Rust for clearly bounded native or
79
+ systems-level components.
80
+
81
+ Relational adapters prefer MariaDB for smaller applications and PostgreSQL for
82
+ larger or more advanced workloads. No database becomes canonical Taskset state.
83
+
84
+ ## Persistence Projections
85
+
86
+ Canonical tasks live in `.taskset/tasks/` as strict versionless Markdown
87
+ entities. Versioned task frontmatter is rejected instead of being silently
88
+ rewritten.
89
+
90
+ Each entity folder owns disposable `.generated/` metadata indexes with
91
+ date-only grouping and readable filenames (for example
92
+ `.taskset/tasks/.generated/`). `.taskset/cache/` and generated views are
93
+ disposable. Legacy `.taskset/generated/` is removed by `generate` / `sync`.
94
+ `.taskset/snapshots/` contains immutable safety checkpoints and is not normal
95
+ history or a second source of truth.
96
+
97
+ ## Documentation
98
+
99
+ The root `docs/` tree contains canonical user guidance and maintainer guidance.
100
+ User pages stay at the top level. Maintainer material lives under
101
+ `docs/maintainers/`. `apps/www` renders usage docs and maintainer docs from the
102
+ same content symlink but exposes them through separate route layouts and
103
+ navigation. See the
104
+ [documentation platform decision](decisions/0001-documentation-platform.md).
105
+
106
+ ## Decisions
107
+
108
+ - [Documentation platform](decisions/0001-documentation-platform.md)
109
+ - [Client FBA and modular core/server](decisions/0002-code-architecture.md)
110
+ - [Snapshot policy](decisions/0003-snapshot-policy.md)
111
+ - [Synchronization](synchronization.md)
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: Synchronization
3
+ description: Provider-neutral ownership, conflict, deletion, and apply rules for Taskset adapters.
4
+ ---
5
+
6
+ # Synchronization
7
+
8
+ Synchronization is an explicit adapter workflow around canonical `.taskset/`
9
+ files. A provider record, identity mapping, baseline, revision, or cache never
10
+ becomes an alternate Taskset task store.
11
+
12
+ ## Core Policy
13
+
14
+ `@taskset/contracts` defines pull, push, and bidirectional data, plan, conflict,
15
+ checkpoint, and result types. `@taskset/core` owns:
16
+
17
+ - deterministic plan ordering and dry runs
18
+ - local and external stale-read fingerprints
19
+ - field-level three-way comparison against the last synchronized baseline
20
+ - deletion policy and conflict detection
21
+ - canonical task validation and relationship integrity
22
+ - failure-safe local apply through the shared filesystem transaction boundary
23
+
24
+ Plans report creates, updates, deletions, unchanged records, and unresolved
25
+ conflicts before mutation. Apply rejects any plan with conflicts and re-reads
26
+ both sides to reject stale input.
27
+
28
+ ## Adapter Ownership
29
+
30
+ Provider adapters own authentication, pagination, rate limits, provider field
31
+ mapping, remote revisions, and atomic application of external changes and
32
+ checkpoints. They return explicit external identities and optional canonical
33
+ task IDs. They must not write `.taskset/` files directly.
34
+
35
+ Adapters apply their changes before core mutates canonical files. An adapter
36
+ failure therefore leaves canonical Taskset state unchanged. Adapters should
37
+ make their own batch operation atomic or expose the provider's partial-failure
38
+ details; core cannot claim to roll back a remote service.
39
+
40
+ ## Identity And Baselines
41
+
42
+ Identity mappings are adapter records, not canonical task metadata. A
43
+ remote-only record receives a deterministic Taskset ID in its synchronization
44
+ plan, and the adapter checkpoint records that mapping after apply.
45
+
46
+ Each synchronized record may carry a baseline containing the prior shared task
47
+ data and stale-read revisions. Bidirectional synchronization merges
48
+ non-overlapping field changes. Different edits to the same field, or deletion
49
+ combined with an unsynchronized edit, produce conflicts.
50
+
51
+ ## Deletion
52
+
53
+ The default deletion behavior is `preserve`. With `delete`, deletion propagates
54
+ only when the surviving side has not changed from the baseline. Otherwise the
55
+ plan reports a record-level conflict. Local deletion also remains subject to
56
+ the task graph's inbound-dependency policy.
@@ -0,0 +1,6 @@
1
+ export default {
2
+ contributing: 'Contributing',
3
+ engineering: 'Engineering',
4
+ testing: 'Testing',
5
+ documentation: 'Documentation',
6
+ }
@@ -0,0 +1,58 @@
1
+ ---
2
+ title: Contributing
3
+ description: Repository setup, Taskset dogfooding, pull requests, and completion rules.
4
+ ---
5
+
6
+ # Contributing
7
+
8
+ Keep the core file format and workflow coherent when you change interfaces, packages, or docs.
9
+
10
+ ## Start Here
11
+
12
+ Read `AGENTS.md`, `skills/taskset-implement/SKILL.md`, the product vision, the
13
+ architecture overview, and the technology preferences before changing the
14
+ repository. Discuss persisted formats, package boundaries, public commands,
15
+ synchronization, or snapshots before implementation.
16
+
17
+ ## Setup
18
+
19
+ ```bash
20
+ pnpm install --frozen-lockfile
21
+ pnpm check
22
+ pnpm taskset task list
23
+ ```
24
+
25
+ Use the Node and pnpm versions declared by `.nvmrc` and `packageManager`.
26
+
27
+ ## Develop Taskset With Taskset
28
+
29
+ The repository dogfoods Taskset. Use the root `.taskset/` data, optional `taskset.config.ts`, the CLI, and
30
+ canonical `.taskset/tasks/` files to plan and inspect work. When the CLI
31
+ supports the required operation, update the task through the CLI instead of
32
+ editing generated or derived state.
33
+
34
+ ## Engineering Rules
35
+
36
+ - Keep `.taskset/` Markdown as the persistent source of truth.
37
+ - Put shared domain behavior in `@taskset/core`.
38
+ - Keep runtime schemas and shared data contracts in `@taskset/contracts`.
39
+ - Keep core and future server code as a pragmatic modular monolith.
40
+ - Use feature-based architecture in UI and interaction surfaces.
41
+ - Add dependencies to the package that imports them.
42
+ - Preserve deterministic serialization and human-authored Markdown.
43
+ - Prefer test-first work for domain rules, parsers, compatibility changes, transitions,
44
+ and bug fixes.
45
+
46
+ ## Finish The Work
47
+
48
+ Before declaring a workspace task complete:
49
+
50
+ 1. Run the narrowest relevant test, then the broader checks required by risk.
51
+ 2. Update the canonical Taskset task through the CLI when supported.
52
+ 3. Update affected user docs, maintainer docs, tests, and
53
+ `skills/taskset-implement/`.
54
+ 4. Run `pnpm check` and `git diff --check`.
55
+ 5. Report compatibility consequences, checks, and remaining limitations.
56
+
57
+ Add a Changeset only when release configuration is active and a versioned
58
+ contract changes.
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: Documentation
3
+ description: How Markdown becomes the Taskset documentation website for humans, agents, and maintainers.
4
+ ---
5
+
6
+ # Documentation
7
+
8
+ The root `docs/` directory is canonical. Split audiences deliberately:
9
+
10
+ - Humans: top-level usage pages
11
+ - Agents: `docs/agents/`, root `AGENTS.md`, and packaged `skills/`
12
+ - Maintainers: `docs/maintainers/`
13
+
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`.
19
+
20
+ Why:
21
+
22
+ - `apps/www` owns the public documentation renderer
23
+ - the repository already has a Next.js TypeScript preset
24
+ - Nextra supplies Markdown routing, documentation navigation, blog layout, and search
25
+ - Markdown remains the source rather than a CMS database
26
+
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]`
41
+
42
+ ## Integration
43
+
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.
51
+
52
+ See [ADR 0001](../architecture/decisions/0001-documentation-platform.md).
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: Engineering
3
+ description: Design principles and pragmatic package and tooling decisions for Taskset.
4
+ ---
5
+
6
+ # Engineering
7
+
8
+ Taskset favors minimal designs with explicit ownership and testable boundaries.
9
+ Apply SOLID, separation of concerns, encapsulation, high cohesion, low coupling,
10
+ clean architecture, pragmatic DDD, and feature-based architecture as decision
11
+ tools rather than reasons to add layers.
12
+
13
+ ## Objects And Functions
14
+
15
+ Use classes when they improve a stateful domain model, lifecycle, polymorphic
16
+ adapter, or dependency-injected boundary. Keep stateless parsers, serializers,
17
+ validators, and transformations as focused functions. Converting
18
+ `frontmatter`, repository operations, or the current CLI to classes without a
19
+ state or substitution need would add ceremony rather than clarity.
20
+
21
+ Use in-process domain events when several independent reactions need
22
+ decoupling. Do not introduce brokers or distributed event infrastructure
23
+ without a concrete product requirement.
24
+
25
+ ## Package Boundaries
26
+
27
+ `@taskset/contracts` is a useful boundary because clients and core share runtime
28
+ schemas and TypeScript contracts without depending on filesystem behavior. The
29
+ name is more accurate than `@taskset/types` because the package emits runtime
30
+ Zod schemas.
31
+
32
+ Do not add `@taskset/validations`. Static schemas belong in contracts; domain
33
+ validation policy and migrations belong in core. A second package would split
34
+ one responsibility and make imports harder to understand.
35
+
36
+ Node libraries and the CLI build to `dist/`. Their runtime `import` exports
37
+ point to JavaScript artifacts so builds and future packaging are actually
38
+ verified. Source exports remain available for types and development tooling.
39
+
40
+ ## Tool Ownership
41
+
42
+ - Keep Next.js and React compiler dependencies in `apps/www`, the only current
43
+ Next.js owner.
44
+ - Keep reusable TypeScript presets in `@taskset/configs`; move framework runtime
45
+ configuration there only after multiple consumers need it.
46
+ - Use TypeScript directly for Node packages and the CLI. Vitest already uses
47
+ Vite; add a Vite build only for a browser package or a demonstrated bundling
48
+ requirement.
49
+ - Keep one repository standards skill while usage and maintenance rules share
50
+ product contracts. Keep its references split by topic so agents can load only
51
+ the relevant guidance. Split a separate user skill only when it has a distinct
52
+ audience, installation path, and lifecycle.
53
+
54
+ ## Task Semantics
55
+
56
+ Priority is Taskset's importance signal, and `urgent` is its highest value.
57
+ `order` is the optional user-controlled sequence signal. A separate urgency
58
+ scale is intentionally omitted because overlapping importance scales increase
59
+ ambiguity and synchronization work.