Full release notes · 2026-09-24

CartoVox Delta V1

The first Delta build adds access codes, live sculpting, deeper authoring and clearer world reports.

The application was called Atlas Studio until version 0.8.2. Builds are shared with invited testers on the Discord server; these notes are also readable offline inside the app.

Browse releases

0.9.2 is Delta V1, the first Delta release: the release after 0.9.1, shared with invited testers on 24 September 2026.

Delta V1

  • An invite-only release. Delta builds open only for a Delta access code from the project owner. A code is short — CVD-XXXX-XXXX-XXXX, typed in any case, with or without its dashes, O read as 0 and I or L as 1 — and its last character catches a typing mistake before anything else looks at it. Every beta key stopped working with this release; a beta key entered at the unlock screen says so and asks for a Delta code. The build carries only a salted, deliberately slow digest of each code, not the codes.
  • Unlocking registers the computer once. The first unlock needs the internet: the Delta service confirms the code and registers the computer. A code unlocks up to three computers, and the owner can withdraw one; a withdrawn code locks at its next check-in. Everything else works offline.
  • A usage report, as part of the programme. A Delta build reports how it is used, tied to the access code: sessions (length, version, operating system, memory, window size), which tabs, tools and exports are used, errors with their stack traces (home folder, user name and file paths removed), and how long generations, rebuilds and renders take. It never sends worlds, maps, lore, manuscripts, file names or anything typed. Usage waits on the computer while it is offline; a build that has not reached the Delta service for 21 days asks to connect before it opens. The licence (version 2.0, §6) lists exactly what is sent, and the unlock screen and App settings → Data & privacy say so.
  • The installed app ships no source. The application is compiled from a copy with every docstring removed, the interface is comment-stripped and sealed in one file that the app hands only to its own window, and the web inspector never opens in an installed build. A browser pointed at the local server is refused the interface.
  • App settings shows the release and your Delta tester slot beside the version, for bug reports.

Imported-map generation

  • A GeoJSON file brings its rivers, towns and borders. Importing a GeoJSON coastline used to read only its polygons; every line and point was ignored. Now a line marked as a river (waterway, kind: river, …) is cut into the world as the author's river, a road is kept as a road, a named point marked as a city, town, village or capital is seated as a settlement (a capital inside a realm's border becomes that realm's capital), other named points are lettered as places, mountains or seas, and a named polygon marked as a kingdom, realm, state or province seeds its realm inside that border. It is the same path a drawing on the blank canvas takes; the world's lore says the geometry came from the file. On a test file a river was cut and 77% followed, the Kingdom of Ash held all of its border, and its capital was seated half a degree from the file's point. The import report lists what the file carried and what it left: lines that say neither river nor road, and points with no name.
  • Your map stays a map. A world imported from a picture now keeps that picture as one of its maps, Your map, as imported, placed exactly where the import put it (frame cropped, ocean trimmed, sized and centred as you chose) with the simulated world lightly washed around a regional map. Pins, journeys and places line up over it: on a test import the picture's land and the world's land overlap by 98%. It is redrawn when the world is re-simulated.
  • An import report before you commit. The import workshop gains an Import report in four lists. Preserved: the coastline with its landmass count and land share, your elevations, rivers traced from the map. Transformed: heights mapped from tones or colours, colours read as land cover, where the sheet is placed on the globe, proportions, trimmed ocean, removed specks, clean-up steps. Uncertain: a map kind read with less than 85% confidence, a sea level taken from the tones, coastline warnings, a surface where almost no water drains, colours guessed with low confidence, requests the importer does not know. Not carried: names, borders, lettering and symbols, relief a flat mask cannot hold, and every layer re-simulated rather than read. Each line gives the measured number, and Download report saves it as Markdown to keep beside the source file. Nothing about the import itself changes. The world keeps the report too: generation writes import_report.md beside the source file it already kept, built from what generation actually received rather than from the last preview.
  • A drawn realm border can cover land that remains entirely wilderness. The post-generation border report now records that result without crashing while choosing a dominant realm. This report step no longer stops generation.
  • Realm borders traced on the canvas now keep all land inside them at the default full border strength, regardless of enclosed water, ordinary ruling distance, or the global wilderness share. Setting minor realms to 0 on a traced political map now means zero extra realm seats instead of allowing the solver to add more, and additional drawn capitals remain pinned as centres.
  • Sculpting or re-simulating an imported world now reapplies its traced realm borders and all additional drawn settlement anchors instead of dropping that authored political layout during the rebuild.
  • Traced realms come back as traced. A realm traced without a capital was founded anywhere in a circle round its middle, a circle wide enough to reach into its neighbours, so two traced realms could choose the same spot. One was then dropped, an invented realm took its place, and its ground went to a neighbour and to wilderness. Each traced realm is now founded inside its own border, no two share a founding site, and outside the borders a traced realm keeps only the sliver a tracing leaves along a coast. On a five-realm test drawing every realm now holds all of its own land.
  • Realm borders are smooth. Frontiers outside the drawn borders used to come out as a staircase of blocks, from the coarse grid the realm solver runs on. They are now rounded off at full resolution without moving the frontier or eroding a coast. This changes every world's realm map and nothing else: a Sketch world of seed 991 is identical in every other saved field.
  • A wide world map keeps its proportions. A picture wider than a planet's 2:1 used to be squeezed to fit the globe. The importer now says so ("3.0 : 1 ... every shape would keep only 67% of its width") and places a wide sheet the whole way round at its own proportions, covering a band of latitudes with the polar caps generated. A sheet taller than 2:1 kept as a planet is warned about too.
  • A coloured-in map gets mountains. A tester imported a map whose land was one flat colour: "it made beautifully sculpted ocean depths, but the land stayed flat", whatever height the import questions were given. One tone was read as one height. Now a side of the coast that is one flat colour, away from the shore, is known to carry no heights: its land gets hills and ranges raised inside your coastline (placed where the "Where should the mountains rise?" question says, to the peak height asked), and a sea left one colour gets shelves, basins and trenches, while the side you shaded keeps your shading. That is also the answer to "keep the mountains I drew but have the app generate the ocean depths". The import questions now ask where each side's heights come from — your picture, or CartoVox — and the import report says which side was flat. On a coloured-in copy of a test world asked for towering peaks, the land went from a 575 m table (0 ranges) to peaks of 8,700 m with 16 named ranges, the coastline unchanged.

