Initiative lifecycle & health
Initiatives are the one place in the work plane where a stored status is allowed — because an initiative's stage is a decision, not a measurement. The doctrine that governs everything else is unchanged: derive what the world can tell you; store what only a human can tell you. Task rungs, milestone states, progress and evidence remain derived on every read; the initiative's stage and its asserted health are speech acts, attributed and logged.
The five-state machine
An initiative moves through a closed machine with six named transitions:
planning ── start ──▶ active ⇄ paused
│
├─ complete ─▶ completed ── reopen ─▶ active
└─ cancel ──▶ canceled ── restore ─▶ planning
- Illegal moves teach. An out-of-order transition answers
409withallowedTransitions— the API tells you the legal next states rather than making you guess. - Terminal moves are signatures. Complete, cancel, reopen and restore
are human-only — an agent or automation actor gets a typed
human_onlyrefusal, enforced in the model and again at the API. The console renders these moves with an explicit confirmation for the same reason. - Pausing has teeth. A paused (or canceled) initiative closes the dispatch gate for its member tasks; a human can override, attributed.
- Transitions are idempotent via
clientToken: a retried request replays the original answer instead of double-writing.
The console renders the stage pill as the transition control — clicking it shows exactly the legal moves for the current stage.
Health is the headline of an update
There is no health dropdown. Health is asserted by posting an update —
one honest paragraph plus a headline (on_track / at_risk /
off_track), stamped with the author's name. The initiative's health IS
the latest update's headline; editing history is preserved.
- Staleness derives at read. An active initiative whose latest update
is older than the staleness window renders
· stalebeside the chip — old good news is not fresh bad news, so the color never changes; the age does. - No update yet renders honestly — the console says "no update yet" instead of inventing a green dot.
Signals nudge, humans assert
The old derived-health formula still runs — demoted to a signal. When the fold sees trouble (an idle milestone, a drifted approval), it renders a nudge — "the fold suggests at risk — post an update?" — with its named evidence, and pre-fills the update composer. It never overwrites the asserted headline, and it stays quiet while it agrees with a fresh one.
Yours: addressed attention
GET /work/yours is the personal queue: every reason the plane can derive
that something waits on a person — a drifted approval (the signer), an
open review (the requested reviewer), an idle milestone (the epic's
assignee), a design in review — resolved to a person, a sentence, and
the one gesture that clears it. An item that cannot name its person or
its action is not emitted: unaddressed attention is noise by definition.
Yours is the only attention renderer in the product — the console's
band on the Initiatives home, orun work yours in the CLI, and the
work_yours MCP tool all read the same queue, and every chip carries its
source badge. The read long-polls (after + waitSeconds) so agents and
dashboards can wait for the next decision instead of polling.
Archival is a view concern
Archiving hides an initiative from the default portfolio; it is not a status and moves nothing in the machine. Completed and canceled initiatives shelve themselves after a window; unarchive restores visibility. The console's Archived facet is the shelf, with the one gesture back.