<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs.git/modules, branch v0.7.2</title>
<subtitle>my Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2</id>
<link rel='self' href='https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/'/>
<updated>2026-04-03T13:33:33+00:00</updated>
<entry>
<title>feat(music): add random-aware next/previous; refactor music + calendar-sync</title>
<updated>2026-04-03T13:33:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-03T13:33:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=eb01b3d24739e916d9dca33f5f039650a9de8457'/>
<id>urn:sha1:eb01b3d24739e916d9dca33f5f039650a9de8457</id>
<content type='text'>
Music: random mode now respected by next/previous keys. Previous navigates
a 50-track play history ring buffer. Fixed playlist replacement bug.
24 new tests.

Calendar-sync: consolidated duplicate parse functions, extracted timezone
localization helper, unified expand-daily/monthly/yearly into parameterized
function, removed dead code. 33 new characterization tests. -90 lines.
</content>
</entry>
<entry>
<title>feat(org): add &lt;cj structure template for daily prep comment blocks</title>
<updated>2026-04-02T16:41:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-02T16:41:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=3f7e427cf7530e38b7eb915c0dd49bd9318c9992'/>
<id>urn:sha1:3f7e427cf7530e38b7eb915c0dd49bd9318c9992</id>
<content type='text'>
Add org-tempo template expanding &lt;cj TAB to #+begin_src cj: comment blocks.
</content>
</entry>
<entry>
<title>feat(music): add test coverage for 7 functions, refactor with extracted helpers</title>
<updated>2026-04-01T13:13:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-01T13:13:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=fdc63ea6675709d6ca42362b1be1918f8bf24478'/>
<id>urn:sha1:fdc63ea6675709d6ca42362b1be1918f8bf24478</id>
<content type='text'>
Add 47 new unit tests across 7 test files covering playlist-modified-p,
assert-valid-playlist-file, playlist-tracks, create-radio-station,
ensure-playlist-buffer, after-playlist-clear, and header-text.

Extract three helpers to reduce duplication: assert-m3u-files-exist (dedupes
2 identical guards), sync-playlist-file (dedupes 3 state-sync patterns),
and select-m3u-file (reusable M3U selection with cancel). Simplify
append-track-to-playlist nesting from 6 to 4 levels. Delete unused
cj/music-keymap-prefix variable.
</content>
</entry>
<entry>
<title>fix(slack): disable emojify in lui buffers, add org cache reset command</title>
<updated>2026-03-16T17:27:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-16T17:27:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=0d55edecf82b32b75780f24751dfa8d693b72708'/>
<id>urn:sha1:0d55edecf82b32b75780f24751dfa8d693b72708</id>
<content type='text'>
Disable slack-buffer-emojify to prevent wrong-type-argument listp errors
on emoji characters during lui-scroll-post-command recenter. Add C-; O c
to reset org-element cache across all org-mode buffers.
</content>
</entry>
<entry>
<title>fix(slack): add error visibility to notification handler</title>
<updated>2026-03-14T17:55:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-14T17:55:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=7941618b74a14df29c48304a4162fce59d4499ec'/>
<id>urn:sha1:7941618b74a14df29c48304a4162fce59d4499ec</id>
<content type='text'>
Websocket library silently swallows callback errors via condition-case.
Wrap cj/slack-notify in condition-case to surface errors in *Messages*.
Add cj/slack-test-notify command for pipeline verification.
</content>
</entry>
<entry>
<title>fix(slack): fix notification bug, add close-all-buffers command</title>
<updated>2026-03-10T13:03:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-10T13:03:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=d35e1aaf4eb2bcb276e59565d0ba612444822a69'/>
<id>urn:sha1:d35e1aaf4eb2bcb276e59565d0ba612444822a69</id>
<content type='text'>
Pass missing team arg to slack-message-mentioned-p (was breaking all
channel notifications). Add cj/slack-close-all-buffers on C-; S Q.
</content>
</entry>
<entry>
<title>fix(music): place point on first track after playlist load/reload</title>
<updated>2026-03-10T12:24:25+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-10T12:24:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=34e815ea969ad043b581d096c95f28608d1701a5'/>
<id>urn:sha1:34e815ea969ad043b581d096c95f28608d1701a5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(calendar-sync): handle variable-length date lists in RRULE UNTIL</title>
<updated>2026-03-10T04:40:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-10T04:40:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=4080daf948b23d0b6b59394623e12983f0a9cfad'/>
<id>urn:sha1:4080daf948b23d0b6b59394623e12983f0a9cfad</id>
<content type='text'>
date-to-time used (reverse date) which broke when RRULE UNTIL values
were parsed as 5-element lists (year month day hour minute) from UTC
timestamps. This caused recurring events with UTC UNTIL dates to
expand to 0 occurrences, producing stale calendar entries.
</content>
</entry>
<entry>
<title>refactor(gptel): extract model-list and selection logic for testability</title>
<updated>2026-03-07T03:20:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-07T03:20:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=3b120b35fff1e21114c7ff189def31b538c7a2ac'/>
<id>urn:sha1:3b120b35fff1e21114c7ff189def31b538c7a2ac</id>
<content type='text'>
- Extract cj/gptel--build-model-list from cj/gptel-change-model
- Extract cj/gptel--current-model-selection from cj/gptel-change-model
- Add test-ai-config-build-model-list.el (9 tests)
- Add test-ai-config-current-model-selection.el (8 tests)

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(gptel): lazy-load gptel-magit, rebind rewrite/context keys</title>
<updated>2026-03-07T03:15:31+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-07T03:15:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=3eb1a0ccaa37410e6fe0059a9cb10145efa0d615'/>
<id>urn:sha1:3eb1a0ccaa37410e6fe0059a9cb10145efa0d615</id>
<content type='text'>
- 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

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
