Skip to content

Iteration Plan

Purpose

Iteration Plan is the commitment artifact of the iterate loop. Its unique job is to convert the improvement backlog’s next-iteration selection and the roadmap’s current slot into one time-boxed commitment: a falsifiable goal, one Good / one Better / one Best outcome per participating workstream with owners and acceptance evidence, deterministic trade rules, and stable-ID task tables.

It is not the live tracker. The plan owns commitment membership: task rows select existing work items by ID where they exist, and rows without one are the source from which the runtime creates items, back-referencing each new ID in the plan. The runtime’s tracker (work items, boards, issues) owns live status, assignment churn, and execution history. Scope changes route back through the plan — hand-added tracker items never silently widen the commitment.

Example

Show a worked example of this artifact
---
ddx:
  id: example.iteration-plan.depositmatch
  authoring:
    home: repo
  depends_on:
    - example.roadmap.depositmatch
    - example.improvement-backlog.depositmatch
---

# Iteration Plan

| | |
|---|---|
| **Iteration** | IT-05 |
| **Dates** | Mon 1 Jun → Fri 12 Jun 2026 |
| **Review** | Fri 12 Jun, 30-minute demo with pilot-bank operations lead |
| **Lead** | Delivery Lead |
| **Roadmap Slot** | Roadmap order 1 — CSV import validated against real pilot-bank exports |

## Iteration Goal

> By 12 Jun, a pilot-bank operations user imports a real deposit export and
> sees validated rows with actionable errors — shown live in the review demo
> against an anonymized pilot fixture, with the import test suite green.

## Committed Outcomes

Each participating workstream commits exactly one Good, one Better, and one
Best outcome. Good is the protected floor; Best drops first, then Better.
Tiers: 🟢 Good = committed for the review · 🔵 Better = first traded under
pressure · 🟣 Best = only if the iteration runs clean.

| ID | Workstream | Tier | Outcome | Owner | Governing Artifact | Acceptance Evidence |
|----|------------|------|---------|-------|--------------------|---------------------|
| WS-1-good | WS-1 | 🟢 Good | A real anonymized pilot export imports with validated rows — fixtures collected, anonymization documented, all fixture error classes handled | Priya | Improvement backlog rank 1; FEAT-001; story test plan US-003 | Fixture set committed; tests citing US-003 ACs pass; live demo at review |
| WS-1-better | WS-1 | 🔵 Better | Upload p95 latency watch item on the pilot dashboard | Priya | Improvement backlog rank 2 | Dashboard panel live with alert threshold |
| WS-1-best | WS-1 | 🟣 Best | Per-row error messages include remediation hints | Sam | FEAT-001 | Hint text reviewed by operations lead; shown in demo |

**Not participating this iteration**: WS-2 (matching starts IT-06 per
roadmap order 2), WS-3 (reporting gated on matching)

## Trade Rules

- Best drops first, then Better — the Delivery Lead calls trades and records
  them in the status report.
- WS-1-good is never traded: without it the review demo has no honest data
  and the iteration fails. A Good at risk is an escalation, not a trade.

## Tasks

The plan owns membership; the tracker owns live state. Existing work items
are selected by ID in the Work Item column; rows marked `—` are created by
the runtime from this table and back-referenced here. Status records
planning-time state and is not maintained after derivation. Workstream
aliases come from the roadmap's registry; work items carry the alias as a
label (`ws:WS-1`).

### WS-1 · Data Intake — fixtures

| ID | Task | Outcome | Owner | Due | Status | Work Item |
|----|------|---------|-------|-----|--------|-----------|
| 1.1 | Collect three real pilot-bank exports under the data agreement | WS-1-good | Priya | Wed 3 Jun | Backlog | wi-231 (existing) |
| 1.2 | Script and document the anonymization pass | WS-1-good | Priya | Fri 5 Jun | Backlog | — |

### WS-1 · Data Intake — import validation

