The role palette has 0.0004 of headroom on devrel, so the roster is effectively frozen against any colour edit #370

Open
opened 2026-08-27 10:00:20 +00:00 by coilyco-ops · 0 comments
Member

What

devrel's derived accent #f7ab5d sits at OKLab lightness 0.7996 against the legible-band ceiling of 0.8000. Four ten-thousandths. eval has 0.0109 and sysadmin 0.0143.

Because the derivation in internal/palette is global, any personality colour edit that moves the roster further than the tightest margin lands some role outside the band and the roster refuses to load. The role that breaks need not share a personality with the edit.

Margins for every derived accent, from evalkit/palette:

  • devrel #f7ab5d - lightness 0.7996 - margin 0.0004
  • eval #3fd7a9 - lightness 0.7891 - margin 0.0109
  • sysadmin #009895 - lightness 0.6143 - margin 0.0143
  • platform #9c8b31 - lightness 0.6348 - margin 0.0348
  • gamedev #637ffd - lightness 0.6396 - margin 0.0396
  • frontend #e583f7 - lightness 0.7571 - margin 0.0429
  • tpm #e36966 - lightness 0.6676 - margin 0.0676

Why it matters now

It is not theoretical. Rotating tenacious through OKLab hue at fixed lightness and chroma, tested against the real solver with a rebuild per trial, 18 of 24 rotations are rejected, and nearly every rejection is a cascade onto devrel or sysadmin rather than a problem with tenacious itself. Representative failures:

derive role favorite colors: group 6: color #f8ab5d has OKLab lightness 0.80 outside the band
derive role favorite colors: group 1: color #3a9278 has OKLab lightness 0.60 outside the band

So the practical state is that no personality colour can move meaningfully in any direction. That surfaced while investigating tenacious on #368, and it is independent of that investigation: the next colour edit of any kind hits it, whichever personality it touches.

It also means a colour can be judged in a render that the record would refuse. #d1cb26 was rendered and evaluated as a candidate for tenacious before anyone checked that Legible() rejects it at lightness 0.82.

Options, none of them mine to pick

  • widen the band. minL and maxL are terminal-legibility constants in internal/color/color.go, so this trades headroom against contrast on the surfaces that read text against these colours.
  • give the spread a lightness objective. It currently maximises pairwise OKLab distance under a drift cap and clamps back into the band, so a role can be pushed to the boundary and clamped flat against it. Nothing pulls it back toward the middle.
  • move warm. devrel is the tightest because #ff9c79 is already at value 100, and the derived accent inherits that.

The first two are foundational software and the third is Kai's. I measured rather than chose.

Check

evalkit/palette reports the table above and reads both inputs from their owning sources, the band from internal/color/color.go and the accents from the committed snapshot, so it does not go stale against either:

uv run python -m evalkit.palette

Landed in 42e2a35.

Refs coilyco-flight-deck/agent-compose#368.

Measured by Evie, eval seat, session ay88.

## What `devrel`'s derived accent `#f7ab5d` sits at OKLab lightness **0.7996** against the legible-band ceiling of **0.8000**. Four ten-thousandths. `eval` has 0.0109 and `sysadmin` 0.0143. Because the derivation in `internal/palette` is global, any personality colour edit that moves the roster further than the tightest margin lands some role outside the band and the roster refuses to load. The role that breaks need not share a personality with the edit. Margins for every derived accent, from `evalkit/palette`: * `devrel` `#f7ab5d` - lightness 0.7996 - margin **0.0004** * `eval` `#3fd7a9` - lightness 0.7891 - margin 0.0109 * `sysadmin` `#009895` - lightness 0.6143 - margin 0.0143 * `platform` `#9c8b31` - lightness 0.6348 - margin 0.0348 * `gamedev` `#637ffd` - lightness 0.6396 - margin 0.0396 * `frontend` `#e583f7` - lightness 0.7571 - margin 0.0429 * `tpm` `#e36966` - lightness 0.6676 - margin 0.0676 ## Why it matters now It is not theoretical. Rotating `tenacious` through OKLab hue at fixed lightness and chroma, tested against the real solver with a rebuild per trial, **18 of 24 rotations are rejected**, and nearly every rejection is a cascade onto `devrel` or `sysadmin` rather than a problem with `tenacious` itself. Representative failures: derive role favorite colors: group 6: color #f8ab5d has OKLab lightness 0.80 outside the band derive role favorite colors: group 1: color #3a9278 has OKLab lightness 0.60 outside the band So the practical state is that no personality colour can move meaningfully in any direction. That surfaced while investigating `tenacious` on #368, and it is independent of that investigation: the next colour edit of any kind hits it, whichever personality it touches. It also means a colour can be judged in a render that the record would refuse. `#d1cb26` was rendered and evaluated as a candidate for `tenacious` before anyone checked that `Legible()` rejects it at lightness 0.82. ## Options, none of them mine to pick * widen the band. `minL` and `maxL` are terminal-legibility constants in `internal/color/color.go`, so this trades headroom against contrast on the surfaces that read text against these colours. * give the spread a lightness objective. It currently maximises pairwise OKLab distance under a drift cap and clamps back into the band, so a role can be pushed to the boundary and clamped flat against it. Nothing pulls it back toward the middle. * move `warm`. `devrel` is the tightest because `#ff9c79` is already at value 100, and the derived accent inherits that. The first two are foundational software and the third is Kai's. I measured rather than chose. ## Check `evalkit/palette` reports the table above and reads both inputs from their owning sources, the band from `internal/color/color.go` and the accents from the committed snapshot, so it does not go stale against either: uv run python -m evalkit.palette Landed in `42e2a35`. Refs `coilyco-flight-deck/agent-compose#368`. Measured by Evie, eval seat, session `ay88`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#370
No description provided.