Dictation not processing
Symptom

You recorded a JPR voice memo on Apple Watch / iPhone but:

  • It hasn’t appeared in ~/Sync/ED/dictation/processed/
  • ~/Sync/ED/daily-diary.md is stale
  • No tasks from dash commands made it to TASKS.md

The hourly process-dictation Cowork task runs at :04 past every hour โ€” recordings should appear within ~70 minutes of capture.

Diagnose

1. Did iCloud sync the file from your watch/phone to Mac?

ls -la ~/Library/Mobile\ Documents/iCloud~com~openplanetsoftware~just-press-record/Documents/$(date +%Y-%m-%d)/

If the day folder is empty or the file is .something.icloud (placeholder), iCloud hasn’t downloaded it. Force the download:

brctl download ~/Library/Mobile\ Documents/iCloud~com~openplanetsoftware~just-press-record/Documents/$(date +%Y-%m-%d)/

The pipeline runs brctl download automatically before scanning, but only on day directories it can already see โ€” a never-synced day won’t be scanned.

2. Did the pipeline script run?

tail -20 /tmp/dictation-run.log

If you see “No new dictation files found” right after your recording was made, JPR-on-watch didn’t sync in time. Wait 5-15 minutes and the next hourly run should catch it.

3. Was the recording skipped?

The script skips files < 50 KB (accidental taps). Confirm size:

ls -la ~/Library/Mobile\ Documents/iCloud~com~openplanetsoftware~just-press-record/Documents/$(date +%Y-%m-%d)/*.m4a

4. Was there an anomaly?

Recordings > 2h with < 5 min of detected speech trigger a Gotify alert. Check ~/Sync/ED/dictation/processed/ for an ## โš  ANOMALY entry โ€” that means transcription ran but the audio was flagged as a left-running mic.

Fix

Force a manual run:

/bin/zsh ~/Sync/ED/dictation/process-dictation.sh

This handles iCloud download, transcription (Whisper large-v3 via mlx-whisper), chunking long recordings, and parsing dash commands. Watch the output for errors.

If transcription itself failed, check the venv:

ls -la ~/venvs/whisper-asr/bin/python3
~/venvs/whisper-asr/bin/python3 -c "import mlx_whisper; print(mlx_whisper.__version__)"

If the venv is broken, ~/scripts/rebuild-mcp-venvs.sh doesn’t cover whisper-asr โ€” rebuild manually:

python3.12 -m venv ~/venvs/whisper-asr
source ~/venvs/whisper-asr/bin/activate
pip install mlx-whisper
Verify

After the manual run:

# A processed report should exist with today's date prefix
ls -lat ~/Sync/ED/dictation/processed/ | head -3

# daily-diary.md should reflect today's content if there was any narrative
ls -la ~/Sync/ED/daily-diary.md
head -20 ~/Sync/ED/daily-diary.md

Date rule: all artifacts use the recording’s start time from the JPR folder name (Documents/YYYY-MM-DD/HH-MM-SS.m4a), never date +%Y-%m-%d or file mtime. A recording started at 11:50 PM May 21 finishing at 12:30 AM May 22 belongs to May 21 even when picked up by the 01:04 AM May 22 cron.