@taskset/cli 3.0.3 → 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 +39 -0
  2. package/README.md +8 -3
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +686 -19
  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 +10 -8
  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 +851 -17
@@ -0,0 +1,107 @@
1
+ # Ownership And Dependencies
2
+
3
+ Repository ownership, package identity, dependency flow, and core runtime ownership.
4
+
5
+ ## Repository Ownership
6
+
7
+ | Path | Ownership |
8
+ | --- | --- |
9
+ | `packages/contracts/` | Shared entity schemas, enums, DTOs, configuration types, and integration contracts; package `@taskset/contracts` |
10
+ | `packages/utils/` | Reusable domain-light date, filesystem, path, Markdown, and frontmatter primitives; package `@taskset/utils` |
11
+ | `packages/core/` | Entity operations, parsing orchestration, validation, storage, indexing, graph rules, search, filtering, project discovery, and impact analysis; package `@taskset/core` |
12
+ | `packages/cli/` | Command-line adapter over core; package `@taskset/cli` |
13
+ | `packages/tui/` | Keyboard-driven terminal interface over core; package `@taskset/tui` |
14
+ | `packages/mcp/` | MCP tools and context bundles over core; package `@taskset/mcp` |
15
+ | `packages/kanban/` | Web Kanban interface and board-specific presentation; package `@taskset/kanban` |
16
+ | `packages/extension/` | VS Code integration, explorers, hovers, code lenses, and editor commands; package `@taskset/extension` |
17
+ | `packages/configs/` | Shared TypeScript and tool configuration; package `@taskset/configs` |
18
+ | `apps/office/` | Stakeholder dashboards, roadmaps, reports, and planning views; package `@taskset/office` |
19
+ | `apps/www/` | Marketing site, public documentation, guides, and examples; package `@taskset/www` |
20
+ | `docs/` | First-party repository and product documentation |
21
+ | `skills/` | Agent-facing repository standards and workflows |
22
+
23
+ Directory names and manifest package names must agree. Duplicate workspace
24
+ package names are invalid. Treat a mismatch such as a `packages/core` manifest
25
+ named `@taskset/cli` as a scaffold defect to fix, not an established identity.
26
+ Every package and app has a `README.md` describing its purpose, owned behavior,
27
+ and current implementation status.
28
+
29
+ The publishable npm runtime is `@taskset/cli` and its dependency chain:
30
+ `@taskset/core`, `@taskset/contracts`, and `@taskset/utils`. Other workspace
31
+ packages and apps remain private until they have an intentional public
32
+ contract. Recursive publication must preserve this runtime dependency closure.
33
+
34
+ Do not add a top-level owner when an existing package or app already fits.
35
+ Within an owning package, prefer responsibility-based names such as `config.ts`
36
+ and `Config` over product-prefixed names such as `tasksetConfig.ts` and
37
+ `TasksetConfig`. Reserve the Taskset name for public identity and protocol
38
+ surfaces such as package names, the CLI command, `taskset.config.ts`, and
39
+ `.taskset/`.
40
+
41
+ Taskset dogfoods these boundaries. The root workspace installs core and CLI,
42
+ loads `taskset.config.ts`, and stores its own planned work in `.taskset/tasks/`.
43
+
44
+ ## Dependency Flow
45
+
46
+ The intended dependency direction is:
47
+
48
+ ```text
49
+ configs
50
+
51
+ contracts utils
52
+ \ /
53
+ core
54
+ |
55
+ cli tui mcp extension kanban office
56
+
57
+ www (product documentation and marketing; no domain authority)
58
+ ```
59
+
60
+ Rules:
61
+
62
+ - `contracts` must not depend on core or a client package.
63
+ - `utils` must not depend on core or a client package.
64
+ - `core` may depend on contracts and utils.
65
+ - Product interfaces may depend on core and contracts.
66
+ - A client package must not become the domain API for another client.
67
+ - Apps may consume packages; shared packages must not depend on apps.
68
+ - Keep framework-specific DTOs and view models in the owning interface unless
69
+ they are stable cross-interface contracts.
70
+ - Import workspace code through manifest exports and declare it with
71
+ `workspace:*`.
72
+
73
+ If a browser or editor runtime cannot access the filesystem directly, introduce
74
+ a thin host adapter that delegates to core. Do not move domain rules into the
75
+ transport layer.
76
+
77
+ ## Core Runtime Flow
78
+
79
+ ```text
80
+ CLI / TUI / MCP / Extension / Kanban / Office
81
+ |
82
+ @taskset/core API
83
+ |
84
+ parse -> validate -> operate -> serialize
85
+ |
86
+ canonical .taskset/ Markdown
87
+ |
88
+ derived index / graph / generated views
89
+ ```
90
+
91
+ Core owns behavior such as:
92
+
93
+ - repository discovery and configuration loading
94
+ - configuration validation and task creation defaults
95
+ - entity parsing and validation
96
+ - deterministic serialization
97
+ - atomic create, update, move, and delete operations
98
+ - status and lifecycle transitions
99
+ - search and filtering
100
+ - dependency and relationship graph construction
101
+ - cycle and broken-reference detection
102
+ - monorepo project and package discovery
103
+ - code-path relationships and impact analysis
104
+ - immutable snapshots, schema migrations, and generated metadata views
105
+
106
+ Interfaces own input, rendering, transport, and user interaction. They call core
107
+ operations rather than reproducing these rules.
@@ -0,0 +1,80 @@
1
+ # Product And Source
2
+
3
+ Product direction and the canonical source-of-truth model.
4
+
5
+ ## Product Direction
6
+
7
+ Taskset began as an offline, inline, AI-friendly, human-readable task manager
8
+ designed to accelerate software delivery and give development teams immediate
9
+ awareness of the work surrounding their code.
10
+
11
+ It grows from that core into a Git-native software delivery platform. Tasks,
12
+ stories, flows, decisions, research, runbooks, and related project knowledge
13
+ live beside the code as human-readable Markdown.
14
+
15
+ Vision: become the Git-native operating system for software delivery.
16
+
17
+ Mission: let developers, AI systems, and stakeholders work through different
18
+ interfaces without creating a second source of truth outside the repository.
19
+
20
+ Design for:
21
+
22
+ - Markdown that remains useful without Taskset installed
23
+ - Git history, branches, pull requests, and reviews as native workflows
24
+ - deterministic machine-readable metadata with human-authored prose
25
+ - monorepos and code-to-work relationships as first-class concepts
26
+ - one domain engine shared by CLI, TUI, MCP, extension, web, and dashboards
27
+ - local-first operation without preventing explicit hosted adapters
28
+ - immediate team and AI awareness without a mandatory hosted service
29
+ - replaceable indexes and generated views
30
+ - explicit compatibility work that does not silently corrupt existing
31
+ repositories
32
+
33
+ Near-term work should keep the task and supporting-document workflows coherent
34
+ before inventing additional entity kinds or investing heavily in new interfaces.
35
+
36
+ ## Source-of-Truth Model
37
+
38
+ Canonical project state lives under `.taskset/`.
39
+
40
+ ```text
41
+ .taskset/
42
+ ├── tasks/
43
+ │ └── .generated/ # disposable task metadata indexes
44
+ ├── stories/
45
+ │ └── .generated/
46
+ ├── flows/
47
+ │ └── .generated/
48
+ ├── decisions/
49
+ │ └── .generated/
50
+ ├── research/
51
+ │ └── .generated/
52
+ ├── runbooks/
53
+ │ └── .generated/
54
+ ├── snapshots/
55
+ └── cache/
56
+ ```
57
+
58
+ Rules:
59
+
60
+ - Entity Markdown files are authoritative persisted state.
61
+ - `taskset.config.ts` is the discoverable repository usage configuration. It
62
+ controls validated behavior and defaults, not canonical entity state.
63
+ - YAML frontmatter contains structured metadata. Markdown bodies contain
64
+ durable human context.
65
+ - Do not store the same field independently in frontmatter and body.
66
+ - Each entity folder owns its disposable `.generated/` indexes. `.taskset/cache/`
67
+ is also disposable. Neither is required to recover canonical state.
68
+ - `snapshots/` contains immutable, non-authoritative safety checkpoints for
69
+ migrations and explicit restore workflows.
70
+ - An in-memory index or optional on-disk cache may accelerate reads, but it must
71
+ be rebuildable from canonical files.
72
+ - Do not introduce SQLite, a remote service, browser storage, editor global
73
+ state, or another hidden store as an undeclared authority.
74
+ - Git is the versioning and collaboration layer around the files. Do not assume
75
+ it provides database transactions or conflict-free identifiers.
76
+ - Repository discovery walks upward for exactly `taskset.config.ts`; canonical
77
+ storage remains fixed under `.taskset/`.
78
+
79
+ Any persisted format change must define validation, compatibility, migration,
80
+ and failure behavior before implementation.
@@ -0,0 +1,45 @@
1
+ # Storage And Snapshots
2
+
3
+ Storage, graph, and snapshot rules for canonical repository data.
4
+
5
+ ## Storage and Graph Rules
6
+
7
+ - Parse frontmatter with a YAML parser and Markdown with a structured parser
8
+ where structure matters. Do not parse entity files with ad hoc regular
9
+ expressions.
10
+ - Normalize stored code references to repository-relative POSIX paths.
11
+ - Reject paths that escape the repository or `.taskset/` ownership boundary.
12
+ - Keep IDs immutable. Do not adopt sequential IDs without a documented
13
+ branch-collision strategy.
14
+ - Store one canonical direction for inverse relationships unless the schema
15
+ explicitly defines otherwise. Derive `blocks` from `dependsOn`, for example,
16
+ rather than allowing silent divergence.
17
+ - Detect duplicate IDs, missing targets, invalid transitions, and dependency
18
+ cycles with actionable diagnostics.
19
+ - Preserve meaningful Markdown content during metadata edits.
20
+ - Never silently discard unknown or invalid data. Reject it or preserve it
21
+ according to an explicit schema policy.
22
+ - Write through temporary files and atomic replacement where the platform
23
+ permits it. A failed update must not leave a truncated entity.
24
+ - Make ordering deterministic where order has no domain meaning.
25
+
26
+ ## Snapshot Policy
27
+
28
+ Git commits and branches are the normal history and rollback mechanism. Do not
29
+ duplicate that history in a Taskset-owned snapshot database.
30
+
31
+ The explicit snapshot capability is a safety mechanism for uncommitted state
32
+ before migrations, restore operations, imports, repairs, or bulk mutation:
33
+
34
+ - snapshots are user-invoked or created immediately before a destructive
35
+ operation
36
+ - snapshots are immutable, timestamped, and content-addressable where practical
37
+ - snapshots contain canonical Taskset files and enough metadata to explain why
38
+ they exist
39
+ - snapshots are non-authoritative and may be deleted without changing current
40
+ project state
41
+ - restore is explicit and conflict-aware
42
+ - snapshots do not replace Git commits, reflogs, or normal backups
43
+
44
+ Snapshot restore previews by default. Restore requires `--apply` and atomically
45
+ reconciles canonical task files.
@@ -0,0 +1,34 @@
1
+ # Architecture
2
+
3
+ Use this file as the routing map for architecture standards. Load only the
4
+ topic file needed for the change, then load additional files when the work
5
+ crosses that boundary.
6
+
7
+ ## Routing
8
+
9
+ - [product-and-source.md](architecture/product-and-source.md): product
10
+ direction, `.taskset/` source-of-truth rules, generated/cache authority, and
11
+ persisted format compatibility requirements
12
+ - [ownership-and-dependencies.md](architecture/ownership-and-dependencies.md):
13
+ repository ownership, package identity, dependency flow, public runtime
14
+ package set, and core/interface ownership
15
+ - [client-and-server.md](architecture/client-and-server.md): feature-based
16
+ clients, DDD-lite modular core/server architecture, and server composition
17
+ boundaries
18
+ - [storage-and-snapshots.md](architecture/storage-and-snapshots.md): storage,
19
+ graph, canonical relationship, atomic write, and snapshot rules
20
+ - [documentation-and-generated.md](architecture/documentation-and-generated.md):
21
+ documentation architecture, website content ownership, integrations, and
22
+ generated-source handling
23
+
24
+ ## Loading Guidance
25
+
26
+ - For package boundaries, dependency direction, or public package behavior, load
27
+ `ownership-and-dependencies.md`.
28
+ - For `.taskset/` persistence, schema compatibility, generated views, snapshots,
29
+ or filesystem mutation, load `product-and-source.md` plus
30
+ `storage-and-snapshots.md`.
31
+ - For UI, CLI, MCP, extension, Kanban, Office, core, or server architecture,
32
+ load `ownership-and-dependencies.md` plus `client-and-server.md`.
33
+ - For documentation routes, website content, blog ownership, or generated
34
+ outputs, load `documentation-and-generated.md`.
@@ -0,0 +1,33 @@
1
+ # Backend And Tooling
2
+
3
+ Backend technology choices plus shell and automation conventions.
4
+
5
+ ## Backend Technology
6
+
7
+ - Prefer TypeScript for services and hosted adapters.
8
+ - Use NestJS when modules, dependency injection, guards, transport adapters, or
9
+ service scale justify it; do not add NestJS to a small composition root by
10
+ default.
11
+ - With NestJS, prefer `class-transformer` and `class-validator` at transport DTO
12
+ boundaries.
13
+ - Prefer TypeORM when an object-relational mapper is appropriate.
14
+ - Use Rust for native executables or components with a concrete need for
15
+ systems performance, memory control, portability, or concurrency.
16
+ - Prefer MariaDB for smaller hosted applications and PostgreSQL for larger or
17
+ more advanced relational workloads.
18
+ - Keep database schemas, migrations, backup, and consistency behavior explicit.
19
+ - No server or database replaces `.taskset/` Markdown as canonical Taskset
20
+ state.
21
+
22
+ ## Shell and Tooling
23
+
24
+ - Start Bash scripts with `set -euo pipefail`.
25
+ - Derive `repo_root` from the script location.
26
+ - Quote paths and variable expansions.
27
+ - Validate prerequisites before mutation.
28
+ - Make setup and generation idempotent.
29
+ - Use temporary directories and traps for cleanup.
30
+ - Print concise, prefixed, actionable errors.
31
+ - Keep automation with its owning package or a focused tooling directory when
32
+ one is introduced.
33
+ - Do not add root scripts that duplicate package-manager or Turbo behavior.
@@ -0,0 +1,38 @@
1
+ # Design Conventions
2
+
3
+ General design principles for Taskset implementation work.
4
+
5
+ ## General Design
6
+
7
+ - Apply SOLID as design heuristics, especially SRP, OCP, LSP, and DIP. Preserve
8
+ separation of concerns, encapsulation, high cohesion, low coupling,
9
+ testability, and inward dependency flow without creating ceremonial layers.
10
+ - Prefer clean architecture boundaries and pragmatic DDD where domain behavior
11
+ benefits from explicit modules, entities, value objects, use cases, and
12
+ ports. Use feature-based architecture for user-facing and interaction
13
+ surfaces.
14
+ - Prefer object-oriented design for stateful domain models, lifecycle-rich
15
+ entities, polymorphic adapters, and dependency-injected boundaries. Prefer
16
+ focused functions for stateless parsing, validation, serialization, and data
17
+ transformation. Do not convert code to classes for style alone.
18
+ - Use in-process domain events when several independent reactions or clear
19
+ temporal decoupling justify them. Do not add an event bus, message broker, or
20
+ distributed event architecture without a measured product need.
21
+ - Reuse before adding. Extend the existing source of truth when the concept
22
+ already exists.
23
+ - Prefer explicit data flow, typed state, discriminated variants, and
24
+ structured errors over string coordination.
25
+ - Keep functions and modules focused. Split by responsibility, not arbitrary
26
+ line count.
27
+ - Separate pure parsing, validation, graph, and query logic from filesystem
28
+ effects where practical.
29
+ - Fail with actionable diagnostics for invalid persisted state or destructive
30
+ operations.
31
+ - Comment format constraints and non-obvious tradeoffs. Do not narrate obvious
32
+ code.
33
+ - Add focused TSDoc to non-obvious public APIs and short orienting comments
34
+ around complex algorithms, transactions, migrations, synchronization, and
35
+ validation. Do not document obvious assignments or straightforward control
36
+ flow.
37
+ - Keep diffs narrow. Do not combine behavior changes with unrelated renaming or
38
+ cleanup.
@@ -0,0 +1,50 @@
1
+ # Interfaces And UI
2
+
3
+ CLI, interface, UI, and frontend organization rules.
4
+
5
+ ## CLI and Interface Behavior
6
+
7
+ - Keep CLI commands thin: parse arguments, call core, render results, map errors
8
+ to exit codes.
9
+ - Current CLI commands are `taskset init`, `taskset config`, `taskset doctor`,
10
+ `taskset generate`, `taskset snapshot create`, `list`, `restore`, and
11
+ `taskset task create`, `list`, `show`, `update`, `status`, and `delete`.
12
+ - Reserve stdout for requested output and stderr for diagnostics.
13
+ - Avoid interactive prompts when flags or stdin make automation possible.
14
+ - Provide deterministic structured output before integrations depend on parsing
15
+ decorative terminal text.
16
+ - Keep TUI keyboard behavior and state in TUI, not core.
17
+ - Keep MCP tool schemas close to MCP adapters while reusing domain schemas.
18
+ - Keep extension commands and VS Code lifecycle behavior in the extension.
19
+ - Keep filtering and graph semantics in core; clients may own only view-specific
20
+ sorting, grouping, and layout.
21
+
22
+ ## UI Organization
23
+
24
+ Use TypeScript and React for web interfaces. Prefer TanStack's headless
25
+ ecosystem when the feature needs the corresponding capability:
26
+
27
+ - Query for server state and mutations
28
+ - Form for complex validated forms
29
+ - Table for tabular state
30
+ - Hotkeys for keyboard commands
31
+ - Pacer for debounce, throttle, queue, and rate-control behavior
32
+ - Virtual for large virtualized collections
33
+ - DB for a justified client-side reactive data layer
34
+ - Devtools and library-specific devtools during development
35
+
36
+ Adopt each package by demonstrated need. Do not install the full ecosystem in
37
+ every app, use a large abstraction for trivial local state, or hide domain
38
+ rules in client caches. Review maturity and API stability before using alpha or
39
+ beta packages on critical paths.
40
+
41
+ For Kanban and Office:
42
+
43
+ - Organize by product feature, then colocate components, hooks, tests, and styles.
44
+ - Keep server or host communication behind typed adapters.
45
+ - Represent loading, empty, invalid-repository, stale, conflict, and error states
46
+ explicitly.
47
+ - Preserve keyboard, focus, labels, roles, and screen-reader behavior.
48
+ - Share UI through a dedicated package only after more than one surface needs a
49
+ stable visual contract.
50
+ - Do not put React stores or UI dependencies in `@taskset/utils`.
@@ -0,0 +1,64 @@
1
+ # Naming And Packages
2
+
3
+ Naming, package identity, command naming, and configuration identity.
4
+
5
+ ## Naming and Package Identity
6
+
7
+ - Directories: lowercase; use kebab-case for multiword names.
8
+ - TypeScript modules: camelCase when named after behavior, kebab-case when the
9
+ local feature already uses it. Stay consistent within an owner.
10
+ - React components and providers: `PascalCase.tsx`.
11
+ - Hooks: `useThing.ts`; exported function `useThing`.
12
+ - Variables and functions: `camelCase`.
13
+ - Types, interfaces, classes, components, and schemas: `PascalCase`.
14
+ - Stable protocol and schema constants: `UPPER_SNAKE_CASE`.
15
+ - Colocated tests: source filename plus `.test.ts` or `.test.tsx`.
16
+ - Integration and E2E specs: descriptive kebab-case ending in `.spec.ts`.
17
+ - Shell scripts: kebab-case.
18
+ - Name files and symbols for their responsibility inside the owning package.
19
+ Prefer `config.ts`, `Config`, and `Repository` over names prefixed with the
20
+ product or package name.
21
+ - Keep the product name only where it is part of a public identity or protocol,
22
+ such as `taskset.config.ts`, `.taskset/`, the `taskset` command, package
23
+ names, and user-facing prose.
24
+
25
+ Canonical workspace identities:
26
+
27
+ ```text
28
+ @taskset/configs
29
+ @taskset/contracts
30
+ @taskset/utils
31
+ @taskset/core
32
+ @taskset/cli
33
+ @taskset/tui
34
+ @taskset/mcp
35
+ @taskset/kanban
36
+ @taskset/extension
37
+ @taskset/office
38
+ @taskset/www
39
+ ```
40
+
41
+ `@taskset/cli`, `@taskset/core`, `@taskset/contracts`, and `@taskset/utils` are
42
+ public npm packages. The remaining workspace identities are private until their
43
+ owning interfaces are ready for independent release. Use `@taskset/cli` in
44
+ installation and configuration examples. Use the other public package names
45
+ when consumers intentionally use their lower-level APIs.
46
+
47
+ Use the exact current manifest name in dependencies, filters, and Changesets.
48
+ Package directories and names must agree. Fix duplicate or misplaced identities
49
+ instead of documenting aliases for accidental scaffold state.
50
+
51
+ Command names use lowercase kebab-case:
52
+
53
+ ```text
54
+ taskset task list --file packages/core --impact
55
+ taskset context-bundle
56
+ ```
57
+
58
+ The root usage configuration is exactly `taskset.config.ts`. Export a
59
+ versionless object, preferably through `defineConfig` from `@taskset/core`.
60
+ Keep configuration fields behavioral; never use config to redirect canonical
61
+ entity storage outside `.taskset/`.
62
+
63
+ Entity field names use `camelCase`. Status, priority, and type values use stable
64
+ lowercase tokens such as `doing`, `high`, and `feature`.
@@ -0,0 +1,89 @@
1
+ # Task File Conventions
2
+
3
+ Canonical Taskset entity metadata and Markdown file rules.
4
+
5
+ ## Taskset Entity Files
6
+
7
+ Use YAML frontmatter for machine metadata and Markdown for human context:
8
+
9
+ ```markdown
10
+ ---
11
+ id: 0000001-add-task-validation
12
+ title: Add task validation
13
+ status: doing
14
+ priority: high
15
+ order: 10
16
+ createdAt: 2026-06-12
17
+ updatedAt: 2026-06-12 09:30 UTC
18
+ labels:
19
+ - core
20
+ dependsOn: []
21
+ files:
22
+ - packages/core/src/tasks/validateTask.ts
23
+ ---
24
+
25
+ # Context
26
+
27
+ Describe why the work exists.
28
+
29
+ # Acceptance Criteria
30
+
31
+ - [ ] Invalid statuses produce an actionable diagnostic.
32
+ ```
33
+
34
+ Rules:
35
+
36
+ - Require `id`, `title`, `status`, `createdAt`, and `updatedAt`.
37
+ - Read and serialize one strict versionless task shape. Reject legacy
38
+ versioned task frontmatter instead of silently migrating or repairing it.
39
+ - Accept people, planning, canonical relationship, path, and project metadata
40
+ only through the shared strict schema.
41
+ - Use `todo`, `doing`, `blocked`, `done`, and `canceled` for task status.
42
+ - Use `low`, `medium`, `high`, and `urgent` for task priority.
43
+ - Priority is the sole measure of task importance. Do not add a second,
44
+ overlapping importance field.
45
+ - `order` is the sole user-controlled sequence field. It is an optional finite
46
+ nonnegative number. Lower values sort first, missing values sort after
47
+ ordered tasks, and duplicate values fall back to task ID ordering.
48
+ - Repository configuration may select and order the active values from that
49
+ vocabulary. Defaults and task creation must respect the configured list.
50
+ - Define one canonical representation for each field.
51
+ - Use repository-relative POSIX paths in persisted metadata.
52
+ - Serialize new timestamps as `YYYY-MM-DD` or `YYYY-MM-DD HH:mm UTC`. Continue
53
+ reading the documented legacy ISO 8601 UTC form until a compatibility change
54
+ explicitly removes it.
55
+ - Keep IDs immutable and compare them exactly.
56
+ - Format new task IDs as a seven-digit sequence plus a lowercase title slug.
57
+ Keep legacy `TS-` ULIDs readable only so `task migrate-ids` can rewrite them
58
+ and all canonical relationships atomically.
59
+ - Preserve user-authored body text and meaningful list order.
60
+ - Use stable key ordering and one final newline in generated output.
61
+ - Generated metadata indexes cover supported non-ID metadata fields, group
62
+ timestamp values by calendar date, and keep generated filenames readable
63
+ instead of URL-encoding spaces or path separators.
64
+ - Omit absent optional fields consistently; do not alternate between missing,
65
+ empty, and `null` without schema meaning.
66
+ - Validate enum values, dates, paths, IDs, and relationship targets centrally.
67
+ - Validate normalized CLI arguments and public core inputs with Zod schemas.
68
+ Keep `parseArgs` limited to tokenization and use `superRefine` for
69
+ cross-option rules.
70
+ - Do not infer `updatedAt` or lifecycle timestamps differently in each client.
71
+ - Do not write derived inverse relationships into files unless the schema makes
72
+ them independently authoritative.
73
+ - Keep `dependsOn`, `related`, `duplicates`, and `parent` canonical. Derive
74
+ `blockedBy`, `blocks`, `children`, and `subtasks`.
75
+ - Treat schema additions, removals, defaults, and coercions as compatibility
76
+ decisions.
77
+ - Reject unknown fields, duplicate list values, self-dependencies,
78
+ non-normalized paths, and an `updatedAt` value earlier than `createdAt`.
79
+ - Never silently repair a file during a read. `doctor` may propose or perform
80
+ explicit fixes with user-visible output.
81
+
82
+ Keep schemas and static contracts in `@taskset/contracts`. Keep parsing
83
+ orchestration, defaults, transitions, validation policy, and migrations in
84
+ `@taskset/core`. Keep generic YAML/Markdown mechanics in `@taskset/utils` only
85
+ when they are not Taskset-specific.
86
+
87
+ Put generic date, time, and mathematical operations in `@taskset/utils` when
88
+ they have no task-domain policy. Prefer names such as `parseDate` over
89
+ task-specific wrappers such as `parseTaskDate`.
@@ -0,0 +1,55 @@
1
+ # Tests And Documentation
2
+
3
+ Testing and documentation conventions.
4
+
5
+ ## Tests and Documentation
6
+
7
+ - Use Vitest as the default TypeScript unit and integration test runner.
8
+ - Use explicit imports from `vitest`; do not enable test globals repository-wide.
9
+ - Prefer test-first development for domain rules, parser behavior, lifecycle
10
+ transitions, graph invariants, migrations, and bug regressions.
11
+ - Do not force test-first ceremony for documentation, formatting, generated
12
+ configuration, or short-lived exploratory work.
13
+ - Add regression coverage for bug fixes.
14
+ - Test behavior and boundary contracts, not implementation trivia.
15
+ - Use temporary directories for filesystem tests.
16
+ - Use fixture repositories for Git, monorepo discovery, and path-impact tests.
17
+ - Cover CRLF/LF, Unicode, empty bodies, malformed YAML, duplicate IDs, broken
18
+ links, cycles, and interrupted writes where relevant.
19
+ - Verify parse/serialize round trips without losing Markdown.
20
+ - Keep unit tests deterministic and independent of user Git configuration,
21
+ network services, wall-clock time, and the actual repository.
22
+ - Mark integration prerequisites explicitly.
23
+ - Use current paths and package names in documentation.
24
+ - Keep user documentation in `docs/`; `apps/www` renders it.
25
+ - Publish `docs/` and `skills/` with `@taskset/cli` so installed consumers can
26
+ load the same guidance from `node_modules/@taskset/cli/docs` and
27
+ `node_modules/@taskset/cli/skills`. The CLI build copies those trees; do not
28
+ hand-edit the copies under `packages/cli/`.
29
+ - Keep chronological release and project posts in `apps/www/posts/`; require
30
+ `title`, `description`, and `date` frontmatter and register each route in the
31
+ website's post registry.
32
+ - Keep contributor, architecture, ADR, testing, and technology documentation
33
+ in `docs/maintainers/`.
34
+ - Render maintainer documentation through the website's dedicated
35
+ `/maintainers` route and keep it out of the primary usage-docs navigation.
36
+ - Keep a concise `README.md` in each package and app describing ownership,
37
+ dependencies, and current contents.
38
+ - Keep the root `README.md` focused on installing, configuring, and using
39
+ Taskset. Keep detailed repository work under `docs/maintainers/`; root
40
+ community files may provide short discovery links to that canonical guidance.
41
+ - Write user docs for newcomers first through short examples and plain
42
+ language, then provide precise contracts and edge cases for advanced users.
43
+ Simplicity must not come from hiding important constraints.
44
+ - Prefer `.md` for content. Use `.mdx` only when interactive React content is
45
+ required.
46
+ - Include `title` and `description` frontmatter on pages rendered by the docs
47
+ site.
48
+ - Keep product plans distinct from executable specifications.
49
+ - Update docs when commands, persisted formats, or public package contracts
50
+ change.
51
+ - Update `skills/taskset-implement/` in the same change when these repository standards
52
+ or workflows change.
53
+ - When a workspace task finishes, update its canonical Taskset task through the
54
+ CLI when supported, then update affected user docs, maintainer docs, tests,
55
+ and standards before declaring the work complete.
@@ -0,0 +1,41 @@
1
+ # TypeScript And Exports
2
+
3
+ TypeScript, formatting, import, export, and package-boundary rules.
4
+
5
+ ## TypeScript and Exports
6
+
7
+ Root `biome.json` controls formatting:
8
+
9
+ - tabs
10
+ - 100-column target
11
+ - single quotes
12
+ - no semicolons
13
+ - trailing commas
14
+ - bracket spacing
15
+
16
+ Follow these rules:
17
+
18
+ - Keep strict TypeScript enabled.
19
+ - Use `unknown` at filesystem, YAML, JSON, Git, process, and network boundaries,
20
+ then validate and narrow it.
21
+ - Avoid `any`; contain unavoidable casts at the boundary.
22
+ - Use `import type` or inline type imports for type-only dependencies.
23
+ - Prefer extensionless package imports. Use `.ts` or `.tsx` for relative source
24
+ imports; TypeScript rewrites them to `.js` during emit. Write `.js` in source
25
+ only when a runtime or external contract requires it.
26
+ - Prefer named exports and explicit package entrypoints.
27
+ - Declare every imported package in the importing package's `package.json`.
28
+ - Use `workspace:*` for internal dependencies.
29
+ - Import shared code through package exports such as `@taskset/core` or an
30
+ explicit subpath. Never import a sibling package's `src/`.
31
+ - Do not use TypeScript `paths` to imitate package exports or reach another
32
+ package's `node_modules`.
33
+ - Keep public data immutable where mutation is not part of the contract.
34
+ - Represent expected failures with typed errors or result variants. Include the
35
+ entity path, field, and remediation when useful.
36
+ - Do not leak a CLI parser, UI framework, MCP SDK, or filesystem library type
37
+ into domain contracts.
38
+
39
+ Shared configuration is consumed through `@taskset/configs` exports. Extend
40
+ those exports when a preset is genuinely reusable; keep app-specific settings
41
+ with the app.