| ID | Task | Outcome | Owner | Due | Status | Work Item |
|----|------|---------|-------|-----|--------|-----------|
| 2.1 | Enumerate fixture error classes into US-003 test cases | WS-1-good | Sam | Fri 5 Jun | Backlog | — |
| 2.2 | Implement per-row validation error messages | WS-1-good | Sam | Wed 10 Jun | Backlog | — |
| 2.3 | Add remediation hints to error messages | WS-1-best | Sam | Thu 11 Jun | Backlog | — |

### WS-1 · Data Intake — pilot dashboard

| ID | Task | Outcome | Owner | Due | Status | Work Item |
|----|------|---------|-------|-----|--------|-----------|
| 3.1 | Add upload p95 latency panel with alert threshold to the pilot dashboard | WS-1-better | Priya | Tue 9 Jun | Backlog | — |

## Risks

| Risk | Impact | Response |
|------|--------|----------|
| Pilot bank delays export delivery | H | Escalate through the pilot sponsor by 3 Jun; fall back to synthetic fixtures and flag confidence in the review |
| Anonymization strips fields validation depends on | M | Review field list with operations lead before scripting |

## Review Checklist

- [x] Goal is falsifiable at the review date
- [x] Every participating workstream has exactly one Good, one Better, and one Best outcome
- [x] Every committed outcome has an owner, acceptance evidence, and at least one task
- [x] Workstream aliases match the roadmap's registry — none minted here
- [x] Trade rules make the drop order deterministic (Best, then Better; Good never)
- [x] Every task has a stable ID, maps to a committed outcome, and names its work item or is marked for creation
- [x] Runtime work items can derive from the task tables without inventing scope

Reference

ActivityIterate — Measure, align, and improve. Close the feedback loop back into the planning strand.
Default locationdocs/helix/06-iterate/iteration-plan-[iteration-id].md
RequiresNone
EnablesNone
InformsStatus Report
Generation prompt
Show the full generation prompt
# Iteration Plan Generation Prompt

Document one human iteration's commitment.

## Purpose

Iteration Plan is the **commitment artifact** of the iterate loop. Its unique
job is to convert the improvement backlog's next-iteration selection and the
roadmap's current slot into one time-boxed commitment: a falsifiable goal,
one Good / one Better / one Best outcome per participating workstream with
owners and acceptance evidence, deterministic trade rules, and stable-ID task
tables.

It is not the live tracker. The plan owns commitment membership: task rows
select existing work items by ID where they exist, and rows without one are
the source from which the runtime creates items, back-referencing each new
ID in the plan. The runtime's tracker (work items, boards, issues) owns live
status, assignment churn, and execution history. Scope changes route back
through the plan — hand-added tracker items never silently widen the
commitment.

## Reference Anchors

Use this local resource summary as grounding:

- `docs/resources/agile-manifesto-principles.md` grounds time-boxed
  commitment, sustainable cadence, and working evidence as the measure of
  progress.

## Focus

- Author a plan only when there is a commitment to coordinate — multiple
  owners, multiple workstreams, or a review with an audience. A solo
  iteration may run straight from the backlog selection and the tracker;
  the plan is coordination, not ceremony.
- Make the goal falsifiable: what is true at review, shown by what evidence.
- Commit exactly one Good, one Better, and one Best outcome per
  participating workstream. Good is the protected floor; Best drops first,
  then Better. More outcomes per workstream is confusing; fewer breaks the
  flex model — a workstream that cannot fill all three tiers sits this
  iteration out (not participating), never partially committed.
- Once committed, a Good outcome's ID, text, and acceptance evidence are
  immutable for the iteration. A Good that becomes impossible is an
  escalation recorded in the status report with its decider named — never an
  in-place edit, re-tier, or silent replacement.
- Give every outcome an owner, acceptance evidence, and at least one task.
  Outcome IDs are `<WS alias>-good|better|best`, unique within the plan;
  fully qualified as `<iteration-id>.<outcome-id>` when cited elsewhere.
