Spawn
playmakespawnjam
⌘K
visitorclaim namesign in
sign up
playmake
spawn / aboutwhat we're building

pinned

start herewhat spawn isfaqfrequently asked questionsthe betthe spawn bet

updates

engine v5.2LumeJul 10, 2026engine v5.1ConnectionJun 18, 2026engine v5.0For RealJun 4, 2026engine v4.6AtelierJun 1, 2026engine v4.5Surface TensionMay 22, 2026engine v4.4SolidMay 15, 2026engine v4.3GroovyMay 13, 2026engine v4.2ContinuumMay 9, 2026engine v4.1FoundationsMay 4, 2026engine v0.1GenesisApr 29, 2026

pinned

what spawn isstart herefrequently asked questionsfaqthe spawn betthe bet

updates

Lumeengine v5.23w agoConnectionengine v5.11mo agoFor Realengine v5.02mo agoAtelierengine v4.62mo agoSurface Tensionengine v4.52mo agoSolidengine v4.42mo agoGroovyengine v4.32mo agoContinuumengine v4.22mo agoFoundationsengine v4.13mo agoGenesisengine v0.13mo ago
← All posts
← All posts

engine v5.2.19

Engine v5.2.19

August 6, 2026

A patch in the Lume line.

what's new

  • Small windows render sharp: shrinking the game window no longer melts distant detail into mush — thin lines, far-off structures, and in-world text stay readable at small window sizes, because the engine now refuses to drop its internal rendering resolution below a legibility floor on ordinary screens.
  • Places stop coming back empty: after a server crash or reconnect, a place players were standing in could lose all its objects until the room recycled — the world's cleanup sweep now notices an occupied place with no live copy and brings its objects back within moments.
  • Fixed an issue where Savi wasn't able to manage your game's database properly — database setup and reads/writes she does on your behalf now land reliably in multiplayer rooms.
  • Fixed an issue where crons weren't running properly — scheduled game work (timed events, recurring jobs) now fires the way your scripts scheduled it.
  • Savi finishes her own checklist: when Savi completes something from your world notes (tab+f), she checks it off herself instead of leaving every done item hanging as "attempted" for you to sweep up — taste calls and anything you sent back for a redo still wait for your verdict.