Create

  • How ragged the coasts are, as a setting. Tectonics — continents in the Advanced settings gains Coastal raggedness, which scales the gulfs, peninsulas and fringe of islands warped into every shore (0 leaves the smooth edge of the continental crust, 2 doubles every bay), and Coastal margin typing, which can be turned off so every shore is equally ragged instead of straight along a trench and bayed along a rift. Both default to the coasts CartoVox already drew: a Sketch world of seed 991 rebuilt with the defaults is identical in all 139 saved fields.
  • Undo in the Advanced settings. The sheet gains Undo and Redo. Every change made on it is one step — a control (a whole drag of one slider counts once), a group of settings applied by name, the planet and orbit controls, and Clear overrides, which can now be taken back after it asks — and each button names what it will undo. Loading a preset or a recipe, or an imported map writing its own settings, starts the history afresh rather than letting Undo quietly take those back.
  • Peoples, or none. The brief's Civilisation control gains Only the places I place and No peoples: physical world. The first keeps exactly the towns and capitals you drew or pinned. Before, "only mine" still founded seven invented capitals. The second builds no settlements, realms, roads, sea lanes or city plans at all, and is the fastest build. The thesis reading proposes it for "an uninhabited world", and the import interview offers both.
  • A desert where you said it. The thesis reading now understands climates with a place: "a large desert in the centre of the continent", "a northern tundra", "a jungle covers the south". Instead of making the whole planet arid it proposes a placed climate, listed under Climate & water, which generation lays on the largest continent: rainfall and warmth are pulled most of the way toward it, with a soft, irregular edge.
  • Advanced settings you can search. A search box filters every setting by name, explanation, what it changes and what it works with. Each setting lists the settings it pulls with or against, with the reason, and its tooltip gives its range, default and cost.
  • The year follows the orbit. Moving the orbit, the star's mass or the day length keeps the year length in step with Kepler's law, in local days, until you type a year yourself.
  • Deep Time look-ahead is four buttons, not a drop-down. On Windows the drop-down could turn white and freeze the app.
  • Place plates in Deep Time. The drawing editor's Place plates tool puts a plate where you click. The boundaries between plates move with it. Dragging from a plate sets the direction it sets off in.
  • Start with flat land. Mountains in the World Brief gains None: flat land to sculpt (and a thesis that says "a completely flat world" sets it): the world is built as usual, then its land is levelled to a low plain rising from 10 m at the shore to 200 m inland, keeping the coastline, the sea and a 2% trace of the relief it replaced so rivers still drain. Every rebuild levels it the same way, so what you sculpt stands on the plain. On a test world the highest land went from 7,138 m to 342 m, with the coastline and the sea untouched.
  • Tongues in your own sounds. A tongue's card gains Sounds: the consonants and vowels it uses — a letter may be a cluster, so str is one consonant and ei one vowel — its syllable shapes (CV CVC (C)V(N), with groups you name such as N = m n), syllables per root and stress. Every root is then spelled in those sounds, with the same word for the same meaning wherever it appears, and roots join whole, with no linking vowel or dropped letter; letters listed first are used most. The preview says which shapes cannot be spelled yet, the codex's Tongues page lists the sounds, and pronunciation guides split syllables by your letters.

Draw your own world

  • Raise or lower just the land, or just the sea, and Keep coastline, so ground can be sculpted without moving the shore.
  • Ranges meet cleanly. Where two ranges cross they take the higher crest instead of dipping into a notch, and a new range can start from a point on an existing one. A range drawn into the sea raises the ground it crosses instead of pushing out a round blob of land.
  • Outline fill and cut leave no halos, islands placed on land blend in, and a Rough edge slider gives brushes a broken, natural coast.
  • Mountains and Roughen brushes for the height layer.
  • Krita-style gestures: Space+drag pans, Ctrl+Space+drag zooms, Shift+drag sizes the brush.
  • Geography notes. A Geography button counts what the drawing asks water or rock to do that it could not: a river that joins two seas, runs uphill over a range, splits in two inland, or crosses another river. It also offers tips: a river that ends inland, a long ruler-straight range, a range standing in open sea, a coast shaped like a coin. Each note shows its place on the map.
  • The foot of the canvas no longer shifts as the pointer moves, so Use this drawing stays where the hand expects it.

Library

  • A failed project says why, even after a restart. A run that failed now keeps its error beside the world, and the Library card shows what it stopped on and the advice for it, instead of only "did not reach a usable saved state" once CartoVox had been restarted.
  • A library that cannot be read says so. If the list of worlds fails to load, the shelf used to stay empty with no word, which reads as the worlds being gone. It now says the list could not be read, that nothing was deleted, and offers Try again; a refresh that fails keeps the cards already shown. The shelf is marked busy while it is read.
  • Generated dates on smaller world cards now use the full card width and wrap when the local date and time is long, so the time remains visible.
  • The maps you viewed in another projection are counted as cache. A sheet shown in Equal Earth, Robinson or Mercator is warped once and kept, which on a well-used world came to 104 MB. Storage listed those copies as simulation and saved maps, the cache cleaner never removed them, and every project backup carried them. They are now display cache: shown as such, reclaimable, left out of backups and redrawn when next viewed. The largest world in a test library backs up at 470 MB instead of 590 MB. Maps you exported in a projection are unchanged.
  • Those copies no longer appear as maps. After viewing a world in another projection, the Maps list gained entries such as "Projection Sources: 01 Relief@4X". Only projections you exported are listed now.
  • The Obsidian vault is zipped when you download it. Each world kept a zipped second copy of its vault (16 MB on a Full world), made at the last build, so notes written since were missing from the download. The download is now packed from the vault as it is, and the stored copy is removed the next time the world's lore is rebuilt; until then storage counts it as reclaimable. Exported atlases, hexcrawl sheets and print files in a world's exports folder are now counted as exports rather than as simulation.

