<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/org-agenda-config.el, 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-02-23T11:14:21+00:00</updated>
<entry>
<title>chore: rename chime.el references to Chime</title>
<updated>2026-02-23T11:14:21+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-23T11:14:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=f5b744f9e15d1f07f41201a56b0376784744d8df'/>
<id>urn:sha1:f5b744f9e15d1f07f41201a56b0376784744d8df</id>
<content type='text'>
Update load-path, GitHub URL, and all project/package name
references to reflect the chime.el → Chime rename.
</content>
</entry>
<entry>
<title>fix(agenda): scope file scan to immediate subdirs of ~/projects</title>
<updated>2026-02-13T18:47:27+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-13T18:47:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=fbed3c6b6a763b159d9fed88183e506e3c032b59'/>
<id>urn:sha1:fbed3c6b6a763b159d9fed88183e506e3c032b59</id>
<content type='text'>
Replace recursive directory-files-recursively with shallow scan that
only checks ~/projects/*/todo.org. Excludes nested archive todo.org
files and keeps ~/code and ~/.emacs.d out of agenda.
</content>
</entry>
<entry>
<title>feat(calendar-sync): add RECURRENCE-ID exception handling for recurring events</title>
<updated>2026-02-03T13:39:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-03T13:39:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=9f4e4a91046c104b1461d8ec22cecd81fc5135f8'/>
<id>urn:sha1:9f4e4a91046c104b1461d8ec22cecd81fc5135f8</id>
<content type='text'>
Handle rescheduled instances of recurring calendar events by processing
RECURRENCE-ID properties from ICS files. When someone reschedules a single
instance of a recurring meeting in Google Calendar, the calendar-sync module
now shows the rescheduled time instead of the original RRULE time.

New functions:
- calendar-sync--get-recurrence-id: Extract RECURRENCE-ID from event
- calendar-sync--get-recurrence-id-line: Get full line with TZID params
- calendar-sync--parse-recurrence-id: Parse into (year month day hour minute)
- calendar-sync--collect-recurrence-exceptions: Collect all exceptions by UID
- calendar-sync--occurrence-matches-exception-p: Match occurrences to exceptions
- calendar-sync--apply-single-exception: Apply exception data to occurrence
- calendar-sync--apply-recurrence-exceptions: Apply all exceptions to occurrences

Also adds DeepSat calendar configuration (dcal-file) to user-constants,
init.el, and org-agenda-config.

48 unit and integration tests added covering normal, boundary, and error cases.
</content>
</entry>
<entry>
<title>feat(calendar-sync): multi-calendar support with property tests</title>
<updated>2025-12-02T13:55:21+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-12-02T13:55:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=97dea528c2b49642fe513807b86f9d378676a9e6'/>
<id>urn:sha1:97dea528c2b49642fe513807b86f9d378676a9e6</id>
<content type='text'>
Added multi-URL calendar sync supporting Google and Proton calendars.
Each calendar syncs to separate file with per-calendar state tracking.
Added 13 property-based tests for RRULE expansion. Total: 150 tests passing.
</content>
</entry>
<entry>
<title>refactor: Use cj/log-silently for debug messages</title>
<updated>2025-11-17T04:10:58+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-17T04:10:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=f32544f765bde7216fd323dd1ab7f83c9b02728d'/>
<id>urn:sha1:f32544f765bde7216fd323dd1ab7f83c9b02728d</id>
<content type='text'>
Converted debug/informational messages to use cj/log-silently instead of
message across multiple modules. These are automatic initialization or
background task messages that don't need minibuffer display but should
still be logged to *Messages* buffer.

Changes:
- org-agenda-config.el: Cache build/hit messages (4 messages)
- org-refile-config.el: Cache build/hit + mode switching (5 messages)
- org-export-config.el: reveal.js download message (1 message)
- auth-config.el: oauth2-auto cache fix message (1 message)
- quick-video-capture.el: initialization message (1 message)

All modules now require system-lib for cj/log-silently function.
Keeps UI clean while maintaining debuggability.
</content>
</entry>
<entry>
<title>perf: Merge performance branch - org-agenda cache, tests, and inbox zero</title>
<updated>2025-11-12T08:46:27+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-12T08:46:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=0d1108028df3d01b3b439a886abd76d8f6b1639f'/>
<id>urn:sha1:0d1108028df3d01b3b439a886abd76d8f6b1639f</id>
<content type='text'>
This squash merge combines 4 commits from the performance branch:

## Performance Improvements
- **org-agenda cache**: Cache org-agenda file list to reduce rebuild time
  - Eliminates redundant file system scans on each agenda view
  - Added tests for cache invalidation and updates

- **org-refile cache**: Optimize org-refile target building (15-20s → instant)
  - Cache eliminates bottleneck when capturing tasks

## Test Suite Improvements
- Fixed all 18 failing tests → 0 failures (107 test files passing)
- Deleted 9 orphaned test files (filesystem lib, dwim-shell-security, org-gcal-mock)
- Fixed missing dependencies (cj/custom-keymap, user-constants)
- Fixed duplicate test definitions and wrong variable names
- Adjusted benchmark timing thresholds for environment variance
- Added comprehensive tests for org-agenda cache functionality

## Documentation &amp; Organization
- **todo.org recovery**: Restored 1,176 lines lost in truncation
  - Recovered Methods 4, 5, 6 + Resolved + Inbox sections
  - Removed 3 duplicate TODO entries

- **Inbox zero**: Triaged 12 inbox items → 0 items
  - Completed: 3 tasks marked DONE (tests, transcription)
  - Relocated: 4 tasks to appropriate V2MOM Methods
  - Deleted: 4 duplicates/vague tasks
  - Merged: 1 task as subtask

## Files Changed
- 58 files changed, 29,316 insertions(+), 2,104 deletions(-)
- Tests: All 107 test files passing
- Codebase: Cleaner, better organized, fully tested
</content>
</entry>
<entry>
<title>config: Increase chime modeline lookahead and tooltip display</title>
<updated>2025-11-11T03:02:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-11T03:02:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=99245f042bdb7fd7c995f582f57959c176c4b1a6'/>
<id>urn:sha1:99245f042bdb7fd7c995f582f57959c176c4b1a6</id>
<content type='text'>
Expanded chime modeline settings for better event visibility:
- Lookahead window: 3 hours → 6 hours
- Tooltip max events: 10 → 20
- Tooltip lookahead: 6 days → 7 days (full week)

Provides more advance notice of upcoming events and better weekly overview.
</content>
</entry>
<entry>
<title>feat:chime: Add calendar URL configuration</title>
<updated>2025-11-09T21:34:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-09T21:34:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=911792c3d7c7976aeaad9b82eb6b3ac7568791cc'/>
<id>urn:sha1:911792c3d7c7976aeaad9b82eb6b3ac7568791cc</id>
<content type='text'>
Set the calendar URL in chime configuration for better integration
with Google Calendar. Debug mode remains available but disabled by
default.
</content>
</entry>
<entry>
<title>feat: Fix modeline lag and add org multi-level sort with comprehensive tests</title>
<updated>2025-11-08T22:11:58+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-08T22:11:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=7c66a72dd276466aa3b242330788fc35d3e229da'/>
<id>urn:sha1:7c66a72dd276466aa3b242330788fc35d3e229da</id>
<content type='text'>
Performance improvement and new feature with full test coverage.

## Changes

### 1. Fix modeline line/column position lag (#A priority)
- Replace expensive line-number-at-pos with cached %l/%c format specifiers
- Enable line-number-mode explicitly for caching
- Result: Instant modeline updates, zero performance overhead
- Files: modules/modeline-config.el:81-83, modules/ui-config.el:53

### 2. Implement multi-level org sorting
- New function: cj/org-sort-by-todo-and-priority
- Sorts by TODO status (TODO before DONE) AND priority (A→B→C→D)
- Uses stable sorting: priority first, then TODO state
- Gracefully handles empty sections (no error)
- Bound to C-; o o (ordering → org sort)
- Files: modules/org-config.el:278-299, modules/custom-ordering.el:253,267

### 3. Comprehensive ERT test suite (12/12 passing)
- Normal cases: Mixed TODO/DONE, multiple of same type, same priority
- Boundary cases: Empty sections, single entries, no priorities
- Error cases: Non-org-mode buffer
- Test file: tests/test-org-sort-by-todo-and-priority.el

### 4. Testing improvements discovered
- Disable org-mode hooks to avoid package dependencies in batch mode
- org-sort-entries must be called from parent heading
- Preserve priority cookie in org-get-heading (t t nil t)
- Add condition-case to handle "Nothing to sort" gracefully

### 5. Minor cleanup
- Comment out chime-debug setting (org-agenda-config.el:267)
- Mark modeline lag task as DONE in todo.org

## Technical Details

Modeline optimization:
- line-number-at-pos is O(n) where n = current line
- %l and %c are O(1) lookups from cached values

Org sorting algorithm uses stable sort:
1. Sort by priority (A, B, C, D, unprioritized)
2. Sort by TODO status (preserves priority order within groups)
Result: TODO [#A], TODO [#B], DONE [#A], DONE [#B], etc.
</content>
</entry>
<entry>
<title>config: Update chime.el to use new alert-intervals format</title>
<updated>2025-11-03T07:09:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-03T07:09:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=8e23ac955e126cf335d6b565704f562bff0f5071'/>
<id>urn:sha1:8e23ac955e126cf335d6b565704f562bff0f5071</id>
<content type='text'>
Updated chime configuration for severity refactor:
- Replaced chime-alert-time and chime-alert-severity with
  chime-alert-intervals '((5 . medium) (0 . medium))
- Changed polling interval from 60s to 30s for faster response
- Added chime-day-wide-time "09:00" for all-day event notifications
- Removed settings that match defaults (play-sound, keyword filters, etc.)
- Changed chime-debug from t to nil

All notifications now use medium urgency.
</content>
</entry>
</feed>
