Skip to content

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 08:15
· 14 commits to main since this release
24258e7

Before you upgrade

This upgrade is one-way. Migrations run forward only. An older
binary opens a newer database without complaint and then runs every
destination with an empty stream key — enabled, live, publishing
nothing, with no error anywhere. Rolling back is not a supported
recovery path; restoring your backup is.

Back up the whole data directory, not just polyemesis.db.
Since 0.7.0 destination stream keys are sealed at rest with
secret.key. A database restored without that file comes back with
every destination disabled — by design, because a key that will not
open disables its destination rather than failing open. That restore
looks completely successful until someone goes live.

Re-run install.sh before upgrading an install older than 0.7.0.
update.sh and uninstall.sh are written to disk when you install,
so an older install is running older helpers — including one whose
backup check does not know to look for secret.key. Re-running the
installer regenerates them. See
docs/UPGRADING.md.

Windows is tested, not operated. One known unresolved defect:
recordings are truncated on service stop. (#440, the intermittent Go
runtime abort, was fixed in 0.9.0.) See
docs/INSTALL.md.

Verify your download against SHA256SUMS, published below, and
that this project's release workflow built it with
gh attestation verify <file> --repo rainmanjam/polyemesis. See
docs/INSTALL.md.


What's Changed

  • Post-0.11.0 backlog: audit fix, stop-generation race, stall baseline, lock-order coverage, verified PromQL by @rainmanjam in #871
  • chore(deps-dev): bump the dev-tooling group across 1 directory with 5 updates by @dependabot[bot] in #864
  • chore(deps): bump motion from 13.4.0 to 13.4.4 in /web by @dependabot[bot] in #866
  • chore(deps-dev): bump the dev-tooling group across 1 directory with 4 updates by @dependabot[bot] in #863
  • chore(deps): bump astro from 7.3.3 to 7.3.5 in /web by @dependabot[bot] in #865
  • chore(deps): bump motion from 13.4.1 to 13.4.4 in /ui by @dependabot[bot] in #867
  • chore(deps): bump @astrojs/markdown-satteri from 0.4.1 to 0.4.2 in /web by @dependabot[bot] in #868
  • chore(deps): bump lucide-react from 1.47.0 to 1.48.0 in /ui by @dependabot[bot] in #869
  • October maintenance: fix main's red security/ci (Go 1.27.2 + npm advisories), failover header, settings copy, site screenshot, motion 14 by @rainmanjam in #894
  • chore(deps): batch the October Dependabot updates by @rainmanjam in #895
  • UX overhaul: 34 UX Council findings, Stream Deck plugin, live track mute and gain by @rainmanjam in #915
  • fix(automod): a model verdict missing abusive or confidence is a failure, not a pass by @rainmanjam in #922
  • chore(deps): bump go-chi/chi to v5.4.0 (GHSA-j6qf-3m9c-vwj3) by @rainmanjam in #923
  • UX Council: close the remaining gaps (B2 B3 A1 A2 A5 A6 A7 A8 A14 A17 A18 A19 S1 S5 S7) by @rainmanjam in #924
  • fix(oauth): turn on PKCE for Twitch now that Twitch advertises S256 by @rainmanjam in #926
  • UX follow-up: ingest uptime on the shared listener, header chip and preset defaults per programme by @rainmanjam in #927
  • Wave 1: failure reasons, events API, Grafana, MCP server, chat overlay by @rainmanjam in #925
  • Site: positive banner and comparison framing by @rainmanjam in #928
  • chore(deps): batch the late-October Dependabot updates by @rainmanjam in #930
  • Fix audio drift on destinations not restarted at a format-changing failover by @rainmanjam in #931
  • FFmpeg 9.0.2 compatibility: installer download fix, 9.0/9.0.1 warning, compat CI by @rainmanjam in #929
  • Wave 2: OBS bridge, broadcast delay, chat polls, SRTLA failover, automod model checkers, Stream Deck signals by @rainmanjam in #932
  • test(obsbridge): fix the stream-event race in the emission test by @rainmanjam in #935
  • Fix audio drift on multi-track destinations after a format-changing failover by @rainmanjam in #934
  • fix(scripts): OAuth acceptance live step creates no broadcast by default by @rainmanjam in #936
  • ui(platforms): label each credential pair in the platform console's own words by @rainmanjam in #938
  • test(engine): wait for the whole drain teardown before reading the drained status (windows flake) by @rainmanjam in #939
  • test(api): make the planted recordings a fixed point of the recording manager's scan by @rainmanjam in #940
  • fix(engine): count restarts the live-gain path causes by @rainmanjam in #933
  • chore: retire Trovo, which shut down on 30 June 2026 by @rainmanjam in #937
  • UX overhaul: Settings redesign and app-wide council fixes (Phase 1 + 2) by @rainmanjam in #941
  • chore(ffmpeg): require FFmpeg 8.0+; CI tests the latest 8.x and 9.x by @rainmanjam in #943
  • Wave 3: X (gated), YouTube vertical, live captions, Twitch VOD track, recurring events, planned rollover + follow-up fixes by @rainmanjam in #942
  • test(api): floor bcrypt in the engine-backed fixtures (internal/api -race 1260s -> 377s) by @rainmanjam in #944
  • feat(chat): automod flags and sanction state readable on Chat (UX Council A48) by @rainmanjam in #945
  • fix(ui): rollover panel reads its programme off the card, not a second GET by @rainmanjam in #947
  • Wave 4 #9: public player upgrades (UX, offline card, QoE beacons, HEVC/AV1 fallback) by @rainmanjam in #946
  • fix: deliver the stdio relay's refusal answer; bind the srtla dual-stack test to an explicit port by @rainmanjam in #952
  • ci(streamdeck): validate and pack the plugin, attach it to releases by @rainmanjam in #948
  • Wave 4 #10: S3-compatible offload (mirror mode) + CDN-ready player origin by @rainmanjam in #949
  • Wave 4 #4: cross-platform analytics (sampler, live panel, per-stream report, Prometheus/MQTT/CSV, Stream Deck Viewers) by @rainmanjam in #950
  • Broadcast delay: Dump, and Cut now on the Stream Deck (#11) by @rainmanjam in #951
  • fix(scripts): test-in-docker.sh derives its Go image from go.mod by @rainmanjam in #954
  • chore(deps): November batch of safe minor/patch updates and digest pins by @rainmanjam in #955
  • fix(ffmpeg): escape filter values at both filtergraph levels on the live path by @rainmanjam in #956
  • Wave 4 #5a/#5b: highlight suggestions and vertical shorts in the clip editor by @rainmanjam in #953
  • Installer: install caption fonts (fontconfig, DejaVu, Noto CJK) in binary mode by @rainmanjam in #957
  • ci: save caches on main only, upload suite logs on failure only by @rainmanjam in #958
  • fix(alerts): route Notifier.Flush through the run loop while Run is live by @rainmanjam in #959
  • fix(api,recording): root-cause two macOS internal/api flakes by @rainmanjam in #961
  • design: broadcast palette tokens (console + website) by @rainmanjam in #960
  • Fix five flaky tests at their causes; stop the job tier before the store closes by @rainmanjam in #962
  • site: design-review quick wins (rows 3–6, 9, 10, 12, 20–24, 26) by @rainmanjam in #963
  • site: one card grid, aligned to the column on every page by @rainmanjam in #965
  • design: console quick wins from the 2026-11 design review by @rainmanjam in #964
  • test: stop Go tests depending on host free disk, the startup-sweep race and a leaking media.Exec by @rainmanjam in #966
  • feat(clips): publish a clip or short to YouTube Shorts or TikTok (Wave 4 #5c) by @rainmanjam in #967
  • test: fix two flaky tests (concurrent-dump abort, stuck-offload retry) by @rainmanjam in #968
  • fix(offload): make Retry now's kick pass awaitable (flaky stuck-retry test) by @rainmanjam in #970
  • release: date v0.12.0 (2026-11-03 UTC) and fold its upgrade notes by @rainmanjam in #969

Full Changelog: v0.11.0...v0.12.0