NPC grouping and reordering now reject references to another game without changing existing groups or positions.
Maps now save uploaded files separately for each game, so adding the same image to another game still works after reloading. Leaving a map stops unfinished file selections and drops from changing the next map.
Maps now retain edits while disconnected and recover them after reconnecting or returning to the map. A save indicator shows when changes are saved, waiting for a connection, or need attention.
Maps now keep their original edit history instead of allowing a browser snapshot to replace it. This prevents compaction from losing edits or leaving a map unable to load.
NPC rolls now keep their identity and privacy setting. Private Seventh Sea initiative rolls stay out of the shared tracker.
Overlapping rolls keep separate dice selections. Failed rolls remain visible with a manual retry, and delayed replies cannot clear selections on another page.
Game admin pages and panels on maps now require game owner or superadmin access. Players can still open maps and read public rolls; complete character data, private rolls and GM controls are restricted to administrators.
Realtime edits now enforce sheet ownership and game permissions. Players can still use shared counters and adjust their own initiative dice; whole initiative changes, sheet settings and map compaction require game admin access.
Hunter shared counters now restore their values and filled dots when a sheet is reopened.
Maps: g and a space now open the generator straight away, without enter. The command's name moves out of the field and stands beside it as a block marked GENERATE, so it is clear what the list is for, and the box lists every table you can reach until you narrow it
Maps: the generator's search box now searches the whole library rather than filtering the tables it already fetched, so a name that is not in the first page of results is still reachable. A search that finds nothing, or fails, says so in the box and leaves what you typed there to fix
Maps: the command palette can now generate from a random table. Type g and what you are after — g goblin — and the palette lists the matching tables with the book or website each came from; pick one and the result arrives as a sticky note in the middle of the view. Entries can draw on other tables, so a personality made of two descriptions rolls both of them separately
Maps: anything you add is now selected as soon as it appears, with the cursor already where its name is typed — in the inspector's Label field for a node or a group, and in the note itself for a sticky note. A node's placeholder name is selected too, so you can just start typing over it. Things with no name to give, like a PDF or an image, are selected and leave the keyboard alone
Maps: adding an embedded web page now puts the cursor straight in its Source field, which is what the placeholder on the empty embed was already telling you to fill in
Maps: Escape now leaves whatever you are typing — a Label or Source field in the inspector, or a sticky note — and hands the keyboard back to the map, so the single-key shortcuts work again without reaching for the mouse. What you typed is kept
Maps: pressing space opens a command palette — start typing and press enter. It can add a node, a sticky note, a group or an embedded page, frame the map on everything or on what you have selected, and roll dice. The single-key shortcuts still work, and the palette shows each one beside the command it runs
Maps: typing roll 2d6+3 into the command palette rolls it and puts the result in the roll log, where the whole table can see it — the log opens by itself to show you
Maps: every map now has a roll log, not only the ones for systems with dice. A notation roll works the same on a standalone map, where previously there was nowhere for the result to appear
Maps: the left and right arrow keys now turn the pages of a selected PDF, alongside Page Up and Page Down
2d0 into a campaign's activity box no longer errors the page out — it is now rejected as invalid notation like any other nonsenseMaps: you can now drag an image, PDF or SVG straight from your computer onto a map, and it is added where you drop it — several at once works too, and anything the map cannot show says so by name rather than being ignored
Maps: a PDF can now show two pages at once, side by side, with a "Two pages" toggle in the inspector — the arrows and Page Up/Down then turn two pages at a time
Necromunda gangs: a ganger's weapons show their profiles again — every ordinary weapon was being dropped from the list, leaving only the ones whose ammo had to be matched up with the gun carrying it
Necromunda gangs: two-in-one weapons such as a polearm/chainsword now list both profiles
Maps: the largest file you can add to a map is now 200 MB, up from 100 MB
Maps: a large PDF on a map now opens almost at once — pages are fetched as they are needed rather than downloading the whole book first
Maps: files on a map are now kept on disk between visits, so reopening a map no longer re-downloads every PDF and image on it
Maps: the memory held for files on a map is now capped — a map with dozens of large PDFs on it used to keep every one of them in memory for the whole session, which on a big enough map ran the tab out of memory
Maps: deleting a PDF or image now frees the pages it had drawn, instead of leaving them in the texture cache until something else pushed them out
Maps: fixed the seventh and later PDFs on a map failing to render at all — the limit on parsed documents threw instead of evicting, which blanked the page permanently and meant nothing was ever freed either
Maps: replacing an image, PDF or SVG now says it is working while the file uploads — a large file gave no sign of itself at all, which looked exactly like a button that does nothing
Maps: a file too big to add is now refused immediately and told you so by name and size, with the limit — it used to be uploaded in full, refused by the server, and reported as "could not read the file", which was not what had happened
bin/dev) died with EADDRINUSEautofocusambient.d.ts and types/vendor.d.ts so the globals the Rails views inject and the three untyped dependencies are described to the type checker; npx sv check is now warning-free and its remaining errors are the TypeScript conversion backlog, planned in docs/typescript-migration.md/metrics endpoint was serving a 5.1 MB payload that never finished scraping, leaving the machine sending ~1 MB/s continuously/metrics route, which exposed the Prometheus registry to anyone on the internetSheet#merge_update is now used by the channel instead of duplicated inline logicdnd5e?, seventh_sea?, etc.) instead of raw string comparisons