Skip to content

Release 0.34.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 22:58
· 153 commits to main since this release
cf6194e

Messaging: private messages, a public room, and a ticket desk — with the Go relay that fans out to all three.

What ships

Private messages. First contact lands in a request queue rather than the inbox, so a stranger cannot put anything in front of you without your say-so. Optional per-conversation encryption, sealed in the browser. Reactions, replies, edits, read receipts, archiving, muting and search across everything the server can actually read.

A public room. Partitioned by day, with slow mode, mutes, pins and staff broadcasts.

A ticket desk. A member writes to the staff as a body rather than to a person — which is the point: somebody who has blocked the moderator on shift can still reach the desk. Assignment happens by answering. Closed is closed in both directions, with a staff-only reopen as the escape hatch.

Live delivery. A Go relay, fanning out over SSE, with per-user channels and a token the API mints.

The rules it holds to

  • Nothing is on by default. Each surface has its own switch, and an instance running none of them looks like a build that never had them: 404, not 403.
  • Blocking closes every door but the one to the staff.
  • What the staff can read is logged. One route reads a reported private message, never a second one, never a ciphertext, and every read is on a page the whole team can see.
  • Retention is published and enforced. /privacy reads the live settings rather than repeating numbers, and each sweep now has tests — which is how the one that had never deleted a row was found.

Verified before the merge

e2e, clean database 537 across 13 scenarios
Unit 765 web · 429 API
Integration 463
Typecheck API and web templates, 0
Migrations upgrade rehearsal: a database built from main's 49 and brought up on 58 is byte-identical to a fresh one

Operators

Nine migrations (0049–0057). Everything starts switched off; the messaging settings live in the admin panel. The relay is optional — without it the surfaces work by reloading, which is how they were built.

🤖 Generated with Claude Code

What's Changed

Full Changelog: 0.33.0...0.34.0