@taskset/cli 4.0.0 → 5.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 (58) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +6 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +510 -63
  5. package/docs/_meta.ts +8 -0
  6. package/docs/cli-reference.md +461 -0
  7. package/docs/configuration.md +61 -0
  8. package/docs/document-types.md +100 -0
  9. package/docs/getting-started.md +99 -0
  10. package/docs/index.md +37 -0
  11. package/docs/maintainers/_meta.ts +7 -0
  12. package/docs/maintainers/architecture/_meta.ts +5 -0
  13. package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +70 -0
  14. package/docs/maintainers/architecture/decisions/0002-code-architecture.md +31 -0
  15. package/docs/maintainers/architecture/decisions/0003-snapshot-policy.md +31 -0
  16. package/docs/maintainers/architecture/decisions/_meta.ts +5 -0
  17. package/docs/maintainers/architecture/overview.md +111 -0
  18. package/docs/maintainers/architecture/synchronization.md +56 -0
  19. package/docs/maintainers/development/_meta.ts +6 -0
  20. package/docs/maintainers/development/contributing.md +59 -0
  21. package/docs/maintainers/development/documentation.md +69 -0
  22. package/docs/maintainers/development/engineering.md +59 -0
  23. package/docs/maintainers/development/testing.md +89 -0
  24. package/docs/maintainers/index.md +22 -0
  25. package/docs/maintainers/product/_meta.ts +3 -0
  26. package/docs/maintainers/product/vision.md +76 -0
  27. package/docs/maintainers/technology.md +55 -0
  28. package/docs/task-files.md +174 -0
  29. package/package.json +7 -5
  30. package/skills/taskset/SKILL.md +227 -0
  31. package/skills/taskset/references/changesets-examples.md +97 -0
  32. package/skills/taskset/references/document-modeling-examples.md +63 -0
  33. package/skills/taskset/references/monorepo-task-modeling.md +125 -0
  34. package/skills/taskset/references/task-modeling-examples.md +249 -0
  35. package/skills/taskset-implement/SKILL.md +234 -0
  36. package/skills/taskset-implement/agents/openai.yaml +4 -0
  37. package/skills/taskset-implement/references/architecture/client-and-server.md +69 -0
  38. package/skills/taskset-implement/references/architecture/documentation-and-generated.md +70 -0
  39. package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +107 -0
  40. package/skills/taskset-implement/references/architecture/product-and-source.md +80 -0
  41. package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +45 -0
  42. package/skills/taskset-implement/references/architecture.md +34 -0
  43. package/skills/taskset-implement/references/conventions/backend-and-tooling.md +33 -0
  44. package/skills/taskset-implement/references/conventions/design.md +38 -0
  45. package/skills/taskset-implement/references/conventions/interfaces-and-ui.md +50 -0
  46. package/skills/taskset-implement/references/conventions/naming-and-packages.md +64 -0
  47. package/skills/taskset-implement/references/conventions/task-files.md +89 -0
  48. package/skills/taskset-implement/references/conventions/tests-and-docs.md +55 -0
  49. package/skills/taskset-implement/references/conventions/typescript-and-exports.md +41 -0
  50. package/skills/taskset-implement/references/conventions.md +40 -0
  51. package/skills/taskset-implement/references/release.md +135 -0
  52. package/skills/taskset-implement/references/workflows/dependencies-and-docs-site.md +54 -0
  53. package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +108 -0
  54. package/skills/taskset-implement/references/workflows/persisted-data-and-git.md +30 -0
  55. package/skills/taskset-implement/references/workflows/validation.md +34 -0
  56. package/skills/taskset-implement/references/workflows/vitest-and-test-strategy.md +82 -0
  57. package/skills/taskset-implement/references/workflows.md +33 -0
  58. package/src/cli.ts +611 -77
