<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs, branch v0.7.2</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=v0.7.2</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=v0.7.2'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-04-05T11:15:49+00:00</updated>
<entry>
<title>chore: gitignore and untrack CLAUDE.md</title>
<updated>2026-04-05T11:15:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-05T11:15:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=2bec1356f457b9bc01be449a30c5a4fa16a6eaa0'/>
<id>urn:sha1:2bec1356f457b9bc01be449a30c5a4fa16a6eaa0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: gitignore and untrack build artifacts, vendored assets, personal files</title>
<updated>2026-04-05T11:15:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-05T11:15:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=dcd14cd666e24d67368391b3f111d7716fbfde41'/>
<id>urn:sha1:dcd14cd666e24d67368391b3f111d7716fbfde41</id>
<content type='text'>
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.
</content>
</entry>
<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/commit/?id=bd9875accc3b4b51b7d5424b0a20dde35c338a0f'/>
<id>urn:sha1:bd9875accc3b4b51b7d5424b0a20dde35c338a0f</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/commit/?id=34b3e8b802b782c29375d51528dbbe22c5b317d8'/>
<id>urn:sha1:34b3e8b802b782c29375d51528dbbe22c5b317d8</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/commit/?id=c0779b05af9c3b6f2e5bd4383e0116806f5a4a12'/>
<id>urn:sha1:c0779b05af9c3b6f2e5bd4383e0116806f5a4a12</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/commit/?id=2c1e016f9ca8b2df52f78480033e4fa7713afd29'/>
<id>urn:sha1:2c1e016f9ca8b2df52f78480033e4fa7713afd29</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/commit/?id=5ca91aec8117a26d9ec9e65bace21764996a2136'/>
<id>urn:sha1:5ca91aec8117a26d9ec9e65bace21764996a2136</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/commit/?id=666bf2a07290d7428423d36f8c55317b140e4e09'/>
<id>urn:sha1:666bf2a07290d7428423d36f8c55317b140e4e09</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/commit/?id=78551610d438ffc31c836550f17010137ec11d0e'/>
<id>urn:sha1:78551610d438ffc31c836550f17010137ec11d0e</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/commit/?id=818cf167159668efc736930549d3001081c2383f'/>
<id>urn:sha1:818cf167159668efc736930549d3001081c2383f</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>
</feed>