- Reference workstreams by their roadmap-registry alias (`WS-<n>`) when a
  roadmap exists; a roadmap-less plan (single-workstream skip case) has one
  implicit workstream and uses no aliases — a second workstream means author
  the registry first. The plan never mints workstreams. Work items preserve
  the alias: as a label where the runtime supports labels (e.g. `ws:WS-1`,
  prefixed with the flow instance when several flows share one store),
  otherwise in the item's title or reference field.
- Keep the plan derivable: a runtime should be able to create work items
  from the task tables without inventing scope.
- Write tier labels in table cells as emoji plus a non-breaking space
  (U+00A0) plus the word — 🟢 Good, 🔵 Better, 🟣 Best — so the label never
  wraps apart in rendered tables. Plain words are fine in prose.
- Reference implementation plans where a committed outcome has one; do not
  duplicate their build slices here.

## Boundary Test

| If you are writing... | Put it in... |
|---|---|
| Workstream definitions and their `WS-<n>` aliases | Roadmap |
| Delivery sequence across iterations | Roadmap |
| Ranked improvement candidates with evidence | Improvement Backlog |
| One iteration's committed outcomes, owners, and dates | Iteration Plan |
| Design-derived build slices for one feature | Implementation Plan |
| Live task status, assignees, execution history | runtime work item or issue |
| How the iteration is going or went | Status Report |

## Completion Criteria

- The goal is falsifiable and the review date is set.
- Every participating workstream has exactly one Good, one Better, and one
  Best outcome, each with an owner and acceptance evidence.
- Every committed outcome maps to at least one task.
- Workstream aliases match the roadmap's registry (or the plan is
  roadmap-less and uses none).
- Trade rules make the drop order deterministic (Best, then Better; Good
  never).
- Every task has a stable ID, maps to a committed outcome, and names its
  work item or is marked for creation.
Template
Show the template structure
---
ddx:
  id: iteration-plan
  authoring:
    home: repo
---

# Iteration Plan

| | |
|---|---|
| **Iteration** | [id — e.g. IT-05, Sprint 3] |
| **Dates** | [start → end] |
| **Review** | [date and format of the iteration review] |
| **Lead** | [who runs the iteration] |
| **Roadmap Slot** | [roadmap order/iteration this fulfills, or N/A] |

## Iteration Goal

> [One falsifiable sentence: what is true at review that is not true now,
> and what evidence shows it.]

## Committed Outcomes

Each participating workstream commits exactly one outcome per tier — one
Good, one Better, one Best. Good is the protected floor: the iteration fails
without it, and once committed its ID, text, and acceptance evidence are
immutable for the iteration — a Good that becomes impossible is recorded as
an escalation in the status report (decider named), never edited, re-tiered,
or silently replaced. Best drops first under pressure, then Better. More
outcomes per workstream is confusing; fewer breaks the flex model. A
workstream sitting out this iteration is listed as not participating, never
partially committed. (Participation is per-iteration; a workstream's
registry status — active/closed — lives in the roadmap and is a different
axis.) Outcome IDs are unique within this plan; the fully qualified form is
`<iteration-id>.<outcome-id>` (e.g. `IT-05.WS-1-good`).
Tier labels render as emoji plus a non-breaking space (U+00A0) so they never
wrap in table cells: 🟢 Good · 🔵 Better · 🟣 Best.

| ID | Workstream | Tier | Outcome | Owner | Governing Artifact | Acceptance Evidence |
|----|------------|------|---------|-------|--------------------|---------------------|
| [WS-1-good] | [WS-1] | 🟢 Good | [the outcome the iteration fails without] | [name] | [artifact ref] | [what proves it landed] |
| [WS-1-better] | [WS-1] | 🔵 Better | [real value, first traded after Best] | [name] | [artifact ref] | [what proves it landed] |
| [WS-1-best] | [WS-1] | 🟣 Best | [taken only if the iteration runs clean] | [name] | [artifact ref] | [what proves it landed] |

**Not participating this iteration**: [WS-n (reason), or None]

## Trade Rules

- Best drops first, then Better — per workstream. [Who] calls trades and
  records them in the status report.
- Good outcomes are never traded: a Good at risk is an escalation, not a
  trade.

