One day, 107 failed wishes — every single one answered
We pulled a week of real wishes that came back empty and worked through all 107 of them in one day. Most now just build. Some were honest dead ends (greetings, resets, half-sentences) — those got documented reasons. The big feature dreams (kart racing, health bars, climbing) went straight onto the owner's priority list.
dev notes
The fail-promotion loop with teeth: every failed prod sentence lands in a ledger with a 14-day clock — cover it with a deterministic law, or waive it with a written reason (the guard enforces non-empty reasons). Final tally: 65 law-covered, 42 reasoned waives, 0 open. Coverage is probe-measured against a typical-world fixture (incl. a no-target probe for word-anchor laws), never assumed. The weekly miner keeps feeding it.
Animals, hunters and win conditions — one sentence each
"Add an animal" drops a farm friend, "animals near the trees" settles a little menagerie by your forest, and "defeat the enemies to win" becomes a real win condition — with three enemies included if your world has none yet.
dev notes
Deterministic empty-plan laws on real factory defs (chicken/sheep/pig/goat/cow): tree-anchored placement via hash angle/radius with collision-rect avoidance and a retry loop (the single-spot hole was probe-caught), typo-tolerant defeat law that counts existing hostiles before spawning new ones, follow-law hunters on line-of-sight aggro.
Mountain ranges in earthy colors
"Add massive mountain ranges" raises five peaks along the north edge in rotating browns and grays — big, walkable, and movable as two range pieces.
dev notes
The planned ridge backbone burst the 4000-part compile budget (the ghost-structure class) — empirically recalibrated to two sibling-tagged mound entries (≈2326 + ≈1403 parts, compile-pinned). Per-op earthy tints, mega class for 'massive'. And a reference guard: 'villages NEAR the mountains' now builds villages, never more mountains.
Tune your world by talking: spawner timing, aggro zombies
"Make the spawner every 2 seconds" retunes your monster waves in place. "Make the zombie aggro" flips a wandering zombie into a hunter — safely: if game rules point at that zombie, the studio leaves it alone and tells you.
dev notes
Edit-class laws with the exactly-one rule: spawner timing via logic.edit (in-place — ids and wired references survive, server clamps apply); behavior changes follow the remove+add doctrine (field sets depend on behavior) with a reference guard over defeat/entities edges. Aggro pursue-distance was honestly waived: it's a kernel constant for standard hostiles — now a line on the owner's feature list.
Rooftop decor, fire hydrants and sidewalks
"Add items to the rooftops" sets lanterns and crates on top of your towers — at the right height. "Fire hydrants near the buildings" plants them by each wall. "Make the floor sidewalk" paves the whole ground concrete-gray.
dev notes
Three scatter laws on the shared world-rect helper: rooftop items ride the y channel (at [x, tower-height, z]), hydrants (a real city-batch def) sit at each building's rect edge, sidewalk maps to ground:stone + a concrete groundColor. All typo-tolerant ('hydrats', 'sidwalk') — real creators type fast.
Name it, change it — "make the platform bigger" just works
You no longer need to click something first. If your world has exactly one platform, tower, gate, bridge, ladder, staircase or wall, naming it is enough: "make the platform bigger", "recolor the tower", "remove the wall". If there are several, the studio stays honest and asks you to point.
dev notes
Word-anchor extension of the selection net: an edit verb + a named structure class (en+de, incl. the measured 'flatform' typo) resolves against the world — exactly ONE structure carrying that plan-op becomes the anchor, feeding every existing net branch (comparative k, palette rotation, remove). Ambiguous, mass ('all…') and new-build wishes stay silent by design; selection and look-at always win.
Mining is real: pickaxe, ore veins and rocks that need the right tool
Say "add a mining system" and you get the whole loop: ore veins scattered around, a pickaxe in your hand, and a crate to fill for the win. And rocks marked as tool-jobs only break with the right tool — bare fists get a polite "needs a pickaxe".
dev notes
Everything existed (harvest hits/yields, held/equip spine, ore defs, underground shafts) — the wiring was missing. Situative MINING teaching + a deterministic empty-plan law (6 veins + harvest{hits:3,tool:'pickaxe'} + deposit sink + settings.equip), proven winnable by the kinematic bot (mines 4 ore, delivers, t:9.6). New: harvest.tool on the kernel (v56) — hits only count when held.kind matches or settings.equip owns the tool; denied travels in the needs format so the existing toast renders it with zero client changes.
Fill the world with trees, summon hunters — one sentence each
"Fill empty space with trees" plants a proper scatter of pines, birches and willows on free ground — never inside buildings, never on top of your stuff. "Enemies follow me" releases three hunters that lock on when they see you.
dev notes
Two deterministic empty-plan laws from real failed creator sentences: tree-fill walks a 22u grid with hash jitter (no randomness), avoiding structure rects (rings as circles), a 7u item radius and a 10u spawn bubble, capped at 14; the hunter law drops three hostiles that chase via the existing line-of-sight aggro. Both survive unusable AI replies (degraded-mode rescue).
Village, city and "defeat the enemies" wishes always build now
"I want a city", "a small village with a few houses and a well", "defeat the enemies to win" — these used to sometimes come back empty. Now they always build: the village solver, the city blocks and a proper win condition (with three enemies included if your world has none).
dev notes
Fail-promotion triage over 7 days of prod builds: 107 sentences — 51 now law-covered, 40 waived with written reasons (meta/noise, context fragments that need chat history, feature files collected into an owner-prio note), 16 honestly open on the 14-day clock. New laws: city accepts wish verbs, village fires on bare noun phrases, defeat is typo-tolerant and counts existing hostiles. Coverage is measured by probes (incl. a no-target probe for word-anchor laws), never assumed.
The map coach shows what your game asks of players
Open the map coach and you'll see the honest numbers: how far the win really is on foot, how many gates stand in the way, how many portals. If it's a stroll, the coach says so — and one click on 🩹 fix the path still heals broken worlds.
dev notes
The oracle route ships the challenge read (walk distance via BFS on the walkable field — detours count, gate unlocks and teleport edges from the winnability fixpoint) alongside the repair synthesis; the coach renders it as a numbers row plus an instant-class coach line. Display only — the diagnosis channel never writes; all healing ops still travel the ONE ops channel.
Locked doors, portals and key hunts now publish correctly
Worlds where the goal hides behind a switched gate, a teleporter or a 'collect the keys first' rule used to get wrongly rejected as unbeatable when you published them. The proof got smarter: it presses the switches, rides the portals and counts the keys — so your puzzle worlds publish like they should.
dev notes
The reachability proof was blind to the OPEN state: proveReachable now runs a monotone fixpoint — reachable triggers unlock their target structures (role-gate colliders drop, exactly the runtime truth), reached teleport zones seed their destination into the BFS, counter/combinator resolve through their feeders with honest key counts. The winnability bot also routes needs-sources first (collect, harvest, mixed coverage — chest targets included), so J3 rule worlds stopped timing out. Permissive doctrine holds: only truly sealed worlds get refused.
Say "fix the path" — the studio repairs unreachable goals
If a build walls in your goal, the chat now warns you instantly instead of waiting for publish. Say "fix the path" and the studio heals it the honest way: a ladder where it's too high, a doorway cut through the wall, or a portal as the last resort. There's also a 🩹 button in the map coach that does the same with one click.
dev notes
reachabilityNote runs the deterministic path proof after every applied build and appends one heads-up line to the receipt. The repair itself is ONE shared synthesis (repairFix): frontier diagnosis from the fixpoint (nearest reached cell + height delta), then class table — dy>2.7 → ladder at the frontier edge (proven 7V geometry), axis-straight wall/bigwall between → openings surgery via structure.edit (compiler clamps respected), else teleport bridge. Chat law and coach chip emit the identical result (parity-pinned); the chip posts the server-built op verbatim through the ONE ops channel, LLM-free — it works even in degraded mode. Every heal is MEASURED green by re-running the proof, never claimed.
The studio notices when your game is too easy
A goal three steps from spawn is technically a game — but not much of one. The studio now measures what your world asks of the player: how far the win really is on foot, how many gates and portals stand in the way. If it's a stroll, the coach says so and offers to make it harder.
dev notes
challengeRead comes free out of the winnability fixpoint: BFS walk distance to the most demanding win anchor (detours count — not air distance), used gate-unlocks and teleport edges as puzzle depth. The instant class (<24u, zero obstacles — exactly where distances are exact) gets one coach line in the build receipt and honest number chips in the map coach ('the win is a ~15u walk · 1 gate · 0 portals'). 'Make it harder' is the measured chat lane (corpus 3/3).
"Recolor this" now just works — no color needed
Pointing at something and saying "recolor this" or "give these a different color" used to do nothing. Now the studio picks a fitting color from its palette and tells you which one — name a color anytime if you want a specific look.
dev notes
The biggest empty-build cluster in 7 days of prod data (fail-sentence miner). The selection net's deliberate 'no color word → model's choice' policy measurably failed, so it fell: deterministic palette rotation (hash of id + current tint over the 8-color KEYLIGHT palette, no randomness), 'the WHITE buildings differently' treats the color word as current state and avoids it, items keep the p-merge. Explicit color wishes are untouched.
Mazes and cities build even when the AI stumbles
"Build a maze" sometimes came back with nothing — the builder had a bad moment and the world stayed empty. Those wishes now always build: the maze generator, city blocks, villages and districts run deterministically even when the AI answer is unusable.
dev notes
Second miner cluster: on an unparseable model reply the wish died BEFORE the law family ran — the null-parse rescue only knew the cover/roundness classes. It now covers every empty-plan law (interior rule g: 5×5 backtracker maze with sibling-tagged buckets, CITY, VILLAGE, DISTRICT); foreign wishes honestly stay null. Side effect: these classes work in degraded mode with no LLM at all.
Wire doors and portals by hand
The hand tools got smarter: place a switch or pressure plate and it automatically wires itself to the nearest gate (or lamp). And the new teleport tool works in two clicks — first click sets the portal, second click sets where it takes you. Everything you stamp can be undone with Ctrl+Z, same as AI builds.
dev notes
Auto-wiring: wireTarget is a pure shared function (structure with gate/platform op first, light-item fallback via the B59 regex, 40u radius) — no target means an honest toast, never a broken op, since the contract requires wired targets. Teleport is the first two-click tool: the client holds the pending zone, the op only travels complete (contract E35 requires 'to'); Esc clears the half-state. Undo was already covered end-to-end: every stamp POST pulses the shared saved-path which pushes a {server:true} marker onto the ONE undo chain — Ctrl+Z walks the server ledger inverses.
Build by hand: structures and game rules, no typing needed
The editor grew two new tabs. 🏗 structures drops real buildings — walls, towers, stairs, sky platforms, gates, sky bridges, whole houses — right where you click. 🎯 game logic places the rules themselves: a goal zone to win, checkpoints, monster spawners, danger zones. Everything the AI can build, your hands can now start too.
dev notes
Hand-parity part 1+2 (the biggest judge gap): stamp-plans.js is a shared pure UMD module — 7 structure stamps (house delegates to the village solver's housePlan, additively exported) + 4 standalone logic markers, every plan/op validated in CI through the REAL server apply (macroform compile + graph contract; junk plans and junk kinds provably rejected). The editor arms a cursor ghost and posts structure.place / logic.add through the ONE ops channel (flush → rev → refresh) — after the refresh the existing select/resize/rotate grips and logic rendering just work. Client capture-phase only; the monolith gained one script tag.
Tower defense is real: waves, and turrets that fight for you
'Survive 3 waves of zombies' is a real game now — enemies attack in bursts, the HUD counts each wave, clearing the last one wins. And allied turrets can shoot the attackers for you.
dev notes
spawner waves:N + rest: a wave bursts 'max' clones, slaying all starts the rest pause, wave N wins exactly once (multi-spawner composition waits for all). Kernel v55, state fields in both copy lists, endless spawners byte-identical. Turret = ranged ally with targetsClones:true — the client retargets its projectile at the nearest living clone and routes the hit through the existing fist path (pendingHits), zero kernel changes.
Hide and seek that actually plays fair
Seekers now have real eyes: they only spot you inside their vision cone, walls still block their sight, up close they hear you — and one touch can mean you're caught. Hide-and-seek worlds finally work.
dev notes
hostile entities accept vision:{range 4-60, angle 30-180} — aggro requires the player inside the LOOK cone (forward = movement heading, stateless) AND clear line of sight (B73); hearing stays omnidirectional within 4u. catch:true turns a touch into an instant K.O. via the existing damage path (9999 through contactDamage — lose or checkpoint rewind, kernel untouched). Without the fields, behavior is byte-identical.
Nothing gets lost silently anymore
If part of your wish can't be built, the builder now tells you exactly what was dropped and why — and common slips like tint 'blue' get auto-repaired into the right color instead of vanishing.
dev notes
Attribute-level reporting duty: every set-but-rejected field surfaces as an error (entity fields on the wrong behavior, non-numeric heights on goal zones, junk p-keys, unknown weapon kinds — 15 junk classes pinned by a behavior guard that counts exact messages). Color words repair to hex via a tolerance map (repair > report > silence). Clean plans stay at zero messages.
We graded ourselves — honestly
An independent judging pass scored the world-builder 7.6/10, up from 6.8 — and told us exactly what to fix next. The remaining gaps are listed openly, not hidden.
dev notes
4-lens judge panel (coverage/proof honesty, child-sentence semantics, silent losses, composition) + chief synthesis against the mission dossier. Archetype matrix went 14 green/10 yellow/2 red to 23/3/0 in one day (17 batches, 18 live adversarial scenarios, 2 measurement-infrastructure root fixes). Verdict drove the next batches directly: attribute reporting shipped same-day; quest-gate hardening and composition scenarios queued behind a provider funding click.
Tiny fairy villages, whole harbors, one word each
'A tiny fairy village' now really builds in miniature, and buildings you place together can share a name — later just say 'make the harbor snowy' and the whole ensemble changes at once.
dev notes
village/city/district channels accept k 0.3-3 (a shared scaler runs solver plans through scaleStructurePlan and re-anchors items/residents around the center; no k = byte-identical). A tiny/giant law maps scale words onto the channel. Structures finally pass 'group' through the parser (the contract field existed unused) — ensembles are mass-addressable via structureWhere.
Whole city districts from one sentence
'Add a market district' used to silently do nothing. Now it builds a full themed quarter — market, residential, temple or park — with paths and residents, and you can restyle the whole district in one sentence afterwards.
dev notes
districtOps as the 4th shared-solver path (proven building blocks: housePlan/colonnade/grove; all four kinds compile-gated). Parser channel district{at,kind} assigns group 'district-<kind>-N' so structureWhere{group} mass-transforms the quarter; a CITY-LAW twin injects the channel deterministically when the model returns an empty plan (kind inferred from the wish, EN+DE). Live-proven n=2 including the two-sentence recolor chain.
Survive the night — for real
'Survive 3 nights' is now a real game: each dawn you live to see counts one night, and the third sunrise wins it. The day/night cycle switches on automatically if your world doesn't have one.
dev notes
A law composes counter(winAt:N) + phase(on:'day') — the DAWN edge counts a COMPLETED night (on:'night' would win too early; kernel golden pins the edge truth). Bycatch root-fix: two same-plan reference registration sites counted GLOBAL op indexes while resolution is logic-local — any settings/items before the logic nodes shifted every reference (atomic batch death or silent mis-wiring). Both fixed + a reference-class guard.
Locks and keys in a single sentence
'Collect 3 keys to open the castle gate' now builds the gate, the keys and the connection between them in one go — no more two-step workarounds.
dev notes
targets accepts 'new:st<i>' counting the reply's own structure list (counter/switch/plate/combinator/phase), resolved structure-locally in world-doc before contract validation. Dangling refs and gate-less targets are honest node drops, never batch death. Plus three live hardenings for the fast lane: a widened teaching trigger, a gate-bind quality oracle, and a deterministic gate-bind law that wires collect→gate itself.
Real mazes you can get lost in
'Build a maze' now builds the whole thing — a proper five-by-five chamber network with one entrance, not the tiny sketch it used to collapse into.
dev notes
The deterministic maze law always generated a seeded 5x5 backtracker (35 walls in buckets of 18 ops — the parts budget forbids one giant structure), but the overlap guard treated sibling buckets as collisions: only bucket 1 survived. Buckets from the same law run now carry a private _law tag and may touch; the tag is stripped from model output before laws run (so a model can never smuggle it in to bypass the guard), and foreign structures still collide honestly.
Platforms that move — and take you with them
Moving platforms finally feel right: you ride along instead of sliding off, and platforms can now travel up and down — real elevators, all the way up to a sky island.
dev notes
The B8 mover grammar (platform dx/dz/period, mesh+collider glide, lever binding via targets) gained the vertical axis: dy 0-40 moves mesh center and collider top/bot from a recorded base. Player carry gates on feet~deck within the footprint: horizontal delta ride, vertical set-on-deck (descending follows without jitter, jumping detaches). Motion fields never change compiled geometry — old plans stay byte-identical. Live-proven n=2, both runs on the fast lane.
Half desert, half snow — biome splits work
Say 'make the world half desert half snow' and the ground actually splits into two biomes with soft blended edges — including the right footstep sounds on each side.
dev notes
Three stacked failures: the region teaching missed biome words entirely, models wrote role 'desert' (an unknown role killed the whole op — batch-death class), and the taught example silently clamped. Now: deterministic role-synonym repair in the shared normalizer (desert→sand, ice→snow, rock→stone; real unknowns still error honestly), a widened trigger (EN+DE half-X-half-Y phrasing), and an honest two-patch recipe.
Floating sky islands that actually work
Ask for floating islands and you get real, walkable islands in the clouds — with a proper sky bridge between them, a way up from the ground, and a goal that only counts when you truly stand on the island (not on the grass far below it).
dev notes
Bridges learned deck:true (flat span at EXACT y0 up to 58, no forced ground ramps, no pillars — old bridge plans stay byte-identical). goal_zone/checkpoint carry an optional y: the kernel (v54) only triggers them within reach of THAT level; zones without y stay height-blind forever (existing tower goals keep working). A quality oracle catches the fast-lane fake (islands as scaled block items — the scale clamp silently crushed them) and routes it through an LLM repair pass that builds real structures. Live-proven n=2.
Enemies can't see through walls anymore
Hide behind a wall and enemies actually lose you: they need a clear line of sight to start chasing, hear you only up close, and give up after a few seconds out of view. Hide-and-seek worlds are real now.
dev notes
losClear samples the aggro segment at ~1u steps over the collider truth (2u steps missed thin walls); gates BOTH hostile paths (standard + pattern boss) plus a 4u hearing radius and a 3s losLostT de-aggro. The state field initially died in the entity copy-list — exactly the boardPos lesson documented in that file. Client flips losCheck:true universally; without the flag the kernel is byte-identical.
Three sentences that used to fail silently
'A bridge over the canyon' no longer turns into a sniper arena, 'level 2 opens after the boss' works in one sentence, and the classic 'two pressure plates open the gate' puzzle builds without errors.
dev notes
Three silent eaters: (1) the sniper law now requires combat context and never replaces plans carrying land tools (bridge/tunnel/shaft/channel/carve); (2) goto_scene finally passes requires/requiresAll through the parser — the kernel could gate portals all along; (3) combinator inputs are collected before the targets check, so plates driven by an AND/OR need no own target. Plus rotation now travels to NEW structures (0/90/180/270, rotated-hull footprint check, honest 45° error).
The quality bar measures what players get
Our automated world-tester now sees exactly the same instructions as the real builder — so what passes the test is what you actually get in the game.
dev notes
Parity find via live debug: the nordstern runner called buildSystemParts without extra.wish, so the ENTIRE situational teaching register (weapons, bridges, interiors, sky islands…) was silently OFF on the measurement lane while the product had it. All four runner prompt sites now pass the turn as wish; a gate guard counts the call sites so the drift can never return.
Swords you can pick up and fight with
Weapons are real objects now: a sword on an altar carries its own damage, walking over it equips it, and grabbing a better one swaps — the old blade drops right where it lay.
dev notes
items[].p.weapon {kind, dmg 1-50, reach 1-8, speed 0.5-2} through a FOUR-place law (parser clamp, contract validation, world-doc validateP, canonicalizeOps — the last two were silently eating object-valued p keys, a hidden batch-death class that also killed sign texts and tip axes for weeks). Kernel: walk-over pickup without any logic node, damage chain held → settings → fist, swap-light with honest re-drop. Live-proven n=2 with a strict scenario gate.
Potions that save you at the right moment
Carry healing potions and forget about them — when your health drops low, one drinks itself automatically. Green flash, one potion gone, back in the fight.
dev notes
New use_item logic kind {resource, heals, below (default 35%)}: fires on the hp-drop edge between hurt and death handling, consumes from the run inventory, refires while supply lasts, never saves a killing blow. Composes with collect {yields} — 'a healing potion lies in the dungeon' is a two-node sentence. Zero client lines: the kernel co-emits the existing heal event.
Say the numbers, get the weapon
'Place a sword that deals 30 damage' does exactly that — the number lands on the sword, not on some global setting. 'This sword deals 45' retunes the one you selected.
dev notes
Weapon-item law reads the negation-cleaned wish (a 'don't' can never apply stats), attaches p.weapon to placed weapon-def items and yields priority over the global equipDamage law when the turn carries a weapon item. Selection-scoped damage editing merges into existing p.weapon. Taught situationally; verified by an adversarial scenario with a negative control that proves the gate can go red.
Building got more careful
Growing a castle can't crush the neighbor's house anymore, moved towers refuse to stack, chests in courtyards stay legal, and items placed on a just-built hill land ON the hill instead of floating.
dev notes
Resize/move footprint guard at the structureEdit funnel (only motion/growth guarded — tint/style/shrink stay free for legacy-overlapping worlds; mass-resize updates batch solids so siblings see the NEW hull). structure.place now dodges chunky items and NPCs (decor scatter never blocks). SnapY predicts the exact nudge spiral the placement pass will take — shared resolver, so same-turn items can never snap to a pre-nudge position.