SPEC.mdpreviewSPEC.mdsource254 lines · 17.9 KB · raw
1---
2title: SYSTEM ONE
3theme: jev
4status: made
5song: song.js
6measured: {"date":"2026-09-25","song":"c30c083f26af","total":{"loudnessDbfs":-24.1,"peakDbfs":-2.4},"parts":{"bass":{"loudnessDbfs":-30.2,"peakDbfs":-10.4},"chime":{"loudnessDbfs":-45.8,"peakDbfs":-21.8},"drums":{"loudnessDbfs":-27.7,"peakDbfs":-8.7},"ending":{"loudnessDbfs":-50.6,"peakDbfs":-10.5},"stabs":{"loudnessDbfs":-31.4,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":-32.6,"peakDbfs":-7.2}},"sections":{"1-4":{"total":{"loudnessDbfs":-32,"peakDbfs":-13.5},"parts":{"bass":{"loudnessDbfs":-40.3,"peakDbfs":-28.9},"drums":{"loudnessDbfs":-36.9,"peakDbfs":-17.5},"vocals":{"loudnessDbfs":-34.9,"peakDbfs":-14.4}}},"5-8":{"total":{"loudnessDbfs":-32,"peakDbfs":-13.8},"parts":{"bass":{"loudnessDbfs":-40.2,"peakDbfs":-28.9},"drums":{"loudnessDbfs":-36.9,"peakDbfs":-15.7},"vocals":{"loudnessDbfs":-34.9,"peakDbfs":-14.4}}},"9-12":{"total":{"loudnessDbfs":-30.5,"peakDbfs":-13.1},"parts":{"bass":{"loudnessDbfs":-36.8,"peakDbfs":-28.1},"chime":{"loudnessDbfs":-38.9,"peakDbfs":-23.4},"drums":{"loudnessDbfs":-34.9,"peakDbfs":-18},"vocals":{"loudnessDbfs":-36.4,"peakDbfs":-14.3}}},"13-16":{"total":{"loudnessDbfs":-22.3,"peakDbfs":-3},"parts":{"bass":{"loudnessDbfs":-28.9,"peakDbfs":-17.5},"chime":{"loudnessDbfs":-118.2,"peakDbfs":-93.7},"drums":{"loudnessDbfs":-25.7,"peakDbfs":-8.8},"vocals":{"loudnessDbfs":-27.1,"peakDbfs":-7.2}}},"17-20":{"total":{"loudnessDbfs":-24.4,"peakDbfs":-7.8},"parts":{"bass":{"loudnessDbfs":-30,"peakDbfs":-18.3},"drums":{"loudnessDbfs":-25.7,"peakDbfs":-8.8},"vocals":{"loudnessDbfs":-138.5,"peakDbfs":-109.9}}},"21-24":{"total":{"loudnessDbfs":-24.2,"peakDbfs":-7.4},"parts":{"bass":{"loudnessDbfs":-29.1,"peakDbfs":-17.8},"drums":{"loudnessDbfs":-25.8,"peakDbfs":-8.9},"vocals":{"loudnessDbfs":-509.3,"peakDbfs":-480.6}}},"25-28":{"total":{"loudnessDbfs":-24,"peakDbfs":-7},"parts":{"bass":{"loudnessDbfs":-28.5,"peakDbfs":-16.8},"drums":{"loudnessDbfs":-25.7,"peakDbfs":-8.8},"vocals":{"loudnessDbfs":-655.2,"peakDbfs":-626.8}}},"29-32":{"total":{"loudnessDbfs":-30.1,"peakDbfs":-13.1},"parts":{"bass":{"loudnessDbfs":-36,"peakDbfs":-22.3},"chime":{"loudnessDbfs":-38.5,"peakDbfs":-22.8},"drums":{"loudnessDbfs":-34.8,"peakDbfs":-16.8},"vocals":{"loudnessDbfs":-36.1,"peakDbfs":-15.4}}},"33-36":{"total":{"loudnessDbfs":-21.1,"peakDbfs":-3},"parts":{"bass":{"loudnessDbfs":-29.4,"peakDbfs":-16.6},"chime":{"loudnessDbfs":-110.6,"peakDbfs":-81.5},"drums":{"loudnessDbfs":-25.6,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":-27.1,"peakDbfs":-7.2}}},"37-40":{"total":{"loudnessDbfs":-22.2,"peakDbfs":-5.5},"parts":{"bass":{"loudnessDbfs":-28.8,"peakDbfs":-16.9},"drums":{"loudnessDbfs":-25.6,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":-140.1,"peakDbfs":-110.4}}},"41-44":{"total":{"loudnessDbfs":-22.3,"peakDbfs":-5.6},"parts":{"bass":{"loudnessDbfs":-29.1,"peakDbfs":-16.9},"drums":{"loudnessDbfs":-25.6,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":null,"peakDbfs":null}}},"45-48":{"total":{"loudnessDbfs":-22.3,"peakDbfs":-5.8},"parts":{"bass":{"loudnessDbfs":-28.6,"peakDbfs":-16.9},"drums":{"loudnessDbfs":-25.7,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27.1,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":null,"peakDbfs":null}}},"49-52":{"total":{"loudnessDbfs":-30.2,"peakDbfs":-13},"parts":{"bass":{"loudnessDbfs":-37,"peakDbfs":-23.1},"chime":{"loudnessDbfs":-37.6,"peakDbfs":-21.8},"drums":{"loudnessDbfs":-34.8,"peakDbfs":-16.8},"stabs":{"loudnessDbfs":-64.3,"peakDbfs":-39.2},"vocals":{"loudnessDbfs":-36.4,"peakDbfs":-14.3}}},"53-56":{"total":{"loudnessDbfs":-20.3,"peakDbfs":-2.4},"parts":{"bass":{"loudnessDbfs":-25.9,"peakDbfs":-12.7},"chime":{"loudnessDbfs":-120.3,"peakDbfs":-94.8},"drums":{"loudnessDbfs":-25.6,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":-27,"peakDbfs":-7.2}}},"57-60":{"total":{"loudnessDbfs":-21.5,"peakDbfs":-5},"parts":{"bass":{"loudnessDbfs":-25.9,"peakDbfs":-10.4},"drums":{"loudnessDbfs":-25.6,"peakDbfs":-8.7},"stabs":{"loudnessDbfs":-27,"peakDbfs":-8.5},"vocals":{"loudnessDbfs":-141.7,"peakDbfs":-114.7}}},"61-64":{"total":{"loudnessDbfs":-26.5,"peakDbfs":-7},"parts":{"bass":{"loudnessDbfs":-41.2,"peakDbfs":-16.5},"drums":{"loudnessDbfs":-46.7,"peakDbfs":-17.7},"ending":{"loudnessDbfs":-38.3,"peakDbfs":-10.5},"stabs":{"loudnessDbfs":-62.6,"peakDbfs":-36.7},"vocals":{"loudnessDbfs":-27.1,"peakDbfs":-7.2}}}}}
7critic:
8  date: 2026-09-25
9  model: jev-1.13.0
10  method: rubric-1
11  art: 0.67
12  artRuns: [0.67, 0.68, 0.67]
13  criteria:
14    hook: 2.9
15    development: 3.5
16    structure: 3.4
17    concept: 4.1
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: "Research Jev's real use cases; jab at people using Jev where deterministic code would do better, such as game bots."
25    brief: "174 bpm drum and bass that keeps cutting to half speed. Every time \"the LLM is thinking\", the beat drops to 87 bpm under a Windows loading chime and \"Let him cook\". Then Jev answers in 70 ms and the full-speed beat snaps back. Vocoder hook: \"Noul. Choice. Score.\" A robot voice reads \"thinking, fast and slow\" in the intro."
26revisions:
27  - rev: 1
28    date: 2026-09-24
29    model: claude-opus-5-5
30    harness: claude-code
31    prompt: "174 bpm drum and bass that keeps cutting to half speed. Every time \"the LLM is thinking\", the beat drops to 87 bpm under a Windows loading chime and \"Let him cook\". Then Jev answers in 70 ms and the full-speed beat snaps back. Vocoder hook: \"Noul. Choice. Score.\" A robot voice reads \"thinking, fast and slow\" in the intro."
32    output: null  # overwritten by rev 2
33    art: 0.61
34    artRuns: [0.61, 0.61, 0.6]
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. Split it into named parts and name each 4-bar section with the sections allowed to follow it, so every think still leads into a drop and every drop still lands on Em; at each section Jev picks the next section, the move to play it with (as written, no drums, drums and bass, no bass), and how intense it is, and ends the song by choosing the outro, with a hard 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.67
42    artRuns: [0.67, 0.67, 0.67]
43  - rev: 3
44    date: 2026-09-24
45    model: claude-opus-5-5
46    harness: claude-code
47    prompt: "Give each part a level instead of on or off: at each section Jev sets the drums, bass, chord stabs, loading chime and vocals each out, back or full, and picks how the song moves into the section over the bar before it: straight in, an amen snare fill, a noise riser, or a one-beat dropout."
48    output: null  # overwritten by rev 4
49    art: null  # not scored: the song.js before rev 4 was recorded is rev 2's, not rev 3's
50  - rev: 4
51    date: 2026-09-25
52    model: claude-opus-5-5
53    harness: claude-code
54    prompt: "Stop the mix clipping: the master peaks at or under -1 dBFS, with a short kick and no 808 tail (the sub carries the pitch) and the break choked. Make the levels climb: intro under think under drop, the drop at least 6 dB over the think, each later drop louder than the one before, and drop 3 adds the reese an octave up. Play the loading chime on the real Windows chime, after \"Let him cook\", within about 6 dB of the half-time drums. Make \"Noul\" read as one word. The dropout before a drop is silent, the outro rises into the final hit without a false ending, no bass root sits under 41 Hz, the drop crash is a real crash, and each part level and energy step plays exactly what its label says."
55    output: song.js
56    art: 0.67
57    artRuns: [0.67, 0.68, 0.67]
58---
59
60# SYSTEM ONE — spec
61
62`song.js` is generated from this spec. Change the spec first, then the song.
63
64## Intent
65
66Jev as Kahneman's System One: fast, intuitive, typed judgment, set against
67chat models that "think". Facts (`~/brains/personal/technology/artificial-intelligence/jev/jev.md`, `noul.md`,
68`choice.md`, `score.md`): TypeSafe positions Jev explicitly as System One and
69NOT for System 2 reasoning; its three question primitives are Noul (yes/no
70probability), Choice (a label from options the caller wrote) and Score (a
712–10 level scale); responses take 70–500 ms.
72
73## Style
74
75- Drum & bass at 174 bpm, E minor: Em – C – G – D, one bar each. Every
76  drop and the outro start right after a multiple of 4 bars (bars 13, 33,
77  53, 61), so the hook always lands on Em.
78- The "thinking" sections are half-time
79  (a 87 bpm feel) made with patterns: `setcps` stays constant, because the
80  section masks count cycles.
81- Full-speed sections: two-step kick, rolling break, eighth hats, reese
82  bass over a sine sub.
83- Half-time sections: kick on 1, snare on 3, quarter hats, no amen; the
84  reese held on E and filtered down; the loading chime.
85- **The loading chime is a Windows system sound**, as the brief asks:
86  `chimes.wav` from `C:\Windows\Media` (`samples/sowinchime`), played with
87  `note()` so each think still ends its own way: think 1 resolves to E,
88  think 2 is busier and resolves to E, think 3 stops on F# and never
89  resolves. It sits within about 6 dB of the half-time drums, and its
90  phrase starts after "Let him cook" (the first bar plays only its last
91  eighth). Revisions 1–3 had swapped it for a triangle synth; this puts
92  the brief's sound back.
93- Drop 2 adds short chord stabs and 16th hats; drop 3 adds the reese
94  doubled an octave up on top of drop 2.
95- **A short kick, no 808 tail: the sub carries the pitch.** The kick is
96  `bd:3` alone (an `808bd` rang 3 s at G1 against every chord). The break
97  is choked (`.cut(1)`), so no amen slice outlasts its 16th.
98- **No bass root under 41 Hz**: the roots are E1 C2 G1 D2, with C and D
99  voiced above E, so the bass holds up on laptop speakers.
100- The crash is `hh27:1` (Dirt-Samples' `cr` is a ride).
101- **The master peaks at or under −1 dBFS**, set by a master `postgain`
102  chosen by measurement (`tools/measure`), after the parts are balanced.
103
104## Structure
105
10664 bars (~1:28).
107
108| Bars | Section | Contents |
109|---|---|---|
110| 1–8 | Intro | Robot voice: "Thinking, fast and slow"; filtered break |
111| 9–12 | Think 1 | Half-time; "Let him cook"; the Windows chime, resolving to E |
112| 13–28 | Drop 1 | Snaps back to full speed on "Noul. Choice. Score."; instrumental after the hook |
113| 29–32 | Think 2 | Half-time; a busier chime, resolving to E |
114| 33–48 | Drop 2 | Drop 1 plus chord stabs and 16th hats |
115| 49–52 | Think 3 | Half-time; the chime stops on F#, never resolves |
116| 53–60 | Drop 3 | Drop 2 plus the reese an octave up; shortest |
117| 61–64 | Outro | "Noul. Choice. Score." once more, a riser over bar 62, the final hit on bar 63; nothing reads as the end before the hit |
118
119**Levels climb.** Intro < think < drop, with each drop at least 6 dB over
120the think before it. Drop 2 is at least 1.5 dB over drop 1 (its stabs and
12116th hats), and drop 3 is over drop 2 (the reese an octave up). Measured
122per section with the fallbacks (as written), 2026-09-25, in dBFS: intro
123−32.1, think1 −30.7, drop1 −23.6, think2 −30.3, drop2 −22.0, think3
124−29.7, drop3 −21.0; the master peaks at −2.9, where it peaked at +8.5
125before.
126
127## Vocals
128
129- Robot voice (plain `speak`, not vocoded): "Thinking, fast and slow."
130- Vocoder hook, on the bar each drop lands: "Noul. Choice. Score." — Em.
131  **"Noul" must read back as one word** from whisper `small.en` and
132  `medium.en`, both dry and in the mix, never two words: rendered as "Nool"
133  it read back as "Know all" / "No all", which says Jev is a know-all, the
134  opposite of TypeSafe's narrow System One. SAPI's own reading of "Noul"
135  comes back as "Newel" / "Null" (see `samples/README.md`).
136- Meme: "Let him cook" on the first bar of each think section ("Let him cook
137  now" in think 2).
138
139## Jev in the booth
140
141Jev arranges the song as it plays, as two jevs declared at the top in
142TypeSafe's own shape (`jev({ state, questions })`, `website/src/jev/`),
143both given the song as state (subject, tempo, key, chords, lyrics):
144
145- **`formJev`** asks one choice: which **section** plays next.
146- **`djJev`** asks, once that is decided, how much of each part plays
147  this section (the drums, the bass, the chord stabs, the loading chime, vocals: each **out**, **back** or **full**, a
148  score), how the song moves **into** it (a choice), and a score for the
149  section's **energy**. Questions in one request cannot see each other's
150  answers, so it is a second request, told the section just chosen
151  (`after: { section }`).
152
153Both are asked every 4 bars (`.every(4, …)`), and the answers are
154composed in ordinary Strudel at the bottom: `walk` holds the form's rules,
155each part plays at its level (`part(name, pat)`), the transition plays
156over the last bar before each section, and `energy.score` scales the
157velocity.
158
159**The form.** A section may be followed only by these:
160
161| Section | Bars as written | May be followed by |
162|---|---|---|
163| `intro` | 1–4 | intro2 |
164| `intro2` | 5–8 | think1 |
165| `think1` | 9–12 | drop1 |
166| `drop1` | 13–16 | drop1b |
167| `drop1b` | 17–20 | drop1c, think2 |
168| `drop1c` | 21–24 | drop1d |
169| `drop1d` | 25–28 | think2, think3 |
170| `think2` | 29–32 | drop2 |
171| `drop2` | 33–36 | drop2b |
172| `drop2b` | 37–40 | drop2c, think3 |
173| `drop2c` | 41–44 | drop2d |
174| `drop2d` | 45–48 | think3, think2 |
175| `think3` | 49–52 | drop3 |
176| `drop3` | 53–56 | drop3b |
177| `drop3b` | 57–60 | outro, think2, drop2 |
178| `outro` | 61–64 | (the end) |
179
180Every think leads only into its own drop, so the hook ("Noul. Choice.
181Score.") still lands on the first bar of a drop, and on Em: sections start
182on the 4-bar chord cycle wherever they play. Jev can cut a drop short into
183the next think, or go back from the last drop to think again. These rules
184are code (`walk`), not Jev: each request offers Jev only the sections
185allowed next. The written order is always allowed, and it is what plays
186when Jev can't be reached. The song ends when Jev picks the outro, whose
187final hit always lands. The cap is 24 sections (96 bars, about 2:12) rather
188than 16: sixteen 4-bar sections are only the written length, which would
189leave Jev no room to repeat anything.
190
191**The parts.** Each question says what the part is and where it plays as
192written, so Jev can drop parts to build tension or make space, pull them
193back to let others speak, and bring them in full for the payoff. A part
194that is out is silent for the whole section; otherwise its velocity is
195scaled by its level, in whole steps (the score is rounded first, so a
1961.5 plays as full, not between): **out = 0, back = .5, full = 1**. It
197keeps its own masks, so vocals still appear only where the structure
198table puts them. Each part plays on its own orbit, named for its
199question (`.orbit('drums')`, …), so the browser's meter hears each part
200alone. The riser into the end and the last kick, crash and Em chord always
201land, on their own orbit (`ending`). When Jev can't be reached, every part plays in full.
202
203**Into the next section.** Over the last bar of each section, the next
204section's `into` answer plays: a **cut** (nothing), a **fill** (the song's own amen break stuttering on its snare and last slices across the second half of the bar, on the drums' orbit),
205a **riser** (white noise swelling up through an opening high-pass, on its
206own orbit, `into`), or a **dropout**, where every part stops for the
207last beat. The fill follows the drums level of the section whose last bar
208it plays in (out: no fill; back: half velocity), since that is the
209section it sounds and is metered in. Out of a think, the dropout silences
210everything for beat 4: the think's held bass stops after beat 3 and the
211chime's last notes decay before beat 4, so the full-speed beat snaps back
212out of a real gap. The form's ending has no next section, so nothing plays over
213its last bar and its last beat is never cut. The opening has no section
214before it, so it has no transition: `into` is fixed to a cut there
215(`allow`) and not asked. When Jev can't be reached, it cuts.
216
217**A little chance.** The section is sampled from Jev's
218probabilities at temperature 0.7 (`sample`), so two plays of the song can
219take different paths; the strip shows Jev's top pick beside the one
220sampled. A close call between
221sections is where sampling matters most, so there is no confidence
222threshold: an unsure Jev still picks, and the written order plays only
223when Jev can't be reached.
224
225**Energy** is a four-step ladder, in whole steps like the levels: held
226back (about half volume) .55, steady (well under full) .70, driving
227(nearly full) .85, all out (full volume) 1.0. It scales every part's
228velocity together, on top of each part's level, so the mix keeps its
229balance.
230
231- Bars 1–4 are always the intro. Jev sets its levels and energy before
232  the song starts. The opening has no transition.
233- Each request carries the song's state (subject, tempo, key, chords,
234  lyrics), every answer so far, how loud each finished section measured in
235  the browser, where the song is in the form and the sections left before
236  the cap, and the listener's 🔥/😴 reactions.
237
238## Constraints
239
240- Plays from bar 1 and ends, on the outro or at the 24-section cap; never
241  loops. Sections are absolute-cycle masks, so playback starts from
242  stopped.
243- Structured: patterns vary by section and by Jev's answers. The only
244  chance is the next section, sampled from Jev's probabilities at
245  temperature 0.7; no pattern is chopped or varied at random.
246- No sustained background pad; harmony comes from rhythmic parts.
247- Vocals only where the structure table puts them; drops are instrumental.
248- Meme clips are the real audio (myinstants, or YouTube via yt-dlp), cut at
249  word timings measured with whisper.cpp. Vocoder lines are made with
250  `speak` + `vocode` on the chord they land on, and checked by transcribing
251  the result with whisper.cpp. Everything lands in `samples/<sound>/` with
252  a provenance row in `samples/README.md`.
253- Samples load from `samples('jev-samples/strudel.json')`; drums from
254  `github:tidalcycles/dirt-samples`.