| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three related housekeeping updates that piled up during the session.
The "Write spec on what's needed for music-config not to depend on
EMMS" task is DONE — spec lives at
docs/design/music-config-without-emms.org. Adds a follow-up TODO to
implement the spec, with the complexity and time estimates and the
acceptance checks the spec already defines.
The module-by-module review project moves from PROJECT to DOING. All
six review tracks (foundation, custom editing utilities, UI and
navigation, Org workflows, programming workflows, integrations and
applications) move to DOING with completion-review notes appended
under each. The notes summarize what was re-checked, what coverage
now exists, and which child tasks are still actionable.
Two new sub-TODOs add focused test coverage:
- "Add UI/navigation runtime smoke coverage" — font-config,
modeline-config, popper-config policy.
- "Add smoke coverage for lightweight programming modules with no
direct tests" — prog-general, prog-lisp, prog-training.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two recent DONE tasks turned out to have follow-up issues worth tracking
explicitly instead of leaving them in the closed pile.
The gptel-toggle work (=M-<f9>= rebind) now triggers a make compile
warning that =cj/toggle-gptel= is not known to be defined when
ai-vterm.el loads. The binding still works in normal startup because
ai-config.el loads later, but the cross-module load-order dependency
should be made explicit via an autoload declaration plus a test that
loads ai-vterm.el without preloading ai-config.el.
The buffer-source extension shipped an Info-mode dispatcher that
copies =info:(manual)Node= rather than the documented org-style
bracket link =[[info:(manual)Node][label]]=. The output is a valid
org link target but not the labeled form a Notes paste would expect.
Both parent tasks move back to DOING with sub-TODOs that name the
remaining work, the file/test to update, and the commands to re-run.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a tiny source-level architecture suite at
tests/test-architecture-startup-contracts.el with two checks:
- Only keybindings.el may globally own the exact C-; prefix. Catches
accidental cross-module rebinding before it ships.
- Top-level timer scheduling (run-with-timer / run-at-time /
run-with-idle-timer) must be guarded by (unless noninteractive ...)
so requiring a module in batch / test mode does not schedule
startup timers. Timer calls inside defuns are exempt -- the test
only rejects forms that execute their body when the module loads.
Four modules had unguarded top-level timer scheduling and would have
tripped the new test. Wrap their startup hooks/timers in
(unless noninteractive ...):
- modules/org-agenda-config.el: 10s idle cache build
- modules/org-refile-config.el: 5s idle cache build
- modules/quick-video-capture.el: after-init-hook + 2s fallback
- modules/wrap-up.el: emacs-startup-hook bury-buffers delay
The contract being protected is "requiring a module in batch should
not start a clock running." Test failures will now point straight at
the offending file/form.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
=make coverage= used to print a line-weighted percentage that only saw
files SimpleCov instrumented. 104 modules existed on disk but only 49
appeared in =.coverage/simplecov.json=, so the headline number was
flattering: untouched modules counted for nothing.
The summary script now adds two things on top of the existing report:
- A =Not in SimpleCov report= section listing modules present under
=modules/*.el= but absent from the SimpleCov output. Missing-module
detection is exactly direct =modules/*.el=; subdirectories and =.elc=
files are ignored.
- A =Project module coverage= line that is module-weighted across every
direct =modules/*.el= file. Tracked modules contribute their per-file
coverage percentage; missing modules contribute 0%.
The original line-weighted SimpleCov percentage stays as the
=instrumented coverage= number. The new module-weighted score is the
honest project-level reading: missing modules count as 0% without
inventing a fake executable-line denominator for them.
Tests assert the missing-module section, the new percentage, and the
ignore rules for .elc / nested files.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaces the .ai/ draft (2025-11-14) with a corrected and tightened
version under docs/design/. The earlier draft had stale line numbers
pointing at a modeline-config.el layout that no longer exists,
conflated Option 3's risky-local-variable requirement with Option 4's
inline (:eval ...) approach, and missed the active-window gating
convention used by the rest of the modeline.
The new spec uses concrete line refs against current code, calls out
flycheck-mode-line-color (which the old draft missed), recommends
calling flycheck-mode-line-status-text directly instead of returning
the nested (:eval ...) cons, and gates the segment to active window
for consistency with cj/modeline-vc-branch and cj/modeline-misc-info.
todo.org task points at the new path and drops the broken
docs/flycheck-modeline-customization-spec.org link.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaces a thin third-party config snippet (one use-package corfu + one
use-package cape, with no migration steps and no prescient piece) with
a full spec covering the current company stack: corfu, cape,
corfu-popupinfo, kind-icon, corfu-prescient.
Maps every current company setting to its corfu equivalent
(idle-delay, prefix-length, tooltip-limit, wrap, require-match,
global-mode exclusions, doc popups, icon kinds, prescient sort).
Walks the per-module fixups -- selection-framework, mail-config,
ledger-config, latex-config, eshell-config, and the three prog-*
mode hooks. Adds a test plan and risks section.
todo.org points at the new doc; the broken :COMPLETE_CONFIG:
property (which referenced the wrong line range in someday-maybe)
is gone.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add two dispatchers to cj/buffer-source-functions so C-; b p yields a
useful link form in two more major modes.
mu4e-view-mode returns "mu4e:msgid:<id>" so the result pastes into org
as a clickable link and matches mu4e's own org-protocol handler.
Falls through to buffer-file-name when point isn't on a real message.
Info-mode returns "info:(manual)node" -- the form org-info-store-link
produces. file-name-base only strips one extension, so a compressed
"emacs.info.gz" comes back as "emacs.info"; trim the trailing ".info"
to get the bare manual name. Falls through when Info hasn't populated
its current-file / current-node vars yet.
Tests cover normal + boundary fallthrough for each new mode.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Modify C-; b p: add a dated subheader under the task with ideas for
extending the buffer-source dispatcher beyond audio files -- three
tiers (high-leverage / occasional / skip) covering eww, elfeed,
mu4e, org-mode-at-heading, dired/dirvish, doc-view, magit-log,
xref/grep, image-mode, archive-mode, plus an implementation sketch
(dispatch alist on major-mode with buffer-file-name fallback) and a
proposed rename to cj/copy-buffer-source-as-kill.
EPUB centering nit: was marked CANCELLED, but the visual-review
outcome was actually fine and the task is correctly closed as done
(not abandoned). Flip CANCELLED -> DONE; CLOSED timestamp stays
since that's when the work-state finalized.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
Five level-2 subtrees moved into the Resolved section:
- Surface org narrowing + sparse-tree under C-; O
- F9 toggle restores single-window layout (older)
- AI-vterm scrollback history replaces agent buffer (older)
- Add ERT coverage for modules below 70%
- Fix Python tree-sitter font-lock query syntax error
Five child priorities bumped to match their parents.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The treesit-query-error redisplay flood diagnosed 2026-04-26 no
longer reproduces. Versions: emacs 30.2-3 (was 30.2-2 at the time
of the investigation, upgraded 2026-05-03), tree-sitter 0.26.8
(unchanged). The upstream Emacs version string is unchanged, but
the Arch package revision bump most likely carries a downstream
patch to treesit.c's predicate translation.
Verified by re-running the documented repro: the exact failing query
from python.el captures cleanly via `treesit-query-capture', and
`font-lock-ensure' on a real .py file under `python-ts-mode' returns
with no `treesit-query-error'. No local override needed.
Mark the todo.org entry DONE, fix the stale `inbox/' path on the
investigation-doc link (file now lives under `docs/'), update the
cross-reference from the grammar-bootstrap task to note this no
longer blocks it, and append a RESOLVED 2026-05-14 footer to the
investigation doc so future-me can see why it got closed.
|
| |
|
|
|
|
|
|
|
|
|
| |
After this session's coverage push (68.8% -> 86.5%), 28 of the 30
child modules listed in the coverage-below-70% task have crossed the
threshold. Mark them DONE with their new percentages, leave the two
genuinely-blocked modules (system-defaults.el at 8.3% and
system-commands.el at 69.4%) as TODO with notes explaining the
instrumentation-gap reason each is stuck.
Also: drop the stray =p= from the parent heading.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
The main "d" agenda view grows two new blocks. A VERIFICATION block lists tasks in the VERIFY TODO state, placed just above the day's SCHEDULE. An IN-PROGRESS block lists tasks in the DOING TODO state, placed just under SCHEDULE. The full block order is now: OVERDUE -> HIGH PRIORITY -> VERIFICATION -> SCHEDULE -> IN-PROGRESS -> PRIORITY B.
Scope matches the other blocks (every entry in `org-agenda-files`). Scheduled and deadlined entries are included -- a VERIFY task with a date appears in both VERIFICATION and SCHEDULE, mirroring how HIGH PRIORITY behaves. Habits are skipped via `cj/org-skip-subtree-if-habit`; PROJECT-keyword parents wouldn't match `(todo "VERIFY")` exact-state filters anyway, so no extra skip there.
Two new header defvars (`cj/main-agenda-verify-title`, `cj/main-agenda-doing-title`) for symmetry with the existing four. Both blocks reference the shared `cj/--main-agenda-prefix-format` so a format tweak still lands in one place.
Five new tests in `test-org-agenda-config-skip-functions.el` lock the block order, each new block's header / prefix-format / skip-function, and the include-scheduled-entries contract.
|
| |
|
|
|
|
|
|
|
|
| |
Coverage rerun after this session's test additions: 67.2% -> 68.8% (4716/6853 lines across 73 files).
Four modules crossed the 70% threshold and are marked DONE: browser-config 69.7% -> 81.6%, ui-config 64.5% -> 90.3%, custom-whitespace 64.6% -> 97.6%, jumper 64.6% -> 98.0%.
system-defaults stays open with a note: 8 new tests cover its helpers (`cj/disabled`, the gc-threshold hooks, `unpropertize-kill-ring`, `cj/log-comp-warning`) but the gauge still reads 1/12 because the sandboxed `(load ...)` used to skip startup side effects doesn't register with undercover's instrumentation. Closing it needs either a refactor that lets the module load via plain `(require)` in batch, or a different coverage strategy.
Other numbers refreshed where they shifted (ui-navigation 8.7% -> 54.2% from prior session, org-agenda-config 60.0% -> 67.3% from this session's project-name category work, etc.).
|
| |
|
|
|
|
| |
`org-agenda-custom-commands` inlined ` %i %-15:c%?-15t% s` four times across the "d" command's overdue / high-priority / schedule / priority-B blocks. New `cj/--main-agenda-prefix-format` defvar holds the literal once; every block now references the symbol so a format tweak lands in one place.
Regression test walks the "d" command's blocks and asserts each `org-agenda-prefix-format` cell resolves to the shared symbol -- a block that silently diverges fails the check.
|
| |
|
|
|
|
| |
Verifies docker is installed and the daemon is reachable, then either pulls a public image (when `TELEGA_DOCKER_IMAGE` is set) or announces the in-Emacs build path (`M-x telega-server-build`) for the user to run once. Telegram auth (phone + verification code) is interactive on first `M-x telega` and not scripted here.
Same shape as setup-email.sh: helpers are sourceable for bats, `main` runs only under direct execution. 7 bats tests stub `docker` and `command` so the suite never talks to the real daemon.
|
| |
|
|
|
|
| |
`dashboard-navigator-buttons' grows a Row 3 with a single Telegram entry (using the `nf-fa-telegram' icon, launching `telega'). The dashboard-mode-map gets a single-letter `g' shortcut to match the other launcher keys.
Two follow-up TODOs filed under the parent telegram task: the TDLib docker setup script (so a fresh-clone install can boot telega without a system-wide TDLib build) and a dashboard-icon-balance pass (Row 3 with one entry is asymmetric; decide whether to leave it or reorganize).
|
| |
|
|
|
|
| |
`cj/vterm-tmux-history' previously used `pop-to-buffer', which routed the history view through display-buffer-alist -- in an agent window that often meant a split or a hand-off to another window, costing the agent its frame slot. `switch-to-buffer' instead drops the history into the selected window directly; the existing quit handler already restores the origin in that same window via `set-window-buffer'.
New test asserts the in-place behavior: starting single-window with a vterm origin, invoking the command leaves `(one-window-p)` t with the history buffer in the original slot. The existing render test no longer needs its `pop-to-buffer' stub since `switch-to-buffer' works in batch.
|
| |
|
|
|
|
|
|
| |
When the agent buffer is the only window in the frame, F9 buries it (correct) but the next F9 redisplayed it as a side split instead of restoring the full-frame layout -- the display-saved path always called `display-buffer-in-direction`, which insists on a split.
New `cj/--ai-vterm-last-was-bury` flag tracks which toggle-off path ran. `cj/ai-vterm` sets it to t in the bury branch (one-window-p) and nil in the delete-window branch. `cj/--ai-vterm-display-saved` checks the flag at toggle-on: if t and the frame is still single-window, it replaces the selected window's buffer in place rather than splitting. Either branch consumes the flag so it never stays stale.
5 tests in test-ai-vterm--single-window-toggle.el cover the flag's set/clear paths, the still-one-window guard, and the end-to-end roundtrip.
|
| |
|
|
|
|
| |
Coverage snapshot rerun on 2026-05-13 -- selection-framework.el, keyboard-compat.el, and calibredb-epub-config.el all crossed the 70% threshold and got marked DONE; the remaining child tasks got their current numbers refreshed. The total moved from 65.4% to 67.2%.
Marked the [#A] "replace todo indicators with project name" enhancement DONE -- the agenda-category fix shipped in the prior commit. Also added a [#A] dashboard-icon follow-up on the Telegram task and a [#C] task to rebind org-noter insert-note onto =n=.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
I added two open-work entries:
- F9 toggle should restore single-window layout when AI-vterm was the only
window before toggle-off. Current behavior buries (correct) but
toggle-on splits.
- AI-vterm scrollback history should replace the agent buffer in place,
not split or pop a separate window.
|
| | |
|
| |
|
|
|
|
| |
Untrack .cask/, .localrepo/ (61M), emojis/ (7.2M), inbox/, todo.org,
v2mom.org, .time-zones.el. Move test-reporter-spec.org to docs/ (already
gitignored). Reduces tracked repo size significantly.
|
| |
|
|
|
|
|
|
|
|
| |
- Replace use-package gptel-magit hook with autoloads via
with-eval-after-load 'magit (loads gptel only on key press)
- Move org header defuns above use-package to fix load order
- Set gptel-include-reasoning to "*AI-Reasoning*" buffer
- Rebind rewrite to C-; a r, clear context to C-; a c
- Add test-ai-config-gptel-magit-lazy-loading.el (8 tests)
- Mark all ai-config cleanup items DONE in todo.org
|
| |
|
|
|
|
|
|
|
| |
- Move cj/gptel--fresh-org-prefix, cj/gptel--refresh-org-prefix,
cj/gptel-backend-and-model, cj/gptel-insert-model-heading out of
use-package :config to top level (fixes byte-compile warnings)
- Set gptel-include-reasoning to "*AI-Reasoning*" buffer
- Rebind rewrite to C-; a r, clear context to C-; a c
- Update todo.org with completed cleanup items
|
| |
|
|
|
|
|
|
| |
- Escape single quote in cj/ensure-gptel-backends docstring
- Wrap cj/gptel--available-backends docstring to 80 chars
- Add missing docstring to cj/gptel--model-to-string
- Rename cj/gptel--model->string to cj/gptel--model-to-string
- Mark stale model list task as DONE in todo.org
|
| |
|
|
|
|
|
|
| |
Update Anthropic model list to current: claude-opus-4-6, claude-sonnet-4-6,
claude-haiku-4-5-20251001. Fix gptel--system-message not picking up the
custom default.org directive (defvar set at load time before gptel-prompts
replaces the default entry). Add cleanup tasks for ai-config, calibredb,
and slack reaction workflow to todo.org.
|
| |
|
|
|
|
| |
Notifications silently failed: slack-room-im-p (nonexistent) replaced
with slack-im-p; slack-message-to-string replaced with slack-message-body.
Mark-as-read bound to nonexistent function; added cj/slack-mark-read-and-bury.
|
| |
|
|
|
| |
Update load-path, GitHub URL, and all project/package name
references to reflect the chime.el → Chime rename.
|
| |
|
|
|
| |
restclient.el + restclient-jq integration with SkyFi API templates,
tutorial file, auto key injection from authinfo, 17 ERT tests.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
- Move all org-noter bindings to C-; n prefix with which-key labels
- Remove F6 global binding, add i in pdf-view-mode for insert-note-dwim
- Auto-detect split direction from frame aspect ratio (threshold 1.4)
- Add background highlight on notes window focus (matches music-config)
- Fix session start to use find-file-noselect (keeps PDF visible)
- Fix split fraction (70/30 doc/notes)
- Replace hardcoded path with roam-dir from user-constants
- Update commentary to reflect new workflow
|
| |
|
|
|
| |
Remove eww-config (interactive wrappers, eww-mode state dependent).
All modules now tested or evaluated and removed as untestable.
|
| |
|
|
|
| |
notification-package → notification-sound in cj/tmr-reset-sound-to-default.
Also remove 10 untestable modules from ERT checklist [13/14].
|
| |
|
|
|
|
|
| |
- testutil-org.el: shared dynamic timestamp helpers (days-ago, days-ahead, today)
- org-agenda-config: 31 tests across 2 files (skip functions + add-files)
- org-refile-config: 7 tests for ensure-org-mode validation
- Remove prog-shell from checklist (fully covered by existing 9 tests)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
New test coverage (86 tests across 7 files):
- custom-case: 43 tests (title-case-region, upcase-dwim, downcase-dwim)
- custom-datetime: 10 tests (all insert methods with mocked time)
- config-utilities: 11 tests (format-build-time type branching)
- org-capture-config: 22 tests (date-prefix + event-content)
Production bugs found and fixed:
- custom-case: title-case-region crashes on whitespace/punctuation-only input
(char-after returns nil when no word chars found)
- org-capture-config: browser branch missing empty-string guard on :initial
plist value, producing stray newline in capture output
- mousetrap-mode: keymap never registered in minor-mode-map-alist, so mode
was silently not blocking any mouse events. Now pushes/removes on toggle.
Additional fixes:
- local-repository: fix cons cell syntax bug in localrepo-initialize
(was calling vars as functions instead of using cons)
- dupre-theme tests: update rainbow-delimiter color expectations
- mousetrap tests: update dashboard profile (primary-click → scroll+primary)
- music completion test: bind completion-ignore-case to prevent pollution
- Delete redundant interactive recording test (duplicate of ERT version)
Refactoring:
- org-capture-config: extract cj/org-capture--date-prefix pure function
from cj/org-capture-format-event-headline for testability
Test checklist: todo.org updated to [11/25], removed untestable modules
|
| |
|
|
|
|
|
|
|
|
| |
Categorize all open tasks under: Org Mode, Presentations, Mail,
Media & Recording, UI/Keybindings/Completion, Testing & CI,
Code Architecture & Performance, File Management & Shell,
Authentication & Security, Metrics & Process.
Check off 7/31 modules with strong existing test coverage in the
ERT test tracking task.
|