The World map

  • Hotspots on the World map. A scene could link to another scene and back out to the world, but the World map linked nowhere. Hotspot (in Tools) puts one on the map where you click: give it a label, choose what it opens — a scene, a Codex page or a manuscript chapter — and add a note if you like. Hotspots always show on world maps, with or without Landmarks; clicking one opens its card, whose button takes you there (a scene in the scene studio, a Codex page or chapter in Write). A destination that is deleted leaves the hotspot marked as gone rather than pointing somewhere else, and Edit hotspot chooses another or removes it. They are kept with the world (world_hotspots.json), in its revisions and backups, and two windows editing them at once cannot overwrite each other.
  • A distance scale. The coordinate line under the World map now ends in a scale bar — "1,000 km at 47° N" — that is re-measured as you zoom, pan, turn or change projection, on the world's own radius, so a small planet's bar is honest too. No flat map keeps one scale everywhere, so the bar is true along the parallel through the middle of the view and says which parallel that is. It hides on sheets that are not a map of the world.
  • Terrain you can 3D-print. The Export menu adds Printable terrain, solid (STL)…. The terrain surfaces it already had are open sheets in metres, which a slicer cannot print. This one is a closed solid in millimetres: the relief on a flat base with walls, every edge shared by exactly two faces. Choose its width, how tall the relief stands, the base, whether the sea is a flat plate or its floor is carved, and the detail; the setup says the finished size, the triangle count and the file size before anything is made, and how much the heights are exaggerated — a world 200 mm across is about 300× — because true scale would be a twentieth of a millimetre. The existing STL and OBJ files are unchanged, byte for byte.
  • A hexcrawl sheet. The Export menu adds Hexcrawl sheet (CSV and hex map)…: numbered pointy-top hexes of the width you choose over what the map shows (or the whole world), each read from the world — its terrain, how much is land, its heights, any river, lake or coast, the realm most of it belongs to and the settlements in it. The download is a spreadsheet, the same rows as JSON, a coloured hex map and a note saying the hexes are their stated size along the region's middle latitude. The setup counts the hexes first and refuses more than 20,000.
  • Named places for globe tools. The Export menu adds Named places for globe tools (KML): every settlement, realm, range, river, lake, sea and other named place that has a position, one folder per kind, each with its name, what it is and its CartoVox id. Google Earth, QGIS and Marble open it; the file says that its coordinates are the world's own degrees, so a distance such a tool measures assumes Earth's radius.
  • An interactive map to hand to players. The Export menu adds Interactive map with clickable places (HTML): one file holding the world sheet and every settlement, realm, range, river, lake, sea, desert, place of power and continent as a pin. It opens in any browser with no internet connection. Drag to pan, scroll to zoom, click a pin for its name, kind, summary and position, search by name, and tick which kinds show (towns start hidden). It uses the sharpest copy of the relief sheet the world has saved, up to 4,096 px wide. A Sketch world's page is 190–320 KB, depending on how sharp a copy it has, and builds in under a tenth of a second. It lists everything the gazetteer lists, so it is not a player-safe copy; the campaign's player handout below is.
  • A player handout from a campaign. A campaign's player view could be presented only inside CartoVox. Download player handout in the campaign workspace makes the same kind of offline page from it: the campaign's player map, titled with its player title and opening on its player summary, with only what the campaign shows players — places in the categories it shows, secrets (author landmarks and places of power) only once revealed, and journeys and regions marked for players. No place carries its lore or notes, and hotspots are left out. On a test world with eight places of power and one revealed, the handout held the one and none of the seven.
  • Map tiles for GIS and map apps. The Export menu adds Map tiles for GIS and map apps (MBTiles): the relief sheet as one MBTiles file of 256-pixel Web Mercator tiles, zoom level by zoom level, which QGIS, tile servers and offline map apps open directly. The pyramid stops at the zoom the saved sheet can fill, so no tile is enlarged; a Sketch world gives zoom 0–2 (21 tiles, about 230 KB). The file's description says that the tiles lay this world's own degrees on the Mercator square, and that nothing beyond 85° of latitude is in Mercator.
  • Sculpting, rebuilt. Brushes paint terrain live on the map as you move, through any projection, with a brush ring, hardness, pen pressure and filters for land only, sea only or keep coastline. Tools: raise, lower, smooth, flatten, mountains, roughen, terrace, coast, land and sea. Shortcuts: [ ] for size, Shift+[ ] for strength, Alt inverts, Shift+drag resizes, L cycles the view. A stroke is one edit, and undo takes back the whole stroke. The live terrain matches the re-simulation's own arithmetic to a millionth of a metre.
  • Quick look. Solves rain, rivers and biomes coarsely with your pending edits in a few seconds, and shows the world before and after with what changed ("Drier by 60 mm a year or more: …", "Subtropical desert: +…"). Nothing is saved.
  • Described regions do more. Drag to draw a region and see its outline and terrain live. Words like desert, steppe, jungle or tundra set its climate. "Manmade city" or "paved" marks built-over ground where no river rises and no lake forms.
  • A strait, a lowland, or a coast left alone. A described region now understands three more requests. "A strait" cuts sea to shelf depth along the drawn rectangle's long side, end to end. On a circle it follows "north to south" or "east to west"; without a direction it says it cut a round sound and how to get a channel. "A lowland" brings the ground down to a plain that stays land and leaves the sea alone. "Keep this coastline as it is" (or "protect this coast", "don't touch this") keeps the ground exactly as saved through every rebuild, glaciation and river cutting included, as a Preserve brush does. The Sculptor shows all three live. On a test world, a rebuild cut a land neck through to the sea, brought 6,265 m mountains down to 401 m, and kept a coast unchanged under a brush that lowered the unprotected ground beside it by 1,152 m. "A fortress to protect the pass" is still read as a stronghold and moves no ground. When two phrases in one description ask for the same thing, the second is no longer reported as unread.
  • Keep ground of any shape. Describe a region can now draw a polygon: choose Polygon, click each corner on the map, and close it by clicking the first corner again or pressing Enter (Backspace takes back a corner, Escape abandons it). "Keep this ground as it is" over a polygon keeps exactly the cells inside it through every rebuild, not a row of circles along it; the Sculptor's live view and the rebuild keep the same cells, the change review and local-regeneration footprint read the same shape, and a shape drawn across the date line is one shape. On a test world a 1,500 m raise over a six-cornered, concave kept shape left all 844 cells inside it exactly as saved while the ground around it rose 300 m on average. Every other word reads a polygon by its bounding box, as it reads a rectangle.
  • Kept ground can have a soft edge. Kept ground holds its saved heights exactly, so an edit beside it ended in a step. Preserve gains Soft edge (up to 500 km), and a described region reads "with a soft edge", "blend it over 200 km" or "a 300 km soft edge": the ground around the kept area is blended into it across that band — all the way at the edge, not at all past the band — while the kept ground itself still does not move. The Sculptor's live view and the rebuild blend the same cells, the map draws where a preserved circle's band ends, and the edit list gives its width. On the test world above, a 300 km soft edge brought the median step across the kept edge from 453 m to 75 m.
  • Flatten brings raised ground down. "I apply flattening to a raised area and it doesn't change": Flatten levelled to the height where each stroke began, so a stroke begun on a range kept the range at its own height. It now levels to its Target height — 200 m, at full strength, unless you type another, pick one from the map, or tick From stroke start.
  • Level land. A new Sculptor tool levels every piece of land to a low plain rising to the height you choose (20–3,000 m), keeping the coastline, the sea and a faint trace of the old relief. It is one edit — shown live, listed, undone and re-simulated like any other — and edits after it build on the plain. On a test world the rebuild kept every coastal cell and brought the highest land from 7,037 m to 343 m.
  • Edits show up at once. After a re-simulation the open world reloads and every map is asked for fresh. Maps used to change piece by piece for minutes, and edits could flicker in and out while panning.
  • Stack two maps. The split view gains Stack: the second map is drawn over the whole first one, with an opacity slider and Multiply, so Köppen can sit over the relief or ridges over biomes.
  • The sea as a living place. Two new maps: Marine zones (coral reefs, kelp coasts, tidal flats, upwelling coasts, shelf seas, the polar ice edge, warm and cool open ocean, trenches) and Fisheries & ocean food, a relative index of where nutrients meet light. The cell inspector names each ocean cell's zone.
  • Changing the map look or projection now locks the control and shows it is working until the new map arrives.
  • The legend no longer covers the map button that opened it.
  • Dragging the planet as two discs or as a sphere turns it the way the hand moves.
  • The weather radar can be enlarged.
  • Cancel run is heard. A click before the run had started used to do nothing; it is now held until the run starts. The road network and realm flood check for a cancel as they go. After Stop after this plate, the same button cancels the whole run.

