Loading…
Reference in a new issue
No description provided.
Delete branch "build/lane3-completions"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The owner-decided completions to lane 3's pages (#729). Closes #773. Closes #781.
What changed
D91, the recap line. A played session's row on the sessions list now shows its recap. It is the same first-sentence cut Home's card uses, computed once in
home_serviceand reused, and the list's filter matches it. Before this, the row always said "No recap yet", because the list never sent the summary.D92, invites that never expire.
InviteCreate.expires_in_daysacceptsnull, andcreate_invitethen leavesexpires_atempty, which every expiry check already treats as live for ever. The invite form gains a Never choice beside 1, 7 and 30 days. No migration was needed:campaign_invites.expires_atwas already nullable.#773, the story's chapters.
chapters()(CampaignStoryline.jsx) and the wiki front's body renderer drop a paragraph that is only a rule, rather than printing a literal---between chapters.#781, import errors. An importer's own
AdapterErrormessage is written for a GM, so it passes through unchanged ("Record 1 has no name."). The raw library text is fixed where it's created:fetch_pack's httpx error.orcbrewfile-read and EDN-parse errors.foundrybad-zip and bad-entry errors.fivetoolsfile-read error.Each now says what's wrong with the file in plain words and logs the real exception on the server.
The bin's grace period comes from the server.
CampaignResponsecarriestrash_retention_days(fromsettings_service.get_trash_retention_days, floored at 7), and Archive, export & delete reads it instead of a hard-coded 30.Checks, on the tree merged with main (
a028f55)🤖 Generated with Claude Code
Revert the genericising at import_service.py's two AdapterError boundary sites (read_pack, import_from_path): AdapterError's message is written for the importer (per its own docstring) and now passes through unchanged again, e.g. "Record 1 has no name." — exactly what a GM needs to fix their file. The logger.warning() calls added at both sites stay, so the exception is still on record. Keep the fetch_pack fix (httpx.HTTPError's str() is genuinely library text, never meant for a person) — unchanged from the first commit. Fixed the real leak at its source instead: five AdapterError raises across three adapters embedded a raw caught exception's text directly in their message (searched every adapter for `{exc}`/`str(exc)`/`repr(`/`%s` with an exception): - orcbrew.py: OSError reading the file, and edn_format's own exception (several possible types) parsing EDN. - foundry.py: zipfile.BadZipFile opening the archive, and (BadZipFile, OSError, EOFError) reading one entry from it. - fivetools.py: OSError reading the file. Each now says which file/entry and what to do, and logs the real exception. Tests: reverted the five existing assertions this touched back to their original specific wording (test_content_pack_import.py x3, test_content_pack_task.py); adjusted the two import_service boundary tests to assert the adapter's own message passes through and is logged, instead of asserting a generic message; kept the fetch_pack no-library-text test unchanged; added one no-library-text-and-logged test per fixed adapter (two for orcbrew, two for foundry — one per site — one for fivetools). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>