## Tasks

The plan owns membership; the runtime's tracker owns live state. Select
existing work items by ID in the Work Item column; a task without one is
created by the runtime from this table and its new ID back-referenced here.
Every committed outcome maps to at least one task. Task IDs are stable —
never renumber mid-iteration — and unique within this plan (fully qualified:
`<iteration-id>.<task-id>`, e.g. `IT-05.1.1`). The Status column records
planning-time state (normally Backlog); once work items derive, the tracker
is authoritative and this column is not maintained.

Workstream aliases come from the roadmap's registry when one exists. A plan
authored without a roadmap (single-workstream skip case) has one implicit
workstream and omits aliases entirely; the moment a second workstream
appears, author the roadmap's registry first. Aliases are unique within one
flow instance. Work items preserve the alias: as a label where the runtime
supports labels (e.g. `ws:WS-1`, prefixed with the flow instance when
several flows share one store), otherwise in the item's title or reference
field.

### [WS-1 · workstream name]

| ID | Task | Outcome | Owner | Due | Status | Work Item |
|----|------|---------|-------|-----|--------|-----------|
| [1.1] | [task] | [WS-1-good] | [name] | [date] | [Backlog] | [existing item ID, or — until created] |

## Risks

| Risk | Impact | Response |
|------|--------|----------|
| [risk] | [H/M/L] | [action] |

## Review Checklist

- [ ] Goal is falsifiable at the review date
- [ ] Every participating workstream has exactly one Good, one Better, and one Best outcome
- [ ] Every committed outcome has an owner, acceptance evidence, and at least one task
- [ ] Workstream aliases match the roadmap's registry — none minted here (or the plan is roadmap-less and uses no aliases)
- [ ] Trade rules make the drop order deterministic (Best, then Better; Good never)
- [ ] Every task has a stable ID, maps to a committed outcome, and names its work item or is marked for creation
- [ ] Runtime work items can derive from the task tables without inventing scope
Innsigle seal: model-primary by HELIX

The signature covers the markdown source of this page, not these HTML bytes. This page quotes that seal; verify it against the source file.

Composition
model-primary
Issuer
HELIX helix
Signing key
ed25519:b0865d76d834a52c48506414d16f4e5a (build key)
Signed source
artifact-types/iterate/iteration-plan.md
Signed
2026-09-23T14:11:58Z
Content digest
sha256:156fe974…e62d1257

This build key is endorsed by the human key for build signing; the signature is not a detector and not a truth guarantee.

Raw attestation JSON
{
  "payload": {
    "innsigle": "1",
    "type": "https://innsigle.dev/claim/colophon/v1",
    "issued_at": "2026-09-23T14:11:58Z",
    "issuer": {
      "id": "helix",
      "name": "HELIX",
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "key_url": "https://documentdrivendx.github.io/helix/.well-known/innsigle/keys.json"
    },
    "subjects": [
      {
        "uri": "https://documentdrivendx.github.io/helix/artifact-types/iterate/iteration-plan/",
        "digest": {
          "alg": "sha256",
          "value": "156fe9741f289194ce9ce289526f1e3befdc1a8bec8e7fc49c72bc6ae62d1257"
        }
      }
    ],
    "colophon": {
      "schema_version": "1",
      "composition": "model-primary",
      "ingredients": [
        {
          "kind": "model",
          "name": "Claude",
          "role": "draft"
        },
        {
          "kind": "tool",
          "name": "sloptimizer",
          "role": "rewrite"
        },
        {
          "kind": "human",
          "name": "operator",
          "role": "structure-edit"
        }
      ],
      "notes": null
    }
  },
  "payload_encoding": "json",
  "signatures": [
    {
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "alg": "ed25519",
      "sig": "nOE1oHM68CaBp-8x-97O-_MmUhxs68F9q0inCgcXwePbbiC79KOAPCl5rrBMwgVjFm0ZVagZFDxY7Tx0aQs3DQ",
      "signed_at": "2026-09-23T14:11:58Z"
    }
  ]
}