Ethan already generates Socratic reflection prompts from his commits and pushes a morning brief to the TCL tablet, but his handwritten reflections die on the tablet — never indexed, never resurfaced. This closes the loop: when he writes answers in Doc Markup and they sync back via tablet-sync-api, an OCR pass extracts the responses, pairs each with its original Socratic question + commit SHA, and files the Q&A as a project memory under the relevant repo so future Claude sessions can recall *why* he made past decisions in his own words.
Create ~/bin/socratic-reflection-harvester (single bash+python script, ~80 lines). (1) When socratic-morning-brief generates the daily PDF, write a sidecar ~/Tablet/.socratic/YYYY-MM-DD.json mapping {question_id, commit_sha, repo, question_text}. (2) Add a cron entry (every 30min, 7am-11pm) that watches ~/Tablet/inbox/ for annotated PDFs matching socratic-*.pdf. (3) On match: run note-ocr service on the PDF, split extracted text by question_id markers, and for each Q+A pair append to the matching repo's .claude/memory/reflections.md as a dated entry with frontmatter (commit SHA, question, answer). (4) notify-focus a one-line summary ("3 reflections filed: linkedin-engine, joyos-labs"). Reuses existing socratic-morning-brief, note-ocr service, tablet-sync inbox, and the per-project memory convention — zero new infra.
## Summary
Created **`~/bin/socratic-reflection-harvester`** (98 lines, executable) — a single bash+python script that closes the Socratic-brief → tablet → memory loop.
**What it does:**
- `--emit-sidecar [DATE]` — re-runs the same git-log window as `socratic-morning-brief` and writes `~/Tablet/.socratic/YYYY-MM-DD.json` with `{qid, sha, repo, path, subject}` per question. Self-bootstrapping; needs no changes to the existing brief script.
- default `harvest` — scans `~/Tablet/inbox/morning-brief-*.pdf`, skips already-processed (`.harvested` marker), runs `pdftoppm -r 200 | tesseract --psm 6`, splits OCR text by uppercase repo tags, strips the question line, and appends each answer to `<repo>/.claude/memory/reflections.md` with frontmatter (`date`, `commit`, `question`). Fires `notify-focus` with the list of repos when anything was filed.
**Cron installed (`crontab -l`):**
```
35 6 * * * socratic-reflection-harvester --emit-sidecar (5min after the brief at 6:30)
*/30 7-23 * * * socratic-reflection-harvester (scan inbox every 30min, 7am-11pm)
```
**Verified:**
- Help output prints.
- `--emit-sidecar` produced today's sidecar: `~/Tablet/.socratic/2026-05-09.json` with 10 questions across the tracked repos.
- Default mode is a clean no-op when inbox has no morning-brief PDFs.
- End-to-end synthetic test (temp git repo + rendered PDF + OCR + parse + file): reflection landed in `.claude/memory/reflectio