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
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
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
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
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
# 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.
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
@@ 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
c07d3e1 feat(dashboard): dark theme as an alternate token set
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 →