title: ALL GREEN theme: jev status: made song: song.js critic: date: 2026-09-26 model: jev-1.13.0 method: rubric-1 art: 0.68 artRuns: [0.68, 0.68, 0.68] criteria: hook: 3.1 development: 3.4 structure: 3.2 concept: 4.3 originality: 4 craft: 2.3 ideas:
- date: 2026-09-26 model: claude-opus-5-5 harness: claude-code approved: "lfg" brief: "JevLM cheats at Wordle. Jev only picks among options and never writes; Krug's JevLM-Open turns picking into writing, one next-fragment choice at a time, asking every bank of up to 255 options and then the finalists, with a frequency penalty against repeats. Each guess is one such choice: the state is the board so far, and the options are only the answer words still consistent with every clue, so the cheat is in the option list. The scan is audible: before each guess a glassy FM arpeggio plays one note per bank asked, shortening as the clues narrow the list. Tiles are rhythm in 5/4, one per beat: green a kick and a chord tone that locks in, yellow an off-beat snare, grey a dry muted tick. The harmony resolves as greens accumulate, from an unresolved sus chord to the tonic on an all-green row. An all-green row is followed by JevLM's end marker, "End the response now", and the song ends on it; six misses end on a grey row and the word revealed. Bright chiptune synth-pop, about 120 bpm, in 5/4." revisions:
- rev: 1 date: 2026-09-26 model: claude-opus-5-5 harness: claude-code prompt: "JevLM cheats at Wordle. Jev only picks among options and never writes; Krug's JevLM-Open turns picking into writing, one next-fragment choice at a time, asking every bank of up to 255 options and then the finalists, with a frequency penalty against repeats. Each guess is one such choice: the state is the board so far, and the options are only the answer words still consistent with every clue, so the cheat is in the option list. The scan is audible: before each guess a glassy FM arpeggio plays one note per bank asked, shortening as the clues narrow the list. Tiles are rhythm in 5/4, one per beat: green a kick and a chord tone that locks in, yellow an off-beat snare, grey a dry muted tick. The harmony resolves as greens accumulate, from an unresolved sus chord to the tonic on an all-green row. An all-green row is followed by JevLM's end marker, "End the response now", and the song ends on it; six misses end on a grey row and the word revealed. Bright chiptune synth-pop, about 120 bpm, in 5/4." output: song.js art: 0.68 artRuns: [0.68, 0.68, 0.68]
ALL GREEN — spec
song.js is generated from this spec. Change the spec first, then the song.
Intent
Jev (TypeSafe's jev-1.13.0) is not a language model: it answers choice,
score and noul questions over options the caller writes, and never
generates a token. Krug's JevLM-Open (https://github.com/Krug2/JevLM-Open,
read at 84272bd; brain page technology/artificial-intelligence/jev/ecosystem/jevlm.md)
makes it write anyway: each decoding step is one choice, next_fragment,
with the state {user_prompt, response_prefix}, JevLM's instructions
("Choose the NEXT text fragment to append…"), literal fragments as options
and an end marker, "End the assistant response now; append no text." Its
4,000-unit vocabulary is over TypeSafe's 255-option limit, so every step
asks each bank of at most 255 (vocabulary.py, banks()), then the
finalists: each bank's pick plus the end marker (multipass.py).
This song does that to Wordle, and cheats: the options for each guess are only the answer words that still fit every row of tiles. Jev picks, the code decides what may be picked. Credit: Krug2/JevLM-Open.
The word list
Wordle's 2,309 answer words, from the npm package wordles by Stuart P.
Bentley, https://github.com/stuartpb/wordles, wordles.json at commit
6072f5b3 (retrieved 2026-09-26). Its package.json licence is "PUBLIC
DOMAIN" and its README says lists of common English words "are commonly
considered public domain"; that is the packager's dedication (the list was
taken from The New York Times' game code). The song stores it sorted and
front-coded (a digit for the letters shared with the word before, then the
rest), 7.9 KB, decoded when the song is evaluated.
How a guess is made (JevLM, faithfully)
- One guess is one decoding step: a choice with JevLM's instructions,
adapted in one sentence (an option is a whole five-letter guess, where
JevLM's are JSON-quoted fragments). The state is JevLM's:
user_prompt(play Wordle, what the tiles mean) andresponse_prefix, the board so far, a row per guess as Wordle shares it (CRANE ⬛🟨⬛⬛🟩). - The cheat: the candidates are the words that would have given every row its tiles (Wordle's rule for repeated letters included), less the words already guessed.
- Banks: the candidates are split as JevLM splits its vocabulary, into as few banks as hold them at 254 words plus the end marker each, sizes differing by one at most. Guess 1 has all 2,309, so ten banks of 230 or 231; a couple of clues usually leave one bank; after an all-green row there are none. Every bank is one question in one request (the relay takes 64 KB; JevLM packs four a request against its own 48 KB guard), and a bank with no candidates is not asked.
- Finalists: a second request, asked once the banks have answered, whose
options are each bank that chose a word and the end marker, as JevLM's
finalist pass. Its options are the banks by number, and the words they
chose are in its state (
decidedThisSection), because a question's options are written once per song. - No repeats: JevLM's frequency penalty (0.7) only discourages a repeat. Here none is possible: a wrong guess never fits its own row, and the answer is gone once it is guessed, so the penalty has nothing to do.
- Greedy, as JevLM: Jev's top pick, never sampled.
- The end marker is the finalist option "End the assistant response now; append no text." After an all-green row no word is left, so the end marker is the only finalist, played without asking. After six guesses the form's cap leaves only it too. Jev may also choose it earlier, as it may in JevLM, and the song ends there.
Today's word
The answer must be the same for everyone at a listening party and in a
replayed performance, so it is a decision: at the opening, before the song
starts, Jev sets the puzzle, picking from every ninth answer (255 words,
the choice limit) with the instruction "You set today's Wordle. Pick the
secret word: a common five-letter word, fair to guess in six tries." The
pick is drawn from Jev's probabilities at temperature 2 (sample), so
games differ. It is recorded like every answer, so a replay and a party's
guests play the same word. The solver never hears it: the question is
forget-ten from the history Jev is sent, is not in the finalists'
after, and its options are ids (s000…s254), so the booth does not
spell it. When Jev cannot be reached the word is the first of them,
"abbot".
One word a row
A section plays on what it began with: the song reads every decision as it
stood on the section's first cycle (first() in song.js), and the board
for later guesses is rebuilt from those, so the tiles, the harmony, the
next guess's candidates, a replay and a party's guests always agree.
Style
- Bright chiptune synth-pop in 5/4 at 120 bpm, key of C. One cycle
is one bar of five beats (
setcps(120/60/5), 2.5 s a bar), so a five-letter word is one bar: a letter a beat, a tile a beat. Every pattern is written in eighths, ten to the bar, felt 3+2: kick on 1, the and of 2, and 4; snare on 3 and 5. - Pulse-wave chord stabs, a triangle bass in eighths, 8-bit hats
(
sid:7), a kick and snare doubled with the SID snare, no sustained pad. - The scan: a glassy FM arpeggio (sine, FM index 2.5, harmonicity 3.5), an eighth note per bank asked, climbing C D F G A: ten notes fill guess 1's bar, one note is a late guess, none after an all-green row. The next bar plays the finalists, a note each, falling from the top.
- The tiles, a beat each: green is a kick and its tone of the tonic
chord (C E G C E, by position); yellow an off-beat snare and the tone
beside its place (D F A D F), a note in the wrong place; grey a dry
click:1tick. - Harmony waits on the greens: the home chord is Csus4 until three greens, Csus2 until five, C major on an all-green row; the cadence is Gsus4, then G7sus4, then G7 into the end. The third, E, is only ever heard in a green tile or on the win. Since every candidate keeps the greens already found, greens never go down.
Structure
Sections of 8 bars (20 s). Up to 8 sections: 64 bars, 2:40.
| Section | Bars | What plays |
|---|---|---|
| intro | 1–2 | "Five letters. Six tries.", the full ten-note scan, hats |
| 3–8 | groove and stabs; bar 5: "J. E. V. doesn't write. J. E. V. picks." | |
| guess | 1 | the scan: a note per bank asked |
| 2 | the finalists; "Choose the next fragment." on guesses 1, 3 and 5 | |
| 3 | the guess spelled, a letter a beat (Fadd9) | |
| 4 | the tiles, alone over the bass | |
| 5–6 | the row as a riff (green its tone twice, yellow sliding in, grey rests) over Am7, Fadd9 | |
| 7 | the tiles flip: a blip a beat, high green, mid yellow, low grey | |
| 8 | turnaround and snare roll, on the dominant | |
| end (won) | 1 | "End the response now." on a C hit and crash |
| 2–8 | the chorus: C F Am G, the all-green riff, "J. E. V. doesn't write. J. E. V. picks.", "Under a tenth of a cent, a game.", a last C | |
| end (not won) | 1 | "End the response now." on Csus4 |
| 2 | a grey row: five ticks | |
| 3–4 | the word revealed: spelled, then its row lit green over A minor | |
| 5–8 | Am F Dm G, "Under a tenth of a cent, a game.", a last Am |
Jev in the booth
Two jev()s, asked every 8 bars:
bankJev:bank1…bank10, each a choice over every answer word and the end marker, narrowed per request (allow) to its bank of the candidates and the end marker, andsecret, asked only at the opening. Requests come one per section, in order, so the song counts them to know which section each is for (planSegment); before each, it writes the board into the state'sresponse_prefix.nextJev:next, the finalists, asked after the banks (after: { bank1, … }), narrowed to the banks that chose a word and the end marker. It is the form.
The form (walk, max 8):
| Section | Written at | May be followed by |
|---|---|---|
intro | bars 1–8 | any slot, end |
b1…b10 | bars 9–16 | any slot, end |
end | bars 17–24 | (the end) |
A slot is a guess, named for the bank whose word it plays. As written a
slot is followed by end, so a finalist question left with only the end
marker ends the song; the cap of 8 sections is the intro, six tries and
the end. The slots all return to each other: that loop is the game, and
the cap (six tries) bounds it.
Without Jev it plays as written: the intro, one guess (bank 1's first word, "aback", the as-written decoder) against "abbot", and the end. A finalist answer that arrives after its section began keeps the section it began with, which after guess 1 is the end: a game Jev cannot keep up with ends.
Cost and rate. Guess 1's banks are one request of about 44 KB, about
11,000 tokens at TypeSafe's $0.042 a million input tokens (JevLM's
config.py), about $0.0005; the finalists and later guesses are a few KB
each. A game is under a tenth of a cent. Two calls a section, 20 s a
section: 6 calls a minute.
Constraints
- Plays from bar 1 and ends on the end marker; never loops.
- Vocals only where the structure table puts them. Every line is SAPI
(Microsoft David) through the vocoder on C–G, and read back by whisper
small.enandmedium.en(samples/README.md); the letters read back correctly laid out as the song spells them. - Samples load from
samples('jev-samples/strudel.json'); drums fromgithub:tidalcycles/dirt-samples. New sounds are prefixedag. - The master
postgainkeeps the peak at or under −1 dBFS, set by measurement (tools/measure); not yet measured.