Scenes

  • Scenes go to virtual tabletops. Beside a scene's backups, Export for a virtual tabletop writes a Universal VTT file (Foundry through the Universal Battlemap Importer, Roll20, Fantasy Grounds, Arkenforge) carrying a picture of the scene, or a Foundry scene. One tabletop square is one cell of the scene's grid and the map is the whole canvas. A scene does not say which shapes are walls, but it does say how tall they are: a shape at least 1.5 m tall blocks sight, a lower one blocks movement only, and a flat one is floor. Hidden shapes and groups stay out, the scene's lights come along when its lighting is on, and the section counts what a tabletop will receive before anything is written. Doors are not exported. Settlement exports to Foundry now give a forge its own firelight colour; they used to pass the alpha byte along as part of the colour.
  • A scene can link to a codex article. Beside its world, regional map and mapped place, a scene's link can now name any dossier in the world's codex — a realm, a people, a tongue, a river — mapped or not, each listed with its kind. Open linked world lands on that dossier, and the dossier gains Linked scenes, which lists the scenes that name it. A link without an article keeps exactly the shape it had.
  • Returning from a world's Scenes view now shows an opening state until that world is restored, instead of briefly displaying the Library first.

Render Studio and scenes

  • The geography comes out as vectors too. A render bundle carried its stamps, captions, labels and lighting as SVG and its terrain and water only as pictures, so a sheet taken into a vector editor for finishing had a coastline nobody could restyle. Bundles now include geography.svg: the coastline, lakes and salt pans, rivers (casing and channel, tapering as they do on the sheet), realm borders, elevation contours and graticule that the sheet shows, one group per layer in the sheet's own order, in its pixel space. They are the lines the pictures draw, traced once and used for both, so each vector sits on its line in the PNG (within a pixel). A regional sheet keeps only what reaches it. A whole Sketch world at 4096 px gives a 2.2 MB file.
  • A reference image can be calibrated to more than two points. Calibrating a reference to the world took exactly two control points, which place the image exactly and say nothing about how well it fits anywhere else. After the first two, Add another control point takes another landmark on the image and its place on the world, up to twelve. With three or more the image is fitted to all of them by least squares (still one uniform scale and turn), and the preview and the saved calibration say how far each point misses the fit and the RMS, in kilometres on this planet. A two-point calibration places the image exactly as before.
  • Colours by height. Map appearance gains Colours by height: start from the palette in use and change the colour at any height, add a stop halfway up the widest gap, remove one, and see the ramp as a strip, for land above the sea and for the sea below it (2 to 16 stops each). The composition keeps the ramp in its recipes, bundles and undo history; Use the palette's colours goes back. Every palette's full ramp is now available to start from, not only its swatches.
  • Save an artwork style by name and use it anywhere. Copy artwork style used to hold one copied style only until the editor closed. A copied style can now be named, tagged and saved to a shared style library that every world and every scene can read, next to the shared structure and artwork libraries. Choosing Use this style makes it the copied style, so it still reaches a map only through the same property choices, preview and Apply, and one Undo takes it back.
  • A saved style is appearance only. It carries ink, fill, line width and pattern, opacity, soft edges, shadow and blend — never position, grouping, artwork or masks — and the values are checked by the same rules map objects are, so a style can never hold something a map would refuse. Renaming, trashing or removing a saved style does not change artwork already styled with it.
  • The library behaves like the others. Up to 500 styles including trash; trash before permanent removal, which asks first; a change made in another window is refused rather than overwritten; and Export saved styles / Import saved styles move the whole library as one file, adding every style in the file or none of them. Choosing a new save folder carries the style library along with worlds, scenes, structures and artwork.
  • A pivot can sit off the canvas and stay put. Transform pivot now accepts a point up to a sheet beyond any edge (−100% to 200%) — turn a row of stalls about a well round the corner — with its marker waiting at the nearest edge, and Keep this pivot when the selection changes keeps it for the next selection too, until it is reset or the canvas changes shape.
  • Put a drawing point exactly where it belongs. Curve and point editing shows the active anchor's place on the sheet, in percent across and down, and Move anchor puts it at the numbers you type, rotated and scaled drawings included; its curve handles travel with it and Undo takes it back. A point cannot leave its drawing's own frame, and the editor says so when it stops at the edge.
  • Hide or lock a whole group. In Nested groups, the selected group gains Hide this group and Lock this group. They cover every object in the group and in the groups inside it, in the editor, previews and every export, without touching the objects' own settings: showing the group again shows exactly what was shown before, and Undo takes either back. The setting is saved with the map or scene and lets go of itself when the group is ungrouped.
  • Snapping follows resizing and spacing. With Snap to artwork on, dragging a side handle settles the edge on a neighbour's edge or centre, and dragging an item between two others settles it at equal gaps, with a marker drawn in each gap. Alt still bypasses snapping.
  • Vertices snap too. Dragging a vertex of a path or polygon settles it on another drawing's vertex, or on another vertex of the same shape so a polygon closes exactly, with a ring drawn where it lands. Failing that it settles on another item's edge or centre, as a moved item does. Alt places it freely.
  • A caption beside its artwork. Each caption gains Align to artwork: choose a piece of artwork and Centred on it, Above it or Below it, and the caption moves there, a line of its own size clear of the frame. One step to undo. A caption that follows a path says to detach the path first.
  • Spread overlapping items apart. Align and space selection adds Spread overlapping items apart: every pair of selected items that overlap is moved the shortest way apart, half each, until they are at least the Fixed gap apart; items that overlap nothing stay exactly where they are, groups move as one, and it refuses rather than piles items at the edge when the sheet has no room.
  • Two more ways to space a selection. Align and space selection adds Equal center spacing, which puts the items' centres an equal distance apart whatever their sizes, and a Fixed gap in percent of the sheet's width, which keeps the first item where it is and lines the rest up after it, edge to edge. Groups still move as one item, and Undo takes it back.
  • One name for the drawing panel. The world editor's panel was called Stamps and shapes and the scene editor's Draw and arrange, and hints in both named the first. Both are Draw and arrange now; Stamps and shapes remains the name of the export layer the objects are drawn on.
  • The structure and artwork libraries each move as one file. They could only be exported an entry at a time, and a world backup carries the copies placed on maps, not the shared catalogues. Export whole structure library and Export whole artwork library now write every saved entry (not the trash) to one file, with its tags and where it was saved from. Importing that file on another machine adds what is missing and skips what is already there, so importing it twice adds nothing; a single structure file or an art pack imports the same way. A file with one bad entry, or a batch the library has no room for, adds nothing and names the entry.
  • A render bundle can only be started once. The Create render bundle button is held from the press until that render finishes, fails or the world changes, so a second press no longer starts a duplicate or replaces the progress line of the render already running.
  • An empty render list says so. A world with no render bundles yet shows a sentence saying what the button above it makes, instead of an empty box that looked the same as a list that had failed to load.
  • A long region name is broken, not dropped. A realm, sea or region whose name fits at no size on one line is now tried on two, split where the lines come out most even — "Old Kingdom / of Burgzad" — before it is given up. A name that fits is set exactly as before; the plate's label audit lists the names set on two lines. On a Sketch atlas of seed 991 this kept three names that had been dropped, with nothing clipped, overlapping or off its feature.
  • Scenes of any proportion. Beside the five named canvases, Other proportions takes any whole-number width to height between 1:2 and 2:1 — 16:9, 4:3, 5:4, 9:16 — and the canvas, the preview and every export follow it.
  • Each named atlas plate records the faces that lettered it — an author's own, the ones bundled with CartoVox, the host's or Matplotlib's fallback — so a sheet lettered on a machine missing the bundled faces is visible.