›technical notes
  • Engine test/verify infrastructure riding this version, no shipped-bundle behavior change: probe harness repaired for the relay era (four breaks fixed, relay-ground seams added, dead frozen-world parity rows re-pinned — #12249) · verify-fpv-transparent device-in-the-loop A/B pin at the transparent×camera-attach seam (#12255 — ledger-2055's deterministic code-path-skip theory rejected on device evidence; the harness caught the field-signature transparent-lane dropout in miniature and soaks for it with --runs N) · sql-api relay-digest race flake killed at the await (#12223) · mint tooling refuses the repo-root .changesets/ trap where records silently never minted (#12229).
  • lume: absolute internal-resolution floor in the quality governor (#12252): the ladder cuts renderScale as a FRACTION of the canvas, but thin-content legibility runs on absolute pixels — ×0.55 of a 1707×916 window is a 939×504 scene pass (far wires gone, world text mush) while the same fraction at 4K is fine. Effective scale = max(ladder scale, 1440 / canvasWidth) clamped ≤1, folded at the one seam where the fraction becomes a buffer size (renderer.ts frame args), so rung cuts, the judder hold, persisted landings and ?rungPin are floored by construction and live resizes track frame-by-frame. DPR > 1.5 passes through untouched (the deliberate density law). New wires-road render-harness fixture pins the class at the repro window (unfloored deepest rung fails 3/3 far-content probes; floored reads all 3).
  • Res-floor follow-up (#12262, review findings fixed forward): ?sceneScale pins are held as hrefScenePin and bypass the floor at the consumption seam (the rig's A/B pins again); F2 names the floor as the true asker when it clamps to ×1 ('internal-width floor 1440px — ladder asked ×0.55') instead of reading 'session opening'; the seam doc's shared-clamp claim trued in both homes (shared THRESHOLD, not shared input — the divergence is deliberate).
  • The '[Tome] Juice call has no audience target' teach-rail line no longer floods the prod error lane (#12230, ledger 2045; 61 lines/78min from one app): it now rides the standard 30s content-key window (claimRepeatingReportKey — one claim gates the getLogs half, the ledger-1671 diagnostic forward, and the DD line) at WARN (a teach is not an engine error), carrying an unthrottled running classTotal so consecutive lines still answer rate questions. run_script overlays take only the runtime-log half (one returned teach per exec, no DD line, no stats write through the transaction merge). Sibling teach lanes untouched. Red-first: a 20-call storm mints ONE warn line; past the window the next carries classTotal=21.
  • placeCleanupSystem keeps the occupied⇒resident invariant in BOTH directions (#12228, ledger 2044, dig de367ce4): a session avatar standing in a place with no residency entry was a permanent hole — the sweep only REFRESHED existing entries, applySpec skips non-resident places, and no writer ever re-created the entry, so the place's objects existed in the spec doc and nowhere else (Fire Nuke Island after a crash-reboot: 44 spec rows, 0 live). The sweep now creates the missing entry from the SessionOwner⋈PlaceMembership occupancy index it already maintains, gated on the place existing (authored or live instance row), loud on the recovery. Red-first pins in reconnect-place-residency.test.ts, including current join semantics (spawnPlayer re-seats at the default place) as an explicit receipt.
  • Worker-layer completion of the relay game-database lane, recorded here at tucker's direction (creators experience these as engine behavior; the fixes ride worker deploys, not this kernel tarball): #11685's player SQL lane got its config half everywhere (#12220 — STORAGE_DO bound on staging+prod relays, prod room-mode + sql-manifest rows), cf-edge stopped knocking fresh games off the relay (#12250 — ABSENT engineSemver means UNPINNED, not unprovable; the P0 floor fix), and the prod relay now deploys on the same train as the edge that routes to it (#12236 — the 5.2.18-promote incident where sql-using rooms landed on a relay with no storage doors can no longer recur by omission). Scheduled work (crons) on relay-hosted rooms rides the same lane.
  • api.sql array-misread guard (#12224, incident dde237bc 'Be Somebody'): every tagged-template SQL library resolves an ARRAY, so sessions read .length/r[0] straight off SqlQueryResult and the misread was perfectly silent — that incident's session concluded "api.sql is a silent no-op" and rebuilt persistence AROUND a working database. mintSqlQueryResult now defines a non-enumerable .length getter that throws the shape teach at the exact property that carried the misread; all data paths untouched (own non-enumerable props ride none of them). Iteration needs no guard (for…of on a plain object already throws loud) and a Symbol.iterator trap is deliberately absent (it would break honest feature probes). Plus the 501→unconfigured remint pin on the relay lane (game-db-relay test).
  • World notes: Savi checks off her own finished work (#12231 — contract 8's missing half; jacob's ruling 2026-08-03: "she can do that — this is her todolist"). The studio-chat mutate route's lane guard refused every Savi-sent 'done' (all 50 closed rows on the reporting app were creator- or wisp-closed; Savi's finish could only park a row at 'attempted'), which also made a wisp she dispatched more able to close rows than Savi herself. Now: kiln's markSaviTodoDoneBySavi moves → done from any open state (note required, recorded as a completed attempt — honest trail for reopen; CAS pins read status + owner_wisp_id IS NULL so wisp-parked rows refuse), the mutate route dispatches status 'done', and the world-notes skill teaches the done/attempted split ('done' for plain finish lines she saw land, 'attempted' for taste calls and any redo of a row the creator bounced — their eyes close disputed rows). Creator reopen/bounce stays the override; no creator-surface UI change (savi-closed rows ride the exact read path wisp/creator closes already ride). Rides the skills manifest + studio-chat/kiln deploys.