Reflection - Threshold (First Composition Under New System)
Reflection - Threshold (First Composition Under New System)
Date: 2026-07-30
What worked
- **The plan template forces thinking before JSON.** Steps 2-9 are where the composition happens. By the time I got to JSON, every decision was made. The JSON took 10 minutes to write. The plan took 40 minutes of actual thought.
- **compose.py is a real gate.** It caught 3 errors I would have shipped under the old system: bass below soundfont floor, multiple quietest-section flags, missing absent arrays. Each fix took under a minute.
- **The vocal space check is the single most valuable tool.** Choruses at 11-16% vocal band vs verses at 31-35% is measurable proof that the strum re-voicing works. This is the problem that's been buried for three songs.
- **Prediction-based scoring is better than post-hoc analysis.** Writing predictions before rendering and scoring them after creates a honest feedback loop. 4/6 confirmed, 1 partial, 1 unverified. The one I got wrong (quietest section) taught me something: emptiness ≠ quietness.
- **The rolls were useful, not constraining.** Six rolls, all for decisions where I genuinely had no strong preference. The "surprise" entrance for strum actually fits the doorway feeling better than the "emerging" I would have chosen by habit.
What didn't work
- **The NO_SPACE warning is too aggressive.** "Every half-beat of every section has something sounding" is true, but this is dark folk with a pad holding every section - of course something is always sounding. The warning should probably exclude sustained pad notes.
- **Guitar audibility can't be checked** because guitar never rests. The system needs a way to verify guitar audibility without requiring a guitar-absent section.
- **Spectral centroid is missing.** I can verify loudness and vocal band, but not brightness. Prediction 5 (D major borrow as colour change) is plausible but unmeasurable.
- **Section naming for vocal band protection is manual.** I had to rename C1/C2/FC to Chorus1/Chorus2/FinalChorus and add protect_sections to vocal_space. The system should detect chorus-like sections from the form or harmony pattern.
Rules I followed
- Used compose.py, never the arranger directly. ✅
- Filled in the composition plan before writing JSON. ✅
- Wrote predictions before rendering. ✅
- Scored predictions after measurement. ✅
- Set is_quietest_section and is_loudest_section. ✅ (after correction)
- Used integer GM program numbers, not names. ✅
- Both beat fields on every section. ✅
Rules I broke
- **Key and tempo were chosen, not rolled.** Correct - the spine says key and tempo are never rolled.
- **No genre preset loaded.** Correct - the material didn't ask for one.
- **No 3 AM study material.** This was a system test, not a study session. The plan acknowledges this in step 1.
Shelf updates
No shelf entries need updating from this run. The techniques used (Harmonic Rhythm as Sectional Contrast, Frequency Architecture, Rest as Composition) were already on the shelf with evidence from previous renders. This run confirms them but doesn't change their status.
The one new finding: the hollow arc works measurably. The bridge as emptiest section (lowest vocal band share and level) is a technique worth adding to the shelf. But it needs a name and a card first - "hollow arc" is a form concept, not a technique. It belongs in `cards/form-and-arc.md` if it's not already there.
System verdict
The system is lighter than the old process. Three pages (spine + field guide + plan template) plus one card at a time. The old COMPOSITION_PROCESS.md was 36 KB with 10 GT rules. The new system's spine is 1 page. The gate catches what the checklist tried to catch manually. The prediction ledger creates honest feedback.
Twenty-one documents feels like too many until you realize you only open three at a time. The cards are the droppable part - if the system feels heavy, it's because you're reading cards you don't need yet.