Tags

Tags give the ability to mark specific points in history as being important
  • v1.2.52

    protected Release: EWBSX backend v1.2.52
    v1.2.52 — prod promotion (backend #1515,#1517,#1518,#1520,#1522): request-played ranking + request-play guard on pregenerated cadence slots, track-length rule anchor fixes, cadence slots may hardwire a specific track (kind TRACK)
  • v1.2.51

    protected Release: EWBSX backend v1.2.51
    v1.2.51 — prod promotion (backend #1491,#1502,#1503,#1504,#1513): timed schedule in America/New_York with one-shot backed-up UTC->ET boot migration (rollback floor: restore timed_schedule_backups first), playlist ordering, ADMIN_REVIEW_PENDING notifications, hop horizon + CADENCE floor fixes
  • v1.2.50

    protected Release: EWBSX backend v1.2.50
    v1.2.50 — prod promotion (backend #1491,#1496,#1497): serve-path hop horizon + protected-slot soft-window exemption, forum search sort, DECADE seed name adoption
  • v1.2.49

    protected Release: EWBSX backend v1.2.49
    v1.2.49 — prod promotion (backend #1462–#1494): HOTFIX backend#1494 grapheme-safe truncation + lone-surrogate defence (prod chat outage ai-jeet-standins#1296); playout seam/resync fixes #1462–#1490; music tag categories + MusicBrainz/embedded tag backfill #1481–#1483; timed entry run windows #1476; site event cosmetics #1485; DECADE prod names #1493; Brainrot checkpoint bonus roll (flag OFF) #1492
  • v1.2.48

    protected Release: EWBSX backend v1.2.48
    v1.2.48 — prod promotion (backend #1226,#1320,#1370,#1437,#1442,#1447-#1450,#1452-#1457,#1460,#1461): playout cursor/hold fixes, short trailing-gap continuation, chat clientMessageId dedupe + per-user klan sockets, BTCPay rail, gift notice claims, DURATION_PROBE_UNAVAILABLE, sameTitle filter
  • v1.2.47

    protected Release: EWBSX backend v1.2.47
    v1.2.47 — prod promotion (backend #1217,#1298,#1355,#1358,#1361,#1421,#1423,#1425,#1427-#1431): trailing-gap midnight fix, per-tier flair discounts, async file log + PerfDisableSharedMem, stream/state timing, song-request availability, entitlement null revision
  • v1.2.46

    protected Release: EWBSX backend v1.2.46
    v1.2.46 — prod promotion (backend #1362-#1424, 16 commits)
    
    - Rankings and klan surfaces require sign-in: leaderboard / bully board /
      ranking endpoints answer 401 signed out (#1415), klan standings and dossier
      likewise, with a public GET /api/klans/recruitment that carries no morale or
      rank (#1416). Coordinated with frontend #1659 / #1660, which show a sign-in
      prompt and per-klan recruitment ads instead.
    - Media serving: forum media is served by what the name RESOLVES to, so a dot
      run inside a file name cannot change the served type (#1398 #1399); the same
      treatment for chat, DM, gallery, klaxon (incl. deleteClip), klan logo and
      radio background media (#1400)
    - Super Reactions (NOW LIVE ON PROD — enabled by an admin 2026-10-08, 1
      purchase, 1 track moved, so these are no longer inert here): a card refund
      Stripe reports failed or canceled after creation is handled (#1406); a
      failing refund is counted and reported once (#1362); expiryReason is
      persisted and exposed (#1413); hourly/daily limits reserve the steps of the
      member's own open and settling checkouts (#1380); a payment to an EXPIRED or
      cancelled checkout counts against the limits (#1405); row shape pinned with
      updatedAt as a BSON date so the TTL applies (#1369)
    - Playout/play_logs: a song request's band end closes a play_logs row only when
      it is that request's own row (#1395); the row of an item shorter than the
      crossfade pre-buffer, reported back to back, is closed correctly (#1396)
    - Now-playing: the warm-path next-track forecast is bounded at 250 ms,
      single-flight (#1419)
    - Server-persisted closed tutorial prompts per member (#1412)
    - FLAIR_PURCHASED notification to admins on a confirmed flair purchase (#1424)
    
    No new env keys.
    
    KNOWN DEFECT SHIPPING IN THIS TAG: src/main/resources/openapi/documentation.yaml
    is not parseable YAML. Lines 2468 and 2508 carry unquoted summaries containing
    ' :: ' ((STATS :: RANKINGS), (STATS :: BULLY BOARD)), introduced by 9af25a7, so
    the swagger parser logs MarkedYAMLException at boot and Swagger UI cannot render
    the spec. The API itself is unaffected and prod does not expose /swagger at the
    edge. backend#979's coverage ratchet cannot see it: it regex-parses paths: by
    indentation rather than loading the YAML, which is why 9af25a7 passed CI green.
    Filed for an engineer; fix is to quote both scalars.
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.45

    protected Release: EWBSX backend v1.2.45
    v1.2.45 — prod promotion (backend #1362–#1397): licensing play-log export in the agency CSV format (#1397); song-request band reserve/end races (#1383 #1384 #1390 #1393); klan chat eviction and admin klan reassign (#1385–#1387); Pharmacy cure XP and multi-step Super Reaction purchase (#1378 #1379); Super Reaction settlement refund/dispute fencing (#1362); admin cadence dry run (#1372)
  • v1.2.44

    protected Release: EWBSX backend v1.2.44
    v1.2.44 — prod promotion (backend #1302-#1367, 19 commits)
    
    - Super Bangers / Super Stinkers (#1359 #1360): per-track priority position
      -3..+3, paid purchase flow, and the position-to-selection-weight path in
      CadencePlaylistService. Rotation is INERT until a purchase: weightFor()
      returns null at position 0, which keeps an all-position-0 pool on the
      unchanged uniform shuffle (verified on prod: 3552 tracks, 0 carrying
      priorityPosition). Config is seeded on first read by
      SuperReactionRepository.ensure() from the model defaults
      (enabled=true, 500c each, weights 0.25..3.0) — see the deploy note.
    - Song-request handover integrity: a queued request handed to the playout
      engine and never reported on air is counted per band after a 30-minute
      wait, stepped over (at most 3 per poll) and retried at 30/60/120/240 min
      instead of being re-served every 30 min; rate-limited ERROR line; admin
      queue gains unconfirmedHandoverCount / lastUnconfirmedHandoverAt /
      unconfirmedHandoversByStream. Not failed, refunded or notified (#1367)
    - Missing audio: /playout/next steps over a queued request whose file is
      absent (#1356); submit refuses a track whose audio is not on disk
      (409 TRACK_AUDIO_UNAVAILABLE, #1353); track delete accounts for its files
      per-file (REMOVED / ALREADY_ABSENT / FAILED / NOT_ATTEMPTED, #1340)
    - Paid song requests: admin reject and skip answer 409 PAID_REQUEST_HELD
      (#1304 #1312 #1319 #1321); a bullychat price of 1-49c answers 409
      BULLYCHAT_PRICE_BELOW_MINIMUM before the upload is read (#1324)
    - Requests-disabled hold: a submission while requests are off is accepted
      and held (#1338 #1339); markAsFailed live push carries a fixed member
      sentence, reason stays in log/adminNotes (#1341)
    - Library requests: GET /api/song-add-requests/library-matches match advice,
      submit holds on a match (#1344)
    - Klan themes: seven KLAN_<REGION> theme ids on PATCH /api/profile/me and
      PUT /api/profile (#1346 #1347)
    - Profile stats: brainrotPharmacyCures (#1328 #1335) and
      brainrotSweetSpotHits (#1364) as unlock requirement fields
    - Flair: delete and the boot dangling-reference sweep cover
      users.earnedFlairLatchIds (#1336); badge seeders keep a stored icon (#1343)
    - Limits: admin pending/history and my-requests cap limit to 1..100 before
      use so the response reports the applied value (#1302)
    
    No new env keys.
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.43

    protected Release: EWBSX backend v1.2.43
    v1.2.43 — prod promotion (backend #1178-#1320, 61 commits)
    
    Dominant theme: paid-entitlement correctness under concurrency, redelivery and
    deleted accounts, across all three payment rails.
    
    - Entitlement writes: compare-and-set on users.entitlementRevision with bounded
      re-read (#1178); period + purchase record land in ONE write (#1220 #1227);
      user writes send only changed fields so a stale profile/avatar/badge write
      cannot revive cleared state (#1179)
    - Idempotent delivery: redelivered invoice.paid credits a renewal once, keyed on
      the Stripe invoice (#1206); checkout.session.completed keeps the stored
      completedAt (#1276 #1277); announcements claim chatAnnouncedAt atomically so a
      row announces once (#1260 #1261); donations credit once per session (#1234 #1258)
    - Unpaid / failed sessions grant NOTHING: unpaid one-time ewbsx_type (#1307),
      unpaid tier-or-subscription with no ewbsx_type (#1311),
      checkout.session.async_payment_failed closes the open row (#1310)
    - Concurrency outcomes: tier purchases take their label from the read the landed
      write was planned from (#1244 #1246 #1247 #1197 #1204 #1209); superseded
      subscriptions cancelled, failed cancels recorded and retried by a sweeper
      (#1194 #1205 #1242); real-mongod contention suite (#1218)
    - Deleted accounts: renewal/checkout for a deleted buyer records the payment and
      grants nothing (#1271 #1274), no chat announcement (#1268 #1270), gifts not
      sold or granted to a deleted recipient (#1216 #1219 #1222 #1225), region
      reassign and KlanMigrationService skip tombstones (#1213 #1214 #1215)
    - Credit-funded flows: song requests inserted settled, stranded zero-cost rows
      swept and re-credited (#1300 #1301); zero-price bullychat inserted settled
      (#1309); POST /api/bullychat/{id}/confirm settles a paid checkout (#1317)
    - BTCPay: InvoiceExpired/InvoiceInvalid close an open invoice without touching a
      settled one (#1240)
    - Monero: health reports the longest unpaid subaddress run (#1192); open-invoice
      listing absorbs only wallet-unavailable failures and skips a fresh read
      (#1196 #1198 #1200 #1202); tier invoice label written with the paid period in
      one update (#1248)
    - Themes: Tier 3+ profile themes on PATCH /api/profile/me with a server allowlist
      (#1203 #1259) and a separate site-wide theme preference (#1290)
    - Whitepill Pharmacy cure: POST /seen counts newly acknowledged prescriptions
      server-side; infectionCured only when this call removed an unexpired infection
      (#1280 #1283); infection-only receiver readouts and numbers station dispatches
      (#1297)
    - Track upload: refusals carry DURATION_UNREADABLE / FILE_TRUNCATED on the
      TRACK_TOO_LONG body shape, status and message unchanged (#1318)
    - Test hygiene: four suites no longer assert tight wall-clock bounds (#1285
      #1289 #1293)
    
    No new env keys. Prod keeps PLAYOUT_CROSSFADE_START_BUFFER_MS=5000 (v1.2.41).
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.42

    protected Release: EWBSX backend v1.2.42
    v1.2.42 — prod promotion (backend #1165–#1199): Monero launch — guarded dynamic pricing, 24 h price lock, exactly-once crediting, subaddress and invoice guards, lower-tier purchase refusal, wallet digest fix
  • v1.2.41

    protected Release: EWBSX backend v1.2.41
    v1.2.41 — prod promotion (backend #577 #653 #780 #794 #802 #1022 #1046 #1098-#1164)
    
    Supersedes v1.2.40 (built but never deployed — dev advanced 12 commits during the
    deploy window; this tag is that batch plus those).
    
    Themes:
    - Playout timing: correct ingest->output lead for pre-buffer-collapsed short tracks
      and the catalog rounding quantum on gate 1 (#1138); fade the outgoing track across
      the whole mixpoint overlap, and a stored literal fadeOutMs=0 on a MIXPOINTED track
      is not admin intent (#1129); remove the #406 incoming-side lead cap (#1108)
      NOTE: introduces PLAYOUT_CROSSFADE_START_BUFFER_MS — the backend's read-only mirror
      of the script constant crossfade_start_buffer_sec. Default 15000 matches STAGING's
      .liq; prod runs the older pinned .liq whose crossfade() takes the stdlib 5.0s
      default, so prod is pinned to 5000 in /opt/ewbsx/envs/backend.env by operator
      decision. Raise it to 15000 in the same change that ever promotes the 15s .liq.
    - Post-restart now-playing: rebuild the playout anchor from duration, and
      /playout/next no longer blocks on the post-restart cadence (#1163 #1164);
      finish a bullychat whose playout anchor expired (#780)
    - Account deletion integrity: suppress XP writes to tombstones at recordEventDetailed
      (#1119); guard post-deletedAt writes at the notification, inventory, knome and
      profile_stats seams (#1121); song_add_request_free_slots UNWIND (#1162)
    - Klans: live klan membership resolved at the roster read seam (#1122)
    - Song library: 20 XP on fulfilment, once per request, no notification re-emit on
      re-fulfil (#1146); PlayLogRepository.updateDuration returns matchedCount (#1160)
    - White pill pharmacy: anonymous read of the free-rotation set (#1098);
      WHITEPILL_POASTS_CURATED gets its own once-ever marker (#653)
    - Live anchor: owner lookup arm for Private Relay / IPv6-privacy clients (#577)
    - Shield slots: boot sweep selects on the XP-derived level (#1046); manual/purchase
      flair grants kept out of the #233 path (#1149)
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.40

    protected Release: EWBSX backend v1.2.40
    v1.2.40 — prod promotion (backend #577 #1022 #1046 #1098 #1105 #1108 #1119-#1146)
    
    Themes:
    - Playout timing: correct ingest->output lead for pre-buffer-collapsed short
      tracks, gate 1 carries the catalog rounding quantum, PreBufferCollapseDetector
      folded in (#1138); fade the outgoing track across the whole mixpoint overlap
      and treat a stored literal fadeOutMs=0 on a MIXPOINTED track as not-admin-intent
      (#1129); remove the backend#406 incoming-side lead cap, Option A (#1108);
      crossfadeLeadMs producer contract restated (#1134)
      NOTE: introduces PLAYOUT_CROSSFADE_START_BUFFER_MS (default 15000), the
      backend's read-only mirror of the script constant crossfade_start_buffer_sec
    - Account deletion integrity: suppress XP writes to tombstones at the
      recordEventDetailed seam (#1119); guard post-deletedAt writes at the
      notification, inventory, knome and profile_stats seams (#1121)
    - Klans: resolve live klan membership at the roster read seam (#1122)
    - Song library: award 20 XP (SONG_ADD_REQUEST_FULFILLED, once per request) on
      fulfilment, and do not re-emit the notification on a re-fulfil (#1146)
    - White pill pharmacy: anonymous read of the free-rotation set (#1098)
    - Live anchor: owner lookup arm for Private Relay / IPv6-privacy clients (#577)
    - Shield slots: boot sweep selects on the XP-derived level, not the stale
      stored level cache (#1046)
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.39

    protected Release: EWBSX backend v1.2.39
    v1.2.39 — prod promotion (backend #612 #838 #1007 #1023 #1024 #1054-#1058)
    
    Themes:
    - Song requests: credit bundles on a shared credit ledger, bundle checkout,
      funding precedence and credit return (#1055); stranded-request sweeper,
      ships DISARMED (#1058)
    - Inventory escrow: unclaimed items expire to FORFEITED after 5 days, with a
      forward-only sweeper, 410 Gone on a claim of a forfeited item, and a knome
      notification (#1056). Ships ARMED; blast radius is zero by construction —
      the selector requires a non-null expiresAt, which only this build writes at
      creation and nothing backfills (verified on prod: 98 PENDING rows, 0 with
      expiresAt)
    - Leveling events: cursor pagination, payment-purpose facet (#1054 #1057)
    - Klan milestones: coalesce multi-rung notification fan-out into one summary
      per member (#612); classify a single-rung and a kommunity ESCROWED outcome
      as REWARD via one shared credited-or-held predicate (#1023 #1024)
    - Knomes: cascade species/outfit/skill/food art rows on delete, keeping art
      still referenced elsewhere (#1007)
    - Playout: shift reconcilingRecoversByMs by the 1s recovery evaluation
      granularity so the advertised bound is not overstated (#838)
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.38

    protected Release: EWBSX backend v1.2.38
    v1.2.38 — prod promotion (backend #991-#1017)
    
    Themes:
    - Resilience: boot survives a malformed users row (tolerant paged decode,
      log-and-skip), collision-safe required-field self-heal against the
      case-insensitive users.username_1 unique index (#993 #994)
    - Account deletion: tombstone made collision-safe and unstrandable
      (deleted_<last8> collisions), failures below the tombstone observable
      and mapped (#997 #999)
    - Klans: atomic klans.members mutations ($pull / filtered $push),
      klan_membership purge step now runs unconditionally (#1004)
    - Forum: reaction tallies + viewer reactions on the timeline list payload
      via one page-level gather (#996)
    - Credits/billing: library request credit bundles, labelled XP envelopes,
      licensing, tutorial prompts default OFF (#1008-#1011); re-consume credit
      on re-approval, Stripe refund/dispute credit clawback with webhook 500 on
      clawback failure so Stripe redelivers (#1012 #1013 #1014)
    - Leveling: race-safe level-up badge assign (duplicate key = already held),
      guarded post-credit side effects, level transitions claimed from the
      atomic write so concurrent grants count each boundary once (#1015 #1017)
    - Wire validation: reject inverted/malformed play-log date ranges, require
      a 1-80 char bullychat title (#991 #992)
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.37

    protected Release: EWBSX backend v1.2.37
    v1.2.37 — prod promotion (backend #563 #582 #658 #681 #705 #721 #805 #814 #862 #929 #936 #940 #950-#988)
    
    Themes:
    - OpenAPI surface: 101 operationIds backfilled (0 codegen warnings), coverage ratchet
      test + baseline, ErrorResponse/StatusPages shape corrections, auth + user + visualizer
      + upload-limits routes documented (#705 #967 #968 #971 #974 #978 #979 #982 #985 #987)
    - Auth: stable AuthErrorCode vocabulary, server-side reserved-username enforcement
      at registration (#972 #973)
    - Forum: quote-poasting (nullable quotedPostId, read-time preview, FORUM_QUOTE
      notification), CommentThreadPage.commentCount (#940 #982)
    - Media: SHA-256 contentHash duplicate detection on upload w/ backfill pass (#582);
      tier-readable GET /api/chat/media/limits (#658)
    - Billing: additive entitlement display fields on UserDto (#563); BullyChat unpaid
      PENDING_PAYMENT checkout expiry sweeper, ships ARMED, prod population 0 (#936)
    - Playout: publish the successor Liquidsoap was actually served as nextTrack* (#929)
    - CI: glibc verify job unblocks build-and-push-staging past the JNA/musl SIGSEGV (#952-#956)
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011uF22YswSxmxG38VGNqRH7
  • v1.2.36

    protected Release: EWBSX backend v1.2.36
    v1.2.36 — prod promotion (backend #821, #690, #920–#924, #928): forum orphan-media reaper (report-only by default, backend#922), forum media mkdir ordering fix (#928), tag error envelopes with stable codes (#923/#924), bullychat moderation error bodies (#690), case-insensitive album search + BSON-null-safe album decode (#920/#821), content-hash image reuse in CI (#921)
  • v1.2.35

    protected Release: EWBSX backend v1.2.35
    v1.2.35 — prod promotion (backend #686–#919): paid song-library requests (Stripe checkout/webhook/sweeper), strict AppJson wire contract + brainrot claim state, device/platform analytics, bullychat reaction rate limit, capability-gated track deletion, bullychat now-playing systemKind, Tauri desktop CORS origins, GitLab Release on v* tags
  • v1.2.34

    protected
    v1.2.34 — prod promotion (backend #745–#904)
    
    Duplicate-key/upsert correctness — the backend#867 family:
      #867 tryClaim discriminates 11000 across MongoServerException (the async findAndModify raises
           MongoCommandException, not MongoWriteException), with non-vacuous concurrent double-claim
           and fault-injection tests
      #870 bounded-retry 11000 guard on the three knome_player_state upserts (MAX_UPSERT_ATTEMPTS=3)
      #874 wire-level invariant that those upsert filters stay pure-equality on userId
      #875 tryClaimGather pure-equality ensure-doc upsert + upsert:false conditional claim — mongod
           derives an insert from an unsatisfiable $or, so EVERY cooldown denial was an 11000 round
           trip (200/200 measured)
    
    Tombstone/account-liveness gates (#858/#859/#860/#861/#876): daily badge/unlock sweep, brainrot
    infection sweep, bumper-heard attribution and media_usage release all gated on live accounts so a
    deleted account cannot receive badges/XP/notifications or regrow rows.
    
    Forum (#880–#888/#893/#886): comment reactor lists, per-poast thread subscriptions, iPhone/HEVC
    transcode-on-upload plus an admin backfill-transcode for pre-#883 attachments, comment visibility
    gate and subscription re-enable.
    
    Brainrot active-reload retune — NOTE this feature is LIVE on prod (enabled 2026-08-27):
      #900 scored active-reload offset returned on the claim response
      #903 gold-band strike 5 -> 7 shards
      #904 directional gold window, tolerance 250 -> 120 late-side-only
    BRAINROT_ACTIVE_RELOAD_TUNING_REVISION 2 -> 4, so prod receives revision groups 3 and 4 as a
    one-shot normalization. activeReloadEnabled is in NO revision group and is preserved.
    
    Also: bullychat stranded/band-held PLAYING sweeps (#896/#897) shipping ENABLED but ARMED=false,
    i.e. dry-run detection only; OpenAPI enum drift tests (#783/#893).
  • v1.2.33

    protected
    v1.2.33 — prod promotion (backend #811–#864)
    
    Account deletion completeness (#822/#824/#826/#828/#829/#830/#844/#846/#847/#854/#856/#857):
    DELETE /api/auth/me unwinds all 22 userId-keyed collections, owner-keyed universe derived from
    source (87 -> 92 fields) rather than hand-typed, $pull on embedded userId arrays, SYSTEM chat
    announcements naming a deleted account retracted, and active-account gates so a tombstoned account
    can no longer regrow listening/profile-stats, knome_player_state, or chat rows.
    
    Brainrot (#813/#815/#832/#834/#835/#836/#840/#841/#842/#843): flat 250-shard purge cost then the
    restored 100/160/250 ladder with shield 80 (BRAINROT_PRICING_REVISION=2), directional sweet-spot
    tolerance and a ~30% faster active-reload sweep (activeReloadTuningRevision=2), penalty-eligibility
    endpoint, bidirectional single-slot guard that DEFERS rather than clobbers an in-flight checkpoint,
    tri-state nowPlayingStatus so a reconciling band no longer reads OFFLINE.
    
    Fixes backend#818 (7ec8760): AvatarAssetOrphanSweep.findExistingIds crashed on every boot — the
    sweep now runs to completion (verified on staging: '4 referenced avatarAssetId(s), 0 orphaned').
    
    Also: klan chat XP-neutral message editing (#864), idempotent $max high-water-mark reconciler
    (#831), StreamState WS frames with encodeDefaults-on codec (#837), Kommunity ladder re-based to
    10,000,000 x1.75 over 20 rungs (#819).
    
    MIGRATIONS THAT FIRE ONCE ON PROD: prod's brainrot_config carries none of the new pricing fields
    (no pricingRevision, no cureShardCost*), so both revision-gated normalizations apply as a forward
    migration from the old cureBaseShardCost scheme. Nothing admin-tuned is overwritten.
    
    PRE-EXISTING, NOT FROM THIS BATCH: E11000 duplicate key on xp_cooldowns userId_eventType_unique
    (CHAT_MESSAGE) — 21 occurrences already present on the running v1.2.32 build.