Skip to content

chore(release): v1.3.0 - #116

Merged
catapult-counterweight[bot] merged 59 commits into
mainfrom
dev
Nov 13, 2026
Merged

catapult-counterweight[bot] merged 59 commits into
mainfrom
dev

Conversation

@catapult-counterweight

@catapult-counterweight catapult-counterweight Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Sors cette PR du draft pour publier la release ; elle fusionnera quand les checks seront verts. Pour la programmer, indique ci-dessous une date AAAA-MM-JJ HH:MM, en heure de Paris.

  • Le bot met à jour le changelog

Sortie programmée :

Features

  • bgs: add the catapult-bgs module with the Battle.net service table (0118885)
  • bgs: add the BGS frame codec and RPC session (72913f6)
  • bgs: merge presence deltas into per-friend game changes (a5c7987)
  • bgs: add the BGS client session, friends list and presence watch (e89cd29)
  • bgs: reconnect BGS sessions with backoff and stop on replaced sessions (f8de5ff)
  • battlenet: add the service account and friend link tables (d680857)
  • battlenet: gate the integration and expose the link state (1345097)
  • battlenet: mint BGS tickets through a headless login with an admin-entered code (bd47147)
  • battlenet: drive the Battle.net login page with headless Chromium (cb5685b)
  • battlenet: keep one BGS session per bot on the active site and detect games (31c4c6a)
  • battlenet: manage the bot pool from the admin API (1ba9db2)
  • battlenet: track friend links from BGS friend events (d1df994)
  • battlenet: link a streamer's Battle.net account through Blizzard OAuth (cdba7e0)
  • web: add the Battle.net connection card (4486e5a)
  • web: manage Battle.net bots from the admin Keys tab (fb9983e)
  • merge Battle.net presence detection into dev (3c775c5)
  • mappings: store an IGDB game on game mappings and seed Blizzard titles (1ef74de)
  • igdb: resolve detected games through their mapping's IGDB game (2a68225)
  • mappings: pick an IGDB game and deduce its Twitch category (4292c9c)
  • web: pick an IGDB game for a game mapping (dce5d3f)
  • merge IGDB games on game mappings into dev (1bdbc94)

Fixes

  • bgs: notify late close listeners and log swallowed session errors (2797536)
  • bgs: flag invitations gone while offline and local closes (f77c3b6)
  • bgs: abort BGS session starts that never complete (c61d642)
  • battlenet: stop re-minting tickets after a rejected login (d4f37da)
  • battlenet: stop re-minting after repeated login timeouts (d2db4bd)
  • docker: keep Playwright from downloading browsers at runtime (36de5ed)
  • battlenet: guard bot accounts against lost updates (f7f2d81)
  • battlenet: handle concurrent bot edits and in-flight logins in the admin API (e6fa264)
  • battlenet: answer invitations after commit and recover rejected or full links (95148c2)
  • web: keep Battle.net tags out of moderators' channel streams (4b1b6b4)
  • web: stop Battle.net polling off the Keys tab and edit bot labels (6538ae8)
  • docker: copy the catapult-bgs build file into the web image builder (550093a)
  • battlenet: run at most one ticket mint per bot and drop abandoned ones (8f08de4)
  • bgs: bound the TLS handshake so a silent server cannot hang a session (70b20ce)
  • docker: give the catapult user a home directory for Chromium (5763fa0)
  • battlenet: forget the Blizzard token once the account is linked (c3d6ffd)
  • battlenet: only offer the code field while a login waits for it (d171bd7)
  • battlenet: notify streamers when their bot is deleted (c8a67dc)
  • battlenet: resolve the caller through ApiUserResolver in the link controller (aa1549b)
  • battlenet: declare the battlenet.integration experiment (c78e520)
  • battlenet: link through plain OAuth2 so the Catapult user service runs (bd146c9)
  • web: style the Battle.net connect button like the other account links (cd9643c)
  • api: show a bindings page whose bindings have no Twitch category (05d822e)
  • merge the uncategorised bindings page fix into dev (a792ead)
  • mappings: stop applying a cleared IGDB game's suggestions (0583773)
  • mappings: reject a non-numeric IGDB game id (c4e972b)
  • web: explain the IGDB category deduction in mapping errors (cbd48bd)

Refactoring

  • minecraft: drop the service account label (b24b1a8)
  • battlenet: drop the service account label (d91fdb9)
  • merge the service account label removal into dev (7507c4e)

Other

  • conventions: check the catapult-bgs sources are written in English (483d06c)
  • docker: run catapult-api on a glibc base so Chromium can start (b9e9619)
  • battlenet: cover the Battle.net routes in the route and access checks (140ad64)
  • mappings: cover the IGDB game search and its admin route (72eb335)
  • perf: budget the game routes with their resolved IGDB and DTDD data (5ebb8db)

