@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.
- package/CHANGELOG.md +22 -0
- package/README.md +6 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +510 -63
- package/docs/_meta.ts +8 -0
- package/docs/cli-reference.md +461 -0
- package/docs/configuration.md +61 -0
- package/docs/document-types.md +100 -0
- package/docs/getting-started.md +99 -0
- package/docs/index.md +37 -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 +70 -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 +59 -0
- package/docs/maintainers/development/documentation.md +69 -0
- package/docs/maintainers/development/engineering.md +59 -0
- package/docs/maintainers/development/testing.md +89 -0
- package/docs/maintainers/index.md +22 -0
- package/docs/maintainers/product/_meta.ts +3 -0
- package/docs/maintainers/product/vision.md +76 -0
- package/docs/maintainers/technology.md +55 -0
- package/docs/task-files.md +174 -0
- package/package.json +7 -5
- package/skills/taskset/SKILL.md +227 -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 +234 -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 +70 -0
- package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +107 -0
- package/skills/taskset-implement/references/architecture/product-and-source.md +80 -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 +89 -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 +108 -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 +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,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,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,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.
|