sprint execution — track active work without merge conflicts
decree sprint tracks what is actively being built without turning sprint state into
one shared merge-conflict file. In v3, the sprint store is a directory:
state.yaml for lifecycle state, one live/<DOC-ID>.yaml file per membership, and one
closed/<SPRINT-ID>.yaml archive per closed sprint.
Scenario Two worktrees both create or finish sprint items while the sprint is active.
Without decree
With a single decree/sprints/ledger.yaml, every worker edits the same YAML list.
The SPEC file and its sprint enrollment must land together, so parallel work turns
into a merge-conflict queue. A finished item also has to wait for full sprint
rollover before it can be recorded as done.
With decree
Each active item owns one live/<DOC-ID>.yaml file. Completing one item rewrites
only that item, records a snapshot, and moves it out of the open sprint scope:
$ decree sprint complete SPEC-00000000000000000000000001 --commit abc1234[sprint] recorded completed outcome for SPEC-00000000000000000000000001 (primary 2/2)✓ sprint item completed→ exit 0VALUE Routine sprint work becomes a file union: different worktrees add or complete different documents by touching different paths.
HONESTY Rollover is still an integration ceremony. v3 removes the routine ledger hotspot; it does not introduce multiple active sprints or per-worktree lanes.
Operator flow
Section titled “Operator flow”The HTML board is for the human orchestrator, not an agent protocol. Agents should use the CLI or MCP tools so their loop can branch on exit codes and JSON. A typical parallel sprint looks like this:
-
Refresh the read-only board when a human wants the current picture.
Terminal window decree generate-html --output decree-board.htmldecree sprint move SPEC-01KT22NMS0D19VMD8VPK4D2MNX --to activeOpen the file locally, choose an open sprint item, and assign that document ID to an agent. The board is an inspection surface: it does not mutate sprint state. Use
sprint movewhen a backlog or draft-pool item becomes current-sprint work. -
Let the first worker scope itself to one item.
Terminal window decree ddd --doc SPEC-01KT22NMS0D19VMD8VPK4D2MNXdecree intent-check --plan "implement token storage" \--files src/auth/tokens.py \--under SPEC-01KT22NMS0D19VMD8VPK4D2MNXThe agent starts only after the governing scope and plan check are clear.
-
Start another worker in another worktree on a different sprint item.
Terminal window git worktree add ../my-app-token-rotation -b work/token-rotationcd ../my-app-token-rotationdecree ddd --doc SPEC-01KW2BEQ5J7JWM93K4YAS9GZABBecause each sprint membership is its own
live/<DOC-ID>.yaml, the two workers do not race on one sharedledger.yaml. -
Record completion per item, then integrate.
Terminal window decree sprint complete SPEC-01KT22NMS0D19VMD8VPK4D2MNX --commit abc1234decree lintAfter branches merge, the orchestrator runs
decree lint, refreshes the board if useful, and performs rollover once from the integration branch.
Run it
Section titled “Run it”The active sprint reports open work from the v2 directory store:
$ decree sprint status✓ sprint status reportedSprint mode: activeActive: SPRINT-00000000000000000000000001 Sprint 1 (1 items)
Tasks: SPEC-00000000000000000000000001 (manual)Backlog: 0 itemsDraft pool: 0 items→ exit 0complete requires 100% primary acceptance criteria and records optional commit
evidence:
$ decree sprint complete SPEC-00000000000000000000000001 --commit abc1234[sprint] recorded completed outcome for SPEC-00000000000000000000000001 (primary 2/2)✓ sprint item completed→ exit 0The resolved item leaves the default progress scope and appears as done until
rollover folds it into closed/<SPRINT-ID>.yaml:
$ decree sprint status✓ sprint status reportedSprint mode: activeActive: SPRINT-00000000000000000000000001 Sprint 1 (1 items)
Done (awaiting rollover): SPEC-00000000000000000000000001 (completed)Backlog: 0 itemsDraft pool: 0 items→ exit 0How it composes
Section titled “How it composes”decree progressanddecree ddddefault to the active sprint’s open items when sprint mode is enabled. Use--corpusfor the whole repository, or--sprint IDto include resolved active items.decree sprint complete DOC-IDrecords a completed outcome mid-sprint after the document’s primary acceptance criteria reach 100%.decree sprint drop DOC-ID --reason TEXTrecords an auditable dropped outcome.decree sprint move DOC-ID --to active|backlog|draft-poolpromotes backlog or draft-pool work into the active sprint, or moves an open active item out with a reason.decree sprint rollover --outcomes FILEcloses the still-open items and folds completed or dropped items into the archive.decree migrate sprint-ledger --applyconverts old v1 repositories and removes the monolithicledger.yaml.
When you’d reach for this
Section titled “When you’d reach for this”- Parallel agent worktrees — each agent owns its SPEC file and its one sprint membership file.
- Mid-sprint review — finished work can leave the open progress scope without closing the whole sprint.
- Release cleanup — migrate old projects once, then let
decree lintenforce the v2 invariants.
Exit codes
Section titled “Exit codes”Sprint commands exit exit 0 clean · advisory-only when the operation is valid. Invalid state,
such as trying to complete an item below 100% primary progress or running sprint commands
against an unmigrated v1 ledger, exits exit 2 config error as a configuration/usage
error rather than a governance finding.
Next: the lifecycle for corpus validation, or decree by example for the full governance loop.