← back to MIDI Harness

# Session Gallery

Real data from the MIDI harness sessions — the 16-session log from `session-drain.md`, reconstructed conversation loops showing what the harness actually sent Claude, and the FINDINGS.md diagnostic that killed the first attempt.

The full session log (session-drain.md — 16 sessions, gitignored)
16 sessions logged
12 active sessions (May 30 – Jun 1)
46 words — the whole system prompt
~0ms hook startup (Go, stdlib only)
2026-05-30T02:43Z
Session 1 — first successful harness run. Hook injecting `<played>` blocks confirmed. prompt_input_exit
2026-05-30T02:46Z
Session 2 — tuning chord clustering. Repeated notes show as `xN`. prompt_input_exit
2026-05-30T03:00Z
Session 3 — C major arpeggio run; Claude produces chord card + 1-3-5 keyboard diagram. prompt_input_exit
2026-05-30T03:08Z
Session 4 — F major. Common-tone discussion (C4 shared between I and IV). prompt_input_exit
2026-05-30T03:08Z
Session 5 — Cmaj13 spread voicing. Claude explains dropped 5th in jazz voicings. prompt_input_exit
2026-05-30T12:47Z
Session 6 — afternoon session. Calibrating 34→3 compression ratio (4-key chord × 3 repeats = 24 events → 1 line). prompt_input_exit
2026-05-30T13:10Z
Session 7 — G major and G7 voicings. Dominant function discussion. prompt_input_exit
2026-05-30T13:34Z
Session 8 — I–IV–V progression in C. Loop back arrow working: play → send → play → send. prompt_input_exit
2026-05-30T15:32Z
Session 9 — "She's Electric" chord sequence (E → G#m → C#m → A). Claude generates multi-chord HTML card. prompt_input_exit
2026-06-01T12:56Z
Session 10 — first session after the weekend gap. Harness still live. File-deletion boundary confirmed holding between sessions. prompt_input_exit
2026-06-11T00:00Z
Session 11 — post-drift-commit session. Exploring `chord-diagram.html` format added in commit `7cb9815`. prompt_input_exit
2026-06-11T14:05Z
Session 12 — README updated to one-line pointer; old prose moved to git history. prompt_input_exit
2026-06-11T14:07Z
Session 13 — verifying isolation: does streetlight bleed into the 46-word prompt? No — sibling dir, not ancestor. prompt_input_exit
2026-06-11T14:09Z
Session 14 — future-ideas.md drafted: timing/rhythm capture parked deliberately. Harmony-read loop first. prompt_input_exit
2026-06-11T14:23Z
Session 15 — blog post drafting: Brenda/Piano-YouTube motivation, recipe card, lessons, streams-and-lakes analogy. prompt_input_exit
2026-06-11T14:42Z
Session 16 — post finalized. Published to jakesimonds.leaflet.pub/3mnzjxem5q22z. AC met. prompt_input_exit

`session-drain.md` is gitignored in the live repo — it contains local transcript paths that are noise publicly. Reconstructed above from file contents.

What an actual session looks like — chord → conversation loops

The harness sends a `<played>` block alongside whatever Jake types. Here are representative reconstructed exchanges from the active sessions.

Session 3 · 2026-05-30T03:00Z — C major arpeggio
user
what am I playing?<played> C3 G3 C4 E4 x3 F2 F3 A#3 D4 G4 </played>
claude
You're playing a nice little progression — C major in root position (arpeggiated three times), then F major, then a single G4. That's a I–IV–V sketch in C. The C chord you're landing on with 1-3-5 hand shape is the home base — C4 (thumb), E4 (middle), G4 (pinky). I'll render you the card.
claude
Generated `what-you-played.html` — chord cards with fingered keyboards for C Major, F Major, and the G4 passing note.
Session 5 · 2026-05-30T03:08Z — Cmaj13 spread voicing
user
what's this one — the weird one<played> C3 B3 E4 A4 </played>
claude
That's a Cmaj13 in an open "spread" voicing — C (root) in the left hand, then B (major 7th), E (3rd), and A (13th) stacked wide in the right. No 5th at all, which is normal: jazz voicings drop the 5th because it adds nothing. The B a major 7th above the bass C is what gives it that shimmering, unresolved glow — it wants to resolve but doesn't quite.
Session 9 · 2026-05-30T15:32Z — She's Electric
user
I'm learning She's Electric by Oasis — what are these chords<played> E2 E3 G#3 B3 G#2 B3 D#4 C#3 E3 G#3 A2 C#3 E3 </played>
claude
Nice — that's the full chord sequence for She's Electric: E major (I), G# minor (iii), C# minor (vi), A major (IV). All diatonic to E major — every note fits the key. The I→iii→vi→IV pattern alternates major and minor colors which is why it feels like it moves without ever leaving home. I'll generate the chord diagram.
claude
Generated `chord-diagram.html` — four chord cards with MIDI note numbers and scale context for E major. See chord-diagram.html in the repo.
FINDINGS.md — the diagnostic that killed midi-coach (2026-05-29)

Before the working harness came midi-coach — a more ambitious first attempt that tried to sync MIDI notes with Wispr voice dictation using a byte-offset marker. It broke silently and the diagnostic below is why it was abandoned. Full file: `~/Documents/midi-coach/FINDINGS.md`.

> "Wispr is not working at all and I don't know that it ever has been." — Jake, 2026-05-29

① The G-octave / C-octave demo dropped the notes that mattered. Jake narrated a deliberate test: "here comes a G... I'm playing two G notes... an octave... now a C octave... what do you see?" The `<spoken-and-played>` block that reached Claude contained only the opening slice of the dictation — everything from "here comes a G..." onward was absent. Both the words AND the notes for the actual demo were missing.
② A turn where Jake said "this time I'm actually playing a note" came back words-only — zero MIDI clusters. A played note never reached the gate.
③ The hook's whisper re-transcription was regularly shorter than the clean Wispr message. Two transcripts of the same speech that didn't match — the hook was reading a partial audio clip, not the full dictation.
④ One turn DID produce rich interleaved output (~70 lines, plausible timestamps). But we never independently confirmed those notes matched what was played. There was never any ground truth — which is the meta-finding.

The meta-finding (the important one)

The output always looked plausible, so nobody caught it being wrong until Jake played a known thing and looked for it. A block full of timestamped chords reads as "synced" whether or not the notes belong to those words. There was no ground truth. The whole illusion of "it works" was unverified plausibility.

Root cause (FINDINGS.md, ranked most likely)

Two independent clocks reconciled after the fact. Wispr recorded audio on its clock; the Go listener logged MIDI on wall-clock epoch independently. The gate kept only notes whose timestamp fell inside Wispr's clip window. If those two clocks disagreed by even a few seconds (different process start, drift, epoch basis), the window missed the notes entirely. Architectural, not a tunable bug. Reconciling two clocks post-hoc is the fragility. The agreed fix was radical: kill the second stream entirely — which is what midi-harness does.