• v3.3.0 ea7103e633

    v3.3.0
    All checks were successful
    build-and-release / docker (push) Successful in 2s
    Stable

    debe released this 2026-10-12 09:01:34 +00:00 | 9 commits to main since this release

    Second audit pass: the items deliberately left unfixed in 3.2.0.

    Fixed

    • An archived topic could lose its archive flag. Trashing an archived topic and then
      unarchiving it cleared archived_at, so restoring it dropped the topic into the main
      list instead of the archive. Unarchiving a trashed topic is now refused with
      409 topic_trashed, and restoring returns it to the archive.
    • Wrong method returned 404. POST /api/health (and every other known path with an
      unsupported verb) looked like a missing route. Known paths now answer 405 with a
      proper Allow header; unknown paths stay 404.
    • Sign-in failures reached the browser as English prose. They now travel as stable
      codes (signin_expired, state_mismatch, provider_rejected, account_disabled,
      signin_failed, sauth_unconfigured) and are translated like every other error.
    • Markdown: emphasis ran across code spans, producing crossed <em>/<code> tags
      (_a b_c d_). Code spans are now extracted first and re-inserted last.
    • Markdown: a link whose URL contains parentheses was cut at the first ), leaving a
      stray bracket and a truncated href. Balanced parentheses are now accepted.
    • The topic list was mouse-only. Cards are <article tabindex="0" role="button">
      with an aria-label, and Enter/Space opens them.
    • Escape did nothing. It now closes the confirm dialog (as "cancel") and the
      create-topic modal; the confirm dialog remembers and restores focus, and focuses the
      safe button first so the destructive one needs a deliberate move.
    • English content rendered inside the RTL document without bidi isolation. Update
      summaries, raw text, topic summaries and reports now carry dir="auto", and long
      unbroken tokens wrap instead of overflowing.
    • Removed 34 dead translation entries in both dictionaries (and their orphaned CSS).

    Tests

    • 2 more regression tests (140 total) covering the 405/Allow behaviour and the
      archive-while-trashed guard.
    Downloads