• v3.6.0 314ffbc80d

    v3.6.0
    Some checks failed
    CI / Docker image build (push) Successful in 18s
    Release / Create Forgejo release (push) Successful in 21s
    CI / Backend lint (ruff) (push) Successful in 2m23s
    CI / Frontend tests, audit, and build (push) Successful in 2m43s
    Release / Build and push versioned images (push) Successful in 4m9s
    CI / Bot tests and audit (push) Successful in 7m45s
    CI / Backend migration, tests, and audit (push) Has been cancelled
    Stable

    rbrooks released this 2026-07-17 22:29:59 +00:00 | 706 commits to main since this release

    Scheduling: timezones, recurrence, availability & calendar sync.

    Campaign-anchored timezone correctness, recurring session series, standing
    player availability with quorum-based at-risk warnings, a subscribable iCal
    feed, and emailed calendar invites. No API contract change
    (BOT_CONTRACT_VERSION stays 1). Ships four Alembic migrations.

    Added

    • [webapp] Emailed calendar invites — opt in (Profile → "Email me calendar
      invites") to receive a real calendar invite by email when a session is
      confirmed. It adds straight to Gmail, Apple Calendar, or Outlook, updates in
      place when the session is rescheduled, and is removed if it's cancelled — no
      Google sign-in or setup required. (#189)
    • [webapp] Subscribable calendar feed — each user can generate a personal
      iCal feed URL (Profile → Calendar subscription) and subscribe to it in Google
      Calendar, Apple Calendar, or Outlook to see all their confirmed sessions,
      updated automatically when a session is rescheduled or cancelled. (#107)
    • [webapp+bot] Standing availability, absences, and session-at-risk warnings
      players can set recurring weekly availability (in their own timezone) and mark
      date-range absences on their profile; when a GM proposes times, the voting grid
      and create form flag who is unavailable. Campaigns can set a minimum-players
      quorum, and when a confirmed session is likely to fall below it (from absences
      or explicit "no" votes) the GM gets a one-time Discord warning and the session
      is flagged in the web app. (#104)
    • [webapp] Recurring session series — GMs can set a game to repeat (weekly,
      every other week, or monthly on the same weekday) at a fixed campaign-time,
      and Quest Board auto-creates the sessions a few weeks ahead. Times stay put
      across daylight-saving changes. Individual occurrences can be rescheduled,
      cancelled, or detached without affecting the rest, and editing the series can
      either apply to just future sessions or also update upcoming unmodified ones.
      Reminders work exactly as they do for one-off sessions. (#98)

    Fixed

    • [webapp] Session times are now anchored to the campaign's timezone — the
      scheduler previously read the naive picker value in the browser's zone, so a
      GM scheduling "7:00 PM" from a different timezone than the campaign stored (and
      everyone saw) the wrong instant. Scheduling inputs now convert from campaign
      time to UTC correctly (DST-aware), every displayed time carries an explicit
      zone label, and the session detail page and voting grid add a "your time" line
      when your zone differs from the campaign's. Milestone dates are treated as
      floating calendar dates so they never shift a day across zones. Campaign
      settings offer the full IANA timezone list. Backend and bot were already
      correct (UTC storage; Discord dynamic timestamps). (#95)
    Downloads