summaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-11-03 15:36:51 -0600
committerCraig Jennings <c@cjennings.net>2025-11-03 15:36:51 -0600
commitdc166120ced2be43ccbe241d2ecc1321c7738aed (patch)
treedc372d8ba5aa083506843dc79abe62333ec08554 /todo.org
parentb086539d6edb6aa90e4b50925de7b9c1897cacaf (diff)
docs: Mark video-audio-recording tasks as complete in todo.org
Completed tasks: ✅ Fix video/audio recording module [#B] ✅ Add diagnostic command cj/recording-list-devices [#A] ✅ Add device selection UI [#A] ✅ Improve error messages [#B] ✅ Make device detection more flexible [#B] ✅ Add comprehensive test coverage [#A] Work summary: - Created 2 device selection workflows (manual + quick call setup) - Implemented smart device grouping with Bluetooth MAC normalization - Added diagnostic listing command - Built comprehensive test suite (9 files, 83 tests, 100% pass) - Refactored code for testability - Fixed all linting warnings Remaining open: - Validate recording startup [#B] - Add device testing command [#C] - Recording status display, presets, history (all [#C]) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org89
1 files changed, 72 insertions, 17 deletions
diff --git a/todo.org b/todo.org
index 477abf9a..48a18833 100644
--- a/todo.org
+++ b/todo.org
@@ -59,38 +59,93 @@ Fix: Wrap keybinding in with-eval-after-load or check if variable is bound.
High priority - daily pain point.
-** TODO [#B] Fix video/audio recording module (use constantly, just broke)
+** 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.
-Use constantly, needs to work reliably.
+✅ COMPLETED - Module now has robust device detection and selection.
+
+*** DONE [#A] Add diagnostic command cj/recording-list-devices
+CLOSED: [2025-11-03 Sun]
-*** TODO [#A] Add diagnostic command cj/recording-list-devices
-Show ALL available PulseAudio/PipeWire sources.
+✅ 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.
-User can copy device names if needed.
-*** TODO [#A] Add device selection UI
-Prompt user to select mic and system audio sources.
-Cache selected devices for future recordings.
-Allow switching devices without restarting Emacs.
+*** 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.
-*** TODO [#B] Improve error messages
-Show which devices were found/not found.
-Include actual pactl output in error messages.
-Suggest manual device configuration.
+*** DONE [#B] Improve error messages
+CLOSED: [2025-11-03 Sun]
-*** TODO [#B] Make device detection more flexible
-Try multiple regex patterns for different audio setups.
-Fallback to prompting user to select from list.
-Support both PulseAudio and PipeWire.
+✅ 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.