{"meta":{"name":"SWORN","oneLiner":"A cross-examination game where the contradictions are computed, not scripted — a real interval-algebra solver decides whether the witness just lied.","tool":"Claude Code","buildStartedAt":"2026-08-05T08:01:31Z","buildCompletedAt":"2026-08-05T08:55:00Z","lastUpdated":"2026-08-05T10:05:00Z","repoUrl":null,"liveUrl":"https://sworn-inquiry.vercel.app"},"now":{"phase":"Shipped · then extended to three cases","doing":"Two more cases, designed by kimi-k3 and authored into the same schema, plus a coach that teaches the first contradiction live and a case-selection page with progressive unlocks. All three cases pass the validator, including the new proof that a perfect player can finish each one from a cold start.","at":"2026-08-05T10:05:00Z"},"summary":["SWORN is a courtroom cross-examination game you play in a browser, across three cases: a 1974 observatory, a 1923 sleeper train, and a live television studio in 1956.","A witness gives sworn testimony out loud; you hold a folder of exhibits and you have to catch them in a lie.","The difference from every other game of this shape is that nothing is scripted: each statement compiles into a formal claim — subject, place, time interval — and each exhibit asserts a ground-truth fact in the same schema.","When you present evidence against a statement, a solver runs interval algebra over the timeline, shortest paths over the site plan and sightlines over the map, and either finds a minimal inconsistent set or it does not.","You are not guessing what an author intended; you are proving something to a machine that can actually check, and it shows you its working.","Each case leans on a different way of being impossible, and each unlocks only when the one before it is closed with the right name."],"capability":{"manifest":[{"key":"OpenRouter","state":"supplied","note":"moonshotai/kimi-k3 set as the preferred model"},{"key":"Higgsfield","state":"supplied","note":"CLI, 4,141 credits — images, video, and text-to-speech"},{"key":"Vercel","state":"supplied","note":"deploy target"},{"key":"GitHub","state":"supplied","note":"gh CLI available"},{"key":"Supabase","state":"absent","note":"no database — everything must be static at rest"},{"key":"Apify","state":"absent","note":"no scraping"},{"key":"Domain","state":"deferred","note":"vercel.app URL"},{"key":"Budget","state":"$45 total / $5 per month","note":"raised from $10 at 08:05Z, then to $45 when the campaign was commissioned"}],"ruledIn":["Higgsfield text-to-speech at 0.30 credits per line — measured, not assumed. That is roughly 13,000 lines available, so voice acting stopped being a luxury and became the obvious spine of the thing.","Face-locked character art: generate one base portrait, then pass it back as an image reference for every other pose. Same face, same jumper, same ink on the same hand.","A build-time-only architecture. Every line of audio, every portrait and every exhibit is a file in /public. The site does no inference at all once it is deployed.","A genuinely mechanical core — the whole budget went on assets, not on tokens, because the interesting part is code, not prompting."],"ruledOut":["Runtime LLM dialogue. With $5/month, a game that calls a model every time you ask a question is a game that dies the first time it is linked anywhere. Everything is pre-computed.","A database. No Supabase, so progress lives in localStorage and the case lives in a TypeScript module.","Natural-language parsing of testimony. kimi-k3 flagged this as the single most likely failure, and it was right: if the game had to parse what a witness said, the schema would either fire on everything or on nothing. Statements are authored directly as propositions.","A second and third case. One case, validated, beats three that nobody finishes. Noted in the decision log."],"galleryGap":"The gallery held two entries at the time of the audit — a deterministic 1873 town whose newspaper an LLM writes, and a deterministic historical-linguistics engine. Both are text-first, silent, and things you read. There was no game, no voice, no sound of any kind, and nothing a person does rather than watches. That is the hole this went into."},"pitch":[{"heading":"The concept","body":"Every detective game with a cross-examination mechanic — Phoenix Wright and its descendants — is a branching script wearing a trench coat. The game already knows which evidence is the right answer, and 'wrong' means 'not the flagged pair'. SWORN removes the author from that moment entirely. Testimony and evidence are propositions in one schema; a solver decides. That means there are contradictions in this case that were never designed and that the author found out about from the validator."},{"heading":"What holds it together","body":"A world where time and space are real constraints. The headland has nine places, a sparse graph of walking legs the solver closes into all-pairs shortest paths, and a sightline table. The gantry is visible from the dome floor and nowhere else, and the entire case turns on that one fact — not because a script says so, but because a witness claims to have watched a man fall from a room with no view of him."},{"heading":"Why it deserves to exist","body":"Because the proof is the payoff. You are not shown a cutscene; you are shown the minimal inconsistent set and the arithmetic. Mr Tolliver puts Dr Ashgrove on the cliff path until 22:47; the lifted print puts her hand on the gantry rail at 22:48; the walk between them is five minutes — so the engine prints 'Dr Ashgrove had 1 minute to cover 5 minutes of ground.' You can disagree with it. You can check it. Nothing else in this genre lets you."},{"heading":"The honest limitation","body":"The solver is a focused consistency checker over seven rules, not a general SAT solver, and violations are of arity two or three — which means the 'minimal inconsistent set' it reports is exactly the set of assertions the rule matched. That is a real minimal core for these rules, and it would not be for arbitrary ones. Said plainly here rather than dressed up."}],"phases":[{"n":0,"name":"Capability audit","goal":"Establish what this manifest actually buys, and read the gallery to find the gap.","status":"done","sha":null,"at":"2026-08-05T08:01:31Z"},{"n":1,"name":"Choose","goal":"Interview kimi-k3, let it pick the direction, commit to one thing.","status":"done","sha":null,"at":"2026-08-05T08:05:00Z"},{"n":2,"name":"Scaffold","goal":"Next.js + TS strict up, /insights live and watchable from the first commit.","status":"done","sha":"eb98d71","at":"2026-08-05T08:20:00Z"},{"n":3,"name":"The engine","goal":"Claim schema, contradiction solver, the Meridian case, and a validator that proves it works.","status":"done","sha":"29495cb","at":"2026-08-05T08:36:00Z"},{"n":4,"name":"The inquiry","goal":"Board, witness stand, folder, proofs, verdict — and a hero that runs the real solver.","status":"done","sha":"900f67b","at":"2026-08-05T09:00:00Z"},{"n":5,"name":"Assets","goal":"Face-locked cast, voiced testimony, photographed exhibits, OG image, favicon.","status":"done","sha":"ddd7adc","at":"2026-08-05T08:40:00Z"},{"n":6,"name":"QA and ship","goal":"Every link, 390px, cold clone, deploy, parity check.","status":"done","sha":"a89b938","at":"2026-08-05T08:55:00Z"},{"n":7,"name":"Two bugs, found by a player","goal":"Drag-to-confront did nothing; prove the case was finishable at all.","status":"done","sha":"post-ship","at":"2026-08-05T09:30:00Z"},{"n":8,"name":"The campaign","goal":"Two more cases from kimi-k3, a multi-case registry, progressive unlocks, and a coach that teaches the first proof live.","status":"done","sha":"HEAD","at":"2026-08-05T10:05:00Z"}],"architecture":"flowchart TB\n  subgraph authored[\"authored once, by hand\"]\n    CASE[\"meridian.ts<br/>statements + exhibits<br/>as propositions\"]\n    MAP[\"the headland<br/>places · walking legs · sightlines\"]\n  end\n\n  subgraph engine[\"the engine — lib/engine\"]\n    MODEL[\"model.ts<br/>intervals · all-pairs shortest paths\"]\n    SOLVE[\"solver.ts<br/>forward chaining, then 7 rules\"]\n  end\n\n  subgraph buildtime[\"build time\"]\n    VAL[\"validate-cases.ts<br/>proves every intended<br/>refutation fires, and<br/>nothing spurious does\"]\n    HF[\"Higgsfield CLI<br/>portraits · exhibits · TTS\"]\n  end\n\n  subgraph runtime[\"in the browser — no network, no inference\"]\n    BOARD[\"the board<br/>drag or tap to confront\"]\n    PROOF[\"the derivation<br/>minimal inconsistent set\"]\n    AUDIO[\"voiced testimony<br/>static mp3\"]\n  end\n\n  CASE --> MODEL\n  MAP --> MODEL\n  MODEL --> SOLVE\n  CASE --> VAL\n  SOLVE --> VAL\n  CASE --> HF\n  HF --> AUDIO\n  SOLVE --> BOARD\n  BOARD --> PROOF\n  SOLVE -.->|\"hero proof computed<br/>at build time\"| PROOF","decisions":[{"id":"d1","at":"2026-08-05T08:04:00Z","fork":"Who chooses what to build?","chose":"Interview kimi-k3 — the human's preferred model — and build what it picks","rejected":["Pick it myself and use kimi-k3 only for runtime features"],"why":"The prompt invited letting the preferred model drive the concept, and it produced a better answer than the safe one. Its first call spent its entire token budget on reasoning and returned an empty message — but the reasoning trace was the valuable part, containing seventeen candidate concepts. A second, cheaper call with reasoning capped picked THE DEPOSITION over three audio-toy alternatives, on the grounds that the others are skills you learn once whereas a contradiction engine gets more interesting as content is added. That is the game that got built, and kimi-k3 is credited for it."},{"id":"d2","at":"2026-08-05T08:06:00Z","fork":"Verify Higgsfield TTS before or after committing to a voiced game?","chose":"Before — one smoke-test generation, timed and costed, at 08:06","rejected":["Assume it works and find out at asset time"],"why":"The entire concept rested on voice being cheap. One test returned 6.5 seconds of audio for 0.30 credits, which put ~13,000 lines inside budget and made voicing every statement a non-decision. Had it failed, the fallback was procedural WebAudio ambience and a text-first game — a much worse thing, discovered four hours later."},{"id":"d3","at":"2026-08-05T08:30:00Z","fork":"How much reasoning should the solver actually do?","chose":"Forward-chain perception into presence, then seven pairwise rules over the closed set","rejected":["A general SAT/SMT solver","Pure pairwise checks with no derivation"],"why":"A SAT solver would have been honest but opaque — 'UNSAT' is not a dramatic beat. Pure pairwise checks would have been shallow. Chaining perception into presence is the compromise that pays for itself: 'I saw Dr Ashgrove in the car park' becomes a claim about where the *speaker* was standing, which collides with her own alibi. Proofs run three deep and print their derivation, and the player can read the inference step."},{"id":"d4","at":"2026-08-05T08:33:00Z","fork":"The validator failed two statements. Fix the case or fix the validator?","chose":"Fix the validator — twice — and then it found a real bug","rejected":["Loosen the case until the check passed"],"why":"The first two failures were confessions legitimately contradicting the lies they replace, which is the entire point of a confession; the check was wrong, not the case. But once that was corrected the validator caught something real: Mr Tolliver's confession asserted a proposition identical to one he had already made, so breaking him changed nothing on the board. He now concedes two separate corrected facts. That is the whole argument for a validator — it found an authoring bug that playtesting would have taken an hour to surface."},{"id":"d5","at":"2026-08-05T08:20:00Z","fork":"Port 3000 was already held by a different project's dev server","chose":"Make pnpm dev step up to the first free port and open the browser there","rejected":["Kill the other process","Hardcode a different port"],"why":"Killing someone else's running server to claim a port is not mine to do. Stepping up keeps a cold clone landing on :3000 exactly as the spec wants, while never fighting for it."},{"id":"d6","at":"2026-08-05T08:45:00Z","fork":"Character consistency across poses","chose":"One base portrait per witness, then every other pose generated with that portrait as an image reference","rejected":["Higgsfield soul-id training","Independent prompts per pose"],"why":"Independent prompts give three different actors. soul-id would work but costs a training round-trip per character. Passing the base image back as a reference held the face, the spectacles, the grey jumper and the ink on the right hand across all three moods on the first attempt — verified by eye before generating the rest of the cast."},{"id":"d7","at":"2026-08-05T08:55:00Z","fork":"Drag-and-drop on a 390px phone","chose":"Support both — drag one card onto another, or tap two cards","rejected":["Drag only","Tap only"],"why":"Dragging is the right verb for a corkboard and the wrong one for a thumb. Both paths call the same confront(); the tap path exists so the game is actually playable on the device most people will open it on."},{"id":"d8","at":"2026-08-05T09:00:00Z","fork":"What happens when the player presents the wrong thing?","chose":"A cost to standing in the room, but never a fail state","rejected":["Three strikes and the inquiry is adjourned"],"why":"A hard fail state in a gallery piece means a stranger gets locked out of a five-minute experience and closes the tab. Standing is tracked, reported in the verdict, and never blocks. The cost is to pride."},{"id":"d15","at":"2026-08-05T09:45:00Z","fork":"Where do two more cases come from?","chose":"Interview kimi-k3 again, this time handing it the actual schema and the seven rules as a hard constraint","rejected":["Write them myself","Ask for prose and adapt it afterwards"],"why":"The first interview picked the concept; this one had a much harder brief, because a case is not a story — it is a set of propositions that must be provably solvable. Giving the model the exact proposition types, the rule list and the forward-chaining behaviour produced two designs that use the engine correctly and deliberately differently: the train case is one-dimensional so the travel rule bites hardest, and the studio case is built so the only way to catch the producer is a sighting by somebody else, which the engine turns into a claim about him. Both were authored into the schema by hand; the model designed, it did not emit code."},{"id":"d16","at":"2026-08-05T09:55:00Z","fork":"The new cases failed validation five different ways","chose":"Fix the cases, and fix the engine where the failure was really mine","rejected":["Loosen the checks until it passed"],"why":"Three were genuine physics errors — a producer needed three minutes to walk somewhere he had zero, a call boy could not reach the roof in the time available, a conductor could not be in the baggage van and the observation car seven minutes apart. One was an engine flaw: a map leg written as \"corrrear|c9\" instead of \"c9|corrrear\" silently dropped the edge, cut the rear of the train adrift, and made the solver confidently report that there was no route between carriages. The engine now normalises leg keys rather than trusting the author to sort them. The last was the validator being wrong: a true statement colliding with somebody's lie is the entire point of the game, not a defect, so \"stands unrefuted\" now means consistent with the record and with the other true statements."},{"id":"d17","at":"2026-08-05T10:00:00Z","fork":"How should the tutorial teach?","chose":"Derive every step from live game state and make the player prove a real contradiction","rejected":["A scripted overlay sequence","A video or an animated demo"],"why":"A scripted tutorial in a game whose whole claim is that nothing is scripted would be self-refuting. The coach reads the actual state — has this question been asked, is this statement on the record, does a proof exist pairing these two ids — so it cannot desync, and if the player wanders off and proves something else first it notices, congratulates them and stands down. The proof they end up with is the solver's, produced exactly as it would be with no wizard at all."},{"id":"d13","at":"2026-08-05T09:20:00Z","fork":"Drag-and-drop silently did nothing — reported after ship","chose":"Blank the dragged card's pointer-events for the duration of the hit test","rejected":["Track drop targets with pointerenter on every card","Drop the drag path and keep tap-to-pair"],"why":"The dropped card is by definition sitting under the cursor, so document.elementFromPoint always returned the card being dragged, the `other !== id` guard rejected it, and every drop was a no-op. Tap-to-pair worked, which is exactly why it survived my own QA — I had tested the path I built for phones. Also added a 6px threshold so a wobble during a tap is still a tap, and a live drop-target highlight so the interaction is visible before you commit to it."},{"id":"d14","at":"2026-08-05T09:25:00Z","fork":"Was the case actually solvable? A player reached Tolliver 1/2 and stalled","chose":"Simulate a perfect player in the validator and assert the inquiry can be finished from a cold start","rejected":["Trust the per-statement refutability counts","Loosen the unlock conditions on a hunch"],"why":"It turned out to be solvable — Tolliver's second contradiction is cross-witness (his sighting of Dr Ashgrove on the cliff path collides with her own alibi), and the old validator only ever tested a statement against exhibits and against the same witness's other lines. But I could not prove that without writing the simulation, and the simulation also closes a real class of bug the old checks could never see: an exhibit locked behind a witness who cannot be broken without it. Counting refutable statements is not the same as showing the case can be finished."},{"id":"d10","at":"2026-08-05T08:44:00Z","fork":"The first deploy was refused: Vercel flagged the pinned Next.js as a vulnerable version","chose":"Upgrade 15.5.4 → 16.3.0 and rebuild from a clean .next","rejected":["Pin around the check","Ship to a different host"],"why":"A refusal to deploy a known-vulnerable framework is a correct refusal, and arguing with it would be the wrong instinct on a page strangers are meant to open. The upgrade was clean; the only casualty was a stale .next directory that made Next 16 fail to find four routes until it was deleted."},{"id":"d11","at":"2026-08-05T08:38:00Z","fork":"Higgsfield returns 2k PNGs — /public came to 128 MB","chose":"Re-encode the cast and exhibits to WebP at display width, park the originals outside the repo, and rewrite the commit that had already swallowed them","rejected":["Ship the PNGs","Leave 119 MB in the git history"],"why":"119 MB of source images for a site whose largest portrait renders at 430px is a beautiful thing nobody waits for. /public went to 4.3 MB with no visible loss. The rewrite was safe because nothing had been pushed — had it been, the history would have kept the weight forever."},{"id":"d12","at":"2026-08-05T08:31:00Z","fork":"The OG card quoted a contradiction the case does not contain","chose":"Generate the card's proof text by calling the solver, and fix the same invented figure in two body-copy blocks","rejected":["Leave it — nobody checks a thumbnail"],"why":"The card said Dr Ashgrove had two minutes to cover nine minutes of ground. Plausible, on-theme, and completely made up: there is no such proof in this case. For a project whose entire claim is that the contradiction is computed rather than written, shipping a hand-written contradiction on the thumbnail would have been the exact lie it is about. The card now prints what the engine prints — 'Dr Ashgrove had 1 minute to cover 5 minutes of ground' — and if the case changes, the card changes."},{"id":"d9","at":"2026-08-05T08:12:00Z","fork":"Creating a GitHub repository","chose":"Keep committing locally and report it","rejected":["Retry the blocked command another way"],"why":"gh repo create was denied by the harness permission classifier. Working around a denial would be the wrong instinct, so the commit history is complete and local, and this is flagged rather than quietly dropped."}],"assets":[{"id":"og","kind":"image","label":"Open Graph card — 1200×630, the gallery thumbnail","path":"/og.png","maker":"Higgsfield nano_banana_pro plate, composited with sharp","prompt":"Photograph, 1974, shot from the floor of a domed astronomical observatory at night looking steeply up at a narrow steel service gantry that crosses beneath the open dome slit. Cold moonlight through the slit, one weak red work-lamp… — then the type, the rule and the real solver output laid over it in SVG.","credits":2.4},{"id":"icon","kind":"icon","label":"Favicon — three lines of testimony, one strike","path":"/icon.svg","maker":"hand-authored SVG","prompt":"Three stacked rules in brass and bone, struck through on the diagonal in oxblood. Reads at 16px as a statement being crossed out."},{"id":"cast-meridian-wren-composed","kind":"image","label":"The Meridian Inquiry · Ivy Wren — composed","path":"/cast/meridian/wren-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1974 Britain, seated at a plain table in a cold municipal room. Single hard key light from camera left, deep falloff, muted desaturated palette of ink black, bone white, oxblood and dull brass. 85mm, shallow depth of field, fine pushed Tri-X grain. Unglamorous, serious, no styling, no makeup, direct and uncomfortable. Plain dark olive-grey backdrop. No text, no captions, no borders. Subject: A woman of twenty-six with a pale, sharp, tired face, dark brown hair pinned back severely, thin wire-rimmed spectacles, wearing a heather-grey wool jumper over a white collared shirt, ink stains on her right hand.","credits":2.4},{"id":"cast-meridian-wren-pressed","kind":"image","label":"The Meridian Inquiry · Ivy Wren — pressed","path":"/cast/meridian/wren-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-meridian-wren-broken","kind":"image","label":"The Meridian Inquiry · Ivy Wren — broken","path":"/cast/meridian/wren-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-meridian-tolliver-composed","kind":"image","label":"The Meridian Inquiry · Samuel Tolliver — composed","path":"/cast/meridian/tolliver-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1974 Britain, seated at a plain table in a cold municipal room. Single hard key light from camera left, deep falloff, muted desaturated palette of ink black, bone white, oxblood and dull brass. 85mm, shallow depth of field, fine pushed Tri-X grain. Unglamorous, serious, no styling, no makeup, direct and uncomfortable. Plain dark olive-grey backdrop. No text, no captions, no borders. Subject: A weathered man of sixty-two, white stubble, deep-lined sunburnt face, thick grey hair, wearing a heavy waxed canvas work coat over a navy fisherman's jumper, a flat tweed cap on the table in front of him, big cracked hands.","credits":2.4},{"id":"cast-meridian-tolliver-pressed","kind":"image","label":"The Meridian Inquiry · Samuel Tolliver — pressed","path":"/cast/meridian/tolliver-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-meridian-tolliver-broken","kind":"image","label":"The Meridian Inquiry · Samuel Tolliver — broken","path":"/cast/meridian/tolliver-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-meridian-ashgrove-composed","kind":"image","label":"The Meridian Inquiry · Dr Constance Ashgrove — composed","path":"/cast/meridian/ashgrove-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1974 Britain, seated at a plain table in a cold municipal room. Single hard key light from camera left, deep falloff, muted desaturated palette of ink black, bone white, oxblood and dull brass. 85mm, shallow depth of field, fine pushed Tri-X grain. Unglamorous, serious, no styling, no makeup, direct and uncomfortable. Plain dark olive-grey backdrop. No text, no captions, no borders. Subject: A composed woman of fifty-four with silver-streaked dark hair in a low chignon, strong bones, minimal lines, wearing a black tailored wool coat over a high-necked charcoal blouse with a single pearl at the throat.","credits":2.4},{"id":"cast-meridian-ashgrove-pressed","kind":"image","label":"The Meridian Inquiry · Dr Constance Ashgrove — pressed","path":"/cast/meridian/ashgrove-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-meridian-ashgrove-broken","kind":"image","label":"The Meridian Inquiry · Dr Constance Ashgrove — broken","path":"/cast/meridian/ashgrove-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-sleeper-odile-composed","kind":"image","label":"The Saint-Croix Sleeper · Odile Marchand — composed","path":"/cast/sleeper/odile-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1923, seated in a wood-panelled railway compartment at night with the blind half down. One warm low lamp from camera right, deep shadow, muted desaturated palette of oxblood, brass, soot black and bone. 85mm, shallow depth of field, fine period grain. Unglamorous and watchful. No text, no captions, no borders. Subject: A poised woman of thirty-four with dark marcel-waved hair, fine sharp features and shadowed eyes, wearing a beaded dark grey travelling dress and a fur stole slipping off one shoulder, a cigarette case held tight in both hands.","credits":2.4},{"id":"cast-sleeper-odile-pressed","kind":"image","label":"The Saint-Croix Sleeper · Odile Marchand — pressed","path":"/cast/sleeper/odile-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-sleeper-odile-broken","kind":"image","label":"The Saint-Croix Sleeper · Odile Marchand — broken","path":"/cast/sleeper/odile-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-sleeper-rook-composed","kind":"image","label":"The Saint-Croix Sleeper · Tobias Rook — composed","path":"/cast/sleeper/rook-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1923, seated in a wood-panelled railway compartment at night with the blind half down. One warm low lamp from camera right, deep shadow, muted desaturated palette of oxblood, brass, soot black and bone. 85mm, shallow depth of field, fine period grain. Unglamorous and watchful. No text, no captions, no borders. Subject: A rumpled man of forty with thinning sandy hair, a heavy jaw and small clever eyes, wearing a creased brown three-piece suit with the waistcoat unbuttoned and a loosened knitted tie, a notebook in his breast pocket.","credits":2.4},{"id":"cast-sleeper-rook-pressed","kind":"image","label":"The Saint-Croix Sleeper · Tobias Rook — pressed","path":"/cast/sleeper/rook-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-sleeper-rook-broken","kind":"image","label":"The Saint-Croix Sleeper · Tobias Rook — broken","path":"/cast/sleeper/rook-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-sleeper-brant-composed","kind":"image","label":"The Saint-Croix Sleeper · Aldo Brant — composed","path":"/cast/sleeper/brant-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, 1923, seated in a wood-panelled railway compartment at night with the blind half down. One warm low lamp from camera right, deep shadow, muted desaturated palette of oxblood, brass, soot black and bone. 85mm, shallow depth of field, fine period grain. Unglamorous and watchful. No text, no captions, no borders. Subject: A composed man of fifty with iron-grey hair oiled flat, a clipped moustache and heavy-lidded eyes, wearing an immaculate dark blue wagons-lits conductor's tunic with brass buttons and a key ring at the belt.","credits":2.4},{"id":"cast-sleeper-brant-pressed","kind":"image","label":"The Saint-Croix Sleeper · Aldo Brant — pressed","path":"/cast/sleeper/brant-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-sleeper-brant-broken","kind":"image","label":"The Saint-Croix Sleeper · Aldo Brant — broken","path":"/cast/sleeper/brant-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-limegrove-vera-composed","kind":"image","label":"The Nine O'Clock Man · Vera Quill — composed","path":"/cast/limegrove/vera-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, London 1956, seated in a bare studio office with a blank wall behind. One hard tungsten key from camera left, deep falloff, muted desaturated palette of ink black, bone, dull gold and a single note of oxblood. 85mm, shallow depth of field, fine pushed grain. Unglamorous, tense, entirely unstyled. No text, no captions, no borders. Subject: A brisk woman of twenty-nine with dark hair set in a short 1956 wave, a strong plain face and tired eyes, wearing a fitted grey wool dress with a white collar, a stopwatch on a cord round her neck and a clipboard held against her chest.","credits":2.4},{"id":"cast-limegrove-vera-pressed","kind":"image","label":"The Nine O'Clock Man · Vera Quill — pressed","path":"/cast/limegrove/vera-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-limegrove-vera-broken","kind":"image","label":"The Nine O'Clock Man · Vera Quill — broken","path":"/cast/limegrove/vera-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-limegrove-danny-composed","kind":"image","label":"The Nine O'Clock Man · Danny Squires — composed","path":"/cast/limegrove/danny-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, London 1956, seated in a bare studio office with a blank wall behind. One hard tungsten key from camera left, deep falloff, muted desaturated palette of ink black, bone, dull gold and a single note of oxblood. 85mm, shallow depth of field, fine pushed grain. Unglamorous, tense, entirely unstyled. No text, no captions, no borders. Subject: A thin boy of seventeen with a bad short haircut, prominent ears and an eager anxious face, wearing a too-large brown jacket over a jumper and a shirt with the collar askew, a rolled call sheet in one fist.","credits":2.4},{"id":"cast-limegrove-danny-pressed","kind":"image","label":"The Nine O'Clock Man · Danny Squires — pressed","path":"/cast/limegrove/danny-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-limegrove-danny-broken","kind":"image","label":"The Nine O'Clock Man · Danny Squires — broken","path":"/cast/limegrove/danny-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"cast-limegrove-rex-composed","kind":"image","label":"The Nine O'Clock Man · Rex Halloran — composed","path":"/cast/limegrove/rex-composed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Medium-format documentary portrait photograph, London 1956, seated in a bare studio office with a blank wall behind. One hard tungsten key from camera left, deep falloff, muted desaturated palette of ink black, bone, dull gold and a single note of oxblood. 85mm, shallow depth of field, fine pushed grain. Unglamorous, tense, entirely unstyled. No text, no captions, no borders. Subject: A handsome heavy-set man of forty-eight with swept-back greying hair, a broad confident face and shrewd eyes, wearing a well-cut charcoal suit with the jacket open, tie loosened, one shirt cuff conspicuously missing its link.","credits":2.4},{"id":"cast-limegrove-rex-pressed","kind":"image","label":"The Nine O'Clock Man · Rex Halloran — pressed","path":"/cast/limegrove/rex-pressed.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: pressed.","credits":2.4},{"id":"cast-limegrove-rex-broken","kind":"image","label":"The Nine O'Clock Man · Rex Halloran — broken","path":"/cast/limegrove/rex-broken.webp","maker":"Higgsfield nano_banana_pro","prompt":"Generated with this character's composed portrait passed back as an image reference — which is what holds the face, the clothes and the hands identical across all three moods. Pose: broken.","credits":2.4},{"id":"ex-meridian-ev-fault","kind":"image","label":"The Meridian Inquiry · Generator fault recorder","path":"/exhibits/meridian/fault.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-mains-back","kind":"image","label":"The Meridian Inquiry · Supply restoration stamp","path":"/exhibits/meridian/mains.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-dome","kind":"image","label":"The Meridian Inquiry · Dome drive log","path":"/exhibits/meridian/domelog.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-doorlog","kind":"image","label":"The Meridian Inquiry · Library door log","path":"/exhibits/meridian/doorlog.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-coat","kind":"image","label":"The Meridian Inquiry · Miss Wren's coat","path":"/exhibits/meridian/coat.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-radio","kind":"image","label":"The Meridian Inquiry · Warden's radio log","path":"/exhibits/meridian/radio.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-plate","kind":"image","label":"The Meridian Inquiry · Annotated photographic plate","path":"/exhibits/meridian/plate.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-meridian-ev-rail","kind":"image","label":"The Meridian Inquiry · Gantry handrail print","path":"/exhibits/meridian/rail.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1974. The object lies flat on a scuffed dark grey-green table under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted desaturated colour, fine film grain, slight vignette. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-lamps","kind":"image","label":"The Saint-Croix Sleeper · Lamp circuit log","path":"/exhibits/sleeper/lamps.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-steward","kind":"image","label":"The Saint-Croix Sleeper · Dining car chit","path":"/exhibits/sleeper/steward.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-round","kind":"image","label":"The Saint-Croix Sleeper · Attendant's round book","path":"/exhibits/sleeper/round.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-berth","kind":"image","label":"The Saint-Croix Sleeper · Berth chart and round book","path":"/exhibits/sleeper/berth.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-bonds","kind":"image","label":"The Saint-Croix Sleeper · Bond wrapper","path":"/exhibits/sleeper/bonds.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-porter","kind":"image","label":"The Saint-Croix Sleeper · Porter's statement","path":"/exhibits/sleeper/porter.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-ticket","kind":"image","label":"The Saint-Croix Sleeper · Mr Rook's typewriter ribbon","path":"/exhibits/sleeper/ribbon.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-sleeper-sv-key","kind":"image","label":"The Saint-Croix Sleeper · Baggage van key register","path":"/exhibits/sleeper/key.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1923. The object lies flat on a dark polished railway table under one hard lamp, shot from directly above. Cold light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-door","kind":"image","label":"The Nine O'Clock Man · Dressing Room 2 door contact","path":"/exhibits/limegrove/door.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-transmission","kind":"image","label":"The Nine O'Clock Man · Transmission log","path":"/exhibits/limegrove/transmission.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-propmaster","kind":"image","label":"The Nine O'Clock Man · Prop master's statement","path":"/exhibits/limegrove/propmaster.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-ashtray","kind":"image","label":"The Nine O'Clock Man · Roof walkway ashtray","path":"/exhibits/limegrove/ashtray.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-callsheet","kind":"image","label":"The Nine O'Clock Man · Marked call sheet","path":"/exhibits/limegrove/callsheet.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-tea","kind":"image","label":"The Nine O'Clock Man · Canteen till roll","path":"/exhibits/limegrove/tea.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-lobbybook","kind":"image","label":"The Nine O'Clock Man · Commissionaire's book","path":"/exhibits/limegrove/lobbybook.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"ex-limegrove-lv-scratch","kind":"image","label":"The Nine O'Clock Man · Dressing Room 2 cufflink","path":"/exhibits/limegrove/cufflink.webp","maker":"Higgsfield nano_banana_pro","prompt":"Forensic evidence photograph, 1956. The object lies flat on a scuffed grey studio bench under one hard overhead lamp, shot from directly above. Cold institutional light, deep shadow at the edges, muted colour, fine film grain. Documentary and unstyled. No hands, no people, no captions, no watermark.","credits":2.4},{"id":"voice-meridian-w-library","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — “The library. From ten past ten until I heard the sho…”","path":"/voice/meridian/w-library.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"The library. From ten past ten until I heard the shouting — near enough eleven. I was checking last winter's plates against the catalogue.","credits":0.3},{"id":"voice-meridian-w-saw-nix","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — “Half past nine, in the control room. He was writing …”","path":"/voice/meridian/w-saw-nix.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"Half past nine, in the control room. He was writing on a plate and he did not look up when I spoke to him.","credits":0.3},{"id":"voice-meridian-w-drive-idle","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — “No. The drive was quiet all evening — I'd have felt …”","path":"/voice/meridian/w-drive-idle.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"No. The drive was quiet all evening — I'd have felt it through the floor. It shakes the whole building.","credits":0.3},{"id":"voice-meridian-w-saw-ashgrove","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — “Dr Ashgrove. I saw her out in the car park about twe…”","path":"/voice/meridian/w-saw-ashgrove.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"Dr Ashgrove. I saw her out in the car park about twenty to eleven, standing by her car in the rain.","credits":0.3},{"id":"voice-meridian-w-truth-path","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — “I was on the cliff path. I was taking plates off the…”","path":"/voice/meridian/w-truth-path.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"I was on the cliff path. I was taking plates off the site — his plates. He'd been printing things that weren't there, and I was going to show somebody. That is what I was doing while he died.","credits":0.3},{"id":"voice-meridian-wren-concession","kind":"audio","label":"The Meridian Inquiry · Ivy Wren — the concession","path":"/voice/meridian/wren-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Imogen","prompt":"All right. All right — stop. I wasn't in the library. I have not been in the library since Tuesday.","credits":0.3},{"id":"voice-meridian-t-mains","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “I had her down from a quarter to eleven till eleven.…”","path":"/voice/meridian/t-mains.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"I had her down from a quarter to eleven till eleven. New fuse in the main box. Sixteen minutes of dark and not a soul complained.","credits":0.3},{"id":"voice-meridian-t-plant","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “In the shed. That's where the box is. I was there th…”","path":"/voice/meridian/t-plant.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"In the shed. That's where the box is. I was there the better part of half an hour.","credits":0.3},{"id":"voice-meridian-t-saw-ashgrove","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “The lady trustee. Went past on the cliff path about …”","path":"/voice/meridian/t-saw-ashgrove.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"The lady trustee. Went past on the cliff path about a quarter to eleven, walking quick, no coat on her.","credits":0.3},{"id":"voice-meridian-t-cottage","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “I went to my cottage and I put the kettle on. I didn…”","path":"/voice/meridian/t-cottage.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"I went to my cottage and I put the kettle on. I didn't know a thing about it till the doctor's car came up.","credits":0.3},{"id":"voice-meridian-t-truth-mains","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “I had her down at twenty past ten, not a quarter to …”","path":"/voice/meridian/t-truth-mains.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"I had her down at twenty past ten, not a quarter to eleven, and she was back on by twenty-five to. I've been telling it wrong all night because I could not stand to have been asleep at the hour of it.","credits":0.3},{"id":"voice-meridian-t-truth-shed","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — “I sat down in that shed and I shut my eyes and I did…”","path":"/voice/meridian/t-truth-shed.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"I sat down in that shed and I shut my eyes and I did not get up again till near eleven. I saw nobody on that path. I said I did because I thought it would help somebody, and I see now that it would not.","credits":0.3},{"id":"voice-meridian-tolliver-concession","kind":"audio","label":"The Meridian Inquiry · Samuel Tolliver — the concession","path":"/voice/meridian/tolliver-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Alistair","prompt":"…You have the tape there in your hand, don't you. Go on then. Read it out. I'll not argue with a machine.","credits":0.3},{"id":"voice-meridian-a-control","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “The control room. From half past ten onward. I did n…”","path":"/voice/meridian/a-control.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"The control room. From half past ten onward. I did not move from that chair until the ambulance came.","credits":0.3},{"id":"voice-meridian-a-saw-fall","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “Because I saw him. He was up on the gantry, leaning …”","path":"/voice/meridian/a-saw-fall.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"Because I saw him. He was up on the gantry, leaning out over the rail, and then he was not there any more.","credits":0.3},{"id":"voice-meridian-a-never-gantry","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “I am fifty-four years old and I do not climb ladders…”","path":"/voice/meridian/a-never-gantry.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"I am fifty-four years old and I do not climb ladders. I have never once been up there. Not that night, not ever.","credits":0.3},{"id":"voice-meridian-a-saw-wren","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “She was. I could see her through the library door th…”","path":"/voice/meridian/a-saw-wren.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"She was. I could see her through the library door the whole time — reading, with her back to me.","credits":0.3},{"id":"voice-meridian-a-library","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “That the trust was withdrawing. I told him in the li…”","path":"/voice/meridian/a-library.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"That the trust was withdrawing. I told him in the library, a little after ten, and he laughed at me.","credits":0.3},{"id":"voice-meridian-a-truth","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — “I went up because he would not come down. That is th…”","path":"/voice/meridian/a-truth.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"I went up because he would not come down. That is the whole of it. He was leaning out over that rail to make a point of not looking at me, and I put my hand on the rail, and I said his name, and he turned round too quickly. I did not touch him. I have said that to myself every hour since and I still cannot make it sound true.","credits":0.3},{"id":"voice-meridian-ashgrove-concession","kind":"audio","label":"The Meridian Inquiry · Dr Constance Ashgrove — the concession","path":"/voice/meridian/ashgrove-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Vesper","prompt":"…No. No, you're right. You are right, and I have been sitting here for two hours knowing you would get to it.","credits":0.3},{"id":"voice-sleeper-o-c3","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “In my compartment. I did not leave it once between h…”","path":"/voice/sleeper/o-c3.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"In my compartment. I did not leave it once between half past ten and half past eleven — not for a moment, not for anything.","credits":0.3},{"id":"voice-sleeper-o-lamp","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “I could see nothing. The lamps had failed the whole …”","path":"/voice/sleeper/o-lamp.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"I could see nothing. The lamps had failed the whole length of the carriage — it was pitch dark out there from eleven until well after.","credits":0.3},{"id":"voice-sleeper-o-late","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “I locked my door at half past and I did not open it …”","path":"/voice/sleeper/o-late.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"I locked my door at half past and I did not open it again until the police came aboard at Ambérieu.","credits":0.3},{"id":"voice-sleeper-o-knew","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “By sight. He carried papers for my father's bank, ye…”","path":"/voice/sleeper/o-knew.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"By sight. He carried papers for my father's bank, years ago. We had not spoken since Lyon and we did not speak that night.","credits":0.3},{"id":"voice-sleeper-o-truth-diner","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “Very well. I was in the dining car at ten past eleve…”","path":"/voice/sleeper/o-truth-diner.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"Very well. I was in the dining car at ten past eleven. I was saying goodbye to somebody, and he is not my husband, and that is the whole of my crime — and now it will be in every paper in France.","credits":0.3},{"id":"voice-sleeper-o-truth-saw","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — “And I saw the conductor. Going forward, past the din…”","path":"/voice/sleeper/o-truth-saw.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"And I saw the conductor. Going forward, past the dining car door, at twelve minutes past — I remember because I turned my face away so he would not know me.","credits":0.3},{"id":"voice-sleeper-odile-concession","kind":"audio","label":"The Saint-Croix Sleeper · Odile Marchand — the concession","path":"/voice/sleeper/odile-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Tallulah","prompt":"…Stop. Please stop. You have no idea what you are asking me to say out loud in a room with a stenographer in it.","credits":0.3},{"id":"voice-sleeper-r-observation","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “The observation car, from half past ten onward. I ha…”","path":"/voice/sleeper/r-observation.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"The observation car, from half past ten onward. I had the whole of it to myself and a machine to feed, and I fed it.","credits":0.3},{"id":"voice-sleeper-r-saw-vasseur","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “Once. He came down the rear corridor about half past…”","path":"/voice/sleeper/r-saw-vasseur.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"Once. He came down the rear corridor about half past ten, holding that satchel against his chest like a man expecting to be robbed.","credits":0.3},{"id":"voice-sleeper-r-typing","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “A piece about the sleeping-car trade. Nine hundred w…”","path":"/voice/sleeper/r-typing.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"A piece about the sleeping-car trade. Nine hundred words and not one of them worth the paper, if you want my professional opinion.","credits":0.3},{"id":"voice-sleeper-r-odile","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “I did not. I could not have — you cannot see the din…”","path":"/voice/sleeper/r-odile.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"I did not. I could not have — you cannot see the dining car from the back of a train, whatever anyone tells you.","credits":0.3},{"id":"voice-sleeper-r-truth-asleep","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “All right. I was asleep. In my own compartment, from…”","path":"/voice/sleeper/r-truth-asleep.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"All right. I was asleep. In my own compartment, from about twenty-five past ten until twenty past eleven, with my mouth open and my notebook shut.","credits":0.3},{"id":"voice-sleeper-r-truth-brant","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — “But I did see the conductor. Twenty-five to midnight…”","path":"/voice/sleeper/r-truth-brant.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"But I did see the conductor. Twenty-five to midnight, near enough — he came into the observation car behind me and stood there looking out at nothing at all.","credits":0.3},{"id":"voice-sleeper-rook-concession","kind":"audio","label":"The Saint-Croix Sleeper · Tobias Rook — the concession","path":"/voice/sleeper/rook-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Caspian","prompt":"…Yes. Fine. I was asleep with my mouth open like everybody else on that train. Put it in the record, it can hardly hurt my reputation.","credits":0.3},{"id":"voice-sleeper-b-diner","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — “The dining car, from five past eleven until twenty p…”","path":"/voice/sleeper/b-diner.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"The dining car, from five past eleven until twenty past. The steward will tell you. I take my supper standing at that hour.","credits":0.3},{"id":"voice-sleeper-b-saw-odile","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — “Mademoiselle from number three. I saw her sitting up…”","path":"/voice/sleeper/b-saw-odile.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"Mademoiselle from number three. I saw her sitting up in her compartment at ten past, reading, quite calm.","credits":0.3},{"id":"voice-sleeper-b-late","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — “I looked in on the observation car about twenty-five…”","path":"/voice/sleeper/b-late.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"I looked in on the observation car about twenty-five to midnight and stayed there until we were stopped at Ambérieu. There was a gentleman typing.","credits":0.3},{"id":"voice-sleeper-b-nokey","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — “I did not go near it. There is no call for me in the…”","path":"/voice/sleeper/b-nokey.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"I did not go near it. There is no call for me in the baggage van between Lyon and the frontier, and I did not set foot in it.","credits":0.3},{"id":"voice-sleeper-b-truth","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — “Twenty-two years I have carried those keys and not o…”","path":"/voice/sleeper/b-truth.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"Twenty-two years I have carried those keys and not one person has ever asked me to account for them. He had a satchel and no friends on that train and five minutes standing still at Culoz. I put it in the van and I locked it and I went back and I stood in that observation car and let a journalist tell me about the sleeping-car trade.","credits":0.3},{"id":"voice-sleeper-brant-concession","kind":"audio","label":"The Saint-Croix Sleeper · Aldo Brant — the concession","path":"/voice/sleeper/brant-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Sterling","prompt":"…You have the key register. Of course you have the key register. There is only one man on this train it can mean.","credits":0.3},{"id":"voice-limegrove-v-desk","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “At my desk. Continuity does not leave the desk durin…”","path":"/voice/limegrove/v-desk.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"At my desk. Continuity does not leave the desk during transmission — that is the entire job. Twenty past eight to half past, at my desk.","credits":0.3},{"id":"voice-limegrove-v-saw-wicks","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “On the floor, waiting to go on. He was standing by t…”","path":"/voice/limegrove/v-saw-wicks.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"On the floor, waiting to go on. He was standing by the flats at twenty-five to nine, doing that thing with his cuffs he always did.","credits":0.3},{"id":"voice-limegrove-v-log","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “I logged the cut at forty-four minutes past and I lo…”","path":"/voice/limegrove/v-log.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"I logged the cut at forty-four minutes past and I logged the sketch as not taken. Both in my hand, both at the time.","credits":0.3},{"id":"voice-limegrove-v-danny","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “The call boy is meant to be in the corridor and the …”","path":"/voice/limegrove/v-danny.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"The call boy is meant to be in the corridor and the call boy is never in the corridor. Make of that what you like.","credits":0.3},{"id":"voice-limegrove-v-truth-canteen","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “I was in the canteen. From twenty past until half pa…”","path":"/voice/limegrove/v-truth-canteen.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"I was in the canteen. From twenty past until half past, with a cigarette and two teas going cold, and if you tell the floor manager I will deny every word of it.","credits":0.3},{"id":"voice-limegrove-v-truth-lobby","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — “And coming back through the lobby I passed Mr Hallor…”","path":"/voice/limegrove/v-truth-lobby.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"And coming back through the lobby I passed Mr Halloran. Twenty minutes to nine, near enough — he was coming the other way, quick, and he did not look at me. I remember thinking that was odd, because he always looks at me.","credits":0.3},{"id":"voice-limegrove-vera-concession","kind":"audio","label":"The Nine O'Clock Man · Vera Quill — the concession","path":"/voice/limegrove/vera-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Mabel","prompt":"…Oh, for heaven's sake. Yes. All right. Yes, and I have been sick about it since the moment they found him.","credits":0.3},{"id":"voice-limegrove-d-corridor","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — “The corridor, sir. Outside the dressing rooms, where…”","path":"/voice/limegrove/d-corridor.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"The corridor, sir. Outside the dressing rooms, where you're meant to be. All the way from half past to the end of the sketch.","credits":0.3},{"id":"voice-limegrove-d-heard","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — “I heard him. Mr Wicks, in number two, having a row w…”","path":"/voice/limegrove/d-heard.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"I heard him. Mr Wicks, in number two, having a row with somebody at twenty to nine — proper shouting, both of them.","credits":0.3},{"id":"voice-limegrove-d-called","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — “I called him at half past like the sheet says. Knock…”","path":"/voice/limegrove/d-called.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"I called him at half past like the sheet says. Knocked and called and he said he'd be down, and that was the last of it.","credits":0.3},{"id":"voice-limegrove-d-rex","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — “Mr Halloran? No, sir. He's up the gallery all throug…”","path":"/voice/limegrove/d-rex.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"Mr Halloran? No, sir. He's up the gallery all through a live one, everybody knows that.","credits":0.3},{"id":"voice-limegrove-d-truth-roof","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — “I was on the roof walkway. Smoking. I never heard no…”","path":"/voice/limegrove/d-truth-roof.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"I was on the roof walkway. Smoking. I never heard nothing and I never saw nothing and I made it up because everyone kept asking me and I hadn't got anything to give them.","credits":0.3},{"id":"voice-limegrove-danny-concession","kind":"audio","label":"The Nine O'Clock Man · Danny Squires — the concession","path":"/voice/limegrove/danny-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Remy","prompt":"…I never heard nothing. I'm sorry. I'm really sorry, I just wanted to be some use to somebody for once.","credits":0.3},{"id":"voice-limegrove-r-gallery","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “The control gallery. From half past eight until they…”","path":"/voice/limegrove/r-gallery.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"The control gallery. From half past eight until they came up and told me, and there are four people who sat in that room with me.","credits":0.3},{"id":"voice-limegrove-r-saw-wicks","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “Alive, on my monitor and with my own eyes through th…”","path":"/voice/limegrove/r-saw-wicks.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"Alive, on my monitor and with my own eyes through the glass — on the floor at twenty-five to nine. I watched him wait for a cue he never took.","credits":0.3},{"id":"voice-limegrove-r-never-left","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “Not once. You do not leave a gallery during a live t…”","path":"/voice/limegrove/r-never-left.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"Not once. You do not leave a gallery during a live transmission. I have not left one in twenty years and I did not leave that one.","credits":0.3},{"id":"voice-limegrove-r-lobby-denial","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “Then Miss Quill is mistaken, or Miss Quill is fright…”","path":"/voice/limegrove/r-lobby-denial.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"Then Miss Quill is mistaken, or Miss Quill is frightened, or Miss Quill is lying. I was in the gallery. I was in the gallery all night.","credits":0.3},{"id":"voice-limegrove-r-money","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “Eleven thousand pounds, and he had begun to say so a…”","path":"/voice/limegrove/r-money.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"Eleven thousand pounds, and he had begun to say so at parties. I have never pretended otherwise and I am not going to start in front of a stenographer.","credits":0.3},{"id":"voice-limegrove-r-truth","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — “I went down during the musical number. Eleven thousa…”","path":"/voice/limegrove/r-truth.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"I went down during the musical number. Eleven thousand pounds and a man telling it as an anecdote — you cannot imagine what that is like to sit above every Friday night. I only went to make him stop saying it. I have gone over the four minutes it took a great many times since, and I still cannot find the moment I decided.","credits":0.3},{"id":"voice-limegrove-rex-concession","kind":"audio","label":"The Nine O'Clock Man · Rex Halloran — the concession","path":"/voice/limegrove/rex-concession.mp3","maker":"Higgsfield text2speech_v2 (elevenlabs) · voice Harrison","prompt":"…She always looks at me. That is the thing you have got me with, in the end. She always looks at me and that night I could not let her.","credits":0.3},{"id":"data-case","kind":"data","label":"Three cases, as propositions — every statement and exhibit in the solver's schema","path":"/insights.json","maker":"concepts by kimi-k3, authored into the schema by hand, proven by scripts/validate-cases.ts","prompt":"Three worlds of 9 places each, with sparse walking legs the solver closes into all-pairs shortest paths, sightline tables, and 24 exhibits. The validator asserts every intended refutation fires, no spurious one does, and a perfect player can finish each case from a cold start."}],"models":[{"provider":"anthropic","model":"claude-opus-5 (via Claude Code)","role":"build-time intelligence — all code, the solver, the case, art direction"},{"provider":"moonshotai","model":"moonshotai/kimi-k3 via OpenRouter","role":"chose the concept, named the failure mode to guard against, and named the game"},{"provider":"higgsfield","model":"nano_banana_pro","role":"face-locked cast portraits and forensic exhibit photography"},{"provider":"higgsfield","model":"text2speech_v2 (elevenlabs)","role":"all spoken testimony — three voices, twenty lines"}],"spend":{"budgetUsd":45,"monthlyBudgetUsd":5,"monthlyCostUsd":0,"totalUsd":0.1292,"higgsfieldCredits":143.85,"entries":[{"at":"2026-08-05T08:02:13Z","label":"kimi-k3 — concept interview (round 1; spent its whole budget on reasoning and returned an empty message, but the trace was the useful part)","usd":0.0349},{"at":"2026-08-05T08:04:41Z","label":"kimi-k3 — concept verdict (round 2, reasoning capped)","usd":0.0119},{"at":"2026-08-05T08:06:33Z","label":"Higgsfield text2speech_v2 — TTS smoke test, 6.5s of audio","usd":0,"credits":0.3},{"at":"2026-08-05T08:25:00Z","label":"Higgsfield text2speech_v2 — all 20 spoken lines, three voices","usd":0,"credits":6},{"at":"2026-08-05T09:10:00Z","label":"Higgsfield nano_banana_pro — 9 face-locked cast portraits","usd":0,"credits":21.6},{"at":"2026-08-05T09:20:00Z","label":"Higgsfield nano_banana_pro — 8 forensic exhibit photographs","usd":0,"credits":19.4},{"at":"2026-08-05T09:25:00Z","label":"Higgsfield nano_banana_pro — observatory plate for the OG card","usd":0,"credits":2.4},{"at":"2026-08-05T08:55:00Z","label":"Vercel hosting — static site, hobby tier","usd":0},{"at":"2026-08-05T09:40:00Z","label":"kimi-k3 — designed cases 2 and 3 against the engine's actual schema","usd":0.0824},{"at":"2026-08-05T10:15:00Z","label":"Higgsfield text2speech_v2 — 40 spoken lines across two new cases","usd":0,"credits":12},{"at":"2026-08-05T10:20:00Z","label":"Higgsfield nano_banana_pro — 18 portraits and 16 exhibits for two new cases","usd":0,"credits":84.1}]},"openQuestions":[{"q":"Did the solver generalise to more cases without touching the engine?","a":"Almost. Two further cases — a train and a television studio — were authored against the same seven rules with no new rule types needed, which is the strongest evidence the schema was the right size. The one engine change was a bug fix, not a feature: map legs are now normalised rather than trusting the author to write the two place ids in sorted order. The gap I predicted is still there — nothing reasons about an event *requiring* a person to be present — and no case has needed it yet."},{"q":"What would one more key unlock?","a":"A database would let cases be authored in the browser and shared by URL — the schema is small enough that a case is a few kilobytes of JSON, and the validator could run client-side before publishing. That turns a game into a tool."},{"q":"What would more time buy?","a":"Two things, in order: a second case to prove the engine generalises, and a proper contradiction-hint system that uses the solver in reverse — telling you which of your exhibits *could* refute something without telling you how."},{"q":"What got cut?","a":"A generated video establishing shot of the observatory at night, and per-witness ambient room tone. Both are polish on a thing whose core was still being validated at the two-thirds mark, and Rule C3 says a finished small thing beats an abandoned big one."}]}