diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-09 18:40:34 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-09 18:40:34 -0500 |
| commit | 47cf3552bf1151aed99477653dacd14993f3c736 (patch) | |
| tree | 91fbd06ef54f3044521b5bae9b6ae1dee61c1af6 | |
| parent | 1d51a332b96c008b9b22f7597fb590d4438be0d5 (diff) | |
| download | dotemacs-47cf3552bf1151aed99477653dacd14993f3c736.tar.gz dotemacs-47cf3552bf1151aed99477653dacd14993f3c736.zip | |
chore(todo): mark ramp generator core (Phase 1) done
| -rw-r--r-- | todo.org | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -77,8 +77,8 @@ The v1 feature (ramp generation + background-contrast safety, with the worst-cas ** TODO [#B] theme-studio palette ramps + contrast safety v1 :feature:theme-studio: The v1 build from [[file:docs/theme-studio-palette-ramps-spec.org][theme-studio-palette-ramps-spec.org]] (Ready, Codex-reviewed). Two coupled features: a ramp generator (one base color → harmonized tonal ramp) and background-contrast safety (worst-case floor over a face's foreground set + safe-lightness guidance). Phases land in spec order, each leaving the tree green and =make theme-studio-test= passing. Aesthetic and real-Emacs-fidelity sign-off lives under the Manual testing parent below. -*** TODO [#B] Ramp generator core :solo: -Phase 1. =ramp(baseHex, {n, stepL, chromaEase})= in app-core.js → ={steps: [{hex, clamped}], error?}=. Holds hue, steps OKLCH-L by =stepL=, eases chroma toward the extremes, gamut-clamps each step. Defaults n=2, stepL=0.08, chromaEase=0.5; clamp out-of-range knobs with a flag; malformed =baseHex= → ={steps: [], error: 'bad-hex'}= (not thrown). Node tests: Normal (mid base), Boundary (near-white/near-black base, n at 1 and 4), Error (bad hex, out-of-range knobs). No UI. Verify: =make theme-studio-test= green. +*** 2026-06-09 Tue @ 18:40:20 -0500 Ramp generator core landed +Phase 1 (commit =1d51a332=). =ramp(baseHex, {n, stepL, chromaEase})= in app-core.js → ={steps: [{hex, clamped, offset}], adjusted}= or ={steps: [], error: 'bad-hex'}=. Holds the OKLCH hue, steps lightness by =stepL=, quadratic chroma-ease toward the extremes, gamut-clamps each step; knobs clamp to range with the clamped knob named in =adjusted= (n=2/stepL=0.08/chromaEase=0.5 defaults). 10 node tests (mid/near-white/near-black bases, hue-hold, chroma ease, knob clamping, malformed hex), suite 55→65, =make theme-studio-test= green. The app-core integrity stripper now drops =import= lines too. *** TODO [#B] Ramp UI in palette :solo: Phase 2. Base swatch → preview ramp row (darkest→lightest, base marked, clamp badge per step) → add selected steps as named palette entries. Names derive from source swatch (=blue= → =blue+1=/=blue-1=); base preview-only by default; steps insert adjacent to source in =-n..+n= order. Collisions never silent: name collision flags + forces rename, hex collision flags as duplicate but allows add. Add a #ramptest hash-gate pinning generation + insertion + collision behavior. Depends on Phase 1. Verify: hash-gate green + headless screenshot read. *** TODO [#B] Foreground-set + floor + L_max core :solo: |
