summaryrefslogtreecommitdiff
path: root/todo.org
blob: 8ef088b870b24fc0716bc7a58dad74f3f98425cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
#+TITLE: Inbox - V2MOM Aligned Tasks
#+AUTHOR: Craig Jennings
#+DATE: 2025-10-31
#+FILETAGS: :v2mom:active:

* Instructions

This inbox contains ONLY tasks that serve the V2MOM vision. Before adding any task here, ask:
1. Does it serve the Vision?
2. Does it align with the Values?
3. Is it addressed in the Methods?
4. Does it overcome an Obstacle?
5. Does it improve a Metric?

If the answer is "no" to all five → DON'T ADD IT.

V2MOM is located at: [[file:docs/emacs-config-v2mom.org][emacs-config-v2mom.org]]
Research/ideas that don't serve vision: [[file:docs/someday-maybe.org][someday-maybe.org]]

* Method 1: Make Using Emacs Frictionless [7/13]

** DONE [#A] Remove network check from startup (saves 1+ seconds)
CLOSED: [2025-10-31 Fri]

✅ Deleted blocking ping check. Startup improved from 6.2s to 5.4s.
Now uses package priorities: .localrepo (200) > online repos (25).

** DONE [#A] Fix cj/goto-git-gutter-diff-hunks (missing function causing errors)
CLOSED: [2025-11-03 Sun]

✅ Implemented missing function in modules/vc-config.el
- Added `cj/goto-git-gutter-diff-hunks` function (lines 118-124)
- Uses consult-line to search for diff markers (^[+\-])
- Enables interactive jumping to any changed line via C-; v d
- Function properly documented with docstring
- No linting issues, compiles cleanly

Quick win completed - 5 minutes actual time.

** DONE [#A] Fix chime-check throw with no catch block
CLOSED: [2025-11-01 Fri]

Error: "(no-catch --cl-block-chime-check-- nil)"
Chime was throwing to a catch block that doesn't exist.
Location: chime package - chime-check() function at line 1540
Fix: Changed defun to cl-defun to provide implicit catch block for cl-return-from.

Fixed in ~/code/chime.el/chime.el:1540

Added regression test: test-integration-startup-early-return-on-validation-failure
Created Makefile with test targets (unit, integration, all, by-file, by-name)
Updated README.org with Development/Testing section

All integration tests pass (5/5) ✅

** DONE [#A] Implement cj/diff-buffer-with-file (compare buffer with saved version)
CLOSED: [2025-10-31 Fri]

Bound to C-; b D. Weekly need satisfied.

** DONE [#B] Fix go-ts-mode-map keybinding error (void-variable)
CLOSED: [2025-11-03 Sun]

Error: "Debugger entered--Lisp error: (void-variable go-ts-mode-map)"
Location: modules/prog-go.el - trying to bind keys before mode loads.

✅ Already fixed in commit 196b289 (Nov 2, 2025)
- Moved keybinding from `:bind (:map go-ts-mode-map ...)` to hook function
- Keybinding now set in `cj/go-mode-keybindings` called via `:hook`
- Function executes after mode loads, ensuring keymap exists
- Today's cleanup: Removed unused forward declarations (lines 34-35)

Fix was: Wrap keybinding in hook function instead of :bind clause.
Result: No more void-variable error, keybinding works correctly.

** TODO [#B] Fix org-noter (reading/annotation workflow currently "so painful")

High priority - daily pain point.

** DONE [#B] Fix video/audio recording module (use constantly, just broke)
CLOSED: [2025-11-03 Sun]

Main issue: No way to select audio devices when multiple are available.
Plugging in external audio interface broke recording - only captured input, not output.

✅ COMPLETED - Module now has robust device detection and selection.

*** DONE [#A] Add diagnostic command cj/recording-list-devices
CLOSED: [2025-11-03 Sun]

✅ Created `cj/recording-list-devices` command (C-; r d)
Shows ALL available PulseAudio/PipeWire sources with drivers and states.
Displays current configuration.
Helps debug why auto-detection fails.

*** DONE [#A] Add device selection UI
CLOSED: [2025-11-03 Sun]

✅ Created TWO selection workflows:
1. `cj/recording-select-devices` (C-; r s) - Full manual control
   - Select mic and system audio separately
   - Interactive completion with device states
2. `cj/recording-quick-setup-for-calls` (C-; r c) - Quick call setup
   - Smart device pairing (groups mic + monitor by hardware)
   - One selection for both mic and system audio
   - Handles Bluetooth MAC normalization

Devices cached in variables for future recordings.
Can switch devices without restarting Emacs.

*** DONE [#B] Improve error messages
CLOSED: [2025-11-03 Sun]

✅ Error messages now include:
- Guidance to run `cj/recording-select-devices`
- Clear indication when auto-detection fails
- User-friendly prompts for manual selection

*** DONE [#B] Make device detection more flexible
CLOSED: [2025-11-03 Sun]

✅ Implemented multi-level fallback system:
1. Auto-detect using pactl output parsing
2. Prompt user to select manually if auto-detect fails
3. Error with helpful guidance if user declines

✅ Smart device grouping in `cj/recording-group-devices-by-hardware`:
- Handles USB, PCI (built-in), and Bluetooth devices
- Normalizes Bluetooth MAC addresses (colons ↔ underscores)
- Assigns friendly names (e.g., "Built-in Laptop Audio", "Bluetooth Headset")
- Filters incomplete devices (must have both mic and monitor)

✅ Supports both PulseAudio and PipeWire (both use pactl).

*** TODO [#B] Validate recording startup
Check process status after starting.
Parse ffmpeg output for errors.
Show actual ffmpeg command for debugging.

** DONE [#A] Add comprehensive test coverage for video-audio-recording module
CLOSED: [2025-11-03 Sun]

✅ Created comprehensive test suite following quality-engineer.org standards:
- 9 test files (8 unit + 1 integration)
- 83 test cases with 100% pass rate
- Test categories: Normal, Boundary, Error cases
- 6 test fixtures for reproducible testing
- Mocking strategy using cl-letf
- Integration test validates complete parse→group→friendly-names workflow
- Tests document bugs in legacy detect functions
- Critical validation: Bluetooth MAC normalization across component boundaries

✅ Refactored code for testability:
- Extracted `cj/recording--parse-pactl-output` internal parser
- Separated I/O from business logic

✅ Fixed all linting warnings (checkdoc):
- 6 spacing/grammar issues resolved
- `make lint` now passes cleanly

✅ All changes committed and pushed to all remotes (origin + github)

Commits:
- 0a69c58: test: Add comprehensive test suite for video-audio-recording module
- b086539: style: Fix checkdoc warnings in video-audio-recording.el

*** TODO [#C] Add device testing command cj/recording-test-devices
Records 3 seconds of audio.
Plays it back.
Confirms devices work before real recording.

*** TODO [#C] Add recording status display (optional via flag, default off)
Show "Recording: 00:05:23" in modeline or echo area.
Timer showing duration.
File size updating.

*** TODO [#C] Add recording presets
Screencast (video + audio, high quality).
Podcast (audio only, voice optimized).
Meeting (balanced, lower filesize).
Quick note (audio, low quality, small file).

*** TODO [#C] Build recording history buffer
*Recordings* buffer showing history.
Duration, file size, location.
Quick actions: play, delete, rename, move.

*** TODO [#C] Add post-processing hooks
Auto-compress after recording.
Move to cloud sync directory.
Generate transcript (once transcription workflow exists).

** TODO [#B] Fix mail attachment workflow (currently awkward)

Daily workflow improvement.

** TODO [#B] Optimize org-agenda performance using built-in profiler

THE BOTTLENECK. Currently 30+ seconds, target < 5 seconds.
Use M-x profiler-start before Method 3 debug-profiling.el is built.

** TODO [#B] Optimize org-capture target building performance

15-20 seconds every time capturing a task (12+ times/day).
Major daily bottleneck - minutes lost waiting, plus context switching cost.

** TODO [#C] Fix grammar checker performance (currently disabled)

Currently disabled because it breaks flow when writing.

** TODO [#D] Fix EMMS keybinding inconsistency with other buffers

EMMS keybindings conflict with standard buffer keybindings, causing mistypes.
Results in accidental destructive actions (clearing buffers), requires undo + context switch.
Violates Intuitive value - muscle memory should help, not hurt.

* Method 2: Stop Problems Before They Appear [3/5]

** TODO [#B] Migrate from Company to Corfu
:PROPERTIES:
:COMPLETE_CONFIG: [[file:docs/someday-maybe.org::1611][todo.org:1611-1639]]
:END:

Complete config already exists in someday-maybe.org. Just needs to be executed.

** DONE [#C] Switch to mood-line
CLOSED: [2025-11-03 Sun]

✅ Replaced doom-modeline with mood-line in modules/modeline-config.el
- Simplified from 70+ lines to ~10 lines of configuration
- mood-line is lightweight, minimal, inspired by doom-modeline
- Better performance with no dependencies
- Features: buffer status, major mode, VCS, flycheck, cursor position
- Net reduction: -40 lines of configuration code

** DONE [#C] Remove deprecated tree-sitter package (rely on treesit-auto)
CLOSED: [2025-11-03 Sun]

✅ Removed deprecated tree-sitter package from modules/prog-general.el
- Deleted `(use-package tree-sitter)` on line 97
- Now relies solely on Emacs 29+ built-in treesit with treesit-auto
- treesit-auto continues to manage tree-sitter grammars automatically
- No functionality lost, cleaner dependency tree

** DONE [#C] Add org-appear (show emphasis markers only when point is on them)
CLOSED: [2025-11-03 Sun]

✅ Added org-appear package to modules/org-config.el
- Shows emphasis markers (* / _) only when cursor is on them
- Also shows link markup and sub/superscripts when editing
- Changed org-fontify-emphasized-text from nil to t (line 75)
- Updated comment on line 71 to reference org-appear
- Cleaner editing experience while maintaining visual clarity

** TODO [#C] Integrate prescient with Corfu (smart sorting)

Already using prescient with vertico. Extend to Corfu after migration.

* Method 3: Make *Fixing* Emacs Frictionless [0/5]

** TODO [#B] Build debug-profiling.el module

Reusable profiling infrastructure for any future performance work.

** TODO [#C] Document localrepo limitations (treesitter grammars not included)

.localrepo only contains packages from package.el archives.
Treesitter grammars are downloaded separately by treesit-auto on first use.
For true offline reproducibility, need to cache treesitter grammars separately.

** TODO [#C] Integrate Buttercup (behavior-driven integration tests)

Complex workflow testing capability.

** TODO [#C] Build localrepo out (package snapshot system)

Repeatable installs and safe rollbacks.

** DONE [#C] Integrate difftastic (structural diffs)
CLOSED: [2025-11-03 Sun]

✅ Completed difftastic integration:
1. **Upgraded cj/diff-buffer-with-file to use ediff** (modules/custom-buffer-file.el)
   - Replaced basic unified diff with ediff-current-file
   - Now uses same ediff config (horizontal split, j/k navigation)
   - Keybinding C-; b D now launches interactive ediff

2. **Added difftastic for git diffs** (modules/vc-config.el)
   - Installed binary: difftastic 0.64.0
   - Added difftastic.el package integrated with magit
   - Keybindings in magit-diff: D for dwim, S for show
   - Provides structural, language-aware diffs for git changes

Result: Better diffs everywhere - ediff for interactive buffer comparison,
difftastic for understanding git changes.

* Method 4: Contribute to the Emacs Ecosystem [0/4]

** TODO [#C] Set up package-lint for elisp linting (chime, org-msg, wttrin)

Catch packaging issues automatically.

** TODO [#C] Set up melpazoid CI for MELPA submissions

Validates packages meet MELPA standards.

** TODO [#C] Set up elisp-check GitHub Action

Zero-config CI for Emacs packages.

** TODO [#C] Integrate undercover.el for test coverage

Measure and track test coverage over time.

* Method 5: Be Kind To Your Future Self [0/2]

** TODO [#C] Add transcription workflow
:PROPERTIES:
:COMPLETE_CONFIG: [[file:docs/someday-maybe.org::2][todo.org:2-99]]
:END:

Complete code already exists in someday-maybe.org. Need today and recurring.

** TODO [#C] Implement org-reveal presentation workflow

Create reveal.js slides from org-mode.

* Method 6: Develop Disciplined Engineering Practices [0/3]
** TODO [#A] First weekly triage by Sunday (establish habit)
SCHEDULED: <2025-11-03 Sun>

Review this inbox, cancel stale items, keep < 20 active. Track in calendar.

** TODO [#B] Track current metrics baseline

- [ ] Measure current startup time (time emacs --eval '(save-buffers-kill-emacs)')
- [ ] Count current active todos
- [ ] Set up tracking document for weekly metrics

** TODO [#C] Set up monthly research:shipped ratio tracking

Can't research next thing until current thing is implemented.

* Emacs Config Inbox