feat(theme): repoint unthrown to teal, retire demesne and start - #40
Merged
Conversation
Red is stop and green is all-clear. A modelled error is neither — unthrown's whole claim is that a failure is not an emergency but an anticipated case, typed in E and matched exhaustively. So the accent moves outside the signal register entirely: not a signal, a value. #46B86C was also byte-identical to --bt-green, the org's checkmark ink, so unthrown was the one package whose "own" accent was org chrome — the thing the multi-accent rule forbids. --bt-green / --green / --text-green are untouched and now uncontested. The logo's no-throw sign (circle + slash) moves with it: #3FB0A5 on dark, #2F847C on light, keeping the pair's existing 0.75 ratio. Both clear the 3:1 non-text contrast threshold, and the light variant improves on the old green (4.24 vs 4.08 on #FAF9FA). demesne and start no longer exist, so their tokens, design.md rows and logo assets go with them. CHANGELOG.md and .hallmark/log.json still name them, as history should.
There was a problem hiding this comment.
Pull request overview
Updates the shared theme’s package-accent system by moving unthrown to a new teal accent and cleaning up retired package artifacts, keeping the design system documentation aligned with the published tokens.
Changes:
- Repoint
--pkg-unthrownfrom green to teal (#3FB0A5) in the canonical token source. - Remove retired package accents (
--pkg-demesne,--pkg-start) from the design system and token export. - Update unthrown logo strokes to match the new accent, and delete demesne/start logo SVGs.
Reviewed changes
Copilot reviewed 3 out of 9 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| packages/theme/src/tokens.css | Updates exported per-package accent tokens (unthrown → teal; removes demesne/start). |
| design.md | Updates design-system docs to reflect the current set of package accent tokens. |
| apps/website/public/logos/unthrown-light.svg | Updates light logo stroke color to match the new unthrown accent variant. |
| apps/website/public/logos/unthrown-dark.svg | Updates dark logo stroke color to match the new unthrown accent. |
| apps/website/public/logos/start-light.svg | Deletes retired start logo asset. |
| apps/website/public/logos/start-dark.svg | Deletes retired start logo asset. |
| apps/website/public/logos/demesne-light.svg | Deletes retired demesne logo asset. |
| apps/website/public/logos/demesne-dark.svg | Deletes retired demesne logo asset. |
| .changeset/teal-unthrown-accent.md | Adds a Changesets entry for the token/asset updates. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
`./tokens.css` is a declared export of @btravstack/theme, so its custom properties are public API and dropping --pkg-demesne / --pkg-start is breaking by the letter — regardless of the fact that the projects they named are gone and no repo in the org referenced them. Deprecated aliases were the other option Copilot offered and are worse: an alias would point at a package that no longer exists. From Copilot's review on #40.
btravers
added a commit
to btravstack/unthrown
that referenced
this pull request
Aug 8, 2026
* feat(docs): repoint the accent from green to teal Matches btravstack/btravstack.github.io#40, which carries the reasoning: red is stop and green is all-clear, and a modelled error is neither — so the accent sits outside the signal register. Not a signal, a value. The hero glyph is masked and painted with --accent, so it tracks the token on its own. The three logo copies and the four feature icons hardcode the hex and are swapped by hand: #46B86C -> #3FB0A5, and the light logo's #348A51 -> #2F847C, keeping the pair's existing 0.75 ratio. * docs: correct the accent comment's derived-shade list and spelling The comment claimed @btravstack/theme derives the feature icons from --accent. It does not — public/icons/*.svg hardcode the hex, which is why this branch had to swap all four by hand. The claim predates this PR; it is corrected rather than carried forward, and now names the hardcoding as the trap it is. "modelled" -> "modeled", the spelling used by the other 288 occurrences. Both from Copilot's review on #198.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why teal
amqp-contract wears RabbitMQ's orange and temporal-contract wears Temporal's indigo — both borrowed, both meaningful. unthrown has no upstream brand, so its color has to mean something about the library itself.
The signal register has exactly three colors: red stop, amber caution, green all-clear. unthrown's entire argument is that error handling does not belong in that register. A modelled failure isn't a light on a dashboard you react to — it's a value in your type signature you already covered. Teal is the one hue here that isn't a traffic light. Not a signal, a value.
Which is also why not red. Red says this went wrong, and the name means the error was not flung up the stack. Structurally it's worse: red is the color the defect channel deserves — the one thing that still throws, and the library's actual innovation. Spend it on the whole package and there's nothing left to express the distinction that makes unthrown worth having. ("Forbidden sign" red doesn't apply either: prohibition red bans a subject, and unthrown doesn't ban errors, it welcomes them as values. What it bans is
throw— an absence.)Green wasn't wrong so much as imprecise. In a three-variant library green is
Ok— branding the whole thing with one of its own variants, and the least interesting one. Teal is that same "no surprises" reading said better: not everything is fine, but everything is accounted for. Composure, not success.The collision it also fixes
--pkg-unthrownwas byte-identical to--bt-green, the org's checkmark ink (--green/--text-green). So unthrown was the only card where the in-panel checkmarks matched the accent, and the only package whose "own" accent was org chrome — exactly whatdesign.md's multi-accent rule forbids. Those three tokens are untouched and now uncontested.Numbers
#100f12card#FAF9FA#3FB0A5#46B86C#E5484D(rejected)Red was also the dimmest candidate on the canvas — the "hard" color is the weak one there.
The logo's no-throw sign (circle + diagonal slash) moves with the token:
#3FB0A5dark,#2F847Clight, keeping the pair's existing 0.75 ratio. Both clear the 3:1 non-text threshold that applies to a 6.5px stroke, and the light variant improves on the old green (4.24 vs 4.08).Cleanup
demesne and start are gone (both repos 404), so
--pkg-demesne,--pkg-start, theirdesign.mdrows and token-block lines, and four orphaned logo SVGs go with them.beet-worker-*.svgstays —design.mddefines it as the maturity-chip marker, not a package.CHANGELOG.mdand.hallmark/log.jsonstill name them, as history should.Minor changeset on
@btravstack/theme. Landing builds clean; teal is in the emitted CSS and nopkg-demesne/pkg-startsurvives.Companion
btravstack/unthrown needs the matching
--accentand asset swap — separate PR.