aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--todo.org86
2 files changed, 49 insertions, 45 deletions
diff --git a/Makefile b/Makefile
index 7f4352c97..319977e88 100644
--- a/Makefile
+++ b/Makefile
@@ -50,6 +50,7 @@ EMACS_TEST = $(EMACS_BATCH) -L $(TEST_DIR) -L $(MODULE_DIR)
test-bash theme-studio-test theme-studio-check theme-studio-coverage theme-studio-gen theme-studio-open theme-studio-theme theme-studio-theme-load theme-studio-theme-reload deploy-wip \
benchmark coverage coverage-summary coverage-clean \
validate-parens validate-modules compile compile-file lint profile \
+ task-sorted \
clean clean-compiled clean-tests reset
# Alias for help
@@ -457,6 +458,13 @@ profile:
--eval "(profile-dotemacs)"; \
fi
+# Move completed tasks (DONE/CANCELLED level-2 subtrees) out of "Open Work"
+# and into the "Resolved" section of todo.org. Wraps todo-cleanup.el's
+# --archive-done; a no-op when nothing is in a closed state.
+task-sorted:
+ @echo "Archiving resolved tasks in todo.org..."
+ @$(EMACS) --batch -q -l .ai/scripts/todo-cleanup.el --archive-done todo.org
+
clean: clean-tests clean-compiled
@echo "✓ Clean complete"
diff --git a/todo.org b/todo.org
index e90c9a1fa..652f8065f 100644
--- a/todo.org
+++ b/todo.org
@@ -426,26 +426,11 @@ From the 2026-06 config audit, =modules/calendar-sync.el=:
- =:1284= — curl runs without =--fail=: an HTTP 404/500 error page exits 0 and the HTML proceeds into conversion.
- =:1229-1233= — =--parse-ics= returns nil for both garbage and a valid calendar with zero in-window events, so healthy near-empty calendars report "parse failed" in =calendar-sync-status=. Distinguish the cases.
-** DONE [#B] C-s C-s vertico-repeat path never works :bug:quick:solo:next:
-CLOSED: [2026-06-15 Mon]
-Fixed in b62af096 (prior session): vertico-repeat-save added to minibuffer-setup-hook so a session exists for the second C-s. Re-verified live 2026-06-15: the hook is installed and cj/consult-line-or-repeat is defined.
-:PROPERTIES:
-:LAST_REVIEWED: 2026-06-13
-:END:
-=modules/selection-framework.el:263= — =cj/consult-line-or-repeat= calls =vertico-repeat= on the second consecutive C-s, but nothing adds =vertico-repeat-save= to =minibuffer-setup-hook= (grep: zero hits config-wide), so it always signals "No Vertico session". Add the hook next to the vertico use-package block. From the 2026-06 config audit.
-*** 2026-06-13 Sat @ 10:59:52 -0500 Fixed: vertico-repeat-save hooked
-Added top-level =(add-hook 'minibuffer-setup-hook #'vertico-repeat-save)= after the vertico use-package block (placed top-level, not inside use-package, so the stub-use-package test exercises it; =vertico-repeat-save= is autoloaded, deferring the load to first minibuffer). New test asserts hook membership; 5/5 green; evaled into the live daemon (=:on-hook= now t). Awaiting Craig's confirm → DONE.
-
** TODO [#B] "? = curated help menu" convention across modes :feature:
From the calibredb keybindings work 2026-06-06. The pattern that worked: in a modal/major-mode buffer (calibredb), bind =?= to a curated transient of the frequent workflows, and move the package's own full dispatch to =H=. It fixes the "I can't discover the keys" problem that which-key can't help with (which-key only pops up after a prefix, not for top-level single keys in a mode-map).
Task: survey the modes/modules Craig works in and identify where a =?= -> curated-help-menu (transient) makes sense. Candidates: any major-mode buffer with single-key bindings and no good discovery affordance -- calibredb (done), nov, dirvish, mu4e, ghostel/term, signel, pearl/linear, ELFeed, etc. For each, note whether =?= is free or already a help dispatch, and whether a curated menu (vs the package's own) adds value. Establish it as a convention (and maybe a small helper/macro to define a curated =?= menu consistently).
-** DONE [#B] dirvish M (mark all files) marks every other file :bug:quick:solo:next:
-CLOSED: [2026-06-15 Mon]
-Rewrote cj/dired-mark-all-visible-files with dired-get-filename + file-directory-p and an if/else so dired-mark's own point-advance isn't doubled by forward-line. Added real-dired marked-count tests; retired the now-dead regex helper and its fake-buffer mock test.
-=modules/dirvish-config.el:218= — =dired-mark= advances point to the next line itself; the loop's extra =forward-line 1= then skips it, so consecutive files are marked alternately. Live mis-marking on a key that feeds batch operations (delete/copy on marked files) — data-loss adjacent. Drop the manual forward-line when a mark was made (or =dired-unmark-all-marks= + mark dirs + =dired-toggle-marks=). The trivial line-predicate helper is tested; the loop isn't — add the marked-count test. From the 2026-06 config audit.
-
** TODO [#B] Dupre diff-changed / diff-refine-changed legibility :bug:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-11
@@ -997,11 +982,6 @@ Add the buffer-local var, set it on each "Run a test..." selection, use it as th
*** TODO [#B] TS/JS coverage status sync
Update the =dev-fkeys.el= header comment (L33) — TS/JS is no longer punted; the cmd-builder at L384 emits vitest/jest. Document the prefer-vitest fallback.
-** DONE [#B] heavy-box comment inserts non-comment lines :bug:solo:next:
-CLOSED: [2026-06-15 Mon]
-cj/--comment-heavy-box now prefixes the interior empty/text lines with the comment char + suffix (like cj/--comment-box) so they stay valid comments in line-comment languages, and gained the min-length guard (small/negative widths now error cleanly instead of hitting make-string). The two characterization assertions that pinned the broken bare-* lines were updated to the corrected output.
-=modules/custom-comments.el:427= — =cj/--comment-heavy-box= interior/empty lines carry no comment prefix, so in line-comment languages (elisp, Python) C-; C h injects syntax-breaking bare =*...= lines. The existing test characterizes the broken output (asserts =^\*.*\*$=). Prefix interiors like =cj/--comment-box= does; add the missing min-length validation (negative width hits make-string with a raw error); fix the test to assert corrected output. From the 2026-06 config audit.
-
** TODO [#B] jumper: register collisions and dead-marker errors :bug:solo:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-13
@@ -2429,10 +2409,6 @@ configuration (=text-config=, =diff-config=, =ledger-config=,
Needs from Craig: this is measurement-first (perf), not a blind fix — it's the same bottleneck as the "optimize org-capture target building" debug task. Run /debug with debug-profiling to measure what actually costs the 15-20s (file count? regex? agenda rebuild?), then fix from the data. I won't restructure the refile/agenda scan without a profile. Say "let's debug it" and I'll profile + fix.
=modules/org-roam-config.el:78-79= — org-roam is =:defer 1=, so its :config calls =cj/build-org-refile-targets= at 1s idle, BEFORE the 5s background timer (=org-refile-config.el:144-151=); on a cold cache the 30k-file scan runs inline and freezes Emacs at first idle. Drop the call — org-roam is loaded long before the 5s timer fires. Likely a player in the filed org-capture 15-20s perf task (=[#B] Optimize org-capture target building performance=) — check both together. From the 2026-06 config audit.
-** DONE [#B] Scratch buffer background a shade lighter than default :feature:next:
-CLOSED: [2026-06-15 Mon]
-cj/scratch-apply-background remaps the *scratch* default background lighter (cj/scratch-background-lighten percent, default 5) via color-lighten-name, applied on the existing emacs-startup-hook. The percent is a tunable defcustom. Pure helper tested for the display-independent contract; the lightening itself is display-dependent (color-name-to-rgb), verified live in the daemon.
-Make *scratch* just-noticeably lighter than the normal background so it reads as the scratch buffer. Simplest is a buffer-local face remap on *scratch*; Craig is fine routing it through org-faces if a theme hook is wanted. The exact lightening delta is an aesthetic call to tune visually. From the roam inbox.
** VERIFY [#B] Stale elpa gptel shadows the local fork — likely the gptel-magit root :bug:quick:solo:next:
Needs from Craig: can't be done standalone. I tried deleting elpa/gptel-0.9.8.5 — the fork loaded fine and gptel-magit still worked via use-package autoloads, but package activation then printed "Unable to activate gptel-magit / Required gptel-0.9.8 unavailable" on every startup, so I reverted. To remove the shadow we must also resolve gptel-magit's package dependency: either drop gptel-magit's package dep (load it via load-path like the gptel fork), or repackage the fork into .localrepo as gptel. Tell me which and I'll do it; this pairs with the gptel-magit investigation.
=elpa/gptel-0.9.8.5= is still installed alongside the =~/code/gptel= fork (=ai-config.el:383=); package activation puts the elpa dir + autoloads on load-path, so which copy wins depends on ordering, and a mixed load (fork .el + elpa .elc) produces "impossible" bugs. =gptel-magit= (elpa) declares gptel as a dependency, so IT may be pulling the stale copy — check this first when working the open "[#B] Investigate gptel-magit not working properly" task. Fix: =package-delete= the elpa gptel + remove from .localrepo so the fork is the only copy on disk. From the 2026-06 config audit.
@@ -2821,16 +2797,6 @@ Needs from Craig: this is theme-side work, not a config edit — the music-confi
Pull the music-config faces out to the theme (the config no longer defines faces directly): playlist name, status (paused, etc.), two mode colors per "button" (on vs off), a per-key symbol+text color, and a color for all other labels. Pairs with the 2026-06-14 face-stripping work (music-config faces were removed there and are currently undefined until the theme defines them). From the roam inbox 2026-06-15.
** TODO [#C] music: show song information in the modeline :feature:
Show basic song information in the modeline, with streaming-source support too. Write a spec for this one first. From the roam inbox 2026-06-15.
-** DONE [#C] theme-studio: drop the too-similar-colors message below the palette :refactor:studio:next:
-CLOSED: [2026-06-15 Mon]
-Removed the renderPaletteWarnings box (function, #palwarn element, .palwarn CSS) and its #deltatest browser gate. The per-chip nearest-ΔE tooltip stays (paletteWarnings still computes `nearest`), so the same info remains reachable inline.
-Remove the too-similar-colors warning under the palette display. It isn't useful there; the same information is reachable per-assignment through the inline contrast field. From the roam inbox 2026-06-15.
-** CANCELLED [#C] theme-studio: raise the max color spans to 5 :feature:studio:
-CLOSED: [2026-06-15 Mon 22:52]
-Increase the palette's maximum span count to 5, for a smoother, slower transition across a color. From the roam inbox.
-*** CANCELLED which control caps below 5 — current maxes are all 8
-CLOSED: [2026-06-15 Mon 22:52]
-On review the per-column span control, the ground span control, and regenColumn all already cap at 8 (well above 5), so there's no sub-5 limit to raise. Either 5 is already reachable, or the intended control is a different one (e.g. the generator emits base-only columns — spanCount is hardcoded 0 in palette-generator-ui.js). Need Craig to point at the control he's hitting.
** VERIFY [#C] theme-studio: compact the contrast column to a number :solo:quick:studio:next:
Needs from Craig: clarify "colored like the current text." The contrast cell is crHtml in app.js — today it shows "N.N PASS/FAIL" colored by rating. Do you want (a) the number colored by its pass/fail rating (green/gray/red) with the verdict word dropped, or (b) the number colored in the face's own foreground (a legibility preview)? I'll do whichever; I won't guess on the aesthetic.
Represent contrast as a colored number colored like the current text. The word "passed" is unnecessary
@@ -4115,10 +4081,6 @@ The core functionality is implemented but needs debugging before it's production
3. Refine toggle behavior based on testing
4. Document the final keybindings and workflow
-** DONE [#C] Page-down in a long completing-read selects and dismisses the list :bug:next:
-CLOSED: [2026-06-15 Mon]
-Bound <next>/<prior> to vertico-scroll-up/down in vertico-map, so Page-Up/Down page the candidate list instead of falling through to history (which selected and dismissed). Verified live (use-package :bind isn't reachable under make test).
-In a very long completing-read (vertico), Page-Down selects an item and the list vanishes instead of paging, forcing a cancel. Investigate the completion stack's next-page handling; likely needs vertico-scroll-up / vertico-scroll-down bound in vertico-map. From the roam inbox.
** VERIFY [#C] page-signal pager account deregistered — re-registration needs your hands
:PROPERTIES:
:LAST_REVIEWED: 2026-06-12
@@ -4253,13 +4215,6 @@ Bake into the tool (a lint surfaced in the UI) or run as a build-time check (see
:END:
Craig, 2026-06-11 manual-test walk: the color picker's background is hard to distinguish from the page background. Give the picker panel a visibly distinct background or a highlighted border so it stands out. Pin with a gate asserting the picker element carries the distinct style.
-** CANCELLED [#C] theme-studio reconsider the JSON show button :feature:quick:studio:
-CLOSED: [2026-06-15 Mon 22:56]
-:PROPERTIES:
-:LAST_REVIEWED: 2026-06-13
-:END:
-From the roam inbox: the =show= button for the raw JSON export does not fit the main theme-design workflow, but it may still be useful for debugging. Decide whether to hide it behind a debugging affordance, rename it, or remove it. Quick UI cleanup once the desired debugging surface is chosen; not marked solo because it is a workflow preference call.
-
** TODO [#C] theme-studio: restrict the cursor row to its background :bug:studio:
The UI table gives the cursor face the full control set (fg, B/I/U/S, box), but Emacs only honors the cursor face's :background. Its shape is cursor-type, not a face attribute, so every other control on that row is a no-op once the theme loads. Restrict the cursor row to just its background swatch so the studio doesn't present controls Emacs drops.
** TODO [#C] theme-studio terminal/ANSI colors :feature:studio:
@@ -8431,3 +8386,44 @@ CLOSED: [2026-06-15 Mon]
:LAST_REVIEWED: 2026-06-13
:END:
=modules/ui-navigation.el= — the visited-file filter calls =(delq buf-file recently-killed-list)= where =buf-file= is a fresh string from =expand-file-name=, never =eq= to the =recentf-list= entries, so already-open files are never skipped (the skip logic is dead). Use =delete= (equal-based). Found 2026-06-12 while fixing the off-by-one above; the two bugs cancel exactly when one file is open, which is why it went unnoticed.
+** DONE [#B] C-s C-s vertico-repeat path never works :bug:quick:solo:next:
+CLOSED: [2026-06-15 Mon]
+Fixed in b62af096 (prior session): vertico-repeat-save added to minibuffer-setup-hook so a session exists for the second C-s. Re-verified live 2026-06-15: the hook is installed and cj/consult-line-or-repeat is defined.
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-13
+:END:
+=modules/selection-framework.el:263= — =cj/consult-line-or-repeat= calls =vertico-repeat= on the second consecutive C-s, but nothing adds =vertico-repeat-save= to =minibuffer-setup-hook= (grep: zero hits config-wide), so it always signals "No Vertico session". Add the hook next to the vertico use-package block. From the 2026-06 config audit.
+*** 2026-06-13 Sat @ 10:59:52 -0500 Fixed: vertico-repeat-save hooked
+Added top-level =(add-hook 'minibuffer-setup-hook #'vertico-repeat-save)= after the vertico use-package block (placed top-level, not inside use-package, so the stub-use-package test exercises it; =vertico-repeat-save= is autoloaded, deferring the load to first minibuffer). New test asserts hook membership; 5/5 green; evaled into the live daemon (=:on-hook= now t). Awaiting Craig's confirm → DONE.
+** DONE [#B] dirvish M (mark all files) marks every other file :bug:quick:solo:next:
+CLOSED: [2026-06-15 Mon]
+Rewrote cj/dired-mark-all-visible-files with dired-get-filename + file-directory-p and an if/else so dired-mark's own point-advance isn't doubled by forward-line. Added real-dired marked-count tests; retired the now-dead regex helper and its fake-buffer mock test.
+=modules/dirvish-config.el:218= — =dired-mark= advances point to the next line itself; the loop's extra =forward-line 1= then skips it, so consecutive files are marked alternately. Live mis-marking on a key that feeds batch operations (delete/copy on marked files) — data-loss adjacent. Drop the manual forward-line when a mark was made (or =dired-unmark-all-marks= + mark dirs + =dired-toggle-marks=). The trivial line-predicate helper is tested; the loop isn't — add the marked-count test. From the 2026-06 config audit.
+** DONE [#B] heavy-box comment inserts non-comment lines :bug:solo:next:
+CLOSED: [2026-06-15 Mon]
+cj/--comment-heavy-box now prefixes the interior empty/text lines with the comment char + suffix (like cj/--comment-box) so they stay valid comments in line-comment languages, and gained the min-length guard (small/negative widths now error cleanly instead of hitting make-string). The two characterization assertions that pinned the broken bare-* lines were updated to the corrected output.
+=modules/custom-comments.el:427= — =cj/--comment-heavy-box= interior/empty lines carry no comment prefix, so in line-comment languages (elisp, Python) C-; C h injects syntax-breaking bare =*...= lines. The existing test characterizes the broken output (asserts =^\*.*\*$=). Prefix interiors like =cj/--comment-box= does; add the missing min-length validation (negative width hits make-string with a raw error); fix the test to assert corrected output. From the 2026-06 config audit.
+** DONE [#B] Scratch buffer background a shade lighter than default :feature:next:
+CLOSED: [2026-06-15 Mon]
+cj/scratch-apply-background remaps the *scratch* default background lighter (cj/scratch-background-lighten percent, default 5) via color-lighten-name, applied on the existing emacs-startup-hook. The percent is a tunable defcustom. Pure helper tested for the display-independent contract; the lightening itself is display-dependent (color-name-to-rgb), verified live in the daemon.
+Make *scratch* just-noticeably lighter than the normal background so it reads as the scratch buffer. Simplest is a buffer-local face remap on *scratch*; Craig is fine routing it through org-faces if a theme hook is wanted. The exact lightening delta is an aesthetic call to tune visually. From the roam inbox.
+** DONE [#C] theme-studio: drop the too-similar-colors message below the palette :refactor:studio:next:
+CLOSED: [2026-06-15 Mon]
+Removed the renderPaletteWarnings box (function, #palwarn element, .palwarn CSS) and its #deltatest browser gate. The per-chip nearest-ΔE tooltip stays (paletteWarnings still computes `nearest`), so the same info remains reachable inline.
+Remove the too-similar-colors warning under the palette display. It isn't useful there; the same information is reachable per-assignment through the inline contrast field. From the roam inbox 2026-06-15.
+** CANCELLED [#C] theme-studio: raise the max color spans to 5 :feature:studio:
+CLOSED: [2026-06-15 Mon 22:52]
+Increase the palette's maximum span count to 5, for a smoother, slower transition across a color. From the roam inbox.
+*** CANCELLED which control caps below 5 — current maxes are all 8
+CLOSED: [2026-06-15 Mon 22:52]
+On review the per-column span control, the ground span control, and regenColumn all already cap at 8 (well above 5), so there's no sub-5 limit to raise. Either 5 is already reachable, or the intended control is a different one (e.g. the generator emits base-only columns — spanCount is hardcoded 0 in palette-generator-ui.js). Need Craig to point at the control he's hitting.
+** DONE [#C] Page-down in a long completing-read selects and dismisses the list :bug:next:
+CLOSED: [2026-06-15 Mon]
+Bound <next>/<prior> to vertico-scroll-up/down in vertico-map, so Page-Up/Down page the candidate list instead of falling through to history (which selected and dismissed). Verified live (use-package :bind isn't reachable under make test).
+In a very long completing-read (vertico), Page-Down selects an item and the list vanishes instead of paging, forcing a cancel. Investigate the completion stack's next-page handling; likely needs vertico-scroll-up / vertico-scroll-down bound in vertico-map. From the roam inbox.
+** CANCELLED [#C] theme-studio reconsider the JSON show button :feature:quick:studio:
+CLOSED: [2026-06-15 Mon 22:56]
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-13
+:END:
+From the roam inbox: the =show= button for the raw JSON export does not fit the main theme-design workflow, but it may still be useful for debugging. Decide whether to hide it behind a debugging affordance, rename it, or remove it. Quick UI cleanup once the desired debugging surface is chosen; not marked solo because it is a workflow preference call.