@taskset/cli 4.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +23 -20
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +538 -71
  5. package/docs/_meta.ts +9 -0
  6. package/docs/agents/_meta.ts +5 -0
  7. package/docs/agents/commands.md +70 -0
  8. package/docs/agents/index.md +99 -0
  9. package/docs/agents/llms.txt +28 -0
  10. package/docs/agents/workflows.md +50 -0
  11. package/docs/cli-reference.md +461 -0
  12. package/docs/configuration.md +63 -0
  13. package/docs/document-types.md +103 -0
  14. package/docs/getting-started.md +106 -0
  15. package/docs/index.md +43 -0
  16. package/docs/maintainers/_meta.ts +7 -0
  17. package/docs/maintainers/architecture/_meta.ts +5 -0
  18. package/docs/maintainers/architecture/decisions/0001-documentation-platform.md +44 -0
  19. package/docs/maintainers/architecture/decisions/0002-code-architecture.md +31 -0
  20. package/docs/maintainers/architecture/decisions/0003-snapshot-policy.md +31 -0
  21. package/docs/maintainers/architecture/decisions/_meta.ts +5 -0
  22. package/docs/maintainers/architecture/overview.md +111 -0
  23. package/docs/maintainers/architecture/synchronization.md +56 -0
  24. package/docs/maintainers/development/_meta.ts +6 -0
  25. package/docs/maintainers/development/contributing.md +58 -0
  26. package/docs/maintainers/development/documentation.md +52 -0
  27. package/docs/maintainers/development/engineering.md +59 -0
  28. package/docs/maintainers/development/testing.md +89 -0
  29. package/docs/maintainers/index.md +20 -0
  30. package/docs/maintainers/product/_meta.ts +3 -0
  31. package/docs/maintainers/product/vision.md +68 -0
  32. package/docs/maintainers/technology.md +55 -0
  33. package/docs/task-files.md +180 -0
  34. package/package.json +8 -6
  35. package/skills/taskset/SKILL.md +240 -0
  36. package/skills/taskset/references/changesets-examples.md +97 -0
  37. package/skills/taskset/references/document-modeling-examples.md +63 -0
  38. package/skills/taskset/references/monorepo-task-modeling.md +125 -0
  39. package/skills/taskset/references/task-modeling-examples.md +249 -0
  40. package/skills/taskset-implement/SKILL.md +240 -0
  41. package/skills/taskset-implement/agents/openai.yaml +4 -0
  42. package/skills/taskset-implement/references/architecture/client-and-server.md +69 -0
  43. package/skills/taskset-implement/references/architecture/documentation-and-generated.md +72 -0
  44. package/skills/taskset-implement/references/architecture/ownership-and-dependencies.md +108 -0
  45. package/skills/taskset-implement/references/architecture/product-and-source.md +81 -0
  46. package/skills/taskset-implement/references/architecture/storage-and-snapshots.md +45 -0
  47. package/skills/taskset-implement/references/architecture.md +34 -0
  48. package/skills/taskset-implement/references/conventions/backend-and-tooling.md +33 -0
  49. package/skills/taskset-implement/references/conventions/design.md +38 -0
  50. package/skills/taskset-implement/references/conventions/interfaces-and-ui.md +50 -0
  51. package/skills/taskset-implement/references/conventions/naming-and-packages.md +64 -0
  52. package/skills/taskset-implement/references/conventions/task-files.md +94 -0
  53. package/skills/taskset-implement/references/conventions/tests-and-docs.md +55 -0
  54. package/skills/taskset-implement/references/conventions/typescript-and-exports.md +41 -0
  55. package/skills/taskset-implement/references/conventions.md +40 -0
  56. package/skills/taskset-implement/references/release.md +135 -0
  57. package/skills/taskset-implement/references/workflows/dependencies-and-docs-site.md +54 -0
  58. package/skills/taskset-implement/references/workflows/environment-and-pnpm.md +109 -0
  59. package/skills/taskset-implement/references/workflows/persisted-data-and-git.md +30 -0
  60. package/skills/taskset-implement/references/workflows/validation.md +34 -0
  61. package/skills/taskset-implement/references/workflows/vitest-and-test-strategy.md +82 -0
  62. package/skills/taskset-implement/references/workflows.md +33 -0
  63. package/src/cli.ts +640 -87
@@ -0,0 +1,249 @@
1
+ # Task Modeling Examples
2
+
3
+ Use these examples to choose task boundaries and metadata. The IDs in commands are placeholders for IDs returned by Taskset.
4
+
5
+ ## Split Independent Deliverables
6
+
7
+ Bad: one task titled `Do auth, docs, dashboard, and tests` with the entire prompt copied into its body. It hides ownership, progress, and sequencing.
8
+
9
+ Good: create separate tasks for the API, dashboard, and documentation when each produces a distinct outcome. Attach their relevant project and labels, and connect only genuine prerequisites.
10
+
11
+ ```bash
12
+ pnpm taskset task create --title "Expose session-expiry API" --project api --label auth
13
+ pnpm taskset task create --title "Show expired sessions in the dashboard" --project web --label auth --depends-on <api-task-id>
14
+ pnpm taskset task create --title "Document session-expiry behavior" --project docs --related <api-task-id>
15
+ ```
16
+
17
+ The dashboard is blocked by the API contract, so it depends on the API task. Documentation is related but need not be blocked if it can be drafted from the agreed contract.
18
+
19
+ ## Do Not Treat Prompt Order as Execution Order
20
+
21
+ Prompt: “Update the UI, define the migration, then add the backend field.”
22
+
23
+ Bad: make the migration depend on the UI because the UI appeared first.
24
+
25
+ Good: infer that the schema/migration and backend field are prerequisites for the UI when repository evidence supports that flow. Create prerequisite tasks first, then use their returned IDs in `--depends-on` for downstream work. If the UI can use a stable mocked contract, relate the tasks instead of inventing a blocker.
26
+
27
+ ## Checklist or Child Task
28
+
29
+ Both forms are subtasks. Prefer checklist items for steps that share one outcome; use Taskset child tasks when a step needs independent tracking.
30
+
31
+ Bad: create separately tracked tasks for tiny steps that share one outcome:
32
+
33
+ - Rename the function.
34
+ - Update one import.
35
+ - Run the focused test.
36
+
37
+ Good: keep them as checklist items in the body of one outcome-oriented task:
38
+
39
+ ```markdown
40
+ Rename the parser entrypoint without changing its public behavior.
41
+
42
+ ## Checklist
43
+
44
+ - [ ] Rename the function and its imports
45
+ - [ ] Update focused tests
46
+ - [ ] Run the parser test suite
47
+
48
+ ## Acceptance criteria
49
+
50
+ - The old symbol has no remaining callers.
51
+ - Parser tests pass without behavior changes.
52
+ ```
53
+
54
+ Use a child task with `--parent <parent-task-id>` instead if a step needs independent assignment, status, acceptance criteria, dependencies, or history.
55
+
56
+ ## Create Follow-Ups While Executing
57
+
58
+ Bad: while fixing a parser bug, discover a missing migration and a docs gap, finish the parser fix, and leave those findings only in the chat transcript.
59
+
60
+ Good: create Taskset follow-ups as soon as the work is clear. Use a child task when the new work belongs under the current outcome; create a sibling or related task when it is a distinct deliverable.
61
+
62
+ ```bash
63
+ pnpm taskset task create --title "Add migration for parser id format" --parent <parser-task-id> --depends-on <parser-task-id>
64
+ pnpm taskset task create --title "Document parser id format change" --project docs --related <parser-task-id>
65
+ ```
66
+
67
+ Do not close or abandon the current task without recording discovered follow-up work in Taskset.
68
+
69
+ ## Keep Status Current Through Execution
70
+
71
+ In this skill, "subtask" covers both Taskset child tasks and Markdown checklist items in a parent task body.
72
+
73
+ Bad: start implementation, finish three child tasks and several checklist steps, and leave the parent stuck in `todo` or `doing` with unchecked `- [ ]` items until a final cleanup pass—or mark the parent `done` while children or checklist items are still open.
74
+
75
+ Good: update progress as work proceeds.
76
+
77
+ ```bash
78
+ pnpm taskset task update <parent-task-id> --status doing
79
+ pnpm taskset task update <child-task-id> --status doing
80
+ # ... complete that child task's acceptance criteria ...
81
+ pnpm taskset task status <child-task-id> done
82
+ ```
83
+
84
+ For checklist subtasks, flip completed items from `- [ ]` to `- [x]` in the parent body as soon as each step finishes. After every tracked subtask is complete (children `done`, checklist items checked) and the parent criteria pass:
85
+
86
+ ```bash
87
+ pnpm taskset task status <parent-task-id> done
88
+ ```
89
+
90
+ Every completed subtask must be marked finished—child tasks via `done`, checklist items via `- [x]`. Update statuses and checklist state mid-work when progress or blockers change; do not wait until the session ends.
91
+
92
+ ## Capture Lasting Lessons in the Primary Skill
93
+
94
+ Bad: after three failed attempts, discover that Biome must run before the focused package test, close the task with that note in its body, and leave the session's primary skill unchanged so the next agent repeats the same failure.
95
+
96
+ Good: when the repository or session treats a skill as primary, fold the durable rule into that skill (or its references) as a short decision rule—for example preferred tool selection, a known failure mode and its fix, or an architecture constraint. Keep task-specific history in the task; keep reusable guidance in the skill.
97
+
98
+ Update the primary skill for lessons that future work should consider: tool or command choice, bug-fix patterns, repeated failures, and architecture decisions. Skip skill edits for one-off, task-local details that will not help later sessions.
99
+
100
+ ## Dependencies Versus Related Work
101
+
102
+ Bad: connect every task about authentication with `--depends-on`. Shared subject matter is not a blocker and can create false chains or cycles.
103
+
104
+ Good:
105
+
106
+ - Use `--depends-on <task-id>` when this task cannot begin or complete until that task delivers an input.
107
+ - Use `--related <task-id>` when tasks share context but can progress independently.
108
+ - Use `--parent <task-id>` for decomposition, not execution order. Add `--depends-on` separately if a child is genuinely blocked.
109
+
110
+ ## References Belong in the Relevant Body
111
+
112
+ Prompt: “Adopt Zod 4 for request validation; follow https://zod.dev/v4.”
113
+
114
+ Bad:
115
+
116
+ ```markdown
117
+ Upgrade validation.
118
+ ```
119
+
120
+ Good:
121
+
122
+ ```markdown
123
+ Adopt Zod 4 for request validation while preserving current error responses.
124
+
125
+ ## Acceptance criteria
126
+
127
+ - Request schemas use the supported Zod 4 APIs.
128
+ - Existing error-response contract tests pass.
129
+
130
+ ## References
131
+
132
+ - [Zod 4 documentation](https://zod.dev/v4) — migration and API reference supplied by the user.
133
+ ```
134
+
135
+ Copy the reference only into tasks where it informs the work, and retain the user's stated reason or constraint rather than saving a bare URL.
136
+
137
+ ## Update Without Clobbering Context
138
+
139
+ Bad: replace an existing body merely to change status, losing checked items, acceptance criteria, and references; or mark the task done because code was written even though validation remains unchecked.
140
+
141
+ Good: inspect the current task, apply the smallest update, preserve unrelated metadata, and reconcile the body with reality. Check completed checklist items, keep unfinished ones open, update relationships if scope changed, and set `done` only after the acceptance criteria are met.
142
+
143
+ ## Avoid Duplicate Work
144
+
145
+ Bad: create `Add retry handling` without checking whether an active retry task already exists.
146
+
147
+ Good: search current and recent tasks first. If the same outcome exists, update that task. If the new work is distinct but adjacent, create it and use `--related`. If a duplicate was already created and must remain for history, mark the duplicate relationship with `--duplicate` according to repository convention.
148
+
149
+ ## Record Repository Scope
150
+
151
+ Bad: label a task `core` but omit the known paths, making file-impact searches unable to connect it to the affected code.
152
+
153
+ Good: attach the narrowest established scope:
154
+
155
+ ```bash
156
+ pnpm taskset task create --title "Validate task dependency cycles" --project core --file packages/core/src/graph/taskGraph.ts
157
+ ```
158
+
159
+ Use `--directory` when the outcome genuinely spans a directory. Do not attach broad directories merely because the exact implementation is not yet known.
160
+
161
+ ## Recover From a Partial Batch
162
+
163
+ Bad: five creates were requested, the third command failed, and the agent reruns all five commands. The first two tasks now exist twice.
164
+
165
+ Good: retain the IDs and JSON output from successful creates, list the current tasks after the failure, then create or update only the missing work. Rebuild downstream `--depends-on`, `--related`, and `--parent` arguments from verified IDs rather than assumed command positions.
166
+
167
+ ## Close Rather Than Erase History
168
+
169
+ Bad: delete a completed task to clean up the active list, or use `--remove-dependencies` without inspecting downstream tasks.
170
+
171
+ Good: mark work `done` when its acceptance criteria pass. If work is superseded or duplicated, preserve the task and express that relationship according to repository convention. Delete only when removal itself is intended and its dependency impact has been inspected.
172
+
173
+ ## Owner and Assignees
174
+
175
+ Bad: omit ownership from every generated task, assign every task to every contributor mentioned in the prompt, or overwrite an explicitly assigned owner with the local Git identity.
176
+
177
+ Good: first resolve the repository's current Git user:
178
+
179
+ ```bash
180
+ git config --get user.name
181
+ ```
182
+
183
+ Use that value as the default owner when creating a task. If it returns `Alex Chen` and Alex will also implement the work:
184
+
185
+ ```bash
186
+ pnpm taskset task create --title "Validate task dependency cycles" --owner "Alex Chen" --assignee "Alex Chen"
187
+ ```
188
+
189
+ If the prompt explicitly makes Sam accountable while Alex implements it, preserve that distinction:
190
+
191
+ ```bash
192
+ pnpm taskset task create --title "Validate task dependency cycles" --owner "Sam Rivera" --assignee "Alex Chen"
193
+ ```
194
+
195
+ Use multiple `--assignee` options only when each named person is genuinely expected to execute part of the task. Code ownership, package maintainership, or prior review can inform investigation, but does not by itself authorize assigning a person.
196
+
197
+ When a cross-package plan is split, choose owner and assignees per resulting task rather than copying the parent task's people blindly. Do not change existing ownership while updating unrelated metadata.
198
+
199
+ ## Pre-Execution Ownership Check
200
+
201
+ Current Git user: `Alex Chen`.
202
+
203
+ ### Current User Is Assigned
204
+
205
+ Task metadata:
206
+
207
+ ```yaml
208
+ owner: Sam Rivera
209
+ assignees:
210
+ - Alex Chen
211
+ ```
212
+
213
+ Good: Alex may execute the task because Alex is an explicit assignee. Keep Sam as owner unless the user requests an accountability change.
214
+
215
+ Bad: stop merely because owner and assignee differ, or replace Sam with Alex automatically.
216
+
217
+ ### Task Belongs to Someone Else
218
+
219
+ Task metadata:
220
+
221
+ ```yaml
222
+ owner: Sam Rivera
223
+ assignees:
224
+ - Priya Shah
225
+ ```
226
+
227
+ Prompt: “Work on the next open task.”
228
+
229
+ Good: inspect and report the task, then ask whether Alex should proceed or take it over before changing status, assignment, task contents, or repository code.
230
+
231
+ Bad: treat the generic prompt as permission, set the task to `doing`, add Alex as an assignee, or start implementation without surfacing the ownership conflict.
232
+
233
+ ### Specific Execution Is Explicitly Authorized
234
+
235
+ Task metadata still names Sam and Priya, but the user says: “Alex, implement `TS-...` now; do not reassign it.”
236
+
237
+ Good: this explicitly authorizes execution of the identified task. Proceed while preserving its owner and assignees as directed.
238
+
239
+ Bad: ask the same execution question again, or interpret authorization to execute as authorization to replace the owner.
240
+
241
+ ### Takeover Includes Assignment Change
242
+
243
+ The user says: “Take over `TS-...` and assign it to the current Git user.”
244
+
245
+ Good: preserve the existing owner unless the user also requests an owner change, add or replace assignees according to the explicit instruction and repository convention, then begin work.
246
+
247
+ Bad: silently transfer ownership as well, or retain an assignee list that no longer represents who is expected to perform the task.
248
+
249
+ Read-only task inspection is allowed in every scenario above. The confirmation gate applies before mutations or execution, and it does not bypass unresolved dependencies or explicit blockers.
@@ -0,0 +1,240 @@
1
+ ---
2
+ name: taskset-implement
3
+ description: Repository-specific engineering standards for Taskset. Use when planning, implementing, reviewing, testing, documenting, releasing, or restructuring this repository, especially for the offline Git-native Markdown data model, package ownership, feature-based clients, DDD-lite modular core and server code, pnpm and Turbo workflows, TypeScript conventions, tests, and Changesets.
4
+ ---
5
+
6
+ # Taskset Implementation Standards
7
+
8
+ Apply these standards to every Taskset repository task. Treat them as decision
9
+ rules, not as a substitute for reading the code involved.
10
+
11
+ ## Skill Resources
12
+
13
+ Load only the references relevant to the task. The top-level reference files
14
+ are routing maps; after reading the relevant map, load only the topic files it
15
+ names for the work in front of you:
16
+
17
+ - [architecture.md](references/architecture.md): route to product/source,
18
+ ownership/dependency, client/server, storage/snapshot, documentation, and
19
+ generated-source architecture references
20
+ - [conventions.md](references/conventions.md): route to design, naming,
21
+ TypeScript, task entity, interface/UI, backend/tooling, test, and
22
+ documentation convention references
23
+ - [workflows.md](references/workflows.md): route to environment, pnpm, Turbo,
24
+ dependency, docs-site, validation, Vitest, persisted-data, and Git workflow
25
+ references
26
+ - [release.md](references/release.md): Changesets, compatibility, commit
27
+ language, and completion requirements
28
+ - [`docs/maintainers/technology.md`](../../docs/maintainers/technology.md): preferred
29
+ TanStack frontend tools, TypeScript/NestJS and Rust backend choices, and
30
+ MariaDB/PostgreSQL database defaults
31
+
32
+ If a referenced skill file does not exist, report the missing file, state which
33
+ decisions cannot be made without it, and continue only with rules defined in
34
+ this skill; do not infer conventions from absence.
35
+
36
+ `agents/openai.yaml` is discovery and UI metadata. Do not load it as an
37
+ instruction reference.
38
+
39
+ ## Start With Judgment
40
+
41
+ 1. Read the complete request before planning or acting. For a multi-part
42
+ request, identify dependencies, contradictions, and shared owners across all
43
+ items before changing any one item.
44
+ 2. Turn multi-part work into a prioritized checklist. Close every requested
45
+ item as implemented, already satisfied, or intentionally unnecessary with a
46
+ concrete reason; do not silently drop notes or late dependencies.
47
+ 3. Parse the request into intent, constraints, affected owners, and a concrete
48
+ completion condition.
49
+ 4. Inspect the worktree, manifests, relevant implementation, tests, and
50
+ executable configuration before proposing or editing.
51
+ 5. Challenge an approach that creates a second source of truth, bypasses core
52
+ validation, weakens deterministic file behavior, or crosses package
53
+ ownership without a contract.
54
+ 6. If a requested change appears unreasonable, internally contradictory,
55
+ destructive, or incompatible with established product contracts, explain
56
+ the concrete concern and ask for explicit confirmation before implementing
57
+ it. If the request still does not yield a concrete completion condition,
58
+ ask one focused question about the single most consequential missing piece
59
+ before implementing anything.
60
+ 7. Recover decisions from the repository before asking questions. Ask only when
61
+ a consequential product or data-format decision remains unresolved.
62
+ 8. Treat related work as one dependency graph. Keep schemas, core behavior,
63
+ clients, tests, docs, and release metadata consistent.
64
+ 9. Update this skill and its relevant references in the same change whenever
65
+ authoritative paths, package names, commands, architecture, product
66
+ contracts, documentation workflows, or completion rules change. Never leave
67
+ the skill knowingly stale.
68
+
69
+ Do not implement a request merely because it was requested. Establish that the
70
+ outcome is coherent with Taskset's Git-native contract first.
71
+
72
+ ## Establish Authority
73
+
74
+ When repository sources disagree, use this order:
75
+
76
+ 1. Current user constraints and the actual task.
77
+ 2. Executable manifests and tooling: `package.json`, `pnpm-workspace.yaml`,
78
+ `turbo.json`, `tsconfig.json`, and `biome.json`.
79
+ 3. Current implementation and tests.
80
+ 4. Current first-party documentation and this skill.
81
+ 5. Product plans and historical notes for intent only.
82
+
83
+ If current user constraints conflict with a non-negotiable product invariant
84
+ listed in Preserve Product Invariants, the invariant takes precedence. Explain
85
+ the conflict to the user and request an explicit override with rationale before
86
+ proceeding.
87
+
88
+ Do not turn accidental manifest mistakes, empty packages, or placeholder
89
+ dependencies into conventions. Report them and follow the intended
90
+ `@taskset/<directory-name>` ownership model.
91
+
92
+ ## Preserve Product Invariants
93
+
94
+ Read [architecture.md](references/architecture.md), then the task-relevant
95
+ architecture topic file, before changing package boundaries, entity formats,
96
+ filesystem behavior, graph semantics, or interface contracts.
97
+
98
+ Non-negotiable rules:
99
+
100
+ - Human-readable files under `.taskset/` are the persistent source of truth.
101
+ - Git provides history, transport, branching, and review; hidden databases do
102
+ not become authoritative.
103
+ - Generated views, caches, and in-memory indexes are disposable and rebuildable
104
+ from canonical files.
105
+ - `@taskset/core` owns domain behavior, parsing orchestration, validation,
106
+ filesystem mutation, indexing, graph rules, search, and lifecycle transitions.
107
+ - CLI, TUI, MCP, extension, Kanban, and Office are interfaces over the same core
108
+ contracts. They do not reimplement Taskset semantics.
109
+ - `@taskset/contracts` owns shared runtime schemas and TypeScript contracts
110
+ without filesystem, lifecycle, or UI behavior.
111
+ - `@taskset/utils` stays domain-light. Task graph policy and entity lifecycle
112
+ logic belong in core.
113
+ - External integrations are adapters and synchronized views. They do not become
114
+ the silent source of truth.
115
+ - Persisted format changes require explicit compatibility and migration
116
+ decisions.
117
+ - Canonical task files use one strict versionless metadata shape. Versioned
118
+ task frontmatter and unknown fields are rejected.
119
+ - Canonical supporting documents live in kind-specific `.taskset/` directories:
120
+ stories, flows, decisions, research, and runbooks. Use their shared strict
121
+ metadata (aligned with task planning, people, path, and relationship fields)
122
+ and kind-specific body templates instead of modeling every durable document
123
+ as a task. Documents expose the same create, update, status, delete, list
124
+ query, search, impact, and derived-relationship operations as tasks, with
125
+ document-specific statuses.
126
+ - Document mutations, imports, exports, and batches belong to core. The CLI
127
+ validates manifests and renders output only. Use TanStack Pacer for bounded
128
+ heavy batches and migrations, emit count and percentage progress, preserve
129
+ manifest result order, and serialize writes that allocate short hex IDs plus
130
+ filename display sequences.
131
+ - Disposable metadata indexes live in each entity folder's `.generated/`
132
+ directory (for example `.taskset/tasks/.generated/` and
133
+ `.taskset/research/.generated/`), not a global `.taskset/generated/` tree.
134
+ - Repository sync is the maintenance entrypoint: ensure canonical `.taskset/`
135
+ directories, migrate task and document IDs to immutable short hex IDs,
136
+ normalize `{sequence}-{slug}-{id}.md` filenames, repair duplicate sequence
137
+ prefixes by `createdAt`, rewrite repository text references atomically,
138
+ refresh data `.gitignore` rules for scoped generated output, remove legacy
139
+ global generated directories, then rebuild disposable generated views.
140
+ - The nearest `.taskset/` directory marks the repository root. Optional
141
+ `taskset.config.ts` at that root configures validated project metadata and
142
+ task creation defaults. Missing config uses built-in defaults. Config never
143
+ relocates canonical `.taskset/` data or becomes a second task store.
144
+ - Taskset is developed using its own `.taskset/` data, optional root config,
145
+ CLI, and canonical task files. Keep that dogfooding workflow operational when
146
+ changing core, CLI, workspace commands, or persisted contracts.
147
+ - Public docs split three audiences: humans (`docs/`), agents (`docs/agents/`
148
+ plus `skills/` and root `AGENTS.md`), and maintainers (`docs/maintainers/`).
149
+
150
+ ## Organize by Ownership
151
+
152
+ Use the architecture appropriate to the owning surface:
153
+
154
+ - Use feature-based architecture for UI and interface packages such as Kanban,
155
+ Office, extension, TUI, and CLI.
156
+ - Use a small DDD-style modular monolith for `@taskset/core` and any future
157
+ server runtime. Organize by domain module first, then separate domain,
158
+ application, and infrastructure layers within a module only when each layer
159
+ contains at least one type, function, or class that is not a direct
160
+ delegation to another layer and that has independent test coverage.
161
+ - Keep domain modules in one deployable codebase until independent deployment
162
+ is justified. Do not introduce microservices, message brokers, or distributed
163
+ persistence for organizational aesthetics.
164
+ - Colocate feature or module behavior, adapters, tests, and fixtures.
165
+ - Keep a `README.md` in every package and app that states its ownership and
166
+ current contents.
167
+ - Keep public usage guidance in `README.md` and `docs/`; keep repository
168
+ architecture and engineering guidance in `docs/maintainers/`.
169
+ - Keep canonical website blog posts in `apps/www/posts/`; do not duplicate them
170
+ in `docs/`.
171
+ - Promote code to a shared package only when two or more distinct packages
172
+ require the same logic and that logic has a defined, versioned interface that
173
+ is not expected to change with each consuming feature's evolution.
174
+ - Keep client-specific state and presentation in the client. Keep shared domain
175
+ rules in core.
176
+
177
+ Read [conventions.md](references/conventions.md), then the task-relevant
178
+ conventions topic file, before adding or renaming source files, packages,
179
+ exports, public types, entity fields, commands, or scripts.
180
+
181
+ ## Execute Safely
182
+
183
+ 1. [always] Before editing:
184
+ - Run `git status --short --branch`.
185
+ - Identify user-owned changes and work with them.
186
+ - Search for existing contracts, helpers, schemas, commands, and tests.
187
+ - Determine whether each target is owned source, canonical Taskset data,
188
+ generated output, or cache.
189
+ - Read [workflows.md](references/workflows.md), then the task-relevant
190
+ workflow topic file, for current commands and validation.
191
+ 2. [always] While editing:
192
+ - Keep changes in the owning layer and update required dependents.
193
+ - Use `workspace:*` for internal dependencies.
194
+ - Declare each imported dependency in the importing package manifest.
195
+ - Consume workspace code through package exports, never sibling `src/`
196
+ paths.
197
+ - Do not use TypeScript `paths` to bypass package boundaries.
198
+ - Do not hand-edit generated output or caches.
199
+ - Use structured YAML and Markdown parsers for entity files.
200
+ - Keep serialization deterministic and filesystem writes failure-safe.
201
+ - Prefer test-first work for domain rules, bug fixes, parsers, migrations,
202
+ and lifecycle transitions. During exploratory spikes, defer tests until
203
+ the approach stabilizes, then add the minimum focused tests before the
204
+ change is complete.
205
+ - Add the minimum number of focused tests that assert the specified behavior
206
+ and cover task-specific edge cases such as malformed input, boundary
207
+ values, and failure paths where applicable. Do not add tests for
208
+ implementation details or untested assumptions.
209
+ 3. [always] Verify by risk:
210
+ - Run the narrowest useful check first, then broaden.
211
+ - Focused unit or fixture test.
212
+ - Owning package test and type/build check.
213
+ - Root Biome check and relevant Turbo tasks.
214
+ - Cross-package integration test.
215
+ - CLI, MCP, filesystem, or UI workflow test when behavior crosses those
216
+ boundaries.
217
+ - For persisted data behavior, include malformed input, round-trip
218
+ stability, path normalization, graph integrity, and interrupted-write
219
+ cases as relevant.
220
+ - Never claim a check passed unless it ran successfully.
221
+ 4. [always] Before completion:
222
+ - Run `git diff --check` and review the scoped diff.
223
+ - Confirm canonical `.taskset/` files remain the only persistent authority.
224
+ - Confirm package dependencies point inward toward contracts, utilities,
225
+ and core, not sideways between clients.
226
+ - Update `docs/` and this skill when the change alters product behavior,
227
+ architecture, commands, persisted formats, or repository workflows.
228
+ - Add a Changeset when release policy is configured and versioned behavior
229
+ changed.
230
+ - If release policy configuration is absent or ambiguous, report the gap
231
+ and do not add a Changeset. If it is unclear whether a behavior change is
232
+ versioned, default to adding a Changeset with a patch bump and note the
233
+ uncertainty in the Changeset summary.
234
+ - Do not add a Changeset for skill-only, test-only, formatting-only, or
235
+ internal documentation changes.
236
+ - Report behavior, affected boundaries, checks run, and pre-existing
237
+ failures.
238
+
239
+ Read [release.md](references/release.md) for compatibility and definition of
240
+ done.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Taskset Standards"
3
+ short_description: "Apply Taskset architecture and workflow rules"
4
+ default_prompt: "Use $taskset-implement to apply Taskset storage, modular architecture, naming, testing, documentation, and release conventions to this change."
@@ -0,0 +1,69 @@
1
+ # Client And Server Architecture
2
+
3
+ Feature-based clients and the DDD-lite modular monolith for core and server code.
4
+
5
+ ## Client and Server Architecture
6
+
7
+ ### Feature-based clients
8
+
9
+ Apply FBA to presentation and interaction surfaces: Kanban, Office, extension,
10
+ TUI, CLI, and the documentation website.
11
+
12
+ Example feature roots:
13
+
14
+ ```text
15
+ src/
16
+ ├── tasks/
17
+ ├── search/
18
+ ├── graph/
19
+ ├── projects/
20
+ ├── context/
21
+ └── shared/
22
+ ```
23
+
24
+ Guidelines:
25
+
26
+ - Colocate feature implementation, tests, fixtures, and presentation.
27
+ - Keep package entrypoints thin.
28
+ - Use `shared/` only for code genuinely shared by several features in that
29
+ package.
30
+ - Promote behavior to `contracts`, `utils`, or `core` only when its ownership
31
+ matches that package.
32
+ - Avoid generic catch-all modules such as a growing `helpers.ts`.
33
+ - Keep board state in Kanban, editor state in the extension, terminal state in
34
+ TUI, and stakeholder presentation in Office.
35
+
36
+ ### DDD-lite modular monolith
37
+
38
+ Use a modular monolith for core and future server-side code. Organize by domain
39
+ module before technical layer:
40
+
41
+ ```text
42
+ src/
43
+ ├── tasks/
44
+ │ ├── domain/
45
+ │ ├── application/
46
+ │ └── infrastructure/
47
+ ├── graph/
48
+ ├── projects/
49
+ ├── search/
50
+ └── repository/
51
+ ```
52
+
53
+ Keep this deliberately small:
54
+
55
+ - `domain/` contains entities, value objects, invariants, and pure policies.
56
+ - `application/` contains use cases and ports that coordinate domain behavior.
57
+ - `infrastructure/` contains filesystem, Git, process, network, and framework
58
+ adapters.
59
+ - Omit a layer when a module does not need it.
60
+ - Communicate between modules through explicit public APIs, not internal file
61
+ imports.
62
+ - Keep one process and one deployable unit until scale or isolation provides a
63
+ measured reason to split it.
64
+
65
+ `@taskset/core` is the reusable modular domain engine. If remote Office or
66
+ hosted collaboration later requires a server, introduce `apps/server/` as a
67
+ thin composition root over core. The server owns transport, authentication,
68
+ authorization, repository checkout, concurrency, and process lifecycle. It
69
+ does not become a second implementation of Taskset rules.
@@ -0,0 +1,72 @@
1
+ # Documentation And Generated Sources
2
+
3
+ Documentation architecture, interface boundaries, integrations, and generated sources.
4
+
5
+ ## Documentation Architecture
6
+
7
+ `docs/` is the canonical source for documentation. Its top-level pages contain
8
+ user-facing product guidance. `docs/maintainers/` owns product direction,
9
+ architecture, ADRs, engineering workflows, and technology policy. Keep the
10
+ maintainer section visibly separate from the primary usage flow.
11
+
12
+ `apps/www/` renders `docs/` through Nextra. Its `content` symlink points to the
13
+ root `docs/` directory so the app does not maintain a copied documentation
14
+ tree. Top-level usage docs and `docs/maintainers/` use separate route layouts
15
+ and page maps so their navigation stays audience-specific. Chronological
16
+ release and project posts are a separate website-owned content type stored
17
+ canonically in `apps/www/posts/`.
18
+
19
+ Use plain Markdown by default. Use MDX only when a page needs an interactive
20
+ component. Keep frontmatter compatible with the documentation renderer.
21
+
22
+ Recommended website stack:
23
+
24
+ - Next.js App Router because the repository already carries a Next.js shared
25
+ configuration and `apps/www` also owns marketing pages
26
+ - Nextra with the stock docs and blog themes
27
+ - Nextra's standard content-directory catch-all route
28
+ - route-isolated docs and blog layouts with separate MDX component sets
29
+ - self-hosted search initially; no CMS or remote content database
30
+
31
+ Register blog posts in the app-local post registry so static export can
32
+ enumerate `/posts/[slug]`. Keep blog posts in plain Markdown by default with
33
+ `title`, `description`, and `date` frontmatter. Do not merge docs and blog theme
34
+ wrappers in the global MDX component map. Agent operating pages live under
35
+ `docs/agents/` and appear in usage navigation; maintainer pages stay under
36
+ `/maintainers`.
37
+
38
+ Keep architectural decisions under
39
+ `docs/maintainers/architecture/decisions/`.
40
+ Update user docs, maintainer docs, tests, and this standards skill together
41
+ when their contracts change.
42
+
43
+ ## Interfaces and Integrations
44
+
45
+ - CLI commands are scriptable: stable exit codes, useful stdout, diagnostics on
46
+ stderr, and structured output when supported.
47
+ - MCP tools expose the same validated operations as CLI and other clients. MCP
48
+ must not bypass filesystem, graph, or lifecycle rules.
49
+ - TUI, Kanban, extension, and Office are projections over core state, not
50
+ independent stores.
51
+ - Office needs an explicit repository, branch, authentication, refresh, and
52
+ write-concurrency model before it performs remote mutations.
53
+ - Integration packages use explicit import, export, or synchronization
54
+ contracts. Conflicts and ownership direction must be visible.
55
+ - GitHub, Jira, Linear, ClickUp, and Notion are integrations, not implicit
56
+ authorities.
57
+
58
+ ## Generated Sources
59
+
60
+ Treat these as generated or ephemeral unless an owning tool says otherwise:
61
+
62
+ - `node_modules/`
63
+ - `dist/`, `build/`, `out/`, `.next/`
64
+ - `.turbo/`, coverage, logs, and `*.tsbuildinfo`
65
+ - `.taskset/tasks/.generated/` and each document-kind `.generated/` directory
66
+ - `.taskset/cache/`
67
+ - `.taskset/snapshots/`
68
+ - Nextra and Next.js generated website output
69
+ - legacy `.taskset/generated/` (removed by `generate` / `sync`)
70
+
71
+ Change the source or generator, then regenerate. Never make a manual output edit
72
+ the final implementation.