@taskset/cli 4.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/README.md +23 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +538 -71
- package/docs/_meta.ts +9 -0
- package/docs/agents/_meta.ts +5 -0
- package/docs/agents/commands.md +70 -0
- package/docs/agents/index.md +99 -0
- package/docs/agents/llms.txt +28 -0
- package/docs/agents/workflows.md +50 -0
- package/docs/cli-reference.md +461 -0
- package/docs/configuration.md +63 -0
- package/docs/document-types.md +103 -0
- package/docs/getting-started.md +106 -0
- package/docs/index.md +43 -0
- package/docs/maintainers/_meta.ts +7 -0
- package/docs/maintainers/architecture/_meta.ts +5 -0
- package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +44 -0
- package/docs/maintainers/architecture/decisions/0002-code-architecture.md +31 -0
- package/docs/maintainers/architecture/decisions/0003-snapshot-policy.md +31 -0
- package/docs/maintainers/architecture/decisions/_meta.ts +5 -0
- package/docs/maintainers/architecture/overview.md +111 -0
- package/docs/maintainers/architecture/synchronization.md +56 -0
- package/docs/maintainers/development/_meta.ts +6 -0
- package/docs/maintainers/development/contributing.md +58 -0
- package/docs/maintainers/development/documentation.md +52 -0
- package/docs/maintainers/development/engineering.md +59 -0
- package/docs/maintainers/development/testing.md +89 -0
- package/docs/maintainers/index.md +20 -0
- package/docs/maintainers/product/_meta.ts +3 -0
- package/docs/maintainers/product/vision.md +68 -0
- package/docs/maintainers/technology.md +55 -0
- package/docs/task-files.md +180 -0
- package/package.json +8 -6
- package/skills/taskset/SKILL.md +240 -0
- package/skills/taskset/references/changesets-examples.md +97 -0
- package/skills/taskset/references/document-modeling-examples.md +63 -0
- package/skills/taskset/references/monorepo-task-modeling.md +125 -0
- package/skills/taskset/references/task-modeling-examples.md +249 -0
- package/skills/taskset-implement/SKILL.md +240 -0
- package/skills/taskset-implement/agents/openai.yaml +4 -0
- package/skills/taskset-implement/references/architecture/client-and-server.md +69 -0
- package/skills/taskset-implement/references/architecture/documentation-and-generated.md +72 -0
- package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +108 -0
- package/skills/taskset-implement/references/architecture/product-and-source.md +81 -0
- package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +45 -0
- package/skills/taskset-implement/references/architecture.md +34 -0
- package/skills/taskset-implement/references/conventions/backend-and-tooling.md +33 -0
- package/skills/taskset-implement/references/conventions/design.md +38 -0
- package/skills/taskset-implement/references/conventions/interfaces-and-ui.md +50 -0
- package/skills/taskset-implement/references/conventions/naming-and-packages.md +64 -0
- package/skills/taskset-implement/references/conventions/task-files.md +94 -0
- package/skills/taskset-implement/references/conventions/tests-and-docs.md +55 -0
- package/skills/taskset-implement/references/conventions/typescript-and-exports.md +41 -0
- package/skills/taskset-implement/references/conventions.md +40 -0
- package/skills/taskset-implement/references/release.md +135 -0
- package/skills/taskset-implement/references/workflows/dependencies-and-docs-site.md +54 -0
- package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +109 -0
- package/skills/taskset-implement/references/workflows/persisted-data-and-git.md +30 -0
- package/skills/taskset-implement/references/workflows/validation.md +34 -0
- package/skills/taskset-implement/references/workflows/vitest-and-test-strategy.md +82 -0
- package/skills/taskset-implement/references/workflows.md +33 -0
- package/src/cli.ts +640 -87
|
@@ -0,0 +1,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,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,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,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.
|