-
v3.4.0
StableSome checks failedCI / Docker image build (push) Successful in 13sRelease / Create Forgejo release (push) Successful in 18sCI / Backend lint (ruff) (push) Successful in 36sRelease / Build and push versioned images (push) Failing after 9sCI / Bot tests and audit (push) Successful in 1m46sCI / Backend migration, tests, and audit (push) Failing after 2m23sCI / Frontend tests, audit, and build (push) Successful in 3m40sreleased this
2026-07-16 06:08:49 +00:00 | 739 commits to main since this releaseReliability, operations & self-hosting.
All 14 milestone issues. Makes failures visible and recoverable and smooths
deploy/upgrade for self-hosters. Backend and bot suites green (backend 395,
bot 186).Added
- [webapp+bot] At-least-once bot event delivery — backend→bot session events
now flow over a durable Redis Stream (qb:bot:events) with a consumer group
and per-eventevent_ididempotency, replacing fire-and-forget pub/sub that
silently dropped events while the bot was down and could double-post on the
HTTP fast path. (#81) - [webapp] Automatic ordered migrations on deploy — a one-shot
migrate
service runsalembic upgrade headbefore backend/worker/beat start; fresh
installs self-provision and app services never boot against an old schema. (#89) - [webapp+bot] Version handshake —
GET /api/bot/metaplus a bot startup
check refuse to run on a contract-version mismatch and warn on drift. (#93) - [webapp] VAD silence-trim before transcription (opt-in, Admin → Bot
Settings) cuts Whisper time/cost by transcribing only speech spans, with exact
session-relative timestamp offsets. (#101) - [webapp] Pagination (
limit/offset+X-Total-Countheader) on list
endpoints, backward compatible. (#99) - [webapp] Background-job failure counters (
backup_failed_total,
celery_task_failed_total,bot_event_delivery_failed_total), example
Prometheus alert rules, and an optional Sentry hook. (#86) - [ops] Container hardening — worker/beat/frontend healthchecks, memory
limits, and Redis AOF persistence. (#84) - [ci] Versioned Docker images published to the Forgejo container registry
on tag. (#91) - [ops] Disaster-recovery docs — restore runbook, off-host backup copies,
and media-volume backup. (#80)
Changed
- [bot] Recording streams to disk instead of buffering whole sessions in RAM
— memory is now bounded (was ~20 GB for a 5-person/6-hour session), and audio
survives a crash. (#82) - [webapp] Backend hot-path performance — module-level Redis connection
pools, SSE releases its pooled DB session, N+1 vote/NPC queries replaced with
grouped aggregates, and asessions (status, confirmed_time)composite
index. (#96) - [webapp+bot] Pinned Python base image to 3.12 to match CI and avoid the
3.13+ stdlibaudioopremoval that discord.py voice needs. (#87) - [webapp] Tree-wide
ruff formatapplied and enforced as a CI gate. (#20)
Fixed
- [webapp] Celery event-loop crashes — every task now uses a per-call
NullPool session (task_session()), fixing intermittent "Future attached to a
different loop" failures in recap-email and vote auto-close. (#129)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- [webapp+bot] At-least-once bot event delivery — backend→bot session events