aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org101
1 files changed, 82 insertions, 19 deletions
diff --git a/todo.org b/todo.org
index 588450bca..2260c49e5 100644
--- a/todo.org
+++ b/todo.org
@@ -55,6 +55,41 @@ Tags are additive. For example, a small wrong-behavior fix can be
=:bug:quick:=, and a feature that requires internal restructuring can be
=:feature:refactor:=.
* Emacs Open Work
+** TODO [#C] VAMP — extract music-config into a standalone player :feature:refactor:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
+Build VAMP ("VAMP Audio Music Player"), a standalone, publishable Emacs music player at =~/code/vamp= — derived from a maintained subset of EMMS, depending on the EMMS package not at all, with MPV and mpd behind a generalized adapter API. =.emacs.d= keeps thin glue (=vamp-config.el=: keybindings, paths, dashboard); archsetup owns OS wiring (Super+/ launcher, m3u MIME). Models the =linear-config= → =pearl= migration.
+
+Brainstorm complete 2026-06-22 — validated design at [[file:docs/design/vamp-music-player.org][docs/design/vamp-music-player.org]]. It builds on the prior EMMS-removal work ([[file:docs/specs/music-config-without-emms-spec.org][spec]] + [[file:docs/design/music-config-without-emms-review.org][2026-05-15 review]]), confirming its B1/B2/B4/S3 decisions and pivoting four things (publishable-now, two adapters + generalized API, VAMP name, desktop integration).
+
+Next: (1) revise the spec to the new direction; (2) spike the risky assumptions (mpd dumb-single-file-player contract; m3u =.desktop= on Hyprland); (3) =/start-work= against the revised spec — pure-helper extraction (review Migration Plan step 1) is the safe first phase. Priority [#C] is a placeholder pending Craig's call.
+
+
+** TODO [#C] ai-term: step between running ai-terms even when detached :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-22
+:END:
+The step-to-next-agent family (s-F9 and friends) should cycle to a running ai-term even when that ai-term is currently detached, instead of skipping it. Today the step only lands on attached/visible ai-terms, so a detached-but-running agent gets passed over and there's no keyboard path back to it — re-attach/display it on landing. From the roam inbox.
+
+** TODO [#C] ai-term: multi-backend (Claude / Codex / local ollama) :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-22
+:END:
+Allow creating an ai-term backed by any of Claude, Codex, or a local LLM via ollama, with the backend chosen seamlessly at the start of the session. ai-term currently assumes Claude; generalize the launch path so the agent backend is a selectable parameter and switching between them at session start is frictionless. Routed here from the rulesets roam-inbox item "multiple agent source improvements" (its bullet 3 asked to send emacs this note); the item's other bullets — naming the agent so non-Claude agents aren't called "Claude", and tightening workflow wording for Codex's more literal reading — stay with rulesets.
+
+** TODO [#C] Compare terminal themeability: EAT vs vterm vs ghostel :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-22
+:END:
+Research how completely each of EAT, vterm, and ghostel can be themed — in particular how far theme studio can theme each terminal and what it leaves out. Produce a comparison document, then review it with an eye to whether ai-term should move off ghostel (current) to EAT or vterm. Connects to the chime/emacs-wttrin/pearl face-exposure theme-studio thread. From the roam inbox.
+
+** TODO [#C] term: M-<arrow> enters tmux copy-mode :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-22
+:END:
+Bind meta + arrow keys in the terminal to enter tmux copy-mode, sidestepping the current C-; x c chord — Craig flags this as a "huge timesaver" for scrollback navigation. Needs deciding which terminal(s) it covers (ghostel ai-term, vterm) and how to send the tmux copy-mode entry through the pty. From the roam inbox.
+
** TODO [#B] Un-pin ghostel from 0.33.0 once upstream fixes #422/#423 :bug:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-20
@@ -89,7 +124,8 @@ From the 2026-06 config audit, =modules/transcription-config.el=:
- =:210= — =make-process :stderr= with a file PATH creates a BUFFER named like the path (verified by probe); the "Errored. Logs in <file>" notification points at a log without the error text, and the hidden stderr buffer leaks per transcription. Route stderr into the process buffer or write it out in the sentinel.
- =:370-374= — video path derives txt/log from the temp mp3's /tmp path; the transcript lands in /tmp and dies on reboot, contradicting the "alongside the source" docstring. Pass the video's path as the output base.
-** VERIFY [#C] page-signal pager account deregistered — re-registration needs your hands
+** CANCELLED [#C] page-signal pager account deregistered — re-registration needs your hands
+CLOSED: [2026-06-21 Sun]
:PROPERTIES:
:LAST_REVIEWED: 2026-06-12
:END:
@@ -109,7 +145,8 @@ Needs from Craig: the task says "confirm the exact set to keep before unbinding.
=modules/mail-config.el:217-220= — the cmail context (primary account) sets only drafts/sent, so D falls back to default "/trash" which doesn't exist under ~/.mail (=/cmail/Trash= does); and NO context sets =mu4e-refile-folder=, so r targets nonexistent "/archive" everywhere. Accepting mu4e's offer to create the maildir strands mail in a directory mbsync never syncs — messages silently vanish from the server's view. Add =mu4e-trash-folder= to cmail + per-context =mu4e-refile-folder=. From the 2026-06 config audit.
Fixed 2026-06-13: cmail gets =mu4e-trash-folder= "/cmail/Trash"; refile is a per-message function (=cj/mu4e--refile-folder=) instead of a per-context string — mu4e context :vars are sticky, so a per-context refile leaks one account's archive folder into another. cmail → "/cmail/Archive"; gmail/dmail signal a =user-error= rather than move mail into an unsynced phantom folder (Craig chose the fail-safe over syncing [Gmail]/All Mail — the All Mail option means a multi-GB pull + cross-folder duplicates; revisit if local Gmail archiving is wanted). Applies on next mu4e open; pure dispatch helper covered by tests.
-** DOING [#C] Lock screen silently fails — slock is X11-only :bug:quick:
+** CANCELLED [#C] Lock screen silently fails — slock is X11-only :bug:quick:
+CLOSED: [2026-06-21 Sun]
:PROPERTIES:
:LAST_REVIEWED: 2026-06-13
:END:
@@ -3442,7 +3479,7 @@ Task: survey the modes/modules Craig works in and identify where a =?= -> curate
** TODO [#B] Dupre diff-changed / diff-refine-changed legibility :bug:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-11
+:LAST_REVIEWED: 2026-06-21
:END:
Surfaced 2026-06-07 from a pearl session designing its modified-ticket indicator (pearl marks a changed field by inheriting =diff-changed=). dupre's =diff-refine-changed= is bright gold (#ffd700) under near-white text (#f0fef0) -- WCAG contrast ~1.35, unreadable as a plain background. It only looks fine inside diff-mode because diff-mode overlays its own dark foreground. =diff-changed= (#875f00 amber) is ~5.49, readable but off the modus model. Every modus variant keeps both faces legible (contrast 9-16) by pairing a dark low-saturation background with a hue-matched foreground.
@@ -3471,9 +3508,9 @@ This task is the durable fix the ecosystem and =elisp-testing.md= point to: rest
Full mechanism, the three failure modes, the research (Emacs bug#51140, bug#61880, buttercup #230, Debian #1021842, the emacs-29 redefine-primitive warning, the manual on =native-comp-enable-subr-trampolines=), and the decision: [[file:docs/native-comp-subr-mocking.org][docs/native-comp-subr-mocking.org]].
-** TODO [#B] Fix up test runner :bug:
+** TODO [#B] Fix up test runner :feature:refactor:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-06
+:LAST_REVIEWED: 2026-06-21
:END:
*** 2026-05-16 Sat @ 11:15:51 -0500 Ideas
**** Current State
@@ -3991,15 +4028,24 @@ Also =jumper.el:178= — the promised single-location toggle never toggles back
Spec: [[id:540bf06b-16b8-46c6-b459-c40d1b9c795d][keybinding-console-safety-spec-doing.org]]. Phase 0 (revert 4a1ecf64) is done and pushed. Decisions D1-D5 are open TODOs in the spec; D2/D4/D5 gate the primary work (Phase 1 prune via Appendix D, Phase 2 consolidate + retire the translation block), while D1/D3 (the console-safe prefix) gate only the optional Phase 3 and can stay open indefinitely. Resolve D2/D4/D5, then run Phase 1-2. Appendix D is the keybinding pruning checklist. Add a =#+TODO: TODO | DONE SUPERSEDED CANCELLED= header line to the spec if adopting those decision keywords (rulesets convention update, 2026-06-12).
** TODO [#B] ledger-config is orphaned — ledger-mode never configured :bug:quick:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
Nothing requires =modules/ledger-config.el= (verified by grep), so .dat/.ledger/.journal open without ledger-mode, reports, or flycheck-ledger. The module looks finished, not staged (unlike duet-config, which documents its pre-alpha orphaning). Decide: wire into init.el (+ =cj/executable-find-or-warn= for the ledger binary) or delete. From the 2026-06 config audit.
** TODO [#C] buffer-differs save prompt: 4-way yes/no/diff/cancel :feature:next:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
The "buffer differs from file" confirmation currently gives only yes/no. Craig wants a 4-way choice with explicit consequences: yes (be explicit it overwrites), no (be explicit it discards this action and continues), diff (show a graphical difftastic diff, then return to this prompt), cancel (stop the action, leave the buffer untouched). Needs the exact prompt identified first (which save/overwrite path raises "buffer differs") and a design for the diff-then-return loop. difftastic + cj/diff-buffer-with-file infrastructure already exist. From the roam inbox 2026-06-16.
** TODO [#C] emacs: tag tasks by module name for sorting :refactor:studio:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
Replace topic tagging with single-word module tags: :studio: for everything under scripts/theme-studio/, module-named tags elsewhere, :multi: for cross-area work. Drop bug/enhancement-style tags since work should be chosen on other bases. This changes the current six-tag convention, so update the priority-scheme section to document it, rewrite the task-audit workflow to reconcile tasks against the module scheme, then run the audit. Queue for end of session. From the roam inbox.
** TODO [#C] Build an Org-native API workspace :feature:test:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-02
+:LAST_REVIEWED: 2026-06-21
:END:
Build an Emacs-native API workspace layer that keeps =restclient.el= useful for
@@ -4334,9 +4380,9 @@ First pass can skip or mark as unsupported:
6. Open scratch buffer (C-; R n), type a request manually, execute
7. which-key shows "REST client" menu under C-; R
-** TODO [#C] Build debug-profiling.el module :feature:
+** TODO [#C] Build debug-profiling.el module :feature:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-02
+:LAST_REVIEWED: 2026-06-21
:END:
Reusable profiling infrastructure for targeted slow-command investigation. Consolidates scattered profiler bindings (currently in =modules/config-utilities.el=) and adds two pure-helper-backed entry points: "profile next command" and "time region or sexp." Designed via =/brainstorm= 2026-04-26.
@@ -4345,15 +4391,15 @@ Design: [[id:c713b431-ae14-498d-aba9-b84d52f981b6][docs/specs/debug-profiling-sp
Implement via =/start-work= against the design — branch =feat/debug-profiling=, commits decomposed along the test-first split-for-testability boundary. Once shipped, use it as the v1 exercise on the queued [#B] org-capture target-building investigation.
-** TODO [#C] Evaluate jamescherti essential-emacs-packages list :quick:
+** TODO [#C] Evaluate jamescherti essential-emacs-packages list :quick:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-11
+:LAST_REVIEWED: 2026-06-21
:END:
Review [[https://www.jamescherti.com/essential-emacs-packages/][James Cherti's essential Emacs packages]] for anything worth installing. Cross-check each candidate against what is already in the config (=modules/= + =init.el=), skip the ones already present, and shortlist the genuinely new ones with a one-line rationale. Future-installation research, not a commitment to install.
** TODO [#C] Extend F2 "preview" convention across modes :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-02
+:LAST_REVIEWED: 2026-06-21
:END:
F2 is the universal preview key. Currently bound only in markdown-mode (markdown-preview, in =modules/markdown-config.el=). Org-reveal lives on =C-; o R= via =cj/org-map=, not F2. Extend F2 to other modes where a "preview" action is natural:
@@ -4365,22 +4411,37 @@ F2 is the universal preview key. Currently bound only in markdown-mode (markdown
Keep the binding mode-local so F2 stays available as a global candidate where no preview makes sense.
-** TODO [#C] face-diagnostic: face-name buttons + header allowlist :feature:
+** TODO [#C] face-diagnostic: face-name buttons + header allowlist :feature:quick:solo:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
Two v1 follow-ups on the shipped face/font diagnostic: render the face names in the report as buttons that call describe-face (the spec's "For the user" buttons; v1 shows them as plain text), and add face-diagnostic to the module-header allowlist in tests/test-init-module-headers.el now that it's required in init.el. Spec: [[id:98f065cf-8bd5-46a0-ac24-da94d66855ad][face-font-diagnostic-popup-spec-implemented.org]].
** TODO [#C] Gold text in auto-dimmed buffers :bug:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
Some auto-dimmed document buffers render text in gold; source unknown. Likely a face-remapping or overlay interaction with the theme. Blocked on the face/font diagnostic tool above for diagnosis. From the roam inbox.
** TODO [#C] Google Contacts ↔ org-contacts sync investigation :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
From the 2026-06-11 brainstorm. Goal: keep [[file:~/sync/org/contacts.org][contacts.org]] (real org-contacts: PROPERTIES drawers, mu4e completion, org-roam links) in sync with Google Contacts. Google side is solid — official People API (OAuth2, incremental syncToken) or CardDAV; no ToS risk. The hard parts are local: (1) identity — entries have no UID, so two-way needs a GOOGLE_ID property per entry plus a one-time fuzzy reconciliation of the two populated datasets (name/email/phone matching); (2) field mapping — space-separated multi-email in one property, free-text body notes, inconsistent phone formats (normalization decision); (3) conflict policy. First decision gates the rest: one-way Google→org read model (simple) vs true two-way. Candidate architectures: vdirsyncer (proven two-way engine w/ Google support; build only the vCard↔org translation, evaluate org-vcard fidelity) vs a direct People API script with sync state in org properties. Output: recommendation doc in docs/design/ naming direction + the normalization/conflict decisions for Craig. Not :solo: — the one-way-vs-two-way call and normalization policy are Craig's.
** TODO [#C] Google Voice in Emacs — SMS + dialer investigation :feature:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
From the 2026-06-11 messenger-unification brainstorm. Google Voice has no official API; the viable routes ride the Matrix bridge ecosystem's reverse engineering (mautrix-gvoice). Research pass to establish the 2026 state of play: (1) is mautrix-gvoice healthy and what does its auth flow look like now; (2) any better-maintained alternative (CLI/daemon) for the signel-pattern architecture (external daemon + JSON-RPC + thin Emacs chat client); (3) does call initiation (ring-linked-phone-then-connect, Emacs as dialer) survive in the current protocol — two-way audio in Emacs is out of scope (WebRTC); (4) ToS/account-flag risk assessment for Craig's account. Output: a recommendation doc in docs/design/ naming the architecture (signel-pattern daemon vs Matrix bridge + ement.el) or a no-go with reasons. If go, GV becomes a registered backend under the messenger-unification convention (see the [#B] task below).
** TODO [#C] latexmk workflow never activates (two breaks) :bug:quick:solo:
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-21
+:END:
=modules/latex-config.el:66= — =:hook (TeX-mode-hook . ...)= gets use-package's =-hook= suffix appended (unbound symbol not ending in =-mode=), registering on nonexistent =TeX-mode-hook-hook=, so =TeX-command-default "latexmk"= is never set. Independently =:80= auctex-latexmk is =:defer t= with no trigger, so =auctex-latexmk-setup= never runs and "latexmk" isn't in TeX-command-list. Fix hook name to =TeX-mode=; change auctex-latexmk to =:after tex=. From the 2026-06 config audit.
** TODO [#C] Org-noter custom workflow — fix and finish :feature:bug:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-02
+:LAST_REVIEWED: 2026-06-21
:END:
Continue debugging and testing the custom org-noter workflow from 2025-11-21 session.
@@ -4429,7 +4490,7 @@ The core functionality is implemented but needs debugging before it's production
** TODO [#C] Pick and wire a debug backend for F5 :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-01
+:LAST_REVIEWED: 2026-06-21
:END:
#+begin_src emacs-lisp
@@ -4453,7 +4514,7 @@ Do this after the F-key rework ticket ships so F5 is the only hole left.
** TODO [#C] Review and rebind M-S- keybindings :refactor:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-01
+:LAST_REVIEWED: 2026-06-21
:END:
Changed from M-uppercase to M-S-lowercase for terminal compatibility.
@@ -4480,14 +4541,16 @@ These may override useful defaults - review and pick better bindings:
** TODO [#C] Slack message buffers in a reused popup window :quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-05
+:LAST_REVIEWED: 2026-06-21
:END:
Display slack.el message and thread buffers in a dedicated popup window (side or bottom) and reuse that one window instead of spawning a new window per buffer. Likely a =display-buffer-alist= rule (or popper integration) in =modules/slack-config.el=.
-** TODO [#C] the preview splits an already split window into 3 temporarily. :bug:
+** CANCELLED [#C] the preview splits an already split window into 3 temporarily. :bug:
+CLOSED: [2026-06-21 Sun]
looks strange. potentially problematic for ai-terms.
-** TODO [#C] TRAMP/dirvish "?" for remote dates — verify the fix per host :bug:
+** CANCELLED [#C] TRAMP/dirvish "?" for remote dates — verify the fix per host :bug:
+CLOSED: [2026-06-21 Sun]
:PROPERTIES:
:LAST_REVIEWED: 2026-06-02
:END:
@@ -7812,7 +7875,7 @@ Filed 2026-06-02 from a C-f8/C-f9 mix-up. Priority set [#C] (UX polish) — re-g
** TODO [#C] Color dashboard navigator independently of list items :feature:ux:
:PROPERTIES:
-:LAST_REVIEWED: 2026-06-06
+:LAST_REVIEWED: 2026-06-21
:END:
The dashboard navigator (icons + labels) and the recentf/project/bookmark list items are both painted by =dashboard-items-face=: the navigator gets a =dashboard-items-face= overlay, and overlays beat text properties, so the per-button =dashboard-navigator= face is inert. To color the navigator independently of the items, override where that overlay is applied — advise or redefine =dashboard-insert-navigator=, or strip/replace the overlay's face.
Triggered by: 2026-05-22 dashboard color work (L105).