When the desktop app cannot start

  • The startup problem page now offers a way forward. It used to show the error and a log path and nothing else. It now has Try again, which starts CartoVox afresh once this attempt has let go of everything it held; Copy details, which puts the error, log path, version and system on the clipboard, or selects them to copy by hand where no clipboard is available; Open log folder; and Ask on Discord. Each says what it did.

What a build costs, stated honestly

  • The Create estimates quote today's measurements. The Quick card and the preflight said a Quick world took 63 seconds. Re-measured on a fast Apple Silicon Mac, without plates, it takes about 1½ minutes; a Sketch takes about 31 seconds and a Full world about 6½ minutes. The preflight now names all three, the Full card gives its figure too, and Quick's first-run estimate widens from 45–90 seconds to 60–120 so a slower machine is not told it is running late. Once a machine has finished builds of its own, those still replace the reference.
  • Naming takes a fifth of the time. Checking every generated name against the others for names a reader would confuse took over two seconds a build; an exact letter-count screen now skips the pairs that cannot be alike before comparing the rest, and it takes under half a second. The names, conflicts and alternatives are identical — checked on Sketch, Quick and Full worlds — and a Sketch builds about two seconds faster.
  • Create says how much memory a build needs. The cost panel now shows the simulation's peak memory for the chosen grid — about 1 GiB for a Sketch, 1.8 GiB for Quick and 4.1 GiB for Full, from measured builds with 15% headroom — and warns before the run when that is more than the machine has free, suggesting a lighter tier. It never refuses the run.
  • A quiet run says so in the dock too. The build window warned when the worker had reported nothing for three minutes, or when memory was nearly full; a build running in the background dock said nothing. The dock now shows the same warning in place of its reassurance line. Nothing is cancelled for being quiet: a Full build can legitimately go quiet for a long time.
  • macOS 14 or later is now stated, and enforced by macOS itself. NumPy's Apple Silicon build inside CartoVox needs macOS 14, while the app declared no minimum, so an older Mac opened it and the server stopped seconds later with a startup error. The app now declares macOS 14.0, so an older Mac says it cannot open it instead. The installer check reads the minimum every bundled library declares and refuses a build that promises less than one of them needs. The README said macOS 12; it says 14 now.

Saved work stays whole

  • A world backup keeps the scenes inside its scenes. A backup carried only scenes explicitly linked to the world, so a tavern nested inside a linked village was left out unless it had been linked separately. Every scene beneath a linked scene that belongs to no world now travels with it and comes back nested where it was, still unlinked. A scene linked to a different world stays in that world's backup, and a backup whose inventory was altered to slip an unlinked scene in is refused, with nothing imported.
  • Deep Time saves can no longer leave a truncated history. Its history, selected era and foundation archives were written straight onto the files they replaced, so running out of memory part-way through left a short archive that opened as a history with eras missing. They now use the same write-beside-then-swap the world archive has used since 0.8.2.
  • A sculpted, eroded or upgraded world keeps its settings version. Only a fresh build stamped world_config.json with the settings schema it was written under; re-simulating after edits, accepting erosion and rebuilding at a finer tier wrote the settings without it, so the world afterwards read as if it predated the stamp. Every path now writes through one stamping writer.
  • A vector map that cannot be redrawn says why. Opening the SVG of a world whose vector file is missing redraws it from the saved fields; when that failed, the reason was discarded and the export reported only that the map was not found. It now reports what went wrong. A world with an older, cell-by-cell SVG still gets that file if the redraw fails, since it is the same world drawn less finely.
  • A revision is whole or it is not there. Each revision is now assembled in a staging folder, every file synced and checked against its source, and only the finished snapshot is renamed into place. A crash part-way used to leave a numbered folder that the history never recorded, and every later edit then failed on that name; such a folder is now skipped and kept as evidence.
  • Restoring a damaged revision restores nothing. Each snapshot records a SHA-256 for every file. A restore checks the whole snapshot first and refuses, naming the file, if one is missing or has changed, instead of mixing the old world with the new one.
  • Accepting erosion settings no longer leaves them behind on a failed run. The world is marked as rebuilding while it runs, as sculpting already did. If the rebuild is cancelled or fails before it writes the world, the previous erosion settings are put back; after that point the world is reported incomplete rather than finished.
  • Cancelling a re-simulation leaves the world as it was. Cancelling was offered until the rebuild began writing the world, but a dozen small files had already been written by then: the names and their registry, the generated lore, the health report, the worldbook and the provenance files. Cancelled at the last moment, a sculpt left the new names and a health report for a world that was never saved beside the old one (11 files changed and 2 added on a test world). A rebuild that stops before it commits, cancelled or failed, now puts those files back. Files you or another window write while it runs (your lore, names, brief, campaigns) are never rolled back.
  • Names stay put when you sculpt. Naming runs as one pass that refuses a name too like one already given, so a single change early in the pass changed which names passed for everything after it. On a test world one deep cut at one capital took 277 of 441 settlement names off the map, with every continent's name and 44 of 56 realms'. Re-simulating after a sculpt, or accepting erosion settings, now keeps the generated name of everything that is still the same place: a settlement on the same cell, a realm while its capital or seat stands where it stood, and a continent, range, river, lake, sea, desert or place of power still close to where it was. The world keeps its name. On the same test, 421 of 441 settlement names survived (the other 20 had moved), as did 53 of 56 realms and every continent, range, river, sea and desert. Places the cut moved get new names, redrawn where a new name would repeat a kept one. Names you chose or locked were always yours and still are. A fresh build, a reseed, a restore and a change of story seed draw names as before. Where each name stood is saved beside the names (name_sites.json); an older world uses its gazetteer's positions the first time.
  • What you wrote about a town stays on that town. A settlement's number was its place in the order the simulation placed it, so the same cut renumbered 272 of 420 towns, and a name you chose, a town's written history or a manuscript scene set there moved to another town. Removing one town renumbered every town after it. Re-simulating now gives every town, regional centre and minor realm that is still the same place (the same cell, or one or two cells away) its old number: on the same test 432 of 441 settlements and 52 of 54 realms kept theirs, and the names you had chosen stayed on their places. Anything you wrote about a place that really moved is listed by name at the end of the rebuild's log, so you can move it yourself. An unchanged world re-simulates exactly as before.

