Flywheel

Concept tour · from idea to merged

Give the dashboard a dark theme.

One raw sentence — the kind that arrives in a chat window on a Tuesday — followed through all seven steps of the flywheel, with the artifact each step leaves behind. The steps never change; that constancy is the lesson. Only the idea does.

the same journey, other ideas: exports fail when the API rate-limits us · onboarding emails arrive out of order

step 1 of 7 · dispatch

A wish, said out loud.

One sentence in from wherever you talk to dispatch. It's product-shaped, so it becomes an intent — not a ticket rotting in a backlog.

actor: dispatch · your cost: one sentence

the artifact it leaves
◎ tracker item
Give the dashboard a dark theme
milestone · intent/dashboard-dark-theme type:question state:queued

step 2 of 7 · the intent expands

The wish expands into its real questions.

The intent loop asks the question that decides the cost: are the colours tokens, or five hundred hex codes? Everything else hangs on that.

actor: intent loop · your cost: nothing yet

the artifact it leaves
▤ openspec/changes/dashboard-dark-theme/
dashboard-dark-theme/
├── intent.md
├── questions
│   ├── #305 tokens or literals — what's the real count?
│   └── #306 does chart colour survive inversion?
└── sessions/

step 3 of 7 · a session works the round

A session counts the real cost.

It greps the styles: 61 raw hex literals, everything else already tokens. It prototypes an inverted palette on the two worst screens and screenshots the result.

actor: design session · your cost: nothing yet

the artifact it leaves
▤ sessions/2026-08-12-token-audit/
token-audit/
├── findings.md    61 hex literals · charts need own ramp
├── shots/         settings + reports, dark, prototyped
└── README.md

step 4 of 7 · the plan

The round closes into one screen.

Everything the session settled — and everything it proposes next — lands as one plan: answers seeded, a decision drafted, a unit of construction proposed, sometimes the next round. Nothing on this screen exists on GitHub yet.

actor: the session, assembling · your cost: still nothing

the artifact it leaves
the plan · caps the round
tokens or literals — 61 literals, counted, screenshots attachedclosed
tokens first — dark is one swap, drafted as a recordclosed
unit · dashboard-dark-theme · 2 changes, sequenced · bolt-default→ construction
next round · the chart ramp needs its own passexpands
Approveone word · nothing existed on GitHub before it

step 5 of 7 · your word

One word contracts the round — and can expand the next.

You correct what's wrong — a route, a type, an answer typed into a row — and approve once. The tokens-first rule becomes a record, the two-stage batch drops into construction — and the chart-ramp round opens only because you said grow.

actor: you, on the rim · your cost: one word

what that word left behind
✎ decisions/tokens-first.md
# Decision — dark is a token swap

All 61 literals become semantic tokens first.
Dark ships as one alternate token set. A parallel
dark stylesheet is out — two files, one drift.
Closed by the operator, 2026-08-12.
⚙ unit · dashboard-dark-theme → construction, covered by this word ⊕ elaboration · the chart ramp — the next round, open

step 6 of 7 · build — the bolt runs

Construction does the boring part perfectly.

The tokenise pass is exactly the work agents are good at: 61 mechanical edits, each checkable against the record. Then the theme is genuinely one file.

actors: construction sessions · your cost: none

the artifact it leaves
± styles/tokens.css
@@ new: the dark set @@
+ [data-theme="dark"] {
+   --surface: #101418;   /* was 61 scattered literals */
+   --ink: #E8EAED;
+   --chart-ramp: var(--ramp-dark); /* decisions/tokens-first.md */
+ }

step 7 of 7 · merged

The theme lands; the cleanup stays.

Even if dark mode were ripped out tomorrow, the token cleanup remains — the journey improved the codebase on its way through. Task checked, record on file. And the chart-ramp round you opened with the same word is already turning — that is the flywheel in motion.

actor: bolt loop · your cost: none

the artifact it leaves
⇂ merged to main
c07d3e1  feat(dashboard): dark theme as an alternate token set
☑ intent/dashboard-dark-theme · handoff landed
☑ #305 tokens or literals? — closed: tokens, now

Seven steps, one spec trail

The wish shipped, and the codebase came out cleaner than the wish required — the journey leaves spec and structure behind at every radius. Your cost, totalled: one sentence, a few minutes, one word.

back to the walk ↩ · same journey, other ideas: export backoff → · onboarding email order →