Skip to content

v0.1.5-beta

Choose a tag to compare

@AdamOusmer AdamOusmer released this 04 Sep 12:39
· 177 commits to main since this release
37280fd

BagelBot comes to Discord, the status page learns to say something useful, and beta features become a premium perk.

Discord

One bot replaces the whole community stack. A full server template ships with real roles, grants and tiers; ticket, voice and rank panels are driven by buttons; link protection runs on the engine; and go-live posts follow your stream. On premium servers the bot takes your identity — nickname and avatar — and it asks for re-authorization rather than failing silently when a rename is refused. Its presence shows how many streams it is watching.

Discord gets its own dashboard section, and the console now says plainly that no Twitch role sync exists rather than implying one.

Under the hood Discord is three services: a singleton gateway session, a decision engine that never talks to Discord, and an acting half that owns every outbound call. The engine is sealed off from Discord entirely, and each half holds only the grants its job needs.

Status

The status surface collapses to six verticals instead of a wall of individual services. Each vertical is judged by the service that actually terminates it, and a degraded verdict now travels on the wire, so a partially healthy piece reads as degraded rather than down.

Beta as a premium perk

Early access is listed on pricing as a premium perk. Modules still in beta — AutoMod and the Discord companion among them — stay with premium channels until they ship, gated by a single beta flag on the module rather than per-feature checks.

Fixes and hardening

  • Song requests: Spotify's deprecated artist top-tracks route is handled, and rate limiting now respects Retry-After.
  • The MCSR board reports draws, so wins plus losses match the match count again, and account matching is ASCII-only once more.
  • Dashboard data ownership and delegation got a security pass.
  • Three data-integrity holes in the projection settings hash are closed, and the cleared-config write is atomic.
  • gossip bounds Retry-After and scopes its pin to throttles.
  • Hot-path re-parses and linear scans are gone from the command path.

Platform

KEDA is back as plain manifests, running highly available with its NATS grant scoped to the operator. The messaging tier runs stock NATS 2.14.6 across hubs and leaves after the patched-server experiment was measured and dropped, and the publish queue is bounded with the commit wait exposed as a knob.

Console fixes in this build

Discord was rendering twice: a tile in the modules grid and its own sidebar entry, reading as two features that share a name. It is now one section, with Discord's official mark, its own locked panel explaining the beta, and even spacing between blocks.

The Beta chip was small enough to miss. It is now filled, larger, and reads Beta · Premium, so it answers "why can I not turn this on" without a click.

The billing plan comparison was showing a raw billing.premiumFeat5 key instead of the early-access perk. Fixing it turned up 24 more missing strings across Song Requests, Quotes and Import, all rendering raw keys — every one now written in English and French. A new guard scans every translation call and fails the build on a key with no string behind it, which nothing did before: the generated key type looks like it enforces this, but the lookup takes a plain string and quietly falls back to printing the key.