Writing

  • PDF titles that wrap or sign off import whole. A letter or chapter title that wraps mid-word, ends on an abbreviation or joins across lines on and, of or a comma is mended into one heading; a title set in capitals always starts a new section, even after a paragraph that ran the full measure; a short name on its own line before such a title is read as a sign-off rather than a heading; and initialisms such as MD stay in capitals.
  • Scene checks read the sky. Run checks now holds a scene's light and moon words to the sky the world card describes for its place and day: a midnight sun where the sun sets, a polar night where it rises, sunlight where it never rises and starlight where it never sets. With an hour set, sunlight well after sunset or starlight at midday is flagged too; a full moon on a crescent night, a moonless night near full, and moonlight at new moon are flagged; "the next full moon" is left alone. The scene card and the check share one daylight calculation, so they cannot disagree.
  • Scene checks know when characters are born. A scene with a year set before its point-of-view character's birth year, or that of a character it links, is flagged. The year is read from the born field of the character page only when it states one year plainly (Year 412, 412, 412 AE).
  • A world with no moon has no moon phase. A world whose moon was given no mass — what "moonless" in a brief does — no longer has its scene card describe the moon, and any moon in the prose is flagged.
  • A world with no moon keeps no lunar months. Its calendar still counted months and weeks from the moon's orbital period, so the world dossier gave a month "from full moon to full moon", scene cards, the weather year and journey timelines dated days by month and moon phase, and a port's tide was called spring or neap. Such a world's calendar now has no months, weeks or phases: the dossier says its year is divided by agreement rather than by observation, dates give the day and season only, and ports report no spring or neap tides. Worlds with a moon are unchanged.
  • A world with no moon has only its star's tide. The tide model still timed such a world's tides by the moon's orbit and compared springs with neaps, so the world dossier could say the tide turned twice in 12.4 hours, with spring tides 1.00× the neaps. The tide now turns every half local day, as the star's tide does; the world summary records no spring-to-neap ratio; and the dossier and the planet settings say the tide is raised by the star alone, with no spring or neap tides. Worlds with a moon are unchanged.
  • The writing guides match the Write shell. The manuscript guides still sent writers to a Chapter panel, a formatting bar and a rail that the September Write shell replaced; they now name the strip, its More, Chapter and Book menus, the panel's Plan tab and the status line.
  • A chapter's journey, its days and its weather, as figures. Three buttons under Scenes in the Plan tab draw a figure for the whole chapter and place it at the cursor: Journey figure joins the scenes' places in order on the relief map, numbered with their first day; Calendar strip draws the world's year — seasons, months and full moons — with each scene's day marked; and Weather table lists each scene's sky, temperature, wind and any storm nearby, the same weather the scene card reads for that place and day. All three come from the scenes' own Place and Day of year.
  • Scene checks know a name its tongue could never form. A character whose page names a tongue (or a realm or culture that speaks one) is held to that tongue's hard limits: a run of consonants as long as its hardest cluster, four vowels together, or an apostrophe in a tongue that never writes one. An unusual but possible name is left alone, and each name is reported once for the book.
  • Insights says who does the talking. For a book or the series, the Dialogue section adds By speaker: each character's lines, words and share of the dialogue, credited from speech tags that name them — "said Mara", "Mara asked", an alias such as "the Captain", or a first name no other character shares. A paragraph of dialogue is its first named speaker's. Lines tagged "she said", or not tagged at all, are not guessed, and the section says how much of the dialogue it could credit. The saved report carries the same table.
  • Insights reads the book by point of view. For a book or the series, the Dialogue section adds By point of view: the scenes told from each viewpoint, measured as one text — scenes, words, share, dialogue share and sentence length — and the saved report carries the same table. Scenes without a point of view are left out rather than guessed.
  • The Insights report as a spreadsheet and a Word appendix. Save report now also writes the tables as one workbook, report.xlsx, a sheet per table, with no spreadsheet program needed to make it. The Book's Export menu gains Word, with the Insights report as an appendix, which adds the latest saved report after the last chapter, one table per section in the book's own typography. It repeats the saved numbers rather than measuring again, and asks for a report to be saved first if there is none.
  • Two-word dialogue tags count. Insights now credits went on, put in, broke in and cut in as speech tags, and reads the tag before a quotation from its own clause only, so a tag from the previous sentence is no longer credited to the next quotation.

Travel and settlements

  • The settlement editor says what an edit cut off. A generated town fronts every lot on a street, but a hand edit could undo that unnoticed: a street deleted in the middle of a quarter left its houses facing nothing. After every edit and undo the editor now checks that each house, hall, temple, chapel, forge, granary and the citadel can be reached from the town's streets — the roads that reach a gate, an approach road or a main road, joined wherever they cross or one ends on another — and says how many cannot: with no road beside them, or beside a road cut off from the rest. They are outlined in red, and Unreachable buildings in Find any feature lists them. Freshly generated towns come out as one network; the check takes 22 ms on a town of 60,000 people.
  • Reconnect cut-off streets. When the editor finds buildings cut off, Reconnect cut-off streets lays the shortest lane from each cut-off street, and from each building with no road beside it, to the town's streets — never through a building, a wall or water — as one step that one Undo takes back. What cannot be joined that way is left for you and said so. In a town of 4,000 where fourteen streets around one house were deleted, cutting off thirteen buildings, ten lanes brought back all but one.
  • Three more ways to travel. The journey planner adds an ox wagon, a relay courier and a marching column beside walkers, riders, caravans and ships. Each meets slopes, bog, cold, mud and borders in its own way and leans on made roads by its own amount — about 29 km a day for a wagon on a road, 160 for a relay of posts, 24 for a column — with its own pack animals, food and delays at borders. The existing modes route exactly as before.
  • Several features at once in Settlement Studio. In Select mode, Shift-click adds or removes a feature, and a box dragged on empty ground picks every feature whose centre it holds. Dragging one of them, the arrow keys and Delete then act on all of them as one edit, and one Undo takes it back; the inspector still shows the one outlined solid.
  • A route downloads as GPX. Beside the journey's spreadsheet, Download the route (GPX) writes the solved path as a GPS track, with the start, the end and each placed journal entry as waypoints, for campaign and hiking tools. A land route carries its heights from the route's own elevation profile; a ship's track is at sea level and carries none.
  • A journey downloads as a spreadsheet. A solved route's travel journal now has Download the journey (CSV): a header naming the route, then one row per entry with its days, ground, position, distance and the journal's sentence. The journal's positions were being kept in radians; they are degrees now, like every other coordinate CartoVox hands out.
  • Overlapping fields are farmed once. In Settlement Studio, where hand-edited fields overlap, the land budget counts the shared ground once, so the people it supports no longer rise because two fields were drawn over each other. The report keeps the plain sum and the overlap beside it; generated fields never overlap, so their figures are unchanged.

