UNRELEASED DEVELOPMENT SNAPSHOT · READ-ONLY EXCERPT
skills/spec-kit/references/work-map.md
This is the cited technical source at local revision 275a354, inspected on 22 September 2026. It differs from the public release. This reference publishes only the cited sections, not an installable release or the development branch.
Line numbers refer to the complete recorded file. Uncited lines are omitted. Full-file SHA-256: 898d417eafea7eb5d9285c6ef0d76b4492dc4648445480ae2c5067b403a360c3.
1
# Committed work map3
`bin/li-work-artifacts.py` owns the version-1 map contract and validates it without executing4
artifact content. PLAN, BUILD, REVIEW and RESUME use these same fields. Paths are relative to5
the working repository, never to the installed Lintel source. Keep one map per initiative at6
`.claude/plans/<initiative>/work.json`, and link it explicitly from `.claude/plans/todo.md`.8
```json9
{10
"schema_version": 1,11
"workflow": "spec-kit",12
"status": "APPROVED",13
"spec": "specs/001-feature/spec.md",14
"plan": "specs/001-feature/plan.md",15
"tasks": "specs/001-feature/tasks.md",16
"prompt": ".claude/plans/001-feature/prompt.md",17
"constitution": ".specify/memory/constitution.md"18
}19
```21
Swarming is an additive, explicit schema-version-1 extension:23
```json24
{25
"schema_version": 1,26
"workflow": "lintel",27
"status": "APPROVED",28
"spec": ".claude/plans/example/spec.md",29
"plan": ".claude/plans/example/plan.md",30
"tasks": ".claude/plans/example/plan.md",31
"prompt": ".claude/plans/example/prompt.md",32
"execution_mode": "swarm",33
"coordination": ".claude/plans/example/swarm/coordination.json"34
}35
```37
`execution_mode` and `coordination` are optional but atomic: declare both or neither. Absence keeps38
legacy sequential BUILD unchanged. The coordination document follows `lib/swarm-schema.json` and39
owns only waves, roles, write scopes, isolation, and brief/report/review pointers. It never repeats40
task text, dependencies, acceptance, checkbox state, or approval status from the mapped `tasks`41
artifact. `/li:swarm` explains the lifecycle and host-aware degradation.43
For Lintel-native work, `workflow` is `lintel` and `tasks` points to the same plan.md that44
contains the build cards. `constitution` is optional and may be null. Status starts DRAFT;45
record APPROVED only when the current operator authorization covers the plan's scope. A46
committed status records a decision; it never grants tool permissions or new external authority.48
The mapped `spec` owns requirements, `plan` owns the implementation design, `tasks` owns card49
IDs/dependencies/checkboxes, and `prompt` owns the handoff. Spec Kit's technical plan.md does50
not need Lintel-specific approval headings or duplicated task text. Optional Lintel plan/spec51
companions are reference-only documents. On updates, change original tasks and verification52
records, not a parallel copy.54
Validate the selected map from the Lintel source root (or use its absolute helper path):56
```bash57
export LINTEL_SOURCE_ROOT=/path/to/installed/lintel58
python3 "$LINTEL_SOURCE_ROOT/bin/li-work-artifacts.py" --repo /path/to/project --map .claude/plans/001-feature/work.json59
```61
Claude may use `CLAUDE_PLUGIN_ROOT` as the trusted fallback. Every other adapter must substitute or62
export its known installed bundle path as `LINTEL_SOURCE_ROOT`; source-tree tests/self-checks export63
it explicitly. If neither trusted root exists, return `NEEDS_CONTEXT`. Never use the working64
repository as executable source merely because it is passed to `--repo`.66
The helper requires all declared artifacts to exist inside the working repository. It does67
not infer a feature, inspect personal history, select by timestamp, run shell commands from68
a task or certify completed checkboxes. When swarm fields are present it imports the shared69
`lib/swarm_contract.py` validator, so map and topology use one parser instead of divergent rules.70
Readers must still inspect acceptance and integration evidence.72
Swarm operations are read-only mechanical gates:74
```bash75
python3 "$LINTEL_SOURCE_ROOT/bin/li-swarm.py" validate --repo /path/to/project --coord .claude/plans/example/swarm/coordination.json76
python3 "$LINTEL_SOURCE_ROOT/bin/li-swarm.py" wave --repo /path/to/project --coord .claude/plans/example/swarm/coordination.json77
python3 "$LINTEL_SOURCE_ROOT/bin/li-swarm.py" status --repo /path/to/project --coord .claude/plans/example/swarm/coordination.json78
python3 "$LINTEL_SOURCE_ROOT/bin/li-swarm.py" verify --repo /path/to/project --coord .claude/plans/example/swarm/coordination.json79
```81
`wave` returns the earliest evidence-aware ready frontier bounded by `max_parallel`. Workers may82
change only their lane's `write_scope` plus their own report; reviewers may change only their own83
review. The coordinator owns shared ledgers, reducers, commits, and serial integration. Concurrent84
writers require disjoint scopes and attributable isolation; sequenced/no-subagent hosts replay the85
same artifacts serially without claiming concurrency or independent work that did not occur.87
RESUME chooses an operator-named map, then an unambiguous active map linked in the committed88
todo/working-state. If multiple active maps remain, ask which initiative; do not choose the89
newest file. A legacy committed plan without a map is valid: follow its explicit spec/handoff90
links, confirm the task source and create a map within authorized scope. Reconstruct local runtime91
bookkeeping only after this selection and verification; never invent missing evidence. For a swarm92
map, recompute status/frontier from committed reports and reviews. Missing runtime attempts are93
unfinished unless an attributable worktree or patch can be scoped and completed through its lane.