From e06758ed98315defcfcf89485167d63ba8cf64a6 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 24 Jun 2026 05:59:49 -0400 Subject: chore(todo): close the nerd-icons colors PROJECT (phases 1-4 shipped) Mark the nerd-icons colors PROJECT DONE with its four phases as dated event-log entries, promote the vNext follow-ups to a standalone [#D] task, and file the live-visual check as a VERIFY under Manual testing and validation. Claude-Session: https://claude.ai/code/session_01BqrdWUo9GcznYX2pZr76gZ --- todo.org | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/todo.org b/todo.org index fabef5a3e..eaf0f934c 100644 --- a/todo.org +++ b/todo.org @@ -72,29 +72,26 @@ Was hardcoded "gray60"; now four customizable faces (branch =feature/themeable-f Four modeline faces shipped (081d76e). =inbox/PROCESSED-2026-06-23-2326-from-chime-chime-added-four-themeable-modeline.org=. ** TODO [#D] Evaluate google-keep Emacs package :quick: From the roam inbox. Look at the google-keep Emacs package — worth adding for in-editor Keep, or does the existing google-keep MCP cover it? Triage / shortlist, not a commitment. -** PROJECT [#B] Theme-driven nerd-icons colors + filetype legend :feature: -Drop the runtime nerd-icons tint so icon color is theme-driven, and add a +** DONE [#B] Theme-driven nerd-icons colors + filetype legend :feature: +CLOSED: [2026-06-24 Wed] +Dropped the runtime nerd-icons tint so icon color is theme-driven, and added a theme-studio filetype-legend representation over the 34 =nerd-icons-*= color -faces (which the inventory already exposes). Spec: +faces. Spec: [[file:docs/specs/theme-studio-nerd-icons-colors-spec.org][theme-studio-nerd-icons-colors-spec.org]]. -Three Codex spec-review rounds (3 + 6 + 1 blocking findings) all incorporated via -spec-response. Round 2 settled the implementer contracts (13-row v1 legend table; -dir precedence =nerd-icons-yellow= prepended wins; cross-package ownership; the -=nerd-icons-legend.json= artifact + failure behavior; atomic assign+drop-tint -phases; named test plan). Round 3 reconciled the stale summary/readiness/risk -prose with those decisions. Findings [10/10], decisions [6/6]. Ready confirmed -2026-06-24; broken into the Phase 1-4 implementation tasks below (spec-response -Phase 6). All :solo: — build + verify via run-tests.sh + validate-modules/launch -smoke; no design call remains. -*** TODO [#B] Phase 1 — legend capture (nerd-icons-legend.json) :feature:solo: -New =scripts/theme-studio/build-nerd-icons-legend.el= (loads nerd-icons; resolves each curated key's glyph + owner face from the live alists) dumps the 13 v1 rows ={key,label,face,category,glyph}= to =scripts/theme-studio/nerd-icons-legend.json=, a committed artifact like =package-inventory.json=, via the same =emacsclient -e '(load …)'= step the inventory dumps use. =generate.py= embeds it; absent / malformed / empty (nerd-icons not installed) → log a warning and fall back to the generic nerd-icons app, never error. No native-color capture here — the seed rides the existing default-face pipeline. Data only; tree stays working, no UI change. Verify: run-tests.sh Python schema + bespoke-vs-generic fallback gate. -*** TODO [#B] Phase 2 — bespoke nerd-icons legend preview :feature:solo: -Register nerd-icons as a bespoke app (=BESPOKE_APP_SPECS= / =PREVIEW_KEYS= in app_inventory.py/face_data.py) with a =previews.js= renderer that draws each curated row's glyph + sample name in its mapped face's effective color, read through the same registry the other previews use, live-updating on recolor. The 34 =nerd-icons-*= faces stay editable foreground rows. Browser-gated; existing previews unaffected. Verify: run-tests.sh browser gates — legend renders, recoloring a face repaints every row mapped to it, every element carries a valid owner =data-face=, the dir row models =nerd-icons-yellow=. -*** TODO [#B] Phase 3 — theme assignment + tint removal (atomic) :feature:solo: -One change: assign the 34 =nerd-icons-*= colors in the WIP theme (and =WIP-theme.el=) AND remove =cj/nerd-icons-tint-color=, =cj/--nerd-icons-color-faces=, =cj/nerd-icons-apply-tint= + its two call sites from =modules/nerd-icons-config.el=, together, so icons never pass through an uncolored native-palette interim (the sequencing decision). Keep =cj/--nerd-icons-color-dir= (now points at a theme-owned face). Delete =tests/test-nerd-icons-config--apply-tint.el= (tests removed code). Verify: =make validate-modules= + launch smoke; live-reload into the daemon. -*** TODO [#B] Phase 4 — verification + dir-precedence probe :test:solo: -Export → =WIP-theme.el= and re-import round-trip over the =nerd-icons-*= faces (=nerd-icons-completion-dir-face=, a separate app, stays untouched); extend =tests/test-nerd-icons-config--color-dir.el= with the precedence case (prepended =nerd-icons-yellow= is first in the face list, wins); live check completing-read / dirvish / dashboard / ibuffer render the themed per-filetype colors (the visual confirmation lands as a manual VERIFY when this phase runs). Verify: full run-tests.sh (Node + browser + ERT + Python) green. -*** TODO [#D] Theme Studio nerd-icons vNext follow-ups :feature: +Three Codex spec-review rounds (3 + 6 + 1 findings) incorporated; findings +[10/10], decisions [6/6]. Ready confirmed 2026-06-24 and implemented in a +no-approvals speedrun as the four dated phases below — full run-tests.sh and +=make test= green, all pushed. Live visual confirmation is a VERIFY under +Manual testing and validation. vNext follow-ups promoted to their own [#D] task. +*** 2026-06-24 Wed @ 05:54:34 -0400 Phase 1 — legend capture shipped +=scripts/theme-studio/build-nerd-icons-legend.el= resolves the 13 v1 rows from the live nerd-icons alists into =nerd-icons-legend.json= (committed); =generate.py='s =load_nerd_icons_legend= validates and falls back to the generic app on absent/malformed/empty/bad-row, with a warning. 7 Python tests. Committed (feat phase 1). +*** 2026-06-24 Wed @ 05:54:34 -0400 Phase 2 — bespoke legend preview shipped +nerd-icons registers as a bespoke app whenever the legend is valid (=add_nerd_icons_app=); =renderNerdIconsPreview= draws each row's glyph in its mapped face color through the shared registry, so recolor repaints live; the 34 faces stay editable. =#nerdiconstest= gate covers the wiring, the dir-row owner, and the recolor-repaint. Committed (feat phase 2). +*** 2026-06-24 Wed @ 05:54:34 -0400 Phase 3 — tint removed, theme drives color +Removed =cj/nerd-icons-tint-color= + =cj/--nerd-icons-color-faces= + =cj/nerd-icons-apply-tint= and both call sites from =nerd-icons-config.el=; the WIP theme already owned the 34 faces (theme-studio auto-discovered them), so color is theme-driven now. Kept =cj/--nerd-icons-color-dir=. Deleted the apply-tint test. validate-modules + launch smoke clean. Committed (feat phase 3). +*** 2026-06-24 Wed @ 05:54:34 -0400 Phase 4 — dir-precedence probe + round-trip +ERT probe locks the dir-precedence decision (prepended =nerd-icons-yellow= is first in the face list, wins over =nerd-icons-completion-dir-face=); =#nerdiconstest= extended with the export/import round-trip over an assigned nerd-icons color and a dir-face-stays-out check. Full run-tests.sh + =make test= green. Committed (test phase 4). Live visual is the VERIFY under Manual testing. +** TODO [#D] Theme Studio nerd-icons vNext follow-ups :feature: Deferred from [[file:docs/specs/theme-studio-nerd-icons-colors-spec.org][theme-studio-nerd-icons-colors-spec.org]]: extend the legend to buffer-mode and command/symbol categories if the file set proves insufficient; add a "reset to nerd-icons native palette" button. @@ -510,6 +507,13 @@ What we're verifying: the cmail trash-folder + per-message refile fix (shipped 2 - On a cmail message, press =r= (refile) then =x=; confirm it lands in cmail/Archive. - On a gmail (or dmail) message, press =r=. Expected: cmail trash → cmail/Trash, cmail refile → cmail/Archive, both real maildirs mbsync syncs. Refile on gmail/dmail signals a user-error (no move) rather than offering to create an unsynced phantom folder. If any move targets a folder mbsync doesn't sync, capture it and reopen. +*** VERIFY nerd-icons colors are theme-driven (legend + live icons) +What we're verifying: the nerd-icons v1 feature reads right end to end. The Python/Node/browser gates pass; this is the visual confirmation the gates can't make — the legend pane and the real per-filetype icon colors after the tint removal. +- In theme-studio, open the nerd-icons pane: the legend should show each filetype's real nerd-font glyph in its mapped color (el purple, py dark-blue, dir yellow, …), with the 34 color faces editable on the left. +- Recolor a face (e.g. nerd-icons-purple) and confirm every legend row mapped to it repaints immediately. +- Restart Emacs (the running daemon still has the old darkgoldenrod tint baked into the faces until restart). +- In a fresh frame, look at icons in completing-read (find-file), dirvish, the dashboard, and ibuffer. +Expected: the legend renders glyphs in their assigned colors and recolor repaints live; after restart, file/dir/buffer icons show nerd-icons' per-filetype multicolor palette driven by the theme (not a uniform darkgoldenrod), and directory icons are yellow. If icons are still uniform or uncolored, capture it and reopen. ** PROJECT [#A] Theme-Studio Open Work Parent grouping the open theme-studio / theming issues; close each child independently. -- cgit v1.2.3