Lore

  • More realm canon survives a rebuild. When a rebuilt copy is adopted, the canon an author wrote for a realm can be moved to its new match. That was the motto and the ruler; it now includes the government's type and description and the realm's strategic strength and vulnerability, the other prose a realm carries.
  • A CSV's columns can be given their roles. A lore CSV had to have a column called exactly title, and every other column became a field. Columns are now read by their common names as well (name as the title, type or category as the kind, notes or description as the page's text, lat and lng as coordinates), and the review shows every column with its role, where any can be changed: title, kind, page text, aliases, links, latitude, longitude, kept as a field, or left out. A CSV with no title column opens the review asking which column holds the titles, instead of refusing the file. The roles are part of the import, so the same rows read two ways are two imports.
  • Imported pages can be edited here. An imported page has Edit page text: the page's Markdown in a text box, saved in place. The file as it came in stays with the import's original sources, the page says it was edited here, and its wiki links are matched again against the text as it now reads. Undo page edit and Redo page edit step back and forward through the last twenty saves in the batch.
  • Images come in with their pages. Import lore now takes PNG, JPEG, GIF and WebP files beside the notes that embed them, as ![[map.png]] or ![](map.png). Each image is checked to be the kind its name says (at most 8 MiB each, 16 MiB per import), saved in the import's own attachments folder, and shown in its page once the import is saved; the review lists every image with the pages that use it, and warns about an embed whose image was not included.
  • Front matter is read. A Markdown page's front matter now gives its title, aliases, kind and coordinates (location: [lat, lon] or latitude and longitude), in the forms note apps write. The page is still saved exactly as written, front matter included, and its other keys become custom fields. Aliases of pages imported earlier now resolve wiki links in later imports, so [[the Ford]] finds the page imported as Ashford.
  • Items, creatures and custom fields. Imported records can be items and creatures as well as places, characters, factions and events, and a character or faction can own an item. A record keeps its custom fields: a CSV's extra columns, its page's other front matter keys, or a re-imported record's own fields (up to 40, shown in the review and carried through export and re-import).
  • Names let go in a rebuild can be given back. Adopting a rebuilt copy can release one of your settlement names when its settlement had no destination. The name was recorded and then shown nowhere. The Naming studio now opens with Released in a rebuild: each name, the settlement it came from and whether any settlement carries it again. One click gives it back to that settlement or to one of the three nearest (with distances). Give to another settlement… takes a name you type. Giving a name back locks it like any name you write. Replacing a name you chose asks first, and a typed name that two settlements share is refused with the reason.
  • Sea and ocean dossiers open again. A sea lane that crosses the date line is saved in parts, and the gazetteer read its middle as a point. On a world with such a lane every sea, bay and ocean dossier failed to open. On a test world that was all sixteen.
  • Canon edits can be undone. The Lore editor gains Undo and Redo. Every rename, realm detail, event, hook, note and JSON edit is one step, named in the button's description ("Undo renaming the world to …"), and an undo is saved the same way the edit was, so it survives regeneration too.
  • GeoJSON comes in as lore. Import lore now reads GeoJSON: every named feature becomes a record, suggested as a place with its location, and its other properties are kept as the page's text. Points are pins, a feature of several parts gets a pin for each (up to eight), and a line or area is pinned at its middle, which the review says. Coordinates must be degrees of longitude and latitude, as CartoVox and GIS tools write them for world maps; a feature in pixels is shown as an error rather than misplaced.
  • A note can be pinned in several places. An imported lore note can hold up to eight pins — a road through three towns, a people in two valleys. Pin this note in another place adds one; each is its own marker in the lore overlay, listed under the note with Show and Remove, and every change is one Undo step. The first pin stays the note's location, so everything that reads one location reads it as before; the GeoJSON and typed records exports carry them all, and importing that file again brings them back.
  • A page's wiki links become relationships in one step. On a typed record, Relate the records this page mentions reviews a Related to link to every record its [[wiki links]] name, uniquely, in the same batch; links that are ambiguous, unresolved, point at a note or are already related are listed with the reason and left alone. Saving adds them all as one step, and one Undo takes them all back.
  • A relationship can say when. A link between two lore records can now carry when it began and when it ended, in the world's own dating ("Year 312", "the Long Winter"), and a note. They are part of the review before saving, can be changed later from the link itself with Undo, travel in the typed records export, and show beside the relationship when that file is imported again. They never change which relationship it is.
  • More kinds of relationship. Records can now be linked as Allied with, Rival of, Kin of, Leads, Rules, Founded and Caused, each limited to the record types it makes sense for, beside the four there were.
  • Typed lore records come back in. Export typed lore records (JSON) had no way back. Import lore now accepts that file: each record arrives with its own type and map pin already chosen in the review, still changeable row by row, and becomes a new record with its own ID beside the original rather than replacing it. Relationships in the file are listed on their records so they can be linked again; they are not re-created.

Accessibility and small fixes

  • Dialogs behave like dialogs. Every panel that announced itself as a modal dialog now acts as one: focus moves into it when it opens, the page behind cannot be reached with Tab or a screen reader while it is up, Tab wraps at either end, Escape closes it, and closing it returns focus to the control that opened it. The drawing canvas, the tour and the other panels whose own Escape means something else first keep that meaning.
  • A skip link. The first Tab on any page offers Skip to the workspace, past the navigation.
  • Icon buttons say all of their hint. Hints written as "Name: what it does" gave a screen reader only the name; the explanation after the colon is now read as the button's description.
  • Four colours that never existed. The lore editor's saved and failed messages, the Legacy world and Approximate Preview badges and the map editor's feedback border asked for colour tokens the theme never declared, so they fell back to the surrounding colour. They use the theme's own tokens now, and a test checks every colour a script writes against the declared set.
  • A settings page reset says what it reset. Restore appearance defaults and its neighbours now name the choices they restored. The reference states the rule behind what asks first: an action that cannot be taken back and costs more than a moment to redo is confirmed or can be undone.
  • A recovery copy that cannot be kept is said once. When the browser has no room for the manuscript's unsaved-text copy, the writer is told once that the copy is not being kept and that saving still works, instead of the failure passing in silence.
  • Build progress can be heard. The progress bars in the build window and the background dock are now announced as progress bars with their current value, and the build window announces each new stage. The clock beside it is deliberately not announced, so a screen reader is not read the time once a second for the length of a build.
  • Reduced motion rules key on the right attribute. Three rules for the page transition and the Library backdrop waited for an attribute CartoVox never sets. The general reduced-motion rule already stopped those animations, so nothing moved that should not have; the specific rules now apply as written, and a test checks every such rule against the attributes the app really sets.
  • The setup guide counts its own steps. It said five steps with one required; there are six, and two are required: how the world begins, and the review before a run starts.
  • The welcome window stands out from the app behind it.
  • The setup guide has its own close button, and the Setup button shows when the guide is open.

