#+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. ** DONE [#C] Fix grammar checker performance (currently disabled) CLOSED: [2025-11-04 Mon] ✅ **Installed and configured LanguageTool for comprehensive grammar checking** Replaced disabled grammar checker with on-demand LanguageTool integration: - Installed LanguageTool 6.6-2 from Arch repos (222MB) - Created wrapper script: scripts/languagetool-flycheck (Python 3) - Integrated with flycheck for on-demand checking via C-; ? - Removed proselint (redundant - LanguageTool catches more) - No performance impact: only runs when explicitly invoked - Installation instructions added to modules/flycheck-config.el commentary LanguageTool catches: - Real grammar errors (subject-verb agreement, tense, etc.) - Missing punctuation (commas, periods) - Common mistakes (could of → could have) - Style issues (redundant phrases, wordiness) Workflow: Open org/text/markdown file → press C-; ? → see errors in *Flycheck errors* buffer ** 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 (actually: built custom modeline) CLOSED: [2025-11-03 Sun] ✅ **Built custom modeline (better than mood-line)** Went beyond mood-line and created a fully custom modeline using only built-in Emacs functionality to avoid native-compilation issues. Features: **Architecture:** - Named segment system using defvar-local (easy to reorder) - Emacs 30 built-in right-alignment (mode-line-format-right-align) - All segments marked as risky-local-variable for proper evaluation **Interactive Features:** - Color-coded buffer names (green=writeable, red=read-only, gold=overwrite) - VC branch with git symbol () and state-based coloring - Mouse click handlers: buffer name (prev/next), branch (vc-diff), mode (describe-mode) - Help-echo tooltips on all segments - String truncation for narrow windows (< 100 chars wide) - Active-window-only display for branch and misc-info (less clutter) **Layout:** - Left: Major mode, buffer name, position (L:# C:#) - Right: Git branch, chime notifications **Bug Fixes:** - Disabled async native compilation (prevented "Selecting deleted buffer" errors) - Fixed difftastic loading (:demand → :defer) - Abstracted buffer status colors to user-constants.el Inspired by Prot's modeline design. See commit c0c4b17. ** 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