overgenerate, then judge — the studio's house algorithm
in the fire: mappa · biome/gacha · hoop/econ · fable · the field: generate-and-test → propose-and-verify
Build a big, awkward, noisy set. Put a judge in charge. Keep the good ones.
It turns out that's not a trick — it's a method, and it has been one for sixty years under half a dozen names. We kept reaching for the same hammer across unrelated projects: a world generator that spits out thousands of planets, a gacha that rolls whole ecosystems, a town engine that breeds societies, a puzzle factory that mints logic grids. None of them try to author the good artifact directly. Each one overproduces — floods the space with candidates — and then hands the pile to a second machine whose only job is to say which of these is any good. The good ones aren't designed. They're survived.
The split is the whole idea. The generator can be dumb and prolific because it doesn't have to be right — it only has to be diverse. The judge can be expensive and exacting because it runs after the fact, on finished candidates, where the question "is this good?" is usually far easier than the question "how do I make a good one?". That asymmetry — that verifying is cheaper than generating — is the lever the whole family pulls on. It's why a small model with a verifier can match a model thirty times its size, why a chess program can beat you by guessing badly and checking well, and why our gacha can find a self-sustaining ecosystem it could never have planned.
Three things make our version of it work:
Every judge here is a piece of running code with teeth: a constraint solver that counts solutions, a breadth-first search that finds the optimal par, an eigenvalue test that asks whether a food web is actually stable, a tribunal of playouts that measures whether a card game rewards skill. The verdict is a certificate, not an opinion.
Where the judge scores taste rather than correctness — is this world interesting? is this town alive? — we don't pretend the number is objective. mappa's own notes put it best:
"The score is for ranking — surfacing the gems out of a seed line — not for claiming a world is objectively good… the score is deliberately a designed aesthetic, not a discovered one." mappa — lib/world-signals.js
The honest posture is half the discipline: a battery of weighted signals plus a list of degeneracy flags — the boring failure modes (waterworld, iceball, monobiome, monoculture) we explicitly screen out.
Because every generator is deterministic (xmur3 → mulberry32 and friends), candidate
n is the same artifact on every machine, forever. So the judge's certificate can be
attached to a URL: /gacha/?n=…, /econ/?seed=…,
/mappa/?seed=…, fable's page-n puzzles. The good one you found is the good one
anyone else finds at that address — solved, graded, and provably so.
The same loop, four shapes of fire. The judge changes form completely from project to project — that's the point — but the discipline never does.
| surface | the noisy set (generator) | the judge | what ships (certificate) |
|---|---|---|---|
| worlds — the judge scores viability & interestingness | |||
| mappaworld | plates, tectonics, climate, rivers & biomes simulated from a seed — ~9–16k Voronoi cells per planet | an interestingness battery: 6 weighted signals (sea, structure, relief, climate, hydrology, habitability) + 9 degeneracy flags | score 0–100 + auto-descriptor ("a frozen archipelago, 71% ocean, with inland sea and great rivers") |
| biome/gachaworld | roll K=14–34 organisms from a 60-creature deck under guild quotas; wire who-eats-whom by ecological rules; prune the starvers | a viability oracle: does the loop close? does it persist? is it stable (community-matrix eigenvalue α<0)? fed, aired, robust? | Legendary≥88EpicRare … rarity = viability minus degeneracy |
| hoop/econworld | a social genome (role-mix, building footprints, affiliations, archetype) breeds a 6,000-cell town where people wear many hats | a vitality scorer: supply closure, interaction thickness, Granovetter weave, bridging, third-places, employment — then a hub-removal shock test | vitality 0–100 → Thriving … Failing; every (genome, seed) is atproto-stable |
| games & puzzles — the judge certifies, never opines · fable's doctrine: seeded · certified · graded | |||
| puzzgame | roll a logic-puzzle genus, generate a full solution, carve fair clues from it | CSP solver — countSolutions() (bounded backtrack) + logicSolve() (pure propagation, no guessing) |
uniquefair + technique-fingerprint difficulty |
| knackgame | composable grid mechanics (push, ice, keys, gates, pits) across 6 genres | BFS over the state graph: solvable? optimal par? did the headline mechanic actually fire? | solvableoptimal par + the mechanic earns its place |
| fluxgame | continuous-space physics puzzles — gravity, magnets, goo, bumpers (deterministic f64) | action-space sweep: 96×18 launches → win-map → basins → a fine-robust answer that survives a 0.4° nudge (Rust cross-check) | solvablebasin-robust + difficulty = how small the winning basin is |
| gyregame | the same physics, but on a torus — geodesics, Christoffel terms, forces projected to the tangent plane | the sweep adapted to the surface, plus winding numbers only the topology can express | solvablefine-robust + topologically interesting |
| morphgame | a generator of generators: sample substrate (grid · cylinder · torus · Möbius · Klein · hex) × law × goal × aesthetic | one substrate-agnostic BFS oracle certifies any rolled genome solvable; reject the duds | solvable on any manifold + a stable genome label |
| driftgame | puzzles in meaning-space — 7,000 word embeddings; cross a semantic gulf, or fold 12 words into 3 families | BFS on the kNN graph (ladder par) + a margin oracle (fold separability ≥ 0) | optimal crossingmargin-separable over a frozen substrate |
| forgegame | laws no one wrote: sample a movement genome from a closed rule-DSL | three gates — ALIVE (≥30 reachable states), NOVEL (fingerprint ≥ 0.22 from all prior — novelty search), PLAYABLE (BFS certifies) | a deterministic codex — the n-th admitted law is a permalink |
| dealgame | a card-game grammar: trick-taking or shedding × suits × ranks × scoring → a self-writing rulebook | the tribunal: seeded random-vs-greedy playouts, measured on three gates — terminates, rewards skill, plays fair | terminatesskillfulfair — games no one wrote, proved playable |
Notice forge in particular: its NOVEL gate keeps a candidate
law only if its behavioral fingerprint is far enough from every law admitted before it. That
isn't "keep the best" — it's "keep the different." Which is the exact move that names a whole
branch of the literature below.
This is the part the projects kept gesturing at: surely someone studies this. They do — many someones, mostly without talking to each other. The same architecture (a cheap proposer + a separate evaluator) has been reinvented in classic AI, evolutionary computation, natural-language processing, deep learning, game design, and now large language models. Here is the through-line and the canon.
| generate-and-test | classic AI / cognitive science. The original and most general term — a generator proposes, a tester rejects the unfit (Newell & Simon). Degenerate baseline: the "British Museum algorithm." |
| search-based generation | procedural content generation / game AI. The judge is a fitness function driving an iterative search; contrasted with pure generate-and-test PCG. |
| quality-diversity / illumination | evolutionary computation. Keep the best of each kind, not one winner — novelty search, MAP-Elites. (This is forge's gate.) |
| overgenerate-and-rank | NLP / parsing / MT / speech. Emit an n-best list, then re-score it with a discriminative judge. |
| propose-and-verify · generator–verifier | modern LLM / RL. A cheap verifier filters an expensive generator's samples (best-of-N) — the current restatement, riding the "generation–verification gap." |
| generator–discriminator | deep learning. The special case where the judge is learned jointly and adversarially (GANs). |
?n=, ?seed=).The oracle changes shape every time — CSP, BFS, action-sweep, eigenvalues, embeddings, a tribunal of playouts — but the discipline never does: overgenerate, then judge.