Engineering

  • The atlas pixel test is green, and says what it tests. The test that plates stay pixel-identical through refactors had failed on this machine since before 0.9.2 work began, including at the commit that recorded it. It hashed PNG file bytes, which change with the encoder, and one recording cannot hold for every imaging library: Pillow 12.2 with NumPy 2.4 and Pillow 12.3 with NumPy 2.5 draw 4% of the labelled world plate differently. It now hashes decoded pixels and keeps a recording per Pillow, NumPy and FreeType version, with both interpreters on the release machine recorded. An unrecorded one fails with instructions, not with "plates changed". Checking every commit since the old recording found one real pixel change, and it was deliberate: long labels set on two lines.
  • The allocator's tests run. Eight tests of the optional native allocator were skipped on every local run because building it needs setuptools. scripts/build_native.py compiles it for the running interpreter from its own compiler settings, without downloading anything, and the local release gate builds it before the unit suite.
  • The Debian package states its real size. The package declared 1.34 GB installed for an 854 MB install: 165 Qt libraries are symlinks, and the size count followed each link to the file it points at and counted that file a second time. The count now skips links. The README gives each installer's download and installed size, measured from the 0.9.1 files.
  • Each reference page says which version it describes. The manual, settings, outputs and the other reference pages now end their top line with "Describes CartoVox 0.9.2", and a test fails when the app's version moves on until every page has been read against the new release and its stamp moved too.
  • How coarse the saved seasons are is said where they are shown. The year's seasonal frames are kept at half the grid each way. The Climate Lab said so; now the weather year says it with the frame size, and the dossier's climate chapter says it with the size and kilometres per cell, beside the note that every figure in the dossier and every cell reading comes from the full grid. The world package also describes its own stages in order.
  • The issue ledger distinguishes fixed from shipped. KNOWN-ISSUES.json gains a resolved status that names the release carrying the fix. Six entries that shipped in 0.8.0 and 0.9.1 still said the fix was waiting on a branch. Three more are closed on the 0.9.1 installer evidence: all four artifacts passed their native checks, including the saved-cell reads on Windows 11 that the 0.9.0 report was about and the Qt binding policy on Linux and Windows.
  • Dead code left by a rejected river rule is gone. Twenty-nine lines of an abandoned headwater-pruning pass sat unreachable after a return in the channel tree, and the setting's comment still described that rule. Removing them changes no output; the channel tree was compared on 200 random graphs before and after.
  • The full gate builds the same world twice and compares. verify.py --determinism compared a few summary numbers; it now compares every array in the saved world, the summary without its timings, the worldbook and every plate, and --isolation checks that a world renders the same whether or not another was rendered first. Both run in the full release gate.
  • Health notes climate past Earth's records. A world whose land has an annual mean below about −57 °C or above about 35 °C, or more than about 13,300 mm of rain a year, gets an information entry naming the value and the Earth record it passes (the East Antarctic plateau, Dallol, Mawsynram and Lloró). It is information, not a fault: another sun or atmosphere can go further.
  • The ocean solve says how far from solved it stopped. The currents are solved with a fixed number of sweeps. The health report now records the residual and how much the last sweep still moved the solution, as information; reading them changes nothing the solve produced (a Sketch world rebuilt before and after saved identical arrays).
  • Rebuild drafts compare protected ground. When the rebuilt world's edits protect terrain, each measured field says how many changed cells fall inside the protected ground and how many outside, and the change map draws its edge, so it is plain whether the protection held.
  • Read one cell of a rebuild draft. Click a place on a draft's change map, or type its latitude and longitude, and the review lists every measured field there before and after — elevation, land, temperature, rainfall, biome, river and lake — with the change, and whether the cell is inside protected ground. It reads the same two copies the map was drawn from, so the numbers always agree with the colour under the pointer.
  • Closed basins, told apart by shape. The health report now counts the basins whose water ends in a lake or salt pan and separates broad sinks from pits one to three cells wide. On a Sketch world of seed 991, 39 of 45 were pits, 287 m deep at the median. The water balance cannot tell a real basin from a hole the relief generator left — every closed lake here closes by evaporation — and some pits are real, so it is information, not a fault. It points at the deepest pit and names the lever that drains them (the breach depth) with the value that drains about three in four, including the broad sinks that value would drain too.
  • The health report states what the ice leaves out. Its model scope gains a glaciation entry: the reconstruction does not depress land under ice or let it rebound afterwards, and ice volume does not move sea level; Deep Time's optional ice, isostasy and sea-level feedback is where both are modelled.
  • Every hydrology band names its source. The bifurcation, Hack and hypsometry bands cite the papers that defined them; the uphill, seasonal and water-balance bands are labelled as CartoVox's own tolerances; the delta band is true by definition; and the maximum stream order has no band, with the reason (it depends on the scale the network is read at). The sources are written into every metrics report.
  • A speckle warning on a coarse grid says why. On the Quick grid, a biome mosaic narrower than one cell reads as isolated cells, so the warning now says part of the share is the grid and that the Full grid measured about 40% fewer on the same seed.
  • The SBOM names each dependency's licence. Every component carries the licence its package declares; a package that declares none gets no entry rather than a guess.
  • Links in the guides are checked. A test follows every relative link in the live documentation and fails on one that leads nowhere, or into the archived plans.
  • Tests may not touch the real library. The guard that stopped tests writing into worlds/ now also covers scenes and the structure, artwork and style libraries, both in a source checkout and in the installed app's data folder, and refuses deletions and moves out of them as well as writes.
  • Config schema 18 adds civilisation. Its default, "full", places hearths exactly as before.
  • HTTPS falls back to the operating system's certificate bundle when Python's own points nowhere (a python.org Python on macOS, a Linux build run on another distribution), where every request had failed certificate verification.
  • The macOS build uses a standalone CPython 3.12 with a macOS 11 floor; the Homebrew 3.12 it replaced was built for macOS 26, which the build's macOS 14 floor check rightly refused.
  • Config schema 19 adds land_relief ("generated" builds relief as before), terrain_land_heights and terrain_sea_floor (each "auto", "picture" or "generated"). "auto" changes only an imported picture with a side that is one flat tone.
  • Long loops reach the run's cancel probe through a thread-local (world.progress.checkpoint) rather than through every signature.