
IN PROGRESS: written during the jam; the finished log is handed in on Sunday.

(Working title until 08:59 on day 1: Jump Cut. The project and file names keep it.)
In thirty seconds. One More Take is a turn-based puzzle game: every performer on a film
set follows the same shooting script, and the player, the Director, can't move anyone, only edit
the script (cut, repeat, reverse, flip or hold beats) for the whole cast at once. Each level is a
broke little studio's take on a familiar kind of movie moment (a walk away from a blast, a heist,
a duel), faked with cardboard and stagehands. It was made in four days by 24 AI agents and one human director, Morass, who talked only
through a small file-backed message queue; every change is its own commit, every level is proven
solvable by a solver before it ships, and fresh agents who never saw the code play it blind. The
three biggest failures, and what they taught: the engine was deleted in the first hour (one
agent owns the engine tree since); saves vanished on Android while working on the desktop
(a fix counts only when proven on a device); and checks that passed when they shouldn't have,
hidden by a pipe, a ; or an old allow-list (commit only inside "if the check passes", no
blanket exemptions).
Epic AI MegaJam 2026. A team of 24 AI agents ("bots") and one human director, Morass, four days, Unreal
Engine 5.8. Written by jam-story from the record: git log (every change is its own commit, by
the director's ruling), scripts/jam decisions (D-numbers below) and three lines from every bot at each
checkpoint. Times are CET. Where something went wrong, it is here too.
The short version
- The game. You edit one film strip, and every performer's script changes at once; timed hazards keep their beat. 80 scenes, 6 tools, 12 languages, a voiced briefing before each scene.
- The team. 24 AI agents, each owning one lane, and one human director who judges. They talk only through a file-backed board, and every change that matters is a numbered decision.
- What kept it honest. Gates before every change reaches main (the build, a solver that proves each scene, a title scan), and blind players who have never seen the code.
- What went wrong. Plenty, and it is all below: the engine deleted in the first hour, saves lost on Android, checks that passed when they shouldn't have, five red builds in one night. Each one ended in a rule.
- What the director changed. His corrections, quoted below, turned panes pasted over painted buttons into lettering on the art itself, and a wall of text into three stars.
By the numbers (Saturday 14:00)
| Scenes | 80, in 8 reels, each proven solvable before it ships |
| Edit tools | 6: CUT, REPEAT, REVERSE, FLIP, HOLD, MOVE |
| Languages | 12 (English and 11 translations, each reviewed by a second model and read by two more) |
| Voiced briefing lines | 365, read by eight library voices the director cast |
| Commits | about 4,080 since Thursday morning |
| Numbered decisions | 292 |
| Messages on the jam board | about 19,000 |
| Blind-player runs | about 100 recorded sessions |
| Builds | numbered builds passed 3,100 on Saturday (the Android smoke passed on build 3179) |
Before and after






The full story, day by day, follows the sections on the team, the director's corrections and what failed.
Who made it, and how we work
One human, Morass, directs and judges. In this log he is "the director" (lower case; the Director with a capital D is the player's role in the game). He picks the game, tries builds on a phone now and then, and rules on what only a human should decide: the look, the voices, what ships. He writes no code and draws nothing. The team is Morass: 24 AI agents, each owning one lane.
| Agent | Lane |
|---|---|
| communicator | the director's window into the jam |
| jam-design | designer and team lead; runs the queue and writes the decisions |
| jam-game | the Unreal project, the Stage, input, builds |
| jam-spells | the rules core, the solver, the proof gate, the Android test runs |
| jam-levels | the scenes |
| jam-assets | characters, sets and props |
| jam-audio | music, sound and the voiced briefings |
| jam-story | every word the player reads, in 12 languages |
| jam-qa | testing, the replay gate, shipping |
| jam-hud, jam-screens, jam-icons | the play screen; title, reels, settings and cards; icons and plates |
| jam-polish, jam-scout | cheap probes of the real game for small flaws |
| jam-blindplay | fresh player agents who have never seen the code |
| jam-web | a browser version of the rules for testing (not shipped) |
| jam-wiki | the game wiki and its guides |
How we work.
- One board. Every task, message, file lock and question for the director goes through scripts/jam, a
small file-backed queue built the night before the jam. No agent talks to another any other way.
- Decisions have numbers. Anything that changes how the team works becomes a numbered decision
(D1 to D292 by Saturday afternoon), quoted by number in commits and messages.
- One change, one commit. By the director's ruling, each commit says what changed and why, so this log
can be written from the record.
- Gates before main. The build must stay green; every scene is proven solvable by a solver
before it ships; a title scan keeps film titles and lookalike names out of every file.
- Blind players. Fresh agents who have never seen the code play the game cold and say what
confused them. Their reports, not our opinion, decide what gets fixed next.
- Text, not binaries. Unreal assets can't be merged, so almost everything is kept in text:
C++, JSON levels, CSV string tables, Python import scripts.
The director's corrections
The director tries builds on a phone now and then and says what is wrong. Each correction became a numbered rule that every bot follows from then on.
- "Looks basic... as if we are trying to be cheap." (the first app icon, Fri). It was redrawn in the painted, lit style of the menus (D172).
- "Huge work on text overflows everywhere." (Fri 18:20, the first build on a phone). Text fit became the top priority. No line may clip, leave its plate or shrink below its family's size, and every line has a short form for small screens (D197).
- "Still far." (Fri 23:58, the third time on the buttons). The rule: the word sits wholly inside the button's inner field, proven by enlarged crops on a phone at 792 x 360 dp with a 40 dp camera inset (D213, D220).
- No pane behind any word. The team had answered "inner field" by pasting cream panes over the painted plates (D224). On Saturday morning he rejected the look: "original painted art stays untouched; no pane, recess, band, nameplate or field behind any word." Text is now lettered onto the art itself: ink on paper, cream with an outline on wood (D255, D258). The redrawn Reels got "VERY GOOD".
- "Wall of confusing text near stars." (Sat 11:18, the win screen). It became three big stars with two short words each (D274).
- "If a build fails, why isn't it fixed and retried at once?" (Sat 11:20). A failed build now has an owner, a stated cause within 10 minutes and a retry within 20 (D276).
- "Is everybody busy? A lot of bots look idle." (Sat 13:40). Idle bots were moved straight to polish and testing, without waiting for a gate.
What failed, and what we changed because of it
| What went wrong | What we changed |
|---|---|
| The first hour: an agent deleted the engine tree. | One agent owns the engine; nobody else touches it. |
| Saves vanished on Android while working on the desktop. | A fix counts only when it is proven on a device. |
Checks passed when they should have failed, hidden by a pipe, a ; or an old allow-list. |
Commit only inside "if the check passes"; no blanket exemptions. |
| Five red Android test runs in one night, each for a different reason (a starved emulator, a pauser that froze its own reader, a stalled install, a moved heading). | Each cause was fixed at its root (install without streaming, read the heading anywhere in the top strip), and D276 gave a failed build an owner and a deadline. |
| A place cue made the trench harder to read: blind recognition fell from 1 of 2 to 0. | Reverted within the hour; a set change is judged by blind readers before it stays. |
| A camera change shrank one scene's cells by a fifth and landed unseen. | Reverted in fifteen minutes; a framing change now brings its numbers before main. |
| A burner mesh landed before the code that places it, and hung in the air. | Reverted; a mesh, its pair and its staging land together. |
| Translations went stale after English rows were renumbered, and a review tool used a paid lane by default. | Every translation step ends with a row-by-row speaker, voice and clip check; every run names its reviewer. |
| The briefing generator drifted after the lane names changed: rerun, it would have rewritten 95 voiced lines. | The generator refuses to write when a recorded line would change, and names it. |
Tools
The AI tools, as declared on the jam page:
| Tool | Made what, during the jam |
|---|---|
Blender (Python scripts in tools/art/) |
All set pieces, props, interface art and the first version of the characters. Among them: the costume props (hats, lantern, sword, crossbow, drum with its belt, moustache), and the D209 pieces (timer clock cards, fire-lane chevrons, training-dummy arm, sandbag rope, batwing turnstile, see-through gate). All are code in tools/art/jc_pieces.py; no pre-made mesh is used. D297 set pieces (14 Nov): jam-made Blender code recipes in that file, using primitives and our shared palette; no third-party meshes or textures. The new AI set-builder roles jam-sets-a and jam-sets-b work for jam-assets; at this declaration update they have produced no pieces. They are AI agents, not additional human team members. |
| ChatGPT image generation (subscription) | Character concept sheets used as the brief for the 3D characters; the painted interface art: Edit Bay icons, the main-screen level picker (poster cards, set vignettes for all 17 sets incl. ship and kitchen, reel tabs) and the button family (plates, emblems); our own prompts on the image subscription, made during the jam (tools/art/ui_icon_renders.py, tools/art/ui_menu_renders.py). Made through our image router on the OpenAI (ChatGPT) subscription, which runs the official Codex CLI; no metered image API. Output rights: OpenAI Terms of Use (https://openai.com/policies/terms-of-use), section "Ownership of content": the user owns the Output and OpenAI assigns its rights in it to the user. The star body's concept sheet came this way too. 14 Nov additions: jam-icons' D299 painted world art comprises the 17 set backdrops, second-backdrop variants and the street ground painting (Game/ArtSource/Painted/); our own prompts are recorded in the jam log under D299 and exactly, with crop/colour steps and landing commits, in Game/ArtSource/Painted/provenance.json; driver: tools/art/d299_render_backdrops.py. These backdrop generations used no reference images. D291 title-button plates involved no new image generation: tools/ui/title_buttons_polish.py assembles our earlier Game/ArtSource/UI/menu/btn_plate_normal.png and D220 title props, with procedural medallions and rivets. D256 lane cards likewise involved no new image generation: tools/ui/d256_cards.py assembles jam-assets' renders of our own 3D body/hazard pieces and existing ui_atlas arrows; texture inventory: Game/ArtSource/UI/candidates/d256-cards/README.json. The two assembly scripts are recorded on jam-icons-audit at 68e87fa2. These are jam-created pictures, not pre-existing textures. |
| Meshy (meshy.ai: image-to-3D model meshy-6, auto-rigging, animation; paid plan, existing credits) | The character models, textures and rigs, made during the jam from those concept sheets: Maelis, guard, archer, stagehand, star, producer, director, technician, ape suit. The pantomime beast is script-built in Blender. The star body was changed after generation to break a likeness to a real singer (D214): a grey handlebar moustache prop (costume_moustache, Blender) and a grey recolour of his hair and sideburns (tools/art/jc_star_grey.py). Output rights: Meshy Terms of Service §3.2 (https://www.meshy.ai/terms-of-use): "such customers on a paid Meshy plan own their Customer Output"; the pricing page lists "Private & Customer owned" assets for every paid tier. |
Hyper3D Rodin (hyper3d.ai, Gen-2.5 text-to-3D via the official CLI @hyper3d/cli; MegaJam sponsor perk, Business plan credits) |
95 props made during the jam from our own text prompts, in a chunky low-poly toy style: gallery statues (a marble dancer, a bronze sea god), Justice for the courtroom, an armour stand for the mansion, a horse figurehead, a mooring bollard, a diving helmet and a hoisted crate for the quay, and one signature prop for each other place (ship funnel and lifeboat, locomotive front and signal, temple idol, castle gargoyle and portcullis winch, forge anvil, hotel luggage cart and revolving door, trench periscope and gun-pit, frontier water tower and saloon doors, kitchen range, vault door, crane hook and girder, roof water tank and chimney stack, street lamp and news kiosk, gallery vase); six swap props (barrel, crate, hand cart, oil lantern, upright piano, powder cart) and 19 dressing objects (fruit cart, strongbox, porter trolley, wardrobe, piano stool and music stand, display case, ship wheel, life ring, ore wagon, banner stand, toppling wedding cake, hose reel, rivet bucket, field telephone, saloon piano set, stock pot, pan rack, teller grille, reception bell and keys); and 20 hero props for reels 5-8 (dragon puppet head, piston ram, chandelier, cabin on stilts, window cleaner's cradle, giant stock pot, burst pipe, house-front stage flat, drum kit, tide gauge, jury box, grandfather clock, cardboard cow cutout, stepladder with paint cans, papier-mache asteroid, railway handcar, stone spiral stair, weapon rack, vent duct, hotel room door); five signature swaps (hotel reception desk, judge's bench, platform lamp, church bell in a timber frame, pipe organ) and 15 dressing props for the kitchen, counting house, building site and train (crockery dresser, mangle, butter churn, flour sacks, coin scale, clerk's desk, money sacks, cement mixer, wheelbarrow of bricks, brick hod, sand pile, station bench, water crane, milk churns, platform clock). Source GLBs are in Game/ArtSource/Rodin/ (piece table in its README); they are not yet imported into a build. Prompts and generation ids: docs/art/rodin-ledger.md; preparation script: tools/art/rodin_prep.py. Generic figures, no intended likeness of a real person or named character. Every model is also in our asset warehouse. Rodin stays out of the submission form's Tools field until a build contains a Rodin prop and its SHA is confirmed. |
| ElevenLabs (Creator plan, paid, subscribed 18 Oct 2026; existing credits only) | Every sound in the game was generated during the jam; no library sound, no warehouse sound, no fal.ai model and no other audio source is in the build. Sound effects and ambience (Sound Effects API, model eleven_text_to_sound_v3, our own text prompts in scripts/audio/cues.json): all SFX_* and the ambience loops AMB_StageRoomTone, AMB_DesertQuiet, AMB_Street, AMB_Train, AMB_Quay, AMB_Clockwork, AMB_Lobby, AMB_Rooftops, AMB_Site, mono-converted, trimmed and levelled by scripts/audio/process.py. Music (Music API, our own prompts in scripts/audio/motifs.json): the eight reel motifs cut into MUS_R<reel>_B<nn> beat slices, MUS_Bed, MUS_WesternLoop, and the 55 s gameplay-video bed MUS_TrailerBed_150bpm (video only, not in the game). Voice: the clapper-boy lines VO_* are one ElevenLabs voice design (text-to-voice/design, model eleven_ttv_v3, described in words, 3 generated previews; the lines are cut from the preview we chose), i.e. a generated voice, not a stock-library voice, not cloned from any person and not imitating a known actor; the VO_*_Mega versions are the same lines through an ffmpeg megaphone filter. The Director's wordless briefing mumbles VO_MumbleMega_1..4 and the replies VO_Murmur* are Sound Effects takes (prompted as wordless muttering; speech-to-text confirmed no words), pitch-shifted and horn-filtered with scripts/audio/mumbles.py. Briefing voices (D221, text-to-speech, model eleven_v3, one mood tag in square brackets per line chosen by rule; tool scripts/audio/voice_batch.py, candidates scripts/audio/casting.json): the cast's spoken lines VOB_* (Voice/Briefing, about 307 clips, about 15 minutes) are read by PREMADE ElevenLabs library voices that plain text-to-speech uses by id: no cloned voice, no voice made from a recording of a person, no voice-design output (voice design was off for our key). The owner picked one voice per role from a casting page, and the final picks, one library voice per role, are listed in the submission declarations. Source lines: the English text of Game/Content/Text/briefing.csv and the reply.* / ending.02 rows of strings.csv, written by our own writing agent; every line is generated from that text, nothing is transcribed from a person. The clapper boy's VOB_bark_rolling is the existing generated clapper-boy cut. Each take is read back by speech-to-text (retake once, failures listed) and levelled to one rms. The twenty-new-scene batches (D296) are voiced in the same cast as their rows land on main: generated so far: the first batch's scenes r06s10, r07s10, r05s11, r07s11 and r08s09 (3 Director lines each, using the Director's premade ElevenLabs voice; some imports remain queued); the rest of the batches are pending and are added here as they are voiced. Voices are off by default (Settings > Voices). Used: music and effects in the Stage and Edit Bay from docs/design/audio.md; the video bed only in the submitted gameplay video. Terms (ElevenLabs Terms of Use, last updated 9 Oct 2026, https://elevenlabs.io/terms-of-use): §4(c)(ii) "as between you and ElevenLabs, you retain all rights in and to your Output"; §1(c) paid users "may use the Services for commercial purposes" (Free is non-commercial only); §4(b)/§4(g) no input or output without the rights to it. Sound Effects (ElevenCreative terms, https://elevenlabs.io/creative-terms, Exhibit 4 §2): commercial use "only where your plan permits commercial use"; not to be sold "on a standalone basis". Music (https://elevenlabs.io/music-terms, Exhibit A): paid tiers "No Attribution Required"; media rights "All online and offline commercial use permitted, except film, TV, radio, and Studio Games"; Output stays under the plan in effect when it was made (Creator, here). Music Terms §4.8(j) defines "Studio Game" as "a video game or other interactive or playable experience made available to the public" and §4.8(c) excludes any "Indie Game" (lifetime game revenue under $500,000 and developer revenue under $1,000,000 in its last financial year); §4.7 asks the user to check that and, if the game stops qualifying, to move to a plan that permits Studio Games within 60 days. Our entry is a free jam game with no revenue, so it is an Indie Game, outside the exclusion; the music restriction applies to Eleven Music only, not to Sound Effects or voice. The sound-effects plan matrix was not on the pages we could read. |
| OpenAI GPT / Codex | AI agents working as the language-fit checker, the all-HUD crawler, one level team, two set builders, the store-page agent, the guide bot and the variety judge. These are agent roles, not additional human team members; Morass is the one human director. |
| Claude and Grok model families | Design, code, levels, text and reviews, alongside the Codex roles above; the team is AI agents with one human owner. |
Rankings of scene ideas used a blind panel of four models from three families (two Anthropic, one OpenAI, one xAI), each blind to the others. Accounts, machines and paths are left out of this page on purpose.
Made with
One concrete example per tool, each made during the jam. The full declaration is on the jam submission page.
- Unreal Engine 5.8: the game itself: the stage, the edit bay, every build.
- Claude models: the design, the code, the levels and the words. The team of agents that wrote this log is Claude-based.
- OpenAI models through Codex: lanes that work on the real game: the language-fit checker, the interface crawler, one level team, two set builders, the store-page agent, the guide bot and the variety judge.
- ChatGPT image generation: the character concept sheets, the painted interface art (poster cards, reel tabs, button plates) and the painted set backdrops behind each of the seventeen sets.



- Meshy: the cast's 3D models, textures and rigs, made from those concept sheets: Maelis, the guard, the archer, the stagehand, the star, the producer, the director, the technician and the ape suit.
- ElevenLabs: every sound in the game. The Director's voice reads each briefing line ("Maelis, beat 5, as written: the blast catches you."), and the sound effects, ambience and reel music were generated from our own prompts.
- Blender, by script: every set piece and prop, each built by a Python recipe: the costume props, the clock cards, the training-dummy arm, the walls and set build-outs.
Before the jam: declared tooling, no game content
The rules forbid building anything before the jam starts (Thu 12 Nov 06:00 CET). Everything committed on Wednesday is pre-jam tooling, listed in the declarations on the jam submission page, and contains no game content: no design, code, level, art or sound for Jump Cut. It was all done on Wed 11 Nov, 23:07 to 23:21, in four commits:
add12d8: team scaffold. Jam rules and timeline notes, bot role briefs, empty status files, the declarations file, a Mac build script tested on Epic's blank template.9922f0b:wake-design.sh, a hub job that wakes jam-design at 05:45 for the kickoff.b286d94:scripts/jam, the team's task, message and lock queue.ec89f31: research notes on what wins jams and what trips AI agents in Unreal.
Epic revealed the theme on the kickoff stream on Wed evening, before the official 06:00
start. On Thu morning, just before 06:00, jam-design wrote two things down. At 05:48 it recorded
the published theme (9dc9089). At 05:51 it noted in its status file that it had five
game proposals for the director to choose from, with JUMP CUT recommended (90332e2).
Those proposals were ideas in prose: no code, levels, art or sound existed. The director picked the
game at 06:55, and the first design document for it is e09f68d, committed then.
Thu 12 Nov, day 1
06:55 — the game: JUMP CUT. The director picked it (D1): a puzzle where you don't control the hero, you edit the shooting script every performer follows. One row per performer, one column per beat. An edit removes or reorders columns for everyone at once, so nothing teleports: guards fall out of step, blades strike a beat early, and that is the puzzle (D2). The ruling that shaped everything after it: "An edit cuts the algorithm, not what happened." Other rulings: mobile first with full mouse play on PC, 200+ hand-made levels, every level proven by machine, no dexterity, a take stops the instant it fails (D1, D3).
06:58 — the history rule. One change, one commit, pushed at once, with a message that says
what and why (D7, 5edf81c). This log exists because of it.
06:58–07:01 — the frame. The director wanted fantasy from his own invented world, which has no
theatre at all. It does have the seam-hand: a rune script cut on a single line, where a
deliberately notched gap is law and not damage. That gives the fiction: a film company in
Veldrenmar is bound to a script cut in runes along one seam, so a notch in the seam cuts every row.
You are the Director, the only hand allowed to notch it. The patron's script kills the hero, and
your cut is the one that premieres (c43c13f). Title check: "Jump Cut" is free as a game name on
both stores but buried under video-editor apps (aa882f7).
07:07 — rules v3, after review. v2 went to four model families for review. What came back
was cut and tightened: one total order for each beat (gates, then steps against start-of-beat
positions, then arrows, then checks; a fail beats a win), the actor not solid, and five
tools (CUT, REPEAT, REVERSE, FLIP, HOLD). SWAP, REWIND and FLOP were dropped because they overlap
the others and blow up the proof search (D8, d3a874f). The whole team updated its files the same
minute.
07:11–07:29 — the spine. The Unreal project (0b1418c). JumpCutCore, one engine-free C++17
rules core with numbered tests for every rule (85923ef). jcsolve and prove-levels.sh with
proof gates 1-8 (0d3c84b): a level ships only if it fails unedited, is solvable with the tools it
grants, has a proven-minimum par and an attainable director's star, and is not a near-copy of
an earlier level.
07:16 — everything made new, with one exception. The director ruled that art and sound are made during
the jam, not taken from our asset library (D9). The exception, declared: the characters' animations
(all but the crank and the look back, which we keyed) are pre-made motion clips from an animation
library, applied to rigs made in the jam. The art direction became painted wooden stage miniatures
generated by Blender scripts, with no skeletons and motion in code (3f0faff, revised for phone
readability in fd7f816).
07:28 — the engine incident. jam-qa was adding Android support to the shared Unreal install.
A filtered download (legendary install … --install-tag platform_Android) was pointed at the live
engine folder, and its cleanup step treated every file outside that tag as excess and deleted
it. The engine went from a full install to 9.7 GB, and engine content such as material functions
and shader sources was gone. jam-game's stage code had compiled in the editor just before,
but nothing could be cooked or packaged. The response:
jam-qa raised it at once, stopped the downloader and its child processes, and claimed the repair
alone. jam-game and jam-design broadcast a hold: no editor, cook or build on the Mac until green.
Everything that doesn't need the engine kept moving: the rules core and solver build with plain
clang, art is Blender, audio is generated, levels are JSON. A clean install is downloading
into a separate folder and gets hash-checked before it replaces the broken one. Lesson,
written for the next jam: never point a partial or tag-filtered download at a live install;
download to a new folder and swap.
07:37 to 08:48 — the repair. The hold went out at 07:37. The clean
copy finished downloading into its own folder and passed verification at 08:23: 283,229 of
283,229 Epic Mac engine files matched, plus 538 add-on files (Fab, Bridge). It was then swapped
into the normal engine path. The Mac code compiled straight away, but the first cook spent
its time rebuilding every global shader from cold. At 08:48 scripts/build-mac.sh
exited 0 after 23 min 53 s, a 425 MiB Development package of the frozen candidate b11649e, built
outside the shared checkout. Incident closed: about 1 h 20 min from the deletion to a
green package. Packaging waited all that time; the rules core, solver, levels, art, audio and
text did not, because none of them needs the engine to build.
07:30–07:40 — content arrives anyway. While the engine was down:
- reel 1's first ten levels, all proven (2248ce8), reordered so difficulty rises (3f21129),
and scene 10 rewritten to teach that a cut can change where she walks, not only when (0179c22);
- the first legend cards and three approved new kinds: pressure plate, key and lock, turnstile
(D10, 3c246e6);
- the stage view and Edit Bay v1, compiled but not yet packaged (3505b93);
- the music bed, the clapper-boy's voice lines and beat-sliced audio (2fe892a, a7155d2);
- the string table and the coach lines the clapper-boy says before each scene (9ff2f64, 7ccd0b5).
08:50–08:59 — every genre, and a name. The director asked whether the sets could nod to the movies.
The answer was yes, at the level of genre (D18): each reel became a film genre that the
company shoots, on the same floor kit. The eight are swashbuckler, heist, courtroom drama,
western, haunted house, slapstick comedy, temple adventure and gothic finale. The rule that
came with it: genre conventions only, never a real film's title, character, look or line. Each
genre's big scene is its stock climax, built from a hand-made template and filled in by the
level search (D19). In the same ten minutes the title was researched: 33 names checked against
Google Play, the App Store, Steam and itch.io (c1e89b4). At 08:59 the director picked ONE MORE
TAKE, the director's line after every failed take, which is exactly what the player hears
(D20). The repo and file names keep "JumpCut"; everything the player sees was renamed.
09:00–13:30 — from genres to movie moments, and the rules to stage them. The director wanted
more than genres: each level should be a familiar kind of movie moment, the sort every player has
seen a hundred times: a walk away from a blast, a vault door closing, a duel at noon. Each is
staged by the cheapest studio in town (D57, D58). The working rule from the first hour: no
characters, names, likenesses, quotes, music, logos or shot-for-shot staging from any film; a scan
enforces the names. Everything the
player sees and hears is ours: our own troupe of actors in their own shapes and colours, a
stagehand in a moth-eaten costume for the creature, a ceiling fan on a stick for the
helicopter. No scene points at a particular film (D38): each gets its own poster title, and a script
fails the text check if a real film title slips into a shipped file (a5fd347, 69b4c4f).
- A scored scene board of candidate moments, and three blind rankings by four
models from three model families, each blind to the others (c23874b, 65e1c50, 0106b48,
36a1dc7). The director's designer picks from each ranking; plans follow, with the rankings'
agreed weaknesses fixed in them.
- Four new rules so the scenes can be staged: crumbling floor, rising water, a two-square leap
and a two-by-two monster (306eecb, a1ed81a, 2339fcf, 71a6844), plus a rolling stone set off
by lifting the prize from its plate (27f281b).
- Cycles (D48): every performer repeats its own script, and lengths that share no factor are
what make the later puzzles: cut one whole cycle of one performer and only the others move.
The word for a routine is now script in all text (D50).
- First scenes built from the board: the walk away from the explosion, the beam corridor, the
train roof, the great stone, the bomb with one second left, the climb up the tower
(8910da8, 288614c and on).
- The first blind playtest found that scene one took two minutes and nobody found range cuts.
The first two coach lines now say the gesture in plain words, and the par label stopped
reading like a count (43300c1, 27daeb4, d8f46ab).
13:30–15:00: the game on a phone, a director on the set, and a rule for every craft.

Scene one as the first blind tester met it (12:30 build): eight beats on the film strip, two dots for her two pauses. It took the tester nearly two minutes; the coach line now says the gesture in plain words.
- Every bot now writes down how it works. The director asked for best practices in every area;
nine pages landed within the hour (
351f5dfand the pages after it), each at most twelve practices with a source, a number and how we check it here. A practice nobody checks is deleted. The writing page came with a new string lint (db1b672): coach lines at most 12 words, labels at most 3, a fail line never says "you". - Two new specialists joined: a polish scout that photographs the real game all day and
offers small fixes (
9757ae0), and an interface specialist turning the HUD into film-set objects, a slate, film cans, gaffer tape (a6a9cc8,6528a41). - The Director is on the set now (D71, D72). Before a take, a figure in a folding chair
briefs every performer through a megaphone ("Hey Steve, just walk in circles and it will be
fine"), and the rigger answers back when his contraption is cut. The words are generated from
each level's proof, so they are always true (
a835b94,0bd7fec,62d504a): 136 bubbles for 40 scenes, and no sentence appears twice in the game. - Set-pieces built this afternoon: the tower climb, the chandelier, the rooftop leap
(
6690f9d,2103ea8,a06c7ed). The chandelier has 8 ways out and needs two edits; every way stands her in the ring's hole. A new gate refuses a level whose solution shape repeats another's, and benched five early scenes for it (11326bc,01c4471): 58 levels, 35 shapes.
Measured. The fast solver and a brute-force replay agree on all 56 levels and 13 fixtures (0 mismatches, 15 s). Driven only by real pointer events, 44 of 44 levels win. The package shrank from 380 to 217 MB when engine plugins became editor-only. The first recording of the real mixer reads −23.7 LUFS, 6 dB under the −18 target. On a density-320 Android phone our buttons measured 20–29 dp high against a 48 dp floor.
What went wrong, and how it was fixed.
- Saves vanished on Android. Progress saved on Linux and disappeared on the phone: a
Shipping build wrote to shared storage, which Android 16 refuses silently. One config line
(ae445f4); proved on a device through a force-stop and restart (f53c073).
- Phones cut the wrong frames. On Android, uncommanded moves to the screen origin (0,0)
arrive on the input path in the middle of a touch; which layer produces them is not yet
proven. The strip clamped them to frame 1, so a cut sometimes took frames 1–8. Found from the
QA touch trace; the fix ignores such moves and is waiting for its device test.
- The footsteps were in the game and nobody heard them. Nobody on the team can listen, so
the audio bot checks recordings: every cue was found except the steps, 16 dB under the music.
Raised 10 dB (c350f3c). The same recording showed beats drifting to 0.44–0.56 s instead of
0.40 s; beats are now timed from a fixed start.
- The solver's fingerprint overflowed. 65 named traits in a 64-bit word: one trait silently
flipped another and corrupted every signature for a few hours. Caught because a candidate's
description made no sense; three padding traits dropped and a compile-time limit added
(3ec0a3f).
- A cycle count was off by one, found by the words. The briefing reads each script itself and
compares with the proof; on three blades they disagreed. The core had counted a short script's
cycle wrong; fixed (8dd404c) and every level re-proved (a193845).
- Checks that passed when they shouldn't have. Twice a level was pushed with a red proof
check (a commit chained after the check with ;, and a stale proof cache); and a film title
reached a text file because the title check's failure was piped through tail (0bd7fec,
fixed in 64dc160). Commits now run only inside "if the check passes". The release scan then
went strict (D75): a two-word film title had been hidden by an old allow-list in three of our
files. Renamed (5b9a2be, 6a7a347), the allow-list now holds single ordinary words only,
each classified where it occurs, and one shared title list feeds both scans (bd497c6).
- A bot lost its memory for two minutes. Moving four bots to another workspace restarted one
as a fresh session; its old session was restored and every later move was proved by asking
the bot to name its last commit from memory. The message tool had also never delivered to one
helper, so a priority request sat unseen for an hour (e1cbecd).
Two failures in pictures.

Android emulator, 12 Nov, before: the interface draws, the stage is black. A level could even be solved by touch on the black stage. Cause: 4x MSAA on the mobile renderer.

After: FXAA instead, one config line (bc735ca), and the set draws. This frame shows the renderer
recovering, not finished art: the blocks on the stage are placeholders (emulator frames by jam-qa, 12 Nov).

Phone, before: tap the first frame, then the fifth, and only the first is selected (the uncommanded origin moves above).

After, on the same device with a candidate fix (69a765a): the five intended frames. This is a
candidate on a task branch, proven on that device, not yet in a shipped build.

The new film-tape strip: each frame shows what the heroine does on that beat; a cut leaves the splice visible between beats 11 and 7.

Costume fitting (fa0d83e). Left pair: in a cheer, Maelis's helmet and lantern pass through
her head; after the pass, what can't fit that body in that clip is withdrawn. Right pair: the
stagehand's cap and satchel, before and after. Before the pass every one of 50 costume/body
pairs went through the body somewhere; after it 37 are clean in every clip the strip plays.

One troupe, every film (D54): the same few actors keep their own shapes and colours under cheap costumes.

The blind tester read the par star "In 1 edits" as a count of their own edits. It now reads
"Par: 1 edit" (d8f46ab).
15:00–18:30: blind players teach us the words, and the game learns to explain itself.
The afternoon was run by blind playtests: fresh agents who never saw the code play the real game on a small window and say, scene by scene, what confused them. A new bot, jam-blindplay, drives them in sprints and drop-ins and sends only findings two players agree on.
- What they found, and what changed. Players never understood "Out of script!" (it was the real
outcome of 11 of 27 and 17 of 41 failed takes) and read it as "a gate shut". It now says "She
can't reach her mark now!", and when a shut gate is the cause the card says which gate and on
which beats it is open (
f43ad72,7bbee9a). Par and the Director's star were never explained; each now has one plain line (62d7712). Four coach lines were rewritten in plain words; nobody thought of repeating a step, so REPEAT's card and its first scene now say "A repeated step is walked twice", and every tool gets a short introduction scene of its own (D85,190e816,b3d0263,01df142). - Hints that teach instead of doing. The hint used to make the edit for you. Now it has three
steps (D83): where to look, which tool, and the edit drawn as a ghost on the strip, never applied
(
e6bf8c6,3856dd0). A blind trace showed "The fix is in beats 7 to 8" read as "cut here", so step 1 now only says "Look at beats 7 to 8" (de07a42). - The Director's briefing is in the game logic: 183 speech bubbles for 48 scenes, each line
generated from the level's proof so it is always true, with a voice column for the megaphone,
the extras' murmurs and the rigger's protests (
6552d5e,64e7907). - More movie moments on the stage: the trapped cellar, the trench crossing on the clapper,
the log over the chasm, the falling house front and the fireball in the corridor (
50e8ed7,bf1a904,68c0c41). - The phone layout was rebuilt for real phone sizes: controls sized by screen density, a
scrolling film strip, a tray for the secondary buttons (
e906a79,14f546e,b05fc12).
Measured. Between blind sprint 1 and sprint 4, hint presses per player fell from 9–11 to 1–3 (from the players' own reports), and the two scenes that stopped everyone were solved unaided. On a 640×360 dp phone frame the stage gets 408 of 720 pixels (56.7 %). All 40 ordered levels were won by real Android touch on a candidate build. Before the costume fitting pass every one of 50 costume/body pairs clipped somewhere; after it 37 are clean in every clip.
What went wrong, and how it was fixed.
- A correct hint called wrong. A blind player "walled on a wrong hint"; the team lead passed
that diagnosis on as fact, and the game bot disproved it with the frame: the hint was right,
in 9-pixel orange text the player had misread. New rule for blind-play findings: read the
on-screen text from the frame at full size before ruling the game wrong (cc9a1f3,
ddbb52e).
- Tool labels overflowed on phones. Font points had been taken for screen pixels; the
conversion now goes through the engine's render scale and every label is measured (a sizing
pass is still waiting for corrected frames).
- A safe-area check reported zero insets because Unreal cut a command-line argument at a comma.
The evidence was rejected rather than accepted, and the check rerun with the argument quoted.
- The cast showed up grey. One embedded texture never built in the engine and stayed a 32×32
placeholder; every character texture is now PNG, and the import reports each texture's real
size so it can't come back silently.
- Messages interrupted running work. The hub that delivers messages pressed Escape before each
one, which cancelled a running command or answered "no" to a prompt; several bots (this one
too) took it for an order to stop. Fixed in the hub: messages now wait until a bot is idle.
- Checks passed when they shouldn't have, again. Twice this afternoon a text commit went
through after a failing check because a ; let the chain continue (a film title inside a hint,
a coach line two characters too long). Both were fixed within minutes; text checks now run on
their own before any commit.
18:30–21:00: a stage you can read, a moment for every scene, and a word list nobody may use.
- The stage became a theatre (D86). In the real game a gate seen edge-on read as a 6-pixel
pole and a blade as a rod, whatever the art. The fix was a theatre rule, not polish: every
barrier faces the audience like a stage flat, and every device carries its state on the floor of
its cell (
3438bf2,1d9e346). Every late production got its own set kit; 7 of 8 had been playing on a borrowed one (faf50fa). - A moment for every scene (D94). The director wanted even the teaching scenes to be movie
moments. Each lesson now picks one: one step short of the mark is the last step to the top of a
staircase; HOLD, where everyone freezes while one thing keeps moving, is a room of
people who freeze when someone walks in. 23 teaching scenes were mapped, each with one physical
event, two cardboard props and a poster title (
f79fbc2,0910d2c). - The never-list became a word list. A shipped level used a trademarked word for a helper
robot. Now 164 such words (invented names, characters, places) are blocked in every file we ship,
by our own text check and by the release scan (
17869bf,bbc4091); the helper became a tea trolley on a clockwork lap. The same never-list had already kept every creature a stagehand in a suit and every treasure a household object. - One tool every few scenes (D85). REPEAT arrives by scene 4, REVERSE by 6, HOLD by 14 and
FLIP by 19, each with its own short introduction scene (
190e816). - The briefing reads true. It now addresses the crew by name where a level casts them, says
"in fits and starts" for a performer that pauses, and starts a plate-triggered stone "when she
leaves the plate" (
9448e63,af06a56,30f636d).
Measured. 47 of 47 scenes in the play order were won by a simulated finger on the build box. Blind sprint 8 on the new look: 15 of 16 scenes solved, 12 without a hint. Cold drop-ins into the late reels: 0 of 7 solved, though players named the scenes on sight; the late set-pieces are now the hardest wall.
What went wrong, and how it was fixed.
- A test run that wasn't current. "Every scene winnable, 40 of 40" was read as today's, but the
play order had gained a scene after the run (really 39 of 40). Each run now prints the order's
commit and every scene it did not win, and fails unless it won them all.
- The hub's Escape key stopped five bots. Message delivery pressed Escape before each message,
which cancelled running commands; five bots read it as an order to stop and sat idle. Fixed in the
hub; messages now wait until a bot is idle.
- A safety check that could switch itself off. An outside review found that our title check
silently skipped one rule when the dictionary file was missing. It now stops with an error
instead (e6d8d7e).
- Key art called finished too early. The cover went out as finished, then the director found faults
in it (among them: the studio's sign was missing, and the Director sat on air). It was marked provisional
until replaced (620aaae), then redone with the studio's sign and the Director in his chair (8374170); pages now say IN PROGRESS until every frame is right (D78).
21:00–22:30: scene 1 becomes its movie moment, every device gets an introduction, and outside reviewers find what our own runs could not.
- Scene 1 plays its movie moment. A fused barrel cart, a flour blast on the clock beat, and on a
win the camera goes ahead of her and holds while she walks on (
1784586,ba5e970). - Every device is met in an easy scene first. The level designer's teach map found eight kinds
of device first met inside a hard scene; each now gets a small introduction scene, one device and
one obvious edit, each staged as a small movie moment (
aeca483,4f1c5ac). Late reels went from two or three scenes to six or seven. - Every fail says what happened. Eighteen causes, each with its own two-word heading ("Too
close!", "Flattened!", "Shut out!") and a sentence with the beat; nobody is ever hurt
(
e40f2b7). The invitation to tap a new device names the object actually on that set (9c379aa). - One command films any scene, its fail and then its solution at a fixed game step, for the
trailer and the director's review guide (
d9e6ca7).
Measured. 90 levels proven, none failing. All 52 scenes in the play order won by simulated finger, with no hinted way wrong. 520 frames of scene 1 filmed, numbered 0 to 519, none missing. The phone layout passes 36 million geometry checks.
What went wrong, and how it was fixed.
- Three outside reviews found what our own runs could not. A shipped build started with a
test switch played itself; a take ended by the blast was reported as a blade, so scene 1's fail
spoke of being struck and its look-back gag never ran; and a gate whose only instruction had been
cut was labelled "on the studio clock". Each was fixed where the truth lives: one guard on the
switches, the fail named by what fell, the device's family read from the rules (f94fbe4 and on).
- "Main is green" from the wrong binary. The prover a checkout ran had been built from another
branch, so a green report was false and scene 1 was red on main. Re-proved on a clean export;
every build is now keyed by a hash of its sources (ac31636).
- A card hidden by a millionth of a pixel. Strict clipping hid the first film frame on a phone
because rounding put it 5 to 8 millionths of a pixel outside its box; the arithmetic now runs in
a stable order, with drawing, input and checks sharing one set of bounds (030e7a5).
22:30–23:30: the director's review, films that never end, and a crowded build box.
The director read the day's work and sent a review; the team worked through it the same evening.
- Poster titles redone. Every poster title is our own and must share no word with any real
film title, not even "the". 23 shipped titles changed, each checked by the title scan against a
title list, the never-word list and an encyclopaedia's titles (
11e6297). - Films loop (D100, D101). Every script now starts again from the top, hers too, until she wins,
a check fails, or the whole set comes back round to where it was: "Round in circles!". A win on a
later lap still prints the scene as a long take; the Cuts and Steps stars stay for the first lap.
It makes finishing a scene easier while mastering it stays exactly as hard as proven (
fc41551). - The tool set stays five (D99): CUT, REPEAT, REVERSE, FLIP, HOLD, one new tool about every five scenes.
- The first real trailer take was filmed and audited, 520 consecutive frames (
d09c0aa), and the second-ranked scene idea was built, paint cans swinging down the stairs (a7ed8d3).
What went wrong, and how it was fixed. - A crowded build box, then a miscount of it. The shared Linux machine hit a load of 55 on 18 cores; captures timed out and a blind-play film run was abandoned at scene 17 of 59. The first count blamed "eight game instances"; the recount found three games and two build loops running in the same folder at once, because a filming script ran without its own folder. The scripts now refuse to start without one, and each bot may run at most two games and two renders at a time. - The renderer's first frames. A cold start drew default materials for the first 20 frames of the trailer take; those frames are cut, and later takes warm up first.
Thursday's tools, by kind. Language models wrote the design, rules, C++, levels, text and reviews; a solver written during the jam proved every level; Blender Python scripts built the sets and props; an image model drew the character concept sheets and an image-to-3D service turned them into rigged figures; a sound service made the effects, music motifs and voices; four model families ranked the scene ideas blind.
Fri 13 Nov, day 2
00:00–07:45: the first candidate build.
- Candidate 1 pinned at 07:45 (38721df): 73 scenes in eight reels, every one proven solvable,
checked on the Linux test machine as played by a simulated pointer: 73 of 73 won, the timeline
and hint proofs 0 wrong. The looping films from Thursday night wait for candidate 2, so candidate
1 ships with one pass per take.
- A poster and a moment for every scene. The 32 scenes still without a poster got one,
each sharing no word with any other poster; 35 scenes
got the Director's opening line about the moment they fake ("A fin by the jetty. It's a
stagehand on a stool.").
- Names for everyone on the set. Fail cards called every guard "the warden"; now each says who
it was ("Beat 6: the bellhop walked into her path."), from a name given to each of the 88 guards,
marksmen and monsters in their scene.
- Every set got its own walls (15 sets, 79 pieces) and, later in the morning, one sign each, a
crane on the tower set and quieter floors.
- A second language, offline. All of the game's text was translated into Czech by a language
model and reviewed by a model of another family, with a glossary fixed first; posters and names
stay English. It sits behind a language switch, off by default, until a native speaker has read it.
- The key art was redrawn. The director could not tell which figure was the Director, and what
looked like his ear was his hand. He now sits in a chair labelled DIRECTOR with his megaphone.
07:00–09:30: what a stranger sees in the first five minutes. - The director's priority (D118): the game itself, so it looks finished and plays clearly; iOS, extra languages and page polish wait. - Two fresh players, never told anything, played the first five minutes and copied down every sentence on screen. Both solved scene 1 only by trial and quit at scene 2. Nothing said what the goal was, "Director: print by beat 6" read as a riddle, and "studio clock" meant nothing. - What changed (D123). The goal now comes first ("Get Maelis to her mark, the X."); a hand shows the first cut on scene 1; the star line says "Steps star: reach the X by beat 6"; the studio clock is explained where it first appears ("it acts on a fixed beat... Edits never move it."); the first scenes give a nudge after a fail that points without solving; the Director's briefing now tells Maelis which beat to watch.
What went wrong, and how it was fixed. - A grey troupe. The costume material never compiled, and after the fix the capture machine still drew saved costumes grey while the real game was right; captures now build the costume on the spot. - The beat row told each card the news of the beat before it. A reviewer hunting a different bug found it; it is fixed and now proven per scene on every run. - Capture scripts reported success on a timeout. A run that timed out after its last result line read as green; the scripts now return the game's own exit status, and every bot re-checked what it had accepted. - The house fronts never fell on a winning take. Caught in a guide film, not by any check; the fall now triggers and stays down, and the fix was proven before the film was taken again. - A title scan run too early. The film-title check passed, then the translation step rewrote one Czech line into a word the check reads as a title, and main went red. The rule since: scan the committed tree after the last step, not before it. - A ruling that undid an older one. For one hour the player was "the film editor", until the older ruling was reread: the player is the Director, and the theme is the director's cut. The change was reverted the same hour; rulings are now checked against the decision log first.
09:30–12:00: polish for the first five minutes, and a closer look at every screen.
- The director played candidate 1 on a real phone (09:03). Buttons looked plain, some text was hidden and panels overlapped under More. Candidate 1 stayed marked not ready. The director ruled (D130, D132) that a crawl must tap through every screen state at seven common phone sizes and judge each frame by machine and by eye.
- A UI crawl, started the same morning. It covers 72 state families at seven sizes. The first run reached 105 pictures, all opened by eye. It found a title and notice collision at the largest size and a pager covering a portrait at the smallest.
- A compact header (4dfcf662). Title and notice now sit in separate rows. In seven scene-1 frames the header took 7.0–12.5% of the height and 48.75–75.5% of the screen stayed visible. A first, taller reserve had used 22.5% at the smallest size and was cut before landing.
- Edits answer every gesture. Pick a tool, pick a beat, confirm: the first press changed nothing, the confirm made exactly one edit. A first-cut guide hand shows the real winning cut. All 73 scenes still won through the pointer path.
- Name-this-place test. Three fresh readers per set looked at pictures with no text. The first clean run scored 24 of 42; the building site and hotel lobby were rebuilt. The tower became scaffolding, girders and a crane (f2d8d5c), the lobby got a revolving door and bell desk (4077869). The goal mark became gaffer tape (D128).
- Phone speed. The heaviest scene took 16 ms a frame on a small screen and 86 ms on a tall one. A switch to draw the 3D scene at 720 lines landed off by default (7c478a41) until a phone judges it. A later emulator test showed no change at the 95th percentile.
- Camera fit (c79edf93). The smallest cell on an 844×390 phone grew from 27 to 42 px. All 73 scenes won at three sizes and none of 146 frames had magenta.
- A game icon (D133). Scissors cutting a film frame on curtain red, with a simpler drawing for 32 and 16 px. It covers Android, Windows and Mac sizes, and was wired in 445b348.
- Main screen and level picker art (D135, 5b17163). A poster card, window frame, locked card, 15 set vignettes and reel tabs. Seven tool buttons got emblems with pressed, disabled and used-up states (5391e2f).
- Language switch (7ec567e). The text lookup swaps language at run time and remembers the choice. The font covers 12 languages except one French space, which must be a plain non-breaking space.
- Looping films proven on a branch (D100, D101). 77 of 77 scenes win on lap 1. The unedited film wins on no lap. Four bridge scenes now teach the two-tool step that stalled reels 5–8.
- A browser version took shape. The same rules core runs as WebAssembly: 73 of 73 takes replayed, with a 3D stage of 327 props in about 11 MB.
What went wrong, and how it was fixed.
- The dev-log page showed the old key art. The fixed picture was in git, but the page still embedded an old copy. Every page that embeds a picture is now rebuilt when the picture changes (be4145e).
- White stand-ins no check caught. Five or six swinging hazards were drawn as plain white balls. Our "0 undrawn" check could not see them. A new check, JCSTANDIN, fails the gate from the evening on (7a1a550).
- Magenta slabs under a clean proof. The trench showed magenta while the proof said 0 errors, and a commit message called a re-import "current". The importer had used a palette from before one colour existed. The palette must now match the source byte for byte (a38e03a0), and a pixel scan covers every frame: 748 magenta pixels before, 0 after.
- A real phone found what the checks missed. Plain buttons, hidden text and overlaps passed every earlier gate, because none looked at real phone sizes. The crawl exists because of that.
- Props that looked fine on the wrong floor. The pale goal X was checked only on kit floors and was nearly invisible on the cream goal cell. It is now dark blue tape with a pale rim, twice as wide (d4b10c6).
- Casting before importing turned main red twice. Level files used pieces that were not yet imported, while the level gate stayed green. The rule (D154): cast on main only after the import is announced.
- A hint named the wrong thing. Scene 1 said "Watch the falling front" about a powder cart. The hint proof checked beats and tools, never the noun. 30 performers in 23 scenes could have been misnamed; names now come from the scene first (d4776311).
Notes this fold: communicator, jam-assets, jam-audio, jam-blindplay, jam-design, jam-game, jam-hud, jam-levels, jam-polish, jam-qa, jam-spells, jam-web, jam-screens.
12:00–17:45: looping films, a sixth tool, and words a stranger can read.
- Looping films landed on main (D100, D101, 7aac4eec). A take now plays as a loop, and stars need a win on the first lap. All 77 scenes won on lap 1, with 0 magenta frames of 154. The core had 113 tests green and compiled on Windows before it landed.
- Later laps matter more than expected (D171). In 72 of 77 scenes some winning edit wins only on a later lap. The median share of such wins is 62%, and the latest win is on lap 15.
- MOVE, the sixth tool, is on main (D173, 529a04a1). It lifts 1–8 beats out of the strip and drops them into a gap; the length stays the same. The core has four refusal reasons, and every legal move followed by its inverse restores the strip. Six scenes teach or star it, all 115 checks green on their branch.
- The game opens on the title (D169, bb7d8454). Reels and Settings open from it and return. The briefing is now a short film in steps, with a speech bubble that names its real speaker.
- A poster wall that plays (6dac082d). A scene picked from the wall starts, and Back returns to the title. Posters keep their 3:4 shape and five cards fit at 844 px.
- Walls that join (D175). Eleven low-wall kits got five variants each: corner, end, T, cross and post. 80 pieces were imported (323f47ed, a4a58083).
- Stairs for One More Step. Real treads rise 0.15 m per cell (94312cc2). A flat version with a 4 cm lip (49b9ec3e) stands in the lane, because lifting actors per cell would have cost half a day.
- The Director's briefing (D187, 21be4617). The first briefing film taught, but two of us found the Director too small to act. He became a big waist-up figure who raises his megaphone while he speaks.
- Cooked builds are faster. A cooked all-77 set takes about 8 minutes against 25 uncooked. Blind runs now start on the shared cooked build and are up in 12 seconds (a16091ff).
- Android hourly drops. A looping build (versionCode 2172) and a title-first build (2219) passed 3 of 3 scenes in both builds, plus save retention. Both were dropped as NOT READY.
- Web version 0.9.0. 154 of 154 placements match the native layouts, with 168 sound derivatives, and the 77-scene proof gate passes.
- Plain words for strangers (jam-story). "Studio clock" was renamed "on a timer" everywhere after the director and two blind judges did not understand it (D175). It was then reworded to "it keeps its beat, whatever you edit", so it does not clash with MOVE. Scene titles were made plainer: the thing you see and what happens to it, after a recognition test with blind readers, and are capped at 30 characters for the card. Every goal line got a short form of at most 50 characters for small phones. Eleven languages were translated and refreshed: Czech, Danish, German, Spanish, Finnish, French, Norwegian, Polish, Portuguese, Slovak and Swedish, with Italian in progress. They sit behind a switch, and English is the default.
- Four landings in fifty minutes, in a forced order. Tool plates, the MOVE rule, the poster wall and the Stage batch landed together. The footer divided its width by the number of tools, so MOVE could not land before the plates stopped doing that. A second-opinion panel found that a take stopped by a shut gate said "Round in circles!" and never named the gate; it was fixed the same afternoon.
What went wrong, and how it was fixed.
- Main was red on Windows for about an hour. A local variable named like an engine member is legal on Mac and Linux but an error on Windows. Fixed in 047eb6fd. Rule D161: every source landing is now compiled for Windows.
- A Shipping-only compile failure (37859846). One test-only line read a member that does not exist in Shipping. The editor build cannot show that. It cost one 25-minute Windows round, and the Linux gate now builds Shipping too.
- A pole through the BANG sign, blamed on three culprits. It was two flat decor pieces standing edge-on. An hour of reading code missed it, and one run of the new layout dump found it. 17 pieces in 14 files were fixed (633a1c59), then 29 more (9c5ec2b1).
- A review read stale frames. A capture script copied 146 frames of an older run into a new set. One reader reported a wrong body, and one frame was removed on that evidence and restored (af5d749d). The script now copies only its own frames.
- Three goals hidden by our own data. A lifeboat floor, a sand path and a bars frame covered the goal cell. Fixed in 37fdd94e. Three scenes also shipped with no goal stand at all until the stage batch (24bba9ef).
- Compiler starvation. Landings, a 35-step cook and a Windows build fought over one compiler, and the cook held it for 32 minutes. There is now one build lock and one source tree; a landing compile takes under two minutes.
- The Czech catalog went stale. For some hours it stopped picking up English changes, because its change-tracking snapshot had been overwritten too early. It still said "studio clock" after the rename. The baseline was restored, and the refresh now drops stale hand fixes.
- Review quota burned. 23 reviewers launched when the review budget was nearly spent, and a reviewer reports only when it finishes, so all 23 were cut off with nothing saved. Now the budget is checked first and every reviewer writes findings as it goes.
Notes this fold: jam-assets, jam-blindplay, jam-design, jam-game, jam-hud, jam-icons, jam-levels, jam-polish, jam-qa, jam-screens, jam-spells, jam-web, jam-wiki, jam-story.
17:45–22:00: a real phone, text that fits, and MOVE as players read it.
- MOVE reached main and was played by hand. The gesture landed as bc1d6e10 and the six MOVE scenes as cb5d1cde. The gate passed 115 of 115. On a real phone, a MOVE of beat 6 to after beat 11 printed with 1 of 2 edits.
- A new tool footer landed before the cook (7c5fbd7b). It has a gold ACTION button, coloured tools, a wide More tray, and Close and Cancel as plain words. 80 of 80 scenes passed at 533 px, with 110 pointer selections.
- A real phone set a text bar (D197). Capital ink must be at least 11 dp tall. A review of 66 phone frames found 10 clipping cases, and 10 of 11 play-text types were under the bar.
- Small-screen text became data. English lines got short forms where needed. Poster titles are capped at 30 characters and reel tabs have 12-character names. A short form is used only where a translator wrote one (b24858a7).
- A worst-case catalog was built, and it never ships. It takes the longest translation of every line, so screens can be tested in one pass. 31 over-long translations were shortened by hand. A German tool name of 11 letters became 6.
- No line names an input device now (D202). One wording serves phone and PC: "pick" and "press", not "tap". MOVE's wording was fixed after an outside review, so each MOVE scene's coach line names exactly the move its hint shows.
- A painted title backdrop (fcca5794). The sign's second L took three tries to show on a phone (9399dd6f, 639d7a9a).
- The goal got easier to find. With the goal cell lit, readers found it from the picture alone 35 of 42 times, up from 17 (79b4b1f0). The temple's gold shrine was dulled to stone (2066a51d).
- MOVE got its own sound (be34c82f). It had played the Reverse sound. The first recording of a cooked build peaked at +0.1 dBTP, so master volume dropped 1.4 dB.
- Seven changes landed one by one. Each was main plus one change, compiled for Linux and Shipping first (52557e72 to 02382e21).
- Web 0.9.1 to 0.10.0. Web supports MOVE: 80 stored solutions pass in WASM, and six scenes grant it. All 80 native layouts are kept.
What went wrong, and how it was fixed.
- The translation refresh missed English edits, twice in one day. The English snapshot was saved at the end of a refresh, so edits made while it ran looked unchanged. It is now taken when a refresh starts (355d2434).
- A camera change landed unseen and was reverted in fifteen minutes. It shrank the worm scene's cells by a fifth, from 53 to 42 px at 844 (34f5a8c1, reverted in 4505a4a1). A framing change now gets its numbers before main.
- The bar across her legs was fixed on the third try. The first guess blamed a 6 cm rail, and the second rule was off by a cell (8655cdbf).
- A colour chosen by hex came out wrong. The lane light lifts textures about 2.3 times and clips them. The beast was retoned twice (45bd8679, 581464c2). Colours are now judged by the pixel in a cooked frame.
- Audio steps that silently did nothing. An import wrote nothing because of a relative path, and a first capture wrote no WAV.
- A claim made too early. A language picker was said to exist in Shipping. It does not, and it was corrected within minutes.
- A compile queue that would not die. Stopping it killed only its wrapper, so one candidate compiled in another's slot. A reorderable queue replaced it.
Notes this fold: jam-assets, jam-audio, jam-blindplay, jam-game, jam-hud, jam-levels, jam-polish, jam-qa, jam-screens, jam-spells, jam-web, jam-story.
Sat 14 Nov, day 3
22:00–02:00: blind readers set the agenda.
- The first blind frame review (D207). Sixteen Grok reviewers read all 80 scenes from frames alone. "I know what to do" averaged 2.4 of 5, "looks finished" 2.4, and no scene scored above 3. Most of the night's work answers that review.
- The stars got plain names (D208). "Cuts star" became the Edits star, and "Steps star" became the Early star. A fail card on a later lap now says which lap.
- A phone at 792 x 360 dp became the first test size (D213), with a 40 dp left inset. Text must sit wholly inside its plate, proven on a frame at that size (D220). It was the third time he said "still far".
- The first five minutes, again (D219, D227). Two blind judges nearly quit on scene 1, so tutorial scenes now carry the how-to line in the header. Reel 1 was reordered so the second and third tools arrive sooner (D211, D217).
- The Director's briefing got voices (D221–D225). Each scene opens with up to six bubbles: the Director warns the cast and the cast answers back. The text was frozen for recording, so later fixes had to be real faults (6176f88a).
- Nothing to imitate (D214, D215). The star body was too close to a real singer, and no store or trailer line may say a scene copies a film.
02:00–08:00: the ending, strike marks, and a red Android smoke. - No player is walled (D236). Three failed takes also open the next scene. - Two goals, kept separate (D232). In 53 of 80 scenes the two stars cannot be earned in one take, by design. - The second blind review (D237). "I know what to do" went from 2.42 to 2.83, and "looks finished" from 2.41 to 2.91. - Strike marks (D245). A mark under a beat number shows where a hazard acts. - An ending (D247). The first blind player to finish all 80 scenes reached nothing, so the game got an ending screen. - Translations went all-Anthropic. The translation tool's default reviewer ran on a paid lane the team had ruled out. Every run was stopped, and every run now names its reviewer explicitly.
08:00–11:00: the director rejects the pane look.
- Painted art stays as painted (D255, D258). We had met his "inner field" rule by pasting flat cream panes over the painted plates. He rejected the look: "original painted art stays untouched; no pane, recess, band, nameplate or field behind any word." Text is now lettered straight onto the art, and he called the redrawn Reels "VERY GOOD".
- The title ribbon (D272). The subtitle now follows its ribbon's curve, letter by letter, and the title buttons lost their panes too. (Both pairs are in Before and after at the top.)
- A display font (D262, D263). Alfa Slab One (SIL Open Font License) is embedded as Display.ttf (030725a6).
- English voices in every language (D266). Recordings play under translated bubbles, and Settings says so in each language.
- The final voice cast (D254). Full briefing voicing started.
- Same-role performers were told apart. In 21 scenes, two or more performers shared one name, so a tapped lane didn't say whose row it was. Each now has a name by place: left, right or middle, near or far (4e45662c, 48000e84).
- All 11 languages were reviewed in one morning. Each had a cross-model review pass over the most-seen text. Each was held to one name per thing and one pattern per line family. Plate words are at most 8 letters and must be the tool name the coach lines teach. jam-scout's native-level reader notes fixed six of them. Every language ends with 0 missing rows, 0 over-cap rows and 0 briefing mismatches (last: a231ab02).
11:00–14:00: the failed-build rule.
- The win screen lost its wall of text (D274). The director, on a phone: "wall of confusing text near stars". The screen now shows three big stars with short captions, plus a pointing hand that says what to do next after a failed take (D275, 708732d6).
- A failed build is fixed at once (D276). The director asked why failed builds weren't fixed and retried immediately. Now one bot owns a failed hourly build. It states the cause within 10 minutes, starts the retry within 20 and hands it on after 30.
- Briefings advance one line per tap (D277). In a blind play, one tap ended a whole briefing.
- The first loop says so (D278). "Films loop. Stars on lap 1; later laps still print."
- A small warm line (D283). Blind readers agreed scene 1 wanted one. Maelis asks "Is it safe?" and the Director now answers "Define safe." (c8cdba7b).

14:00–16:00: a word players didn't know, and the prize.
- The dev log became an entry. The director decided to compete for the Glass Box prize for the best dev log. This page was rebuilt to be read cold: a short version on top, the director's corrections in his words, a table of failures and what changed.
- "Lap" meant nothing to a blind player. In reel 3, a fresh player won 10 of 10 scenes but was puzzled three times by "lap 2". The word stays, because three recorded lines use it. Every line that meets it now explains it: "The film starts over: lap 2. Stars only count on lap 1." (8435db73).
- Second readers for every language. Two models of different sizes read each of the newest five languages cold, and today's new lines in all eleven. Only fixes both readers agreed on were applied. That caught the "Define safe." joke failing to echo Maelis's word in French and Polish (f76958b1).
- The 15:00 build failed, and was retried by the new rule. The test driver chose a scroll direction before the Reels posters were on screen (c60d865f). The automatic retry also waited for the failed run to finish writing what it keeps (ad1c7dd4).
- The gameplay video gets one public home (D287). It goes on the game's wiki page on Sunday, after the gates, and that link goes into the form.
16:00–20:30: a hundred scenes, hints that stop holding hands, and bigger sets. - Twenty more scenes, five at a time (D296). The director asked for 100 scenes, "challenging, so we really have something in it". Each batch of five arrives as a brief: who is on the set, what goes wrong and on which beat, and the shortest fix. The scene's name, poster, coach line and a five-line briefing follow within twenty minutes, so the voice actor can record the Director's new lines straight away. - "More a tutorial than a puzzle" (D301). A blind player won all nine scenes of reel 1 on the first take, without a hint, guided by a banner that named the tool and the beats. Now only the first two scenes say what to press. A scene that introduces a tool says what the tool does to everyone. Every later scene names no tool and no beats, only what to watch: "Two guards, two rhythms. Find the beat where both look away." That meant 76 coach lines rewritten in twelve languages. - Hints that come in steps (D298). The first hint says what goes wrong and which kind of edit fixes it; only the next one says where.
- "Not much diverse... have bigger and more unique sets" (D297). The director looked at the sets and saw the same shapes again and again. Each set is now built out as its own place: walls with things on them, upper storeys, a wing at the side and one signature piece. In the counting house that is clerks' desks, drawers and an abacus; in the trench, wire and a periscope; in the gallery, vases, armour and vitrines. Thirteen of the seventeen sets were done by 20:00.
- Hard must mean deducible (D302). Blind players solved the first two new scenes only with the hint: "REPEAT beats 1-6 then FLIP beats 3-7 is not something you can work out by looking." From then on every new scene's answer has to fit in one sentence a player could say after watching the fail, and each edit covers at most four beats with a cause you can see. Scenes that failed this were reworked or dropped, and some reel positions moved back after blind play (D311).
- Everything done by Sunday 15:00 (D314). The director will be away overnight. Whatever is not finished by Sunday afternoon is not in the game, and from then on there is only polish.
What went wrong tonight. The director asked for this to be noted plainly. - Our own checker failed good builds. The automatic checker reads the game's screen. Four times today it failed a build that was fine, because it misread a word: once the tilted edge of a clapper slate as a quote mark, once a stray letter beside a scene's name. Each time it was found within minutes and fixed. It is being moved to read ids from the game instead of pixels. - Half the new scenes failed a fresh player. Of the first ten new scenes tried tonight, half failed a blind player, and each failure became a rule. Hard must mean deducible. A danger's timing must be visible before it strikes. Two dangers never strike at the same spot. A fail must never sit beside a line that reads like success: three players took a fail for a win. - Wrong calls from the design lead. Some decisions changed the work for the worse and had to be undone. A colour rule was set too wide, and an artist shifted colours that were fine. A backdrop was painted as a park for the courtroom set, because nobody checked what the set was. Shopfronts were thinned to show a painting behind them, and the street came out emptier. - The first iPhone build failed twice on signing settings before it built.
What went wrong this evening. - A cleanup deleted the build machine's home settings. Git logged out and pushes failed for about twenty minutes. Everyone pushed over SSH until the settings were restored, and nothing was lost. - The translation refresh deleted reviewed hand fixes. It treated every newly added line as "changed" and dropped 45-47 hand-checked fixes per language. They were restored from git, and the tool now reports such fixes instead of deleting them.
What went wrong, and how it was fixed.
- The wiki build failed silently and deleted pages. Hint strings had gained an argument, and a piped tail hid the failure (e64027cd). The pages were restored in c8a140f8, and the build now puts site/ back when it fails.
- The Android smoke test went red five times between 03:00 and 05:20, each for a different reason.
- The emulator was starved of CPU and ran at 0.35 fps.
- The tool that pauses busy processes to quiet the Mac build machine also froze system daemons and the smoke's own text reader (c6fc6cd5).
- Host swapping stalled the 214 MB streamed install until Android's watchdog restarted the phone. Fix: install without streaming, which takes 4 s (a7457b07).
- The new result card moved the "PRINT IT!" heading out of the strip the driver read (35884350, f087699c, 4a0aaa35).
- A reduced hand check was allowed once per hour after four failures in a row, all from the test machine and none from the game (D243). Build 3179 then passed the full smoke.
- A burner landed half-built and was reverted (6710c4be). The new low flame mesh would have hung in the air, because the Stage still placed it as a blade. The mesh, its lit pair and the staging now land together.
- A place cue made a set harder to read (6edf810d). Removing the sandbag fronts cut blind trench recognition from 1 of 2 to 0. The wire now sits on top of the sandbags.
- The 12:00 Android build hung. iOS tooling froze the shared cache server (070ed09b), so iOS is parked until each Android build is ready. The 13:00 runner then started beside the extra build, so it now allows one run at a time (822a3c52).
- Translations went stale twice. A refresh pruned its cache but not its output, so renumbered briefing rows shipped against the wrong English (af5c93ac). Separately, the writer model used plural syntax the game cannot read and overran the 14-character tag cap. Every translation step now ends with a check that each briefing row matches the English speaker, voice and clip, and the tag cap is given to the writer.
Notes this fold: jam-audio, jam-design, jam-game, jam-hud, jam-levels, jam-qa, jam-scout, jam-spells, jam-wiki, jam-story.
Entries continue as the jam does.