catapult-counterweight Bot and others added 30 commits November 12, 2026 16:49
Report de `v1.2.0` (#111) de `main` vers `dev`.

L'auto-merge est activé : la PR se fusionne d'elle-même (commit de
merge) dès que les checks passent ; tant qu'elle est ouverte, la
promotion depuis et vers `dev` est refusée.
Java schemas are generated at build time from the bgs.desc descriptor set, with the
outer class names and Java packages patched where files would collide.
BgsClient runs the session sequence on an open BgsChannel: Connect, ticket
mint between Connect and Logon, Logon, minimal account subscribe, game
account selection, friends subscribe and paged sync, then the presence
watch once the self presence push arrives. The friends list and the
invitations survive across sessions and each resync reports the diff.
Friend actions fail at once outside a ready session and never change the
local state on their reply.
A sent invitation that vanished while offline is reported with
REASON_GONE_WHILE_OFFLINE (-1) instead of 0, which means accepted. A close
requested by the client reports CloseReason.LOCAL instead of IO.
BgsSession reads static fields through AccessFlag, which the English
conventions check accepts.
…detect games

Sessions open only with battlenet.sessions.enabled on the active site, close on standby and
reopen when the site becomes active. Presence pushes feed the Battle.net game getter; friend
events are republished off the session loop. Replaced sessions and sessions needing an admin
are logged and counted.
Version column on the service account; the login coordinator reloads and retries
its auth state and storage state writes once when an admin edit raced them.
Admin service and REST endpoints to enrol, re-authenticate, edit and delete the
Battle.net bot accounts; the BGS session restarts once an interactive login is ready.
Enrol streamers on the first ready bot with room and have it invite
them; move links with the bot's friend events (accept, reject, remove),
answer received invitations, mark a bot full on a friend cap failure
and announce every change as a battlenet.link.changed channel event.

Link lookups by BattleTag or account id now return lists, since nothing
makes them unique per bot.
…or full links

Send the accept/decline of a received invitation once the event's
transaction is committed, accept the invitation of a streamer whose link
was rejected, and move a link off a bot found full to the next bot with
room (deleting it when none is left).
…d OAuth

Secondary OAuth link on the signed-in Twitch user: the userinfo id and BattleTag
enroll the account with a bot, no token is kept. Adds the connect endpoints
(state, leave) and the Battle.net data on the channel dashboard.
Live-updated from BattleNetLinkChanged, with a case per link status, the OAuth connect
button, a disconnect action and mock data for the mock channel page.
Adds the bot pool section to the Keys tab: list, add, 2FA code entry, reauth,
enable/disable, lift full, change password and delete. The tab refreshes every 3 s
while a login is pending. Includes the mock store.
Polling only runs while the Keys tab is shown, including after an in-flight tick.
Each bot row can now rename the bot and change its fill order.
The admin bot list now says whether a login waits for the 2FA code. A bot left CODE_REQUIRED by an
automatic login shows a hint to re-authenticate instead of a code field that could only answer
409, and the Keys tab stops polling for it.
Deleting a bot now disables the Battle.net getter of every streamer linked through it, as
unenrolling does, and tells their dashboards the link is gone once the bot is deleted.
…k controller

Controllers hold no repository (ControllerConventionsTest): the Battle.net link controller now reads
the caller like the other user routes.
Battle.net game detection through BGS bot accounts (catapult-bgs module, bot pool admin, Blizzard OAuth link, channel card).
@catapult-counterweight catapult-counterweight Bot added the release PR de promotion (bot) label Nov 13, 2026
Bindings pages whose bindings have no Twitch category no longer fail with a 500 (shown as a 404).
IgdbService.resolveDetected is the single entry point turning a detected
game into its IGDB game: the game mapping's IGDB id first, nothing for an
unmapped Battle.net game (never searched by name), else the platform id
then the name. The binding, game context, game info, dashboard and DTDD
resolutions all go through it.
An admin mapping can name an IGDB game. With no Twitch category typed, the category is
deduced from that game (400 when none, unless the mapping is ignored by default). The
suggestions applied in the same write now come from the request's IGDB game. Adds the
admin IGDB game search endpoint.
Add an IGDB game picker to the game mappings form (search as you type,
clearable, emptying the Twitch category it deduces), an IGDB column in the
list, the igdb-games proxy route, and the Blizzard presets in the mock.
Suggestions were resolved before the write through the stored mapping row, so an update
clearing the IGDB game still applied the old game's CCLs/TWs, and a mapping moved to another
game re-resolved the old game's bindings through its IGDB game. Both now resolve the game with
its mapping left aside (IgdbService#resolveUnmapped): nothing for Battle.net, else platform id
then name.
IGDB ids are parsed as numbers: a non-numeric one made a save with a typed category fail with
a 500, and an ignored mapping holding one failed on every detection. It is now refused with a
400 before anything is stored.
The category and 400 errors only mentioned picking a Twitch category: they now also say an
IGDB game can be picked instead, its category deduced, and that one must be entered when it
has none.
…data

The budget fixture's game was never resolved before: IgdbService is mocked and
the assembler called methods the mock did not stub, so these routes were
measured without their IGDB details and DTDD data. Resolving through
resolveDetected now runs those reads.
Detected games resolve through an IGDB game pinned on their mapping; Battle.net games are never searched by name; Blizzard titles seeded.
A Minecraft service account is now shown by its Minecraft username: the
label column is dropped (V111), the admin DTO carries a displayName, the
device-code create no longer takes a label and the logs name the account
by its username.
A Battle.net bot is now shown by its BattleTag, or before its first login
by its masked e-mail (b***@example.com), computed in the admin DTO's
displayName. The label column is dropped (V112), the create takes only
the e-mail and the password, a PATCH ignores a legacy label, and logs and
the session metrics name the bot by its account id.
Minecraft and Battle.net service accounts show their real identity instead of a free-text label.
@enimaloc
enimaloc marked this pull request as ready for review November 13, 2026 22:23
@catapult-counterweight
catapult-counterweight Bot merged commit 9aa969f into main Nov 13, 2026
6 checks passed
catapult-counterweight Bot added a commit that referenced this pull request Nov 13, 2026
Report de `v1.3.0` (#116) de `main` vers `dev`.

L'auto-merge est activé : la PR se fusionne d'elle-même (commit de
merge) dès que les checks passent ; tant qu'elle est ouverte, la
promotion depuis et vers `dev` est refusée.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release PR de promotion (bot)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant