taskplane 0.0.1 → 0.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/LICENSE +21 -0
- package/README.md +2 -20
- package/bin/taskplane.mjs +706 -0
- package/dashboard/public/app.js +900 -0
- package/dashboard/public/index.html +92 -0
- package/dashboard/public/style.css +924 -0
- package/dashboard/server.cjs +531 -0
- package/extensions/task-orchestrator.ts +28 -0
- package/extensions/task-runner.ts +1923 -0
- package/extensions/taskplane/abort.ts +466 -0
- package/extensions/taskplane/config.ts +102 -0
- package/extensions/taskplane/discovery.ts +988 -0
- package/extensions/taskplane/engine.ts +758 -0
- package/extensions/taskplane/execution.ts +1752 -0
- package/extensions/taskplane/extension.ts +577 -0
- package/extensions/taskplane/formatting.ts +718 -0
- package/extensions/taskplane/git.ts +38 -0
- package/extensions/taskplane/index.ts +22 -0
- package/extensions/taskplane/merge.ts +795 -0
- package/extensions/taskplane/messages.ts +134 -0
- package/extensions/taskplane/persistence.ts +1121 -0
- package/extensions/taskplane/resume.ts +1092 -0
- package/extensions/taskplane/sessions.ts +92 -0
- package/extensions/taskplane/types.ts +1514 -0
- package/extensions/taskplane/waves.ts +900 -0
- package/extensions/taskplane/worktree.ts +1624 -0
- package/package.json +48 -3
- package/skills/create-taskplane-task/SKILL.md +326 -0
- package/skills/create-taskplane-task/references/context-template.md +78 -0
- package/skills/create-taskplane-task/references/prompt-template.md +246 -0
- package/templates/agents/task-merger.md +256 -0
- package/templates/agents/task-reviewer.md +81 -0
- package/templates/agents/task-worker.md +140 -0
- package/templates/config/task-orchestrator.yaml +89 -0
- package/templates/config/task-runner.yaml +99 -0
- package/templates/tasks/CONTEXT.md +31 -0
- package/templates/tasks/EXAMPLE-001-hello-world/PROMPT.md +90 -0
- package/templates/tasks/EXAMPLE-001-hello-world/STATUS.md +73 -0
package/package.json
CHANGED
|
@@ -1,11 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "taskplane",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "AI agent orchestration for pi — parallel task execution with checkpoint discipline",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pi-package",
|
|
7
|
+
"ai",
|
|
8
|
+
"agent",
|
|
9
|
+
"orchestration",
|
|
10
|
+
"task-runner",
|
|
11
|
+
"parallel"
|
|
12
|
+
],
|
|
13
|
+
"bin": {
|
|
14
|
+
"taskplane": "./bin/taskplane.mjs"
|
|
15
|
+
},
|
|
16
|
+
"pi": {
|
|
17
|
+
"extensions": [
|
|
18
|
+
"./extensions"
|
|
19
|
+
],
|
|
20
|
+
"skills": [
|
|
21
|
+
"./skills"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"type": "module",
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=20.0.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin/",
|
|
30
|
+
"dashboard/",
|
|
31
|
+
"extensions/task-runner.ts",
|
|
32
|
+
"extensions/task-orchestrator.ts",
|
|
33
|
+
"extensions/taskplane/",
|
|
34
|
+
"skills/",
|
|
35
|
+
"templates/"
|
|
36
|
+
],
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@mariozechner/pi-coding-agent": "*",
|
|
39
|
+
"@mariozechner/pi-tui": "*",
|
|
40
|
+
"@mariozechner/pi-ai": "*",
|
|
41
|
+
"@sinclair/typebox": "*"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"yaml": "^2.4.0"
|
|
45
|
+
},
|
|
6
46
|
"license": "MIT",
|
|
7
47
|
"repository": {
|
|
8
48
|
"type": "git",
|
|
9
49
|
"url": "https://github.com/HenryLach/taskplane.git"
|
|
10
|
-
}
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/HenryLach/taskplane#readme",
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/HenryLach/taskplane/issues"
|
|
54
|
+
},
|
|
55
|
+
"author": "Henry Lach"
|
|
11
56
|
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-taskplane-task
|
|
3
|
+
description: Creates structured Taskplane task packets (PROMPT.md, STATUS.md) for autonomous agent execution via the task-runner and task-orchestrator extensions. Use when asked to "create a task", "create a taskplane task", "stage a task", "prepare a task for execution", "write a PROMPT.md", "set up work for the agent", "queue a task", or whenever the user wants to define work that will be executed autonomously by another agent instance.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Create Taskplane Task
|
|
7
|
+
|
|
8
|
+
Creates structured task packets (PROMPT.md + STATUS.md) for autonomous execution
|
|
9
|
+
via the **task-runner extension** and parallel batch execution via the
|
|
10
|
+
**task-orchestrator extension**. The extensions handle the execution loop,
|
|
11
|
+
fresh-context management, cross-model reviews, wave scheduling, and live
|
|
12
|
+
dashboard — so PROMPT.md stays focused on WHAT to do, not HOW to execute.
|
|
13
|
+
|
|
14
|
+
## Architecture
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
create-taskplane-task skill → Creates PROMPT.md + STATUS.md
|
|
18
|
+
task-runner extension → Executes the task autonomously
|
|
19
|
+
├─ task-worker.md agent → Worker system prompt (checkpoint discipline, resume logic)
|
|
20
|
+
├─ task-reviewer.md agent → Reviewer system prompt (review formats, criteria)
|
|
21
|
+
└─ task-runner.yaml config → Project-specific settings, paths, standards
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The skill only creates files. All execution behavior lives in the extension and agents.
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
**If `.pi/task-runner.yaml` does not exist**, the project has not been initialized.
|
|
29
|
+
Tell the user to run `taskplane init` first — the skill cannot create tasks
|
|
30
|
+
without knowing where task areas live.
|
|
31
|
+
|
|
32
|
+
## Configuration
|
|
33
|
+
|
|
34
|
+
**Read `.pi/task-runner.yaml` before creating any task.** It contains:
|
|
35
|
+
- `task_areas` — folder paths, prefixes, CONTEXT.md locations per area
|
|
36
|
+
- `reference_docs` — available Tier 3 docs for "Context to Read First"
|
|
37
|
+
- `standards` — project coding rules and standards docs
|
|
38
|
+
- `testing.commands` — how to run tests
|
|
39
|
+
- `self_doc_targets` — where agents log discoveries
|
|
40
|
+
- `protected_docs` — docs requiring user approval to modify
|
|
41
|
+
- `never_load` — docs to exclude from task execution context
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Task Creation Workflow
|
|
46
|
+
|
|
47
|
+
### Step 1: Determine Location & Next ID
|
|
48
|
+
|
|
49
|
+
The user will rarely specify which area to use — **figure it out from context.**
|
|
50
|
+
|
|
51
|
+
**When there's only one area** (typical for new projects), use it directly.
|
|
52
|
+
|
|
53
|
+
**When there are multiple areas**, match the task to the right area:
|
|
54
|
+
|
|
55
|
+
1. Read `.pi/task-runner.yaml` → `task_areas` to get all areas
|
|
56
|
+
2. Read each area's `CONTEXT.md` — the "Current State" section describes what
|
|
57
|
+
that area owns (its domain, services, file scope)
|
|
58
|
+
3. Match the task description to the area whose scope best fits:
|
|
59
|
+
- A task about PTO accrual → `time-off` area
|
|
60
|
+
- A task about the orchestrator itself → `task-system` area
|
|
61
|
+
- A task about login flows → `identity-access` area
|
|
62
|
+
4. If ambiguous (task spans multiple areas), prefer the area that owns the
|
|
63
|
+
primary file being modified, or ask the user
|
|
64
|
+
|
|
65
|
+
**After selecting the area:**
|
|
66
|
+
|
|
67
|
+
1. Read that area's `CONTEXT.md` and find the `Next Task ID` counter
|
|
68
|
+
2. Use that ID for the new task
|
|
69
|
+
3. **Increment the counter** in the same CONTEXT.md edit
|
|
70
|
+
|
|
71
|
+
**Note:** Task area structures evolve over time. A new project starts with a
|
|
72
|
+
single `taskplane-tasks/` folder and one area. As the project grows, users add
|
|
73
|
+
domains and platform areas in `task-runner.yaml`. The skill adapts — it always
|
|
74
|
+
reads the config to discover what areas exist rather than assuming a layout.
|
|
75
|
+
|
|
76
|
+
### Step 2: Assess Complexity & Size
|
|
77
|
+
|
|
78
|
+
See [Complexity Assessment](#complexity-assessment) and [Task Sizing](#task-sizing).
|
|
79
|
+
|
|
80
|
+
### Step 3: Create Task Folder
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
{area.path}/{PREFIX-###-slug}/
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Step 4: Create PROMPT.md
|
|
87
|
+
|
|
88
|
+
Use the template in [references/prompt-template.md](references/prompt-template.md).
|
|
89
|
+
|
|
90
|
+
### Step 5: Create STATUS.md
|
|
91
|
+
|
|
92
|
+
Use the STATUS.md template in [references/prompt-template.md](references/prompt-template.md).
|
|
93
|
+
(If omitted, the task-runner extension auto-generates it from PROMPT.md.)
|
|
94
|
+
|
|
95
|
+
### Step 6: Update Tracking
|
|
96
|
+
|
|
97
|
+
- **CONTEXT.md** — Increment `Next Task ID` (done in Step 1)
|
|
98
|
+
- **PROGRESS.md** — Add row to "Active Tasks" table
|
|
99
|
+
|
|
100
|
+
### Step 7: Report Launch Command
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
/task {area.path}/{PREFIX-###-slug}/PROMPT.md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Complexity Assessment
|
|
109
|
+
|
|
110
|
+
Evaluate the task to determine cross-model review level.
|
|
111
|
+
|
|
112
|
+
### Review Levels
|
|
113
|
+
|
|
114
|
+
| Level | Label | Reviewer Calls |
|
|
115
|
+
|-------|-------|----------------|
|
|
116
|
+
| 0 | None | Zero — doc updates, config, boilerplate |
|
|
117
|
+
| 1 | Plan Only | Plan review before implementation |
|
|
118
|
+
| 2 | Plan + Code | Plan review + code review after implementation |
|
|
119
|
+
| 3 | Full | Plan + code + test review |
|
|
120
|
+
|
|
121
|
+
### Scoring (0-2 per dimension, sum for level)
|
|
122
|
+
|
|
123
|
+
| Dimension | 0 (Low) | 1 (Medium) | 2 (High) |
|
|
124
|
+
|-----------|---------|------------|----------|
|
|
125
|
+
| **Blast radius** | Single file | Single service | Multiple services |
|
|
126
|
+
| **Pattern novelty** | Existing patterns | Adapting patterns | New patterns |
|
|
127
|
+
| **Security** | No auth/data | Touches auth | Modifies auth/encryption |
|
|
128
|
+
| **Reversibility** | Easy revert | Needs migration | Data model change |
|
|
129
|
+
|
|
130
|
+
- Score 0-1 → Level 0 · Score 2-3 → Level 1 · Score 4-5 → Level 2 · Score 6-8 → Level 3
|
|
131
|
+
|
|
132
|
+
### Per-Step Override
|
|
133
|
+
|
|
134
|
+
Individual steps can override the task-level review:
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
### Step 3: Add RBAC middleware
|
|
138
|
+
> **Review override: code review** — This step touches authorization.
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Task Sizing
|
|
144
|
+
|
|
145
|
+
| Size | Duration | Action |
|
|
146
|
+
|------|----------|--------|
|
|
147
|
+
| **S** | < 2 hours | Create as-is |
|
|
148
|
+
| **M** | 2-4 hours | Ideal size — create as-is |
|
|
149
|
+
| **L** | 4-8 hours | Split if possible |
|
|
150
|
+
| **XL** | 8+ hours | **Must split** into M/L tasks with dependencies |
|
|
151
|
+
|
|
152
|
+
**Rule of thumb:** More than ~3 major implementation steps → split it.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Tiered Context Loading
|
|
157
|
+
|
|
158
|
+
PROMPT.md tells the worker what to load. Less is better.
|
|
159
|
+
|
|
160
|
+
| Tier | What | Loaded By |
|
|
161
|
+
|------|------|-----------|
|
|
162
|
+
| **1** | PROMPT.md + STATUS.md | Always (automatic) |
|
|
163
|
+
| **2** | Area CONTEXT.md | When referenced in "Context to Read First" |
|
|
164
|
+
| **3** | Specific reference docs | Only the docs this task needs |
|
|
165
|
+
|
|
166
|
+
Populate "Context to Read First" in PROMPT.md using docs from
|
|
167
|
+
`task-runner.yaml → reference_docs`. List only what the task actually needs.
|
|
168
|
+
|
|
169
|
+
Docs in `task-runner.yaml → never_load` must NOT appear in any task.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## STATUS.md Hydration
|
|
174
|
+
|
|
175
|
+
STATUS.md is the worker's ONLY memory between iterations. Granularity directly
|
|
176
|
+
determines how much progress survives when an iteration ends mid-step.
|
|
177
|
+
|
|
178
|
+
### Task Creator Responsibilities
|
|
179
|
+
|
|
180
|
+
**Pre-hydrate STATUS.md to match PROMPT.md granularity.** Since the skill creates
|
|
181
|
+
both files at the same time, there is no reason for STATUS.md to be coarser than
|
|
182
|
+
PROMPT.md.
|
|
183
|
+
|
|
184
|
+
| PROMPT.md says | STATUS.md should have |
|
|
185
|
+
|----------------|-----------------------|
|
|
186
|
+
| "Implement Create, Update, Get, List, Publish, Clone" | One checkbox per method (6 checkboxes) |
|
|
187
|
+
| "Test happy path, validation, auth, tenant isolation" | One checkbox per test category (4 checkboxes) |
|
|
188
|
+
| "Create file X, file Y, file Z" | One checkbox per file (3 checkboxes) |
|
|
189
|
+
|
|
190
|
+
**Use `⚠️ Hydrate` markers** for steps that genuinely depend on runtime
|
|
191
|
+
discoveries — where the task creator cannot know the items upfront:
|
|
192
|
+
|
|
193
|
+
```markdown
|
|
194
|
+
### Step 3: Create Task Files
|
|
195
|
+
**Status:** ⬜ Not Started
|
|
196
|
+
> ⚠️ Hydrate: Expand with per-item checkboxes once Step 2 identifies the task list
|
|
197
|
+
|
|
198
|
+
- [ ] Read create-taskplane-task skill and prompt template
|
|
199
|
+
- [ ] Create task files (expand after Step 2)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**When to use markers vs. pre-hydration:**
|
|
203
|
+
|
|
204
|
+
| Situation | Approach |
|
|
205
|
+
|-----------|----------|
|
|
206
|
+
| Items are known at creation time | Pre-hydrate (one checkbox per item) |
|
|
207
|
+
| Items depend on analysis/discovery in a prior step | `⚠️ Hydrate` marker |
|
|
208
|
+
| Items depend on what exists on disk (preflight) | `⚠️ Hydrate` marker |
|
|
209
|
+
| Reviewer feedback adds new items | Worker hydrates (handled by worker agent) |
|
|
210
|
+
|
|
211
|
+
The worker agent has full hydration rules (commit-before-implement,
|
|
212
|
+
REVISE-triggered hydration). Task creators just need to provide the right
|
|
213
|
+
starting granularity.
|
|
214
|
+
|
|
215
|
+
### Constraint: No New Steps at Runtime
|
|
216
|
+
|
|
217
|
+
**Workers MUST NOT add, remove, or renumber steps during execution.** The
|
|
218
|
+
task-runner extension parses the step list from PROMPT.md once at `/task` launch
|
|
219
|
+
and iterates that fixed list. Steps added to STATUS.md at runtime will appear in
|
|
220
|
+
the dashboard but **silently never execute**.
|
|
221
|
+
|
|
222
|
+
Hydration expands checkboxes *within* existing steps only. If a worker discovers
|
|
223
|
+
work that doesn't fit any step, it should add sub-checkboxes to the closest
|
|
224
|
+
existing step and log the overflow in the STATUS.md Discoveries table.
|
|
225
|
+
|
|
226
|
+
**Task creators:** ensure PROMPT.md has all necessary steps upfront. If a task's
|
|
227
|
+
scope might expand during execution, prefer fewer broad steps (the worker will
|
|
228
|
+
hydrate them) over many narrow steps that might need restructuring.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## PROMPT.md Amendment Policy
|
|
233
|
+
|
|
234
|
+
The template includes an `## Amendments` placeholder at the bottom of PROMPT.md.
|
|
235
|
+
Original content above the `---` divider is immutable — workers use that section
|
|
236
|
+
only for issues like missing prerequisites or contradictory instructions, not
|
|
237
|
+
scope expansion or style preferences.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Dependencies Format
|
|
242
|
+
|
|
243
|
+
The orchestrator **machine-parses** this section using regex — stick to the exact
|
|
244
|
+
patterns below. Non-standard formatting (e.g., missing bold markers, inline prose
|
|
245
|
+
without a task ID pattern) may cause silent dependency misses or `PARSE_MALFORMED`
|
|
246
|
+
errors at batch time.
|
|
247
|
+
|
|
248
|
+
```markdown
|
|
249
|
+
## Dependencies
|
|
250
|
+
|
|
251
|
+
- **Task:** TO-014 (PTO policy engine must exist)
|
|
252
|
+
- **Task:** employee-management/EM-003 (area-qualified when ID may be ambiguous)
|
|
253
|
+
- **External:** All backend services running (ports 8080-8085)
|
|
254
|
+
- **None**
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Notes:
|
|
258
|
+
- Use unqualified `TASK-ID` when globally unique
|
|
259
|
+
- Use `area-name/TASK-ID` for cross-area clarity or when orchestrator reports `DEP_AMBIGUOUS`
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Checklist (Definition of Ready)
|
|
264
|
+
|
|
265
|
+
Verify every task against this before reporting the launch command:
|
|
266
|
+
|
|
267
|
+
- [ ] `Next Task ID` read from CONTEXT.md and incremented
|
|
268
|
+
- [ ] Folder created at correct `task_areas` path with name `{PREFIX}-{###}-{slug}`
|
|
269
|
+
- [ ] Complexity assessed, review level assigned (0-3)
|
|
270
|
+
- [ ] Size assessed (S/M/L) — split if XL
|
|
271
|
+
- [ ] PROMPT.md created from template with all required sections:
|
|
272
|
+
- [ ] `## Mission` with what AND why
|
|
273
|
+
- [ ] `## Dependencies` section
|
|
274
|
+
- [ ] `## Context to Read First` lists only needed Tier 3 docs
|
|
275
|
+
- [ ] `## File Scope` lists files/dirs the task will touch
|
|
276
|
+
- [ ] Each step has checkboxes with verifiable outcomes
|
|
277
|
+
- [ ] Explicit testing step with commands
|
|
278
|
+
- [ ] `## Do NOT` guardrails
|
|
279
|
+
- [ ] "Must Update" and "Check If Affected" doc lists
|
|
280
|
+
- [ ] `## Git Commit Convention` section (from template)
|
|
281
|
+
- [ ] `## Amendments` placeholder at bottom
|
|
282
|
+
- [ ] STATUS.md created with matching step structure
|
|
283
|
+
- [ ] Checkboxes match PROMPT.md granularity (1:1 where items are known)
|
|
284
|
+
- [ ] `⚠️ Hydrate` markers for discovery-dependent steps
|
|
285
|
+
- [ ] PROGRESS.md updated (add to "Active Tasks")
|
|
286
|
+
- [ ] Launch command reported: `/task {path}/PROMPT.md`
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Git Commit Convention
|
|
291
|
+
|
|
292
|
+
The prompt template includes a `## Git Commit Convention` section with the full
|
|
293
|
+
format table (`feat(TASK-ID):`, `fix(TASK-ID):`, `checkpoint: TASK-ID`, etc.).
|
|
294
|
+
Always include it — without task ID prefixes, there's no way to trace commits
|
|
295
|
+
back to the task that produced them (`git log --grep="PM-004"` only works if
|
|
296
|
+
the prefix is there).
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Orchestrator Awareness
|
|
301
|
+
|
|
302
|
+
Tasks are often executed in parallel batches by the task-orchestrator extension,
|
|
303
|
+
not just individually via task-runner. Two fields in PROMPT.md become load-bearing
|
|
304
|
+
in batch mode:
|
|
305
|
+
|
|
306
|
+
- **`## Dependencies`** — determines wave ordering. Tasks with unmet deps are
|
|
307
|
+
deferred to later waves. Incorrect or missing deps cause parallel execution of
|
|
308
|
+
tasks that should be serial, leading to merge conflicts or stale reads.
|
|
309
|
+
- **`## File Scope`** — determines lane affinity. Tasks with overlapping file
|
|
310
|
+
scope are assigned to the same lane (serial) to avoid merge conflicts. Without
|
|
311
|
+
file scope, the orchestrator distributes tasks randomly across lanes.
|
|
312
|
+
|
|
313
|
+
When creating multiple tasks for a batch, think about which tasks touch the same
|
|
314
|
+
files and make sure their file scopes reflect that.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Key Principles
|
|
319
|
+
|
|
320
|
+
- **Documentation in every task.** Without "Must Update" and "Check If Affected"
|
|
321
|
+
lists, docs drift from reality and future tasks work from stale context.
|
|
322
|
+
- **Testing step required.** Workers can't distinguish pre-existing failures from
|
|
323
|
+
regressions they caused — every task needs a clean test pass to stay unblocked.
|
|
324
|
+
- **Self-contained PROMPT.md.** The worker starts with a fresh context and no
|
|
325
|
+
memory of the conversation that created the task. Everything it needs to begin
|
|
326
|
+
must be in PROMPT.md and the referenced docs.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# CONTEXT.md Template (Slim)
|
|
2
|
+
|
|
3
|
+
This is the recommended format for domain/platform CONTEXT.md files.
|
|
4
|
+
Intentionally slim — this gets loaded into agent context for every task in this area.
|
|
5
|
+
Each area's CONTEXT.md path is registered in `.pi/task-runner.yaml → task_areas`.
|
|
6
|
+
|
|
7
|
+
**Design principles:**
|
|
8
|
+
- Current state only, not history (history is in `tasks/archive/`)
|
|
9
|
+
- No task lists (visible from folder structure: `tasks/` = active, `tasks/archive/` = done)
|
|
10
|
+
- Key files are paths only, not descriptions
|
|
11
|
+
- Tech debt is a living list that agents add to during execution
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# [Domain/Platform Name] — Context
|
|
17
|
+
|
|
18
|
+
**Last Updated:** YYYY-MM-DD
|
|
19
|
+
**Status:** Active | Stable | Complete
|
|
20
|
+
**Next Task ID:** [PREFIX]-001
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Current State
|
|
25
|
+
|
|
26
|
+
[What exists TODAY — 2-3 paragraphs max. Focus on current capabilities,
|
|
27
|
+
architectural decisions, and known constraints. Not history.]
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Key Files
|
|
32
|
+
|
|
33
|
+
| Category | Path |
|
|
34
|
+
|----------|------|
|
|
35
|
+
| Service | `services/{service}/` |
|
|
36
|
+
| API Spec | `docs/api/{service}-api.md` |
|
|
37
|
+
| Data Model | `docs/data-models/{service}-collections.md` |
|
|
38
|
+
| Tests | `services/{service}/tests/` |
|
|
39
|
+
| [Other] | [path] |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Technical Debt / Future Work
|
|
44
|
+
|
|
45
|
+
Items identified during implementation but not yet converted to tasks.
|
|
46
|
+
Agents add to this list under self-documentation standing instructions.
|
|
47
|
+
|
|
48
|
+
- [ ] **[Item name]** — Description (discovered during [PREFIX-###])
|
|
49
|
+
- [ ] **[Item name]** — Description (discovered during [PREFIX-###])
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Notes
|
|
55
|
+
|
|
56
|
+
### Why No Task Lists?
|
|
57
|
+
|
|
58
|
+
Open tasks are visible in `tasks/` folder. Completed tasks are in `tasks/archive/`.
|
|
59
|
+
Duplicating this in CONTEXT.md creates sync overhead and stale data.
|
|
60
|
+
|
|
61
|
+
### Next Task ID Counter
|
|
62
|
+
|
|
63
|
+
When creating a new task:
|
|
64
|
+
1. Read `Next Task ID` (e.g., `TO-016`)
|
|
65
|
+
2. Use that ID for the new task folder
|
|
66
|
+
3. Increment the counter (e.g., `TO-017`) in the same edit
|
|
67
|
+
|
|
68
|
+
This avoids scanning folder structures for the next available number.
|
|
69
|
+
|
|
70
|
+
### When to Update CONTEXT.md
|
|
71
|
+
|
|
72
|
+
| Trigger | What to Update |
|
|
73
|
+
|---------|---------------|
|
|
74
|
+
| Feature shipped | Current State section |
|
|
75
|
+
| Tech debt discovered | Technical Debt section |
|
|
76
|
+
| Architecture decision made | Current State section |
|
|
77
|
+
| Key file moved/renamed | Key Files section |
|
|
78
|
+
| Task created | Next Task ID counter |
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# PROMPT.md Template
|
|
2
|
+
|
|
3
|
+
Copy this template when creating a new task. Replace all `[bracketed]` fields.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
````markdown
|
|
8
|
+
# Task: [PREFIX-###] - [Name]
|
|
9
|
+
|
|
10
|
+
**Created:** [YYYY-MM-DD]
|
|
11
|
+
**Size:** [S | M | L]
|
|
12
|
+
|
|
13
|
+
## Review Level: [0-3] ([None | Plan Only | Plan and Code | Full])
|
|
14
|
+
|
|
15
|
+
**Assessment:** [1-2 sentences explaining the score]
|
|
16
|
+
**Score:** [N]/8 — Blast radius: [N], Pattern novelty: [N], Security: [N], Reversibility: [N]
|
|
17
|
+
|
|
18
|
+
## Canonical Task Folder
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[FULL_PATH_TO_TASK_FOLDER]/
|
|
22
|
+
├── PROMPT.md ← This file (immutable above --- divider)
|
|
23
|
+
├── STATUS.md ← Execution state (worker updates this)
|
|
24
|
+
├── .reviews/ ← Reviewer output (task-runner creates this)
|
|
25
|
+
└── .DONE ← Created when complete
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Mission
|
|
29
|
+
|
|
30
|
+
[One paragraph: what you're building and why it matters]
|
|
31
|
+
|
|
32
|
+
## Dependencies
|
|
33
|
+
|
|
34
|
+
[Choose one:]
|
|
35
|
+
|
|
36
|
+
- **None**
|
|
37
|
+
|
|
38
|
+
[OR:]
|
|
39
|
+
|
|
40
|
+
- **Task:** [PREFIX-###] ([what must be complete])
|
|
41
|
+
- **Task:** [area-name/PREFIX-###] ([use area-qualified form if cross-area ID may be ambiguous])
|
|
42
|
+
- **External:** [what must be true]
|
|
43
|
+
|
|
44
|
+
## Context to Read First
|
|
45
|
+
|
|
46
|
+
> Only list docs the worker actually needs. Less is better.
|
|
47
|
+
|
|
48
|
+
**Tier 2 (area context):**
|
|
49
|
+
- `[path/to/CONTEXT.md]`
|
|
50
|
+
|
|
51
|
+
**Tier 3 (load only if needed):**
|
|
52
|
+
- `[path/to/specific-doc.md]` — [why needed]
|
|
53
|
+
|
|
54
|
+
## Environment
|
|
55
|
+
|
|
56
|
+
- **Workspace:** [primary folder/service being modified]
|
|
57
|
+
- **Services required:** [list, or "None"]
|
|
58
|
+
|
|
59
|
+
## File Scope
|
|
60
|
+
|
|
61
|
+
> The orchestrator uses this to avoid merge conflicts: tasks with overlapping
|
|
62
|
+
> file scope run on the same lane (serial), not in parallel. List the files and
|
|
63
|
+
> directories this task will create or modify. Use wildcards for directories.
|
|
64
|
+
|
|
65
|
+
- `[path/to/file.ext]`
|
|
66
|
+
- `[path/to/directory/*]`
|
|
67
|
+
|
|
68
|
+
## Steps
|
|
69
|
+
|
|
70
|
+
> **Hydration:** STATUS.md checkboxes must match the granularity below. Steps that
|
|
71
|
+
> depend on runtime discoveries should be marked with `⚠️ Hydrate` in STATUS.md.
|
|
72
|
+
> See task-worker agent for full hydration rules.
|
|
73
|
+
|
|
74
|
+
### Step 0: Preflight
|
|
75
|
+
|
|
76
|
+
- [ ] Required files and paths exist
|
|
77
|
+
- [ ] Dependencies satisfied
|
|
78
|
+
|
|
79
|
+
### Step 1: [Name]
|
|
80
|
+
|
|
81
|
+
- [ ] [Specific, verifiable task]
|
|
82
|
+
- [ ] [Specific, verifiable task]
|
|
83
|
+
- [ ] [Specific, verifiable task]
|
|
84
|
+
|
|
85
|
+
**Artifacts:**
|
|
86
|
+
- `path/to/file` (new | modified)
|
|
87
|
+
|
|
88
|
+
### Step [N-1]: Testing & Verification
|
|
89
|
+
|
|
90
|
+
> ZERO test failures allowed.
|
|
91
|
+
|
|
92
|
+
- [ ] Run unit tests: `[test command from task-runner.yaml]`
|
|
93
|
+
- [ ] Run integration tests (if applicable)
|
|
94
|
+
- [ ] Fix all failures
|
|
95
|
+
- [ ] Build passes: `[build command]`
|
|
96
|
+
|
|
97
|
+
### Step [N]: Documentation & Delivery
|
|
98
|
+
|
|
99
|
+
- [ ] "Must Update" docs modified
|
|
100
|
+
- [ ] "Check If Affected" docs reviewed
|
|
101
|
+
- [ ] Discoveries logged in STATUS.md
|
|
102
|
+
- [ ] `.DONE` created in this folder
|
|
103
|
+
- [ ] Task archived (auto — handled by task-runner extension)
|
|
104
|
+
|
|
105
|
+
## Documentation Requirements
|
|
106
|
+
|
|
107
|
+
**Must Update:**
|
|
108
|
+
- `[path/to/doc.md]` — [what to add/change]
|
|
109
|
+
|
|
110
|
+
**Check If Affected:**
|
|
111
|
+
- `[path/to/doc.md]` — [update if relevant]
|
|
112
|
+
|
|
113
|
+
## Completion Criteria
|
|
114
|
+
|
|
115
|
+
- [ ] All steps complete
|
|
116
|
+
- [ ] All tests passing
|
|
117
|
+
- [ ] Documentation updated
|
|
118
|
+
- [ ] `.DONE` created
|
|
119
|
+
|
|
120
|
+
## Git Commit Convention
|
|
121
|
+
|
|
122
|
+
All commits for this task MUST include the task ID for traceability:
|
|
123
|
+
|
|
124
|
+
- **Implementation:** `feat([PREFIX-###]): description`
|
|
125
|
+
- **Bug fixes:** `fix([PREFIX-###]): description`
|
|
126
|
+
- **Tests:** `test([PREFIX-###]): description`
|
|
127
|
+
- **Checkpoints:** `checkpoint: [PREFIX-###] description`
|
|
128
|
+
|
|
129
|
+
## Do NOT
|
|
130
|
+
|
|
131
|
+
- Expand task scope — add tech debt to CONTEXT.md instead
|
|
132
|
+
- Skip tests
|
|
133
|
+
- Modify framework/standards docs without explicit user approval
|
|
134
|
+
- Load docs not listed in "Context to Read First"
|
|
135
|
+
- Commit without the task ID prefix in the commit message
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Amendments (Added During Execution)
|
|
140
|
+
|
|
141
|
+
<!-- Workers add amendments here if issues discovered during execution.
|
|
142
|
+
Format:
|
|
143
|
+
### Amendment N — YYYY-MM-DD HH:MM
|
|
144
|
+
**Issue:** [what was wrong]
|
|
145
|
+
**Resolution:** [what was changed] -->
|
|
146
|
+
````
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
# STATUS.md Template
|
|
151
|
+
|
|
152
|
+
Create alongside PROMPT.md. If omitted, the task-runner extension auto-generates
|
|
153
|
+
this from PROMPT.md.
|
|
154
|
+
|
|
155
|
+
````markdown
|
|
156
|
+
# [PREFIX-###]: [Name] — Status
|
|
157
|
+
|
|
158
|
+
**Current Step:** Not Started
|
|
159
|
+
**Status:** 🔵 Ready for Execution
|
|
160
|
+
**Last Updated:** [YYYY-MM-DD]
|
|
161
|
+
**Review Level:** [0-3]
|
|
162
|
+
**Review Counter:** 0
|
|
163
|
+
**Iteration:** 0
|
|
164
|
+
**Size:** [S | M | L]
|
|
165
|
+
|
|
166
|
+
> **Hydration:** Checkboxes below must be granular — one per unit of work.
|
|
167
|
+
> Steps marked `⚠️ Hydrate` will be expanded by the worker when discoveries
|
|
168
|
+
> from prior steps are available. See task-worker agent for rules.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### Step 0: Preflight
|
|
173
|
+
**Status:** ⬜ Not Started
|
|
174
|
+
|
|
175
|
+
- [ ] Required files and paths exist
|
|
176
|
+
- [ ] Dependencies satisfied
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### Step 1: [Name]
|
|
181
|
+
**Status:** ⬜ Not Started
|
|
182
|
+
|
|
183
|
+
[If items are known at creation time, list each one:]
|
|
184
|
+
- [ ] [Specific item from PROMPT.md]
|
|
185
|
+
- [ ] [Specific item from PROMPT.md]
|
|
186
|
+
|
|
187
|
+
[If items depend on runtime discovery:]
|
|
188
|
+
> ⚠️ Hydrate: Expand checkboxes when entering this step based on [what]
|
|
189
|
+
|
|
190
|
+
- [ ] [High-level placeholder — worker will expand]
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### Step [N-1]: Testing & Verification
|
|
195
|
+
**Status:** ⬜ Not Started
|
|
196
|
+
|
|
197
|
+
- [ ] Unit tests passing
|
|
198
|
+
- [ ] Integration tests (if applicable)
|
|
199
|
+
- [ ] All failures fixed
|
|
200
|
+
- [ ] Build passes
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### Step [N]: Documentation & Delivery
|
|
205
|
+
**Status:** ⬜ Not Started
|
|
206
|
+
|
|
207
|
+
- [ ] "Must Update" docs modified
|
|
208
|
+
- [ ] "Check If Affected" docs reviewed
|
|
209
|
+
- [ ] Discoveries logged
|
|
210
|
+
- [ ] `.DONE` created
|
|
211
|
+
- [ ] Archive and push
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Reviews
|
|
216
|
+
|
|
217
|
+
| # | Type | Step | Verdict | File |
|
|
218
|
+
|---|------|------|---------|------|
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Discoveries
|
|
223
|
+
|
|
224
|
+
| Discovery | Disposition | Location |
|
|
225
|
+
|-----------|-------------|----------|
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Execution Log
|
|
230
|
+
|
|
231
|
+
| Timestamp | Action | Outcome |
|
|
232
|
+
|-----------|--------|---------|
|
|
233
|
+
| [YYYY-MM-DD] | Task staged | PROMPT.md and STATUS.md created |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Blockers
|
|
238
|
+
|
|
239
|
+
*None*
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Notes
|
|
244
|
+
|
|
245
|
+
*Reserved for execution notes*
|
|
246
|
+
````
|