SPEC.mdpreviewSPEC.mdsource219 lines · 12.0 KB · raw

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) and response_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:1 tick.
  • 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.

SectionBarsWhat plays
intro1–2"Five letters. Six tries.", the full ten-note scan, hats
3–8groove and stabs; bar 5: "J. E. V. doesn't write. J. E. V. picks."
guess1the scan: a note per bank asked
2the finalists; "Choose the next fragment." on guesses 1, 3 and 5
3the guess spelled, a letter a beat (Fadd9)
4the tiles, alone over the bass
5–6the row as a riff (green its tone twice, yellow sliding in, grey rests) over Am7, Fadd9
7the tiles flip: a blip a beat, high green, mid yellow, low grey
8turnaround and snare roll, on the dominant
end (won)1"End the response now." on a C hit and crash
2–8the 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
2a grey row: five ticks
3–4the word revealed: spelled, then its row lit green over A minor
5–8Am 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, and secret, 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's response_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):

SectionWritten atMay be followed by
introbars 1–8any slot, end
b1…b10bars 9–16any slot, end
endbars 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.en and medium.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 from github:tidalcycles/dirt-samples. New sounds are prefixed ag.
  • The master postgain keeps the peak at or under −1 dBFS, set by measurement (tools/measure); not yet measured.