Sizing WUs
Right-sizing WUs is critical for flow. The most common sizing mistake is not oversized WUs — it is fragmenting one coherent outcome into many small WUs that cannot ship alone.
The Cohesion Rule (read this first)
Section titled “The Cohesion Rule (read this first)”Default bias: one coherent outcome = one WU.
Keep one WU when all are true:
- The acceptance criteria describe one coherent outcome.
- The work should land together to be meaningful.
- A single agent or handoff chain can finish it (see strategies below).
- The touched files support the same change, even across several files.
Do not split because work has multiple implementation steps, tests plus docs, more than one session, or several same-lane files.
Consolidation Checklist
Section titled “Consolidation Checklist”Before proposing more than two WUs, run this checklist iteratively over every pair until no merge passes:
- Same lane and same outcome? Merge.
- Same file or module? Usually merge.
- Either WU meaningless alone? Merge.
- Split by phase rather than outcome? Merge.
- Split by artifact type (tests/code/docs)? Merge.
- Would a reviewer see one PR? Merge.
Run the checklist before presenting a WU list — a reviewer should never need to send a plan back for consolidation.
Complexity Assessment
Section titled “Complexity Assessment”Estimate WU “weight” using these heuristics. estimated_files counts artifacts
the WU will modify, not files read for review. estimated_tool_calls covers the
whole WU across handoffs. The 50-call current-session checkpoint trigger remains
an independent safety rule.
| Strategy tier | File ceiling | Tool-call ceiling | Context Budget | Strategy (sizing_estimate.strategy) |
|---|---|---|---|---|
| Simple | ≤20 | ≤50 | <30% | single-session |
| Medium | ≤50 | ≤100 | 30-50% | checkpoint-resume |
| Complex | ≤100 | ≤200 | >50% | orchestrator-worker |
| Oversized | >100 | >200 | — | Re-estimate and re-check cohesion; do not invent a split |
The ceilings are inclusive, matching the current checker. For example, a
20-file/50-call single-session estimate is compliant; warnings begin only
above either ceiling.
The three strategy values above are the exact executable enum accepted by the
sizing_estimate.strategy field on WU YAML (validated by wu:create and
wu:brief; wu:brief --strict-sizing blocks non-compliant estimates):
decomposition is plan-only vocabulary for mapping one plan to several
independently shippable outcomes. It is invalid on an active executable WU.
Each resulting child WU declares one of the three strategies above. Terminal
historical records remain readable.
Sizing Heuristics
Section titled “Sizing Heuristics”Good Size Indicators
Section titled “Good Size Indicators”- Single clear outcome
- Can describe in one sentence
- Tests, code, and docs for that outcome all in the same WU
Too Big Indicators
Section titled “Too Big Indicators”- Multiple independent outcomes (not multiple steps toward one outcome)
- Description reads as a list of unrelated deliverables
- No clean stopping point; scope keeps widening
Too Small Indicators
Section titled “Too Small Indicators”- Cannot ship, review, or roll back alone
- Split by phase, layer, or artifact type rather than outcome
- Overhead exceeds value
When Splitting Is Justified
Section titled “When Splitting Is Justified”Split only when parts can ship, review, and roll back independently; different lanes/owners must deliver independent parts; a tracer-bullet or feature-flag pattern reduces real risk; or the work keeps widening without a clean stopping point.
Every proposed split must show independent ship, review, rollback, and safe partial value for the actual change:
| Pattern | Required boundary | Safe partial value example |
|---|---|---|
| Tracer bullet | The first WU is a supported thin production path | A health probe proves authentication and transport before later operations |
| Layer split | A stable existing port makes each adapter independently useful | A read-only adapter serves a supported port; a later writer is optional value |
| UI/API split | The API has a real non-UI consumer and the UI can roll back alone | Automation consumes the API before the UI arrives |
| Migration/flag | The first WU produces evidence or value while both paths remain | Shadow execution records comparisons; a later WU switches traffic independently |
If the real proposal cannot fill every boundary column, keep one WU and use a heavier execution strategy.
When to Combine
Section titled “When to Combine”Tiny WUs that fail the checklist get merged:
Too granular:
- WU-A: Add firstName field
- WU-B: Add lastName field
- WU-C: Add email field
Better:
- WU-X: Add user profile fields (firstName, lastName, email)
Sizing Exceptions
Section titled “Sizing Exceptions”wu:create and wu:edit accept three bounded exception_type values. A name
and arbitrary reason do not suppress sizing checks:
docs-only— asingle-sessiondocumentation WU may modify up to 40 prose docs artifacts in at most 50 whole-WU calls. Starlight MDX underapps/docs/src/content/docs/**qualifies. Templates, Astro/build config, and executable examples do not.shallow-multi-file— a uniform mechanical change across many files (each edit ≤5 lines, structurally identical) can staysingle-sessionup to 50 modified files and 50 whole-WU calls. The reason records evidence of that uniformity. A 30-file change with unique logic does not qualify.review-audit— aprocessordocumentationWU modifies prose report artifacts. Its declared strategy keeps the ordinary ceiling. Read coverage is recorded separately:
Creation-time advice warns without mutating the request; actual active-WU
writes hard-validate exception applicability. wu:brief --strict-sizing also
enforces numerical ceilings. The pack policy is shared by CLI, WU schema, and
initiative admission.
The portable candidate-wu/v1 record retains its narrower original refinements
for old-reader compatibility. It cannot encode checkpoint review-audit or all
Starlight docs-only candidates. Those shapes require a future versioned
candidate and containing plan before public admission cutover.
For review work, choose reviewer scopes from available host capacity. Keep each scope distinct and bounded by the normal session limits. There is no fixed minimum reviewer count.
If an audit discovers implementation work, promote a follow-up WU rather than stuffing the fix into the audit unless it remains the same coherent outcome.
Spikes Without a WU
Section titled “Spikes Without a WU”For a narrow, read-only question (one dependency graph, one schema question)
with a bounded budget (typically under 25 tool calls) whose answer immediately
scopes the next WU, run a pre-phase audit without creating a WU and capture
findings with pnpm mem:create --type discovery. If the investigation expands,
create a review-audit WU instead. Research that produces a decision document is
a normal WU (usually type: process or documentation with the
review-audit exception) — there is no separate discovery WU type.
Dependencies
Section titled “Dependencies”If WUs depend on each other, note it:
Execute in order, or work on independent WUs in parallel lanes.
Context Safety Triggers
Section titled “Context Safety Triggers”If you hit ANY of these during a session, checkpoint and handoff:
- Token Limit: Context usage hits 50% (warning) or 80% (critical)
- Tool Volume: 50+ tool calls in current session
- File Volume: 20+ files modified in
git status(also re-check cohesion) - Performance Degradation: Redundant queries, forgotten context
Sizing for Initiatives
Section titled “Sizing for Initiatives”An initiative needs two sizing passes: first validate each WU as one coherent outcome, then validate the active initiative graph. A list of locally valid WUs can still be over-fragmented.
Active Graph Default
Section titled “Active Graph Default”- Treat 3-10 active WUs as a planning prompt, not a target or minimum. Zero, one, or two are valid when they are the coherent outcomes. Never pad the graph. Done or otherwise terminal history is excluded.
- Keep generic repairs and external prerequisites outside initiative membership;
connect them with
blocked_by. - Above 10 active WUs, consolidate fragments, move an independent outcome to a focused successor initiative, or record a specific justification before dispatch.
- Gates and logical plan nodes do not each require a WU. Multiple nodes can map to one WU when they share a ship, review, and rollback boundary.
For plans with more than two proposed WUs, record two pairwise passes before creating IDs: a literal path/lane/dependency pass and an adversarial pass that assumes either WU lands alone. For every pair, record the outcome, lane, independent ship/review/rollback result, safe partial value, why a same-WU handoff is insufficient, and the merge/keep decision.
Checkpoint-per-Wave
Section titled “Checkpoint-per-Wave”Each wave in an initiative is a batch of WUs that can execute in parallel. Between waves, the orchestrator checkpoints progress:
Individual WUs within an initiative follow the same cohesion rule and sizing thresholds as standalone WUs — the initiative handles coordination, not cohesion.
Initiative Sizing Rules
Section titled “Initiative Sizing Rules”- Each WU in an initiative follows the standard cohesion rule and thresholds
- The orchestrator handles cross-WU coordination via memory signals
- Run the Consolidation Checklist over every proposed pair twice before IDs are allocated, and again whenever scope grows
- If a wave has more than 4-5 parallel WUs, re-check both the wave and the whole active graph before splitting it into sub-waves
- Use
pnpm orchestrate:init-status --id INIT-XXXto monitor wave progress
Next Steps
Section titled “Next Steps”- Work Units — WU structure and lifecycle
- Team Workflow — Collaborative sizing
- Initiatives — Multi-phase project coordination