@@ -0,0 +1,99 @@
1
+ ---
2
+ title: Getting Started
3
+ description: Initialize Taskset in a project and create the first repository task.
4
+ ---
5
+
6
+ # Getting Started
7
+
8
+ Taskset keeps project work in human-readable Markdown beside the code. The
9
+ current pre-alpha release is intended for local repository use.
10
+
11
+ ## Requirements
12
+
13
+ - Node.js 24 or newer
14
+ - pnpm 11 or newer
15
+
16
+ ## Install
17
+
18
+ Install the published package as a development dependency in the project that
19
+ will own the tasks:
20
+
21
+ ```bash
22
+ pnpm add --save-dev @taskset/cli
23
+ ```
24
+
25
+ The package exposes the `taskset` executable.
26
+
27
+ ## Initialize
28
+
29
+ Run Taskset from the repository root:
30
+
31
+ ```bash
32
+ pnpm taskset init
33
+ ```
34
+
35
+ This creates:
36
+
37
+ ```text
38
+ taskset.config.ts
39
+ .taskset/
40
+ ├── .gitignore
41
+ └── tasks/
42
+ ```
43
+
44
+ The config controls validated defaults. Task Markdown under `.taskset/tasks/`
45
+ remains the canonical project state. The nested ignore file excludes
46
+ `.taskset/cache/`, per-entity `.generated/` directories, and `.taskset/snapshots/`.
47
+ Snapshots are non-authoritative safety checkpoints; tasks remain canonical.
48
+
49
+ ## Create And Inspect Work
50
+
51
+ ```bash
52
+ pnpm taskset task create --title "Add repository validation"
53
+ pnpm taskset task list
54
+ pnpm taskset task show <task-id>
55
+ pnpm taskset task update <task-id> --status doing
56
+ ```
57
+
58
+ Task files can also be read and reviewed directly without Taskset installed.
59
+
60
+ ## Query And Validate Work
61
+
62
+ ```bash
63
+ pnpm taskset task list --status doing --label core --json
64
+ pnpm taskset task list --file packages/core --impact --json
65
+ pnpm taskset doctor
66
+ ```
67
+
68
+ File and directory filters use normalized repository-relative containment
69
+ matching. With `--impact`, list output groups direct matches and tasks that
70
+ transitively depend on them. Other filters select the direct set before graph
71
+ expansion. `doctor` reports all readable format and graph failures in one
72
+ non-mutating pass.
73
+
74
+ ## Generated Views And Migration
75
+
76
+ ```bash
77
+ pnpm taskset generate
78
+ pnpm taskset snapshot create
79
+ pnpm taskset snapshot list
80
+ ```
81
+
82
+ Snapshot restore previews by default unless `--apply` is present.
83
+
84
+ ## Complete Or Remove Work
85
+
86
+ ```bash
87
+ pnpm taskset task status <task-id> done
88
+ pnpm taskset task delete <task-id>
89
+ ```
90
+
91
+ Completed and canceled tasks are terminal. Deletion fails while another task
92
+ depends on the target. Use `--remove-dependencies` only when Taskset should
93
+ remove those inbound references and the task together.
94
+
95
+ ## Next
96
+
97
+ - [Configure task defaults](configuration.md)
98
+ - [Use the complete CLI reference](cli-reference.md)
99
+ - [Understand task files](task-files.md)
package/docs/index.md ADDED
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: Taskset
3
+ description: Offline, inline, AI-friendly project awareness stored beside the code.
4
+ ---
5
+
6
+ # Taskset
7
+
8
+ Taskset is an offline, inline, AI-friendly, human-readable task manager designed
9
+ to accelerate software delivery and give development teams immediate awareness
10
+ of the work surrounding their code.
11
+
12
+ Tasks and project knowledge live inside the repository as Markdown. Git supplies
13
+ history, branches, review, and collaboration. Taskset supplies a consistent
14
+ domain model and interfaces over those files.
15
+
16
+ Install the command-line package from npm as `@taskset/cli`.
17
+
18
+ ## Core Promise
19
+
20
+ - Work remains readable without Taskset installed.
21
+ - Developers can operate locally without a mandatory service.
22
+ - Humans and AI agents inspect the same project context.
23
+ - CLI, TUI, MCP, editor, Kanban, and reporting views share one source of truth.
24
+ - Monorepo projects and code relationships are first-class.
25
+
26
+ ## Current Status
27
+
28
+ Taskset is pre-alpha. The CLI supports repository initialization, configuration
29
+ inspection, validated task CRUD and lifecycle changes, repository diagnostics,
30
+ generated views, snapshots, metadata queries, and file-impact analysis.
31
+
32
+ ## Read Next
33
+
34
+ - [Getting started](getting-started.md)
35
+ - [Configuration](configuration.md)
36
+ - [CLI reference](cli-reference.md)
37
+ - [Task files](task-files.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,70 @@
1
+ ---
2
+ title: "ADR 0001: Documentation Platform"
3
+ description: Render canonical user documentation through the Taskset website.
4
+ ---
5
+
6
+ # ADR 0001: Documentation Platform
7
+
8
+ - Status: Accepted
9
+ - Date: 2026-06-12
10
+
11
+ ## Context
12
+
13
+ Taskset needs one documentation source that is readable on Git hosts and can
14
+ also power a documentation website. User guidance and repository maintenance
15
+ material have different audiences and should remain visibly separated.
16
+
17
+ ## Decision
18
+
19
+ - Keep canonical user documentation in the root `docs/` directory.
20
+ - Keep contributor, product, architecture, ADR, testing, and technology
21
+ material under `docs/maintainers/`.
22
+ - Use plain Markdown by default and MDX only for interactive pages.
23
+ - Build `apps/www` with Next.js App Router, Nextra, and the stock Nextra docs
24
+ and blog themes.
25
+ - Expose root `docs/` as the app's Nextra `content` directory through a
26
+ repository-relative symlink.
27
+ - Render top-level usage docs and `docs/maintainers/` through separate route
28
+ layouts and page maps so their navigation stays audience-specific.
29
+ - Keep chronological release and project posts under `apps/www/posts/`.
30
+ - Isolate usage docs, maintainer docs, and blog layouts and MDX component sets
31
+ by route.
32
+ - Keep the Nextra configuration and layout close to the upstream defaults.
33
+
34
+ Nextra supports App Router content-directory routing and typed `_meta.ts`
35
+ navigation:
36
+
37
+ - <https://nextra.site/docs/file-conventions/content-directory>
38
+ - <https://nextra.site/docs/docs-theme/start>
39
+
40
+ ## Why
41
+
42
+ This matches the existing Next.js direction, provides navigation and search
43
+ without a custom content loader, and keeps user documentation readable in its
44
+ canonical location. Moving maintainer material into a dedicated
45
+ `docs/maintainers/` section prevents the root README and user pages from
46
+ becoming contributor handbooks.
47
+
48
+ ## Implementation Contract
49
+
50
+ `apps/www/content` points to `../../docs`. The usage docs catch-all route loads
51
+ top-level content and excludes `docs/maintainers/` from its page map. The
52
+ `/maintainers` route loads the same content directory with a maintainer-rooted
53
+ page map. The app may generate `.next/`, search data, and static output, but
54
+ none of those become documentation source.
55
+
56
+ `apps/www/posts/` is the source for blog Markdown. An app-local registry maps
57
+ each post to `/posts/[slug]` so static export can enumerate routes without
58
+ copying posts into `docs/`. The global MDX component file contains only base
59
+ Nextra components; docs and blog routes apply their own theme components.
60
+
61
+ ## Consequences
62
+
63
+ - Documentation changes are reviewable without building the site.
64
+ - Blog posts are reviewable as app-local Markdown without a CMS.
65
+ - The site build must include root `docs/` files in its input.
66
+ - New posts must be added to the app-local static post registry.
67
+ - MDX components remain owned by `apps/www`.
68
+ - Maintainer documentation is reviewed from `docs/maintainers/` and remains in
69
+ its own `/maintainers` navigation section.
70
+ - 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,59 @@
1
+ ---
2
+ title: Contributing
3
+ description: Repository setup, Taskset dogfooding, pull requests, and completion rules.
4
+ ---
5
+
6
+ # Contributing
7
+
8
+ Taskset is pre-alpha. Strengthen the core file format and workflow before
9
+ expanding the number of interfaces.
10
+
11
+ ## Start Here
12
+
13
+ Read `AGENTS.md`, `skills/taskset-implement/SKILL.md`, the product vision, the
14
+ architecture overview, and the technology preferences before changing the
15
+ repository. Discuss persisted formats, package boundaries, public commands,
16
+ synchronization, or snapshots before implementation.
17
+
18
+ ## Setup
19
+
20
+ ```bash
21
+ pnpm install --frozen-lockfile
22
+ pnpm check
23
+ pnpm taskset task list
24
+ ```
25
+
26
+ Use the Node and pnpm versions declared by `.nvmrc` and `packageManager`.
27
+
28
+ ## Develop Taskset With Taskset
29
+
30
+ The repository dogfoods Taskset. Use the root `taskset.config.ts`, the CLI, and
31
+ canonical `.taskset/tasks/` files to plan and inspect work. When the CLI
32
+ supports the required operation, update the task through the CLI instead of
33
+ editing generated or derived state.
34
+
35
+ ## Engineering Rules
36
+
37
+ - Keep `.taskset/` Markdown as the persistent source of truth.
38
+ - Put shared domain behavior in `@taskset/core`.
39
+ - Keep runtime schemas and shared data contracts in `@taskset/contracts`.
40
+ - Keep core and future server code as a pragmatic modular monolith.
41
+ - Use feature-based architecture in UI and interaction surfaces.
42
+ - Add dependencies to the package that imports them.
43
+ - Preserve deterministic serialization and human-authored Markdown.
44
+ - Prefer test-first work for domain rules, parsers, compatibility changes, transitions,
45
+ and bug fixes.
46
+
47
+ ## Finish The Work
48
+
49
+ Before declaring a workspace task complete:
50
+
51
+ 1. Run the narrowest relevant test, then the broader checks required by risk.
52
+ 2. Update the canonical Taskset task through the CLI when supported.
53
+ 3. Update affected user docs, maintainer docs, tests, and
54
+ `skills/taskset-implement/`.
55
+ 4. Run `pnpm check` and `git diff --check`.
56
+ 5. Report compatibility consequences, checks, and remaining limitations.
57
+
58
+ Add a Changeset only when release configuration is active and a versioned
59
+ contract changes.
@@ -0,0 +1,69 @@
1
+ ---
2
+ title: Documentation
3
+ description: How user Markdown becomes the Taskset documentation website.
4
+ ---
5
+
6
+ # Documentation
7
+
8
+ The root `docs/` directory is canonical for user-facing guidance and maintainer
9
+ guidance. Top-level pages are for users. Repository maintenance material belongs
10
+ under `docs/maintainers/`.
11
+
12
+ ## Recommended Website Stack
13
+
14
+ Use Next.js App Router, Nextra, `nextra-theme-docs`, and
15
+ `nextra-theme-blog` in `apps/www`.
16
+
17
+ Why:
18
+
19
+ - `apps/www` owns the public documentation renderer
20
+ - the repository already has a Next.js TypeScript preset
21
+ - Nextra supplies Markdown routing, documentation navigation, blog layout, and
22
+ search
23
+ - Markdown remains the source rather than a CMS database
24
+
25
+ ## Content Rules
26
+
27
+ - Use `.md` unless the page needs an interactive component.
28
+ - Add `title` and `description` frontmatter.
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
+ under `docs/maintainers/`, not in top-level usage navigation.
35
+ - Keep chronological release and project posts under `apps/www/posts/`.
36
+ - Require `title`, `description`, and `date` frontmatter for blog posts.
37
+ - Register each post in `apps/www/src/blog/posts.ts` so the static build can
38
+ enumerate `/posts/[slug]`.
39
+
40
+ ## Integration
41
+
42
+ `apps/www/content` is a repository-relative symlink to `../../docs`. Nextra's
43
+ standard content-directory loader renders that source without copying it or
44
+ maintaining a second source tree. The top-level usage docs route filters
45
+ `docs/maintainers/` out of its primary navigation, and the dedicated
46
+ `/maintainers` route renders the same canonical maintainer Markdown with its own
47
+ page map.
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.
68
+
69
+ 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.