• v3.1.0-beta.2 863c3710a1

    v3.1.0-beta.2 Stable

    oscbot released this 2026-06-03 21:54:57 +02:00 | 343 commits to beta since this release

    3.1.0-beta.2 (2026-06-03)

    Bug Fixes

    • forgejo: create skin repos private to close direct-clone bypass (a119983)
    Downloads
  • v3.1.0-beta.1 5922319f65

    v3.1.0-beta.1 Stable

    oscbot released this 2026-06-03 21:16:34 +02:00 | 345 commits to beta since this release

    3.1.0-beta.1 (2026-06-03)

    Features

    • restore per-tag browsing in the read model (4d71f89)
    Downloads
  • v3.0.1 1dd73a5c25

    v3.0.1 Stable

    oscbot released this 2026-06-03 01:39:58 +02:00 | 352 commits to main since this release

    3.0.1 (2026-06-02)

    Bug Fixes

    • ingest: take tag from the ci-done/webhook payload, not the manifest (54951c7)
    Downloads
  • v3.0.0 5db36dd760

    v3.0.0 Stable

    oscbot released this 2026-06-03 01:26:59 +02:00 | 354 commits to main since this release

    3.0.0 (2026-06-02)

    ⚠ BREAKING CHANGES

    • removed POST /api/admin/cache/clear, GET /api/bot/users/{osu_id}/skins,
      PATCH /api/users/{osu_id}/skins/{dir_name}, and GET /api/admin/cache/pregenerate;
      removed the skins:/tags:/lfs: cache prefixes and the /api/admin/stats cache_by_prefix
      field. Older ?ref= now serves the latest published tag.

    Features

    • skins read model (v3) — serve pages from Postgres, decommission unused endpoints (28aba42)
    Downloads
  • v3.0.0-beta.2 fc2f076b85

    v3.0.0-beta.2 Stable

    oscbot released this 2026-06-03 01:21:50 +02:00 | 337 commits to beta since this release

    3.0.0-beta.2 (2026-06-02)

    Features

    • add --reproject one-shot CLI to backfill the read model (71a4e9d)
    Downloads
  • v3.0.0-beta.1 74b4fb64e7

    v3.0.0-beta.1 Stable

    oscbot released this 2026-06-03 01:10:48 +02:00 | 339 commits to beta since this release

    3.0.0-beta.1 (2026-06-02)

    ⚠ BREAKING CHANGES

    • page reads are served from the Postgres read model instead of reconstructing skin metadata from Forgejo git on every request. Removed endpoints: POST /api/admin/cache/clear, GET /api/bot/users/{osu_id}/skins, PATCH /api/users/{osu_id}/skins/{dir_name}, and the GET /api/admin/cache/pregenerate stream. The skins:/tags:/lfs: cache prefixes and the stats cache_by_prefix field are gone.

    Refactors

    • skins read model + endpoint decommission (v3 API contract) (a95b73b)
    Downloads
  • v2.4.0-beta.3 616b9c55c7

    v2.4.0-beta.3 Stable

    oscbot released this 2026-06-03 01:06:35 +02:00 | 341 commits to beta since this release

    2.4.0-beta.3 (2026-06-02)

    Bug Fixes

    • keep /api/webhooks/forgejo — a live org-level Forgejo webhook targets it (0912d52)

    Refactors

    • decommission unused endpoints (cache/clear, forgejo webhook, bot list-skins, rename stub) + dead lfs cache (8b85203)
    Downloads
  • v2.4.0-beta.2 451d2fa61e

    v2.4.0-beta.2 Stable

    oscbot released this 2026-06-03 00:36:01 +02:00 | 344 commits to beta since this release

    2.4.0-beta.2 (2026-06-02)

    Bug Fixes

    • admin: keep reproject on POST + CSRF (revert GET to close CSRF regression) (f2895f3)

    Refactors

    • admin: serve reproject SSE over GET for EventSource (c9ad1e9)
    • serve reads from the DB only; move Forgejo reconstruction to the backfill path (phase 5) (9a2a35c)
    Downloads
  • v2.4.0-beta.1 36a63231bc

    v2.4.0-beta.1 Stable

    oscbot released this 2026-06-02 23:36:41 +02:00 | 348 commits to beta since this release

    2.4.0-beta.1 (2026-06-02)

    Features

    • add skins read model + manifest ingestion (phase 1) (bb97d6a)
    • serve skin pages, community, and media from the read model (phase 2) (f08c778)
    Downloads
  • v2.3.0 858e5de2ed

    v2.3.0 Stable

    oscbot released this 2026-06-02 22:30:18 +02:00 | 356 commits to main since this release

    2.3.0 (2026-06-02)

    Features

    • rewrite the backend in Rust (axum + sea-orm) (7396552)

    Refactors

    • drop dead get_skins_json; mark defensive guards no-cover (5408ff4)
    • drop unused require_owner_or_admin dependency (5e62a60)
    • source member identity from a 24h cache instead of minted User rows (446bc2e)

    Tests

    • adapter coverage (osu HTTP, actions-log dual-source, repo provisioning, download-all zip, skin detail) (8d7ec5e)
    • black-box harness (testcontainers postgres, real session auth, lifespan client) (06b9dd4)
    • close reachable coverage gaps and set a 98% branch-coverage floor (b5c36f0)
    • cover cache serve-stale, leaf health signal, and versioned invalidation (4c3c641)
    • cover ci_tracking resolver, cache expiry, community refresh, picks/webhook/bot/lfs branches (55439af)
    • cover delete-path edges, tree/skins.json parse guards, single-field patch, SSE error event (5011278)
    • cover repo-provisioning edges, phantom-run cutoff, ci-health other bucket (440f43f)
    • cover the identity-cache refactor (member/non-member/virtual) (9520f62)
    • final reachable stragglers (SSE multi-poll, resolver edges, zstd fallback, error paths) (51b84c0)
    • live-CI SSE stream (terminal + not-found) + phantom CIRun row; pytest-timeout guard (344e7b6)
    • media proxy (LFS/proxy/range), avatar cache, CI runs+log reads (9bcbc9b)
    • osu OAuth login/callback, logout, /me (45d753b)
    • parallel coverage wave (forgejo wrappers, skins branches, get_user_skins, pregenerate, scattered) (44d155e)
    • pure-logic spec (osk/skin_ini/semver/rate_limit/csrf/picks/log_filter/upload rules) (37b62d4)
    • read endpoints (community, user page, picks, skin-tags) + Forgejo/osu/S3 fakes (87b2fe1)
    • real git-push integration (clone/commit/push to a local bare remote) (baf64ee)
    • router + service tail coverage; fix coverage greenlet concurrency (b365212)
    • security cross-cutting (sessions, CSRF, role gates, rate limiting) (6a2a1b0)
    • serve-stale resilience + degraded health signal + CI-active write gate (ce79228)
    • webhooks (HMAC/bearer), admin panel, bot API (7a461f6)
    • write endpoints (skins.json, delete, dispatch, picks, upload+git stub) (0dc1838)
    Downloads