• v4.6.2 881d0f582b

    v4.6.2
    All checks were successful
    CI / Does this change touch the recording path? (push) Successful in 14s
    CI / Which journeys does this change need? (push) Successful in 14s
    Release / Create Forgejo release (push) Successful in 16s
    CI / Summarisation accuracy eval harness (stub provider) (push) Successful in 59s
    CI / Bot/backend version sync (push) Successful in 1m4s
    CI / Backend lint (ruff) (push) Successful in 1m15s
    CI / Feedback site tests (push) Successful in 1m47s
    CI / Docker image build (push) Successful in 2m34s
    Release / Build and push versioned images (push) Successful in 3m46s
    CI / Bot tests and audit (push) Successful in 4m46s
    CI / Frontend (shard 2/2) (push) Successful in 10m48s
    CI / Synthetic session harness (no GPU, no LLM) (push) Successful in 10m38s
    CI / Frontend (shard 1/2) (push) Successful in 12m44s
    CI / End-to-end journeys (desktop) (push) Successful in 15m22s
    CI / End-to-end journeys (phone) (push) Successful in 28m24s
    CI / End-to-end journeys (keyboard) (push) Successful in 31m32s
    CI / Backend migration, tests, and audit (push) Successful in 35m44s
    Stable

    claude-bot released this 2026-10-30 18:21:36 +00:00 | 299 commits to main since this release

    The map, as planned: everything the map's plan had that 4.6.0 left out (#1263),
    and the fixes from trying it on the dev server as 4.6.2-rc1 to -rc4. Maps
    and atlases can be renamed, binned and restored; markers edited, moved and
    linked; portals link maps, or two places on one map; the party's trail runs in
    session order, with stops added, reordered and reached by portal; and a large
    map opens from smaller zoom levels with its thumbnail first.

    Upgrading from 4.6.1

    • Two database migrations (f1263a0b1c2d, a1269b0c1d2e). Back up first:
      make backup-now, then make migrate-safe, then docker compose up -d.
      The second puts the trail stops already recorded in session order.
    • Then cut the zoom levels and thumbnails of the maps already uploaded,
      once:
      docker compose exec -T worker celery -A app.tasks.celery_app call app.tasks.map_tiles.backfill_map_thumbs. It runs daily anyway; until it
      has, a large map loads as slowly as before.
    • BOT_CONTRACT_VERSION is unchanged (2). The backend and the bot can be
      updated one at a time.
    • Starter content packs are on this release's page too, so Admin → Content
      packs keeps offering them.

    Added

    • [repo] The feedback site has a name-rating page at /names. Testers draw
      names from the built-in generator (no AI), mark each up or down, and leave
      notes per style; the admin readout tallies them (#1257).
    • [webapp] A map marker can be edited: its label, line, kind, page, map, holding, position and who sees it (#1260).
      PATCH /api/campaigns/{id}/markers/{marker_id}. A GM edits any marker; a player edits only her own, as a note, place or danger, with no links. A marker's page can no longer be one in the wiki's bin, on create or edit.
    • [webapp] Maps and atlases can be renamed, changed and deleted into a bin, and travel links and trail stops can be removed (#1263).
      PATCH and DELETE for maps and atlases (GM only), GET /api/campaigns/{id}/maps-bin with restore routes, and a daily purge that removes the rows, pictures and tiles after the same grace period as the wiki bin. DELETE for a travel link and for a trail stop; a travel link can be GM-only. Migration f1263a0b1c2d.
    • [webapp] A map has a thumbnail, at most 1024 px on its longest side (#1263).
      The worker writes it when it cuts the map's tiles, and GET /api/campaigns/{id}/maps/{map_id}/thumb serves it with the same audience check as a tile. A daily task writes it for maps cut before this release.
    • [webapp] The map, planned parts that were missing (#1263). ![[Map: X]] in
      a page now shows a small picture of that map, linking to it. Place and
      travel-link labels that would sit on top of each other no longer do: the
      more important one keeps its label and the other shows on hover or focus.
      A marker that opens a map of its own wears a "+" and says so in its name. A
      group's page says "Holdings on the map" for the markers that name it as
      holder. The party page shows where the party is and its trail, for the party
      being viewed.
    • [webapp] The map, the rest of what was planned (#1263, #1260). A GM or a
      marker's author can Edit a marker (what is here, kind, a line, who sees
      it) and Move it; a GM also links it to a page ("The page it's about"),
      a holder ("Held by", for a holding) and a map it opens. A travel-link
      marker has Link to another map…, with a note and "Everyone at the
      table" or "GMs only", and each link can be removed. Every marker a player
      added says whose it is and who sees it, whatever its kind. A GM gets a
      Maps in this atlas list with rename, level name, who sees it, Replace
      the picture
      and delete for each map, atlas settings, and a Bin with
      Restore. Each trail stop links to its session and a GM can remove one or
      end the trail at a spot on the map; a campaign with two parties has a party
      switcher; a party on a map below shows on the map above; the trail is drawn
      across travel links; the party's own marker opens a small panel; the kind
      chips are remembered. Every removal asks first, and every failure shows the
      server's sentence with Try again.
    • [webapp] A trail stop reached by portal or magic has no line to it (#1273).
      After a stop at a portal, "Add a stop" asks where the party came out: a
      marker on any map (that portal's linked exits first), a spot, or nothing
      yet, so a session can end with the party mid-portal. "No line to it: they
      went by portal or magic" marks any stop the same way. The trail is drawn
      broken there, and also where it changes map with no link to show the way.
      Two portals on the same map can now be linked, such as the ways in and out
      of somewhere with no map of its own.
    • [webapp] The party's trail: "Add a stop…", stops in an order a GM can change, and a shorter list (#1275).
      "Where the party ended…" is now "Add a stop…". A GM moves a stop earlier or
      later within its session. The list under the map is grouped by session,
      newest first, with only the latest open.
      POST /api/campaigns/{id}/parties/{party_id}/trail/{stop_id}/move.

    Changed

    • [repo] The feedback site's readout is tabbed (#1257). The name sampler
      opens first, with a sub-tab per generator style holding its marks and notes;
      the finished redesign rounds sit under "Completed: redesign".
    • [webapp] "On this map" stays short (#1276). The markers under the map
      are grouped by kind, folded, with a "Find a marker" search that opens every
      kind with a match.
    • [webapp] A "travel link" marker is now called a portal. The map's legend
      says "Portals", a marker's kind is "A portal", and a marker made at the far
      end of a link is "Portal to …". Any marker can still open a map of its own.

    Fixed

    • [webapp] The wiki editor's [[ link menu opens under the line you are
      typing (#1261).
      It stood near the top of the text box whatever line you
      were on, so on a page with text it covered the first lines and the link
      being written. It now opens under the cursor's line, stays inside the
      editor, and opens above the line when there is no room below.
    • [webapp] A map whose picture is refused is no longer made twice (#1263).
      "Add a map" makes the map (and its atlas) once. If the picture is refused,
      Try again sends only the picture; or the map is left without one and its
      page offers "Add the picture". The ![[Map: X]] embed loads the map's
      thumbnail, falling back to the whole picture.
    • [webapp] Removing a marker that a trail stop uses no longer fails with a server error (#1263).
      A stop made from a marker now keeps the marker's map and position, so it stays on the trail when the marker goes. The migration fills them in for existing stops.
    • [webapp] Choosing a page in the article picker is clicking its name (#1268).
      The separate "Choose" link is gone, and on the map's marker form the name and
      the link no longer run together as one word.
    • [webapp] The party's trail runs in session order (#1269). Stops were
      ordered by when they were entered, so filling in earlier sessions after the
      latest one moved "The party is here" back to the last one entered. A stop
      made between sessions comes after the last session played when it was
      entered. Migration a1269b0c1d2e places the stops already recorded.
    • [webapp] "Where did the party end up?" finds a marker by searching its
      name, and offers every kind (#1271).
      Dangers and notes were missing from
      the list, and a dropdown of every marker would not have scaled to a long
      campaign's map. With no marker chosen, it goes on to choose a spot.
    • [webapp] Embedding a map in a wiki page: the [[ menu finds maps, and the preview draws them (#1277).
      After Map: the menu offers the campaign's maps by name, not "Create" a
      page; a map whose name starts with what is typed is offered among the
      pages. The editor's preview showed the embed as a page still to be written.
    • [webapp] A large map opens in moments, not 10–15 seconds (#1282). The
      worker now cuts each map at half size, a quarter and so on, until the whole
      map fits in one tile, and the page reads the level that fits the screen: an
      8192 × 6144 map opened zoomed out needs a few dozen tiles, not all 768. Its
      thumbnail shows at once underneath and sharpens as the tiles arrive. Maps
      already uploaded get their levels from the same backfill as the thumbnails
      (celery -A app.tasks.celery_app call app.tasks.map_tiles.backfill_map_thumbs),
      and daily after that.
    • [webapp] The party's trail and "Add a stop", from the 4.6.2-rc2 review (#1283).
      An older session in the trail list says "Show", and choosing a stop's place
      on the map opens its session, so its stops' Remove and Earlier/Later are
      easy to find. The marker searches in "Add a stop" list nothing until you
      type, apart from a portal's linked exits, so the form stays short.
    • [webapp] A map sharpens as you zoom in, and fills most of a phone's screen (#1286).
      The thumbnail shown while a map loads sat above its tiles, so zooming in
      never got sharper; it now sits underneath them. On a phone the map's box is
      most of the screen tall, not a short strip in the map's own shape.
    Downloads