<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs.git/tests, 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(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(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>
<entry>
<title>test(gptel): add unit tests for ai-config, remove dead cj/gptel-backends</title>
<updated>2026-03-07T02:40:23+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-07T02:40:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=873269cdea6a0c93f7eb25acabce8b72f8be6126'/>
<id>urn:sha1:873269cdea6a0c93f7eb25acabce8b72f8be6126</id>
<content type='text'>
- Add testutil-ai-config.el with gptel stubs for batch testing
- Add tests for cj/gptel--model-to-string (9 tests)
- Add tests for cj/gptel--fresh-org-prefix (8 tests)
- Add tests for cj/gptel-backend-and-model (8 tests)
- Remove dead cj/gptel-backends defvar (duplicates cj/gptel--available-backends)

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(json,yaml): add tree-sitter modes, formatting, and jq integration</title>
<updated>2026-03-03T01:46:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-03-03T01:46:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=b5cae72d8f824f235f351821f7d7052b66bc2513'/>
<id>urn:sha1:b5cae72d8f824f235f351821f7d7052b66bc2513</id>
<content type='text'>
New prog-json module: json-ts-mode with jq formatting (C-; f) and
jq-interactively (C-c C-q). Upgraded prog-yaml to yaml-ts-mode with
prettier formatting. Both use treesit-auto for grammar management.
Includes 18 new tests (10 JSON, 8 YAML), 185/185 passing.
</content>
</entry>
<entry>
<title>test(recording): add tests for label-devices, label-sinks, get-sink-apps</title>
<updated>2026-02-27T04:41:46+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-27T04:41:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=a46f8af939b112b603a2c95b2e83a1932b208e20'/>
<id>urn:sha1:a46f8af939b112b603a2c95b2e83a1932b208e20</id>
<content type='text'>
Fill test gaps from quality-engineer review: 3 new test files (28 tests)
and error cases for get-available-mics and get-available-sinks (+4 tests).
</content>
</entry>
<entry>
<title>feat(recording): intuitive labels, show muted devices, add app names</title>
<updated>2026-02-27T00:37:07+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-27T00:37:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=8de47fd766fe57c7f89960ee110b209a946024cb'/>
<id>urn:sha1:8de47fd766fe57c7f89960ee110b209a946024cb</id>
<content type='text'>
Rework quick-setup device picker:
- Labels: [in use], [ready], [available], [muted] instead of
  PulseAudio jargon (RUNNING/IDLE/SUSPENDED)
- Muted devices now shown (previously hidden) so users can see
  all connected hardware and understand why a device is unsuitable
- Sink step shows which apps are playing through each output:
  "JDS Labs Element IV [in use] (Firefox, Spotify)"
- Prompt changed from "audio output to monitor" to "audio output
  to capture" to avoid PulseAudio monitor terminology confusion
- Sort order: in use → ready → available → muted
</content>
</entry>
<entry>
<title>feat(recording): replace icons with text state labels in quick-setup</title>
<updated>2026-02-27T00:12:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-27T00:12:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=5eb90dbbd18cf9b22d83fe31303fbb09099088ed'/>
<id>urn:sha1:5eb90dbbd18cf9b22d83fe31303fbb09099088ed</id>
<content type='text'>
Replace hard-to-distinguish nerd font icons with clear text labels:
  Jabra SPEAK 510 Mono [active - running]
  Shure MV7+ Analog Stereo [active - idle]
  Ryzen HD Audio Controller [inactive - suspended]

Both mic and sink steps use the same labeling. Devices sorted
running → idle → suspended. Removed mic-active-p and sink-active-p
helpers — state now comes directly from the verbose pactl parsers
via get-available-mics/sinks which return (name description state).
</content>
</entry>
</feed>
