Get desktop application:
View/edit binary Protocol Buffers messages
(message has no fields)
(message has no fields)
empty = use first division from feed
(message has no fields)
required; must be non-empty
(message has no fields)
(message has no fields)
(message has no fields)
(message has no fields)
(message has no fields)
(message has no fields)
empty = first available division
standings for requested division
all available divisions from the feed
empty if no slot is currently assigned to this game
empty = first available division
empty if no game claimed at this slot's target
(message has no fields)
Required only for target_kind = BROADCAST_SLOT; ignored otherwise.
(message has no fields)
(message has no fields)
(message has no fields)
(message has no fields)
(message has no fields)
Used in: , ,
BroadcastGameStat is the pre-computed stats for a single annotated game. Populated when the annotation is marked done; nil for in-progress games.
Used in: ,
0 = player1, 1 = player2, -1 = tie
highest single-turn score in the game
the word played on that turn (friendly)
total tile-placement + exchange moves
last move was a bingo ending the game
null for in-progress games
Current scores (only set for in-progress games, i.e. completed_at is null)
true if player1 went first; false if player2 went first; false if unknown
A player entry from the feed, for standings display.
Used in:
A game pairing within a round, derived from the feed data.
Used in: ,
true if game is complete in feed
Set if this game has been claimed for annotation:
Used in:
empty string = use first division from feed
How many user stream slots currently mirror this slot. Surfaced as a tag on the slot, and as a warning before deleting one somebody is streaming from. Deletion only, deliberately. Re-pointing a slot at the next round's table is routine and happens to every slot every round — and it is not a hazard but the mechanism itself, since stream slots mirror a broadcast slot precisely so that directors can move it and everyone downstream follows. Warning there would be warning that the feature works. Deleting is the opposite: rare, and it permanently breaks browser sources somebody has already configured.
A StreamSlot is a user-owned, permanent OBS pointer. Its URL (/api/annotations/obs/user/<username>/<slot_name>/<field>) contains only the owner's username and the slot name, so it survives across broadcasts: switching what a stream covers is a re-point here, not an edit in OBS. Because the target kind is part of the slot rather than part of the URL, a slot can move between following your own annotations and mirroring a broadcast slot without the browser source changing.
Used in:
set only for BROADCAST_SLOT
Resolved target, for display in the management UI. Zero-valued when the slot is unpointed or its target broadcast slot no longer exists.
empty if no game claimed at the target
What a StreamSlot currently follows.
Used in: ,
Nothing pointed yet — the OBS URL renders the placeholder.
Mirrors a broadcast slot, so it follows whatever table that event features.
Follows the owner's most recently started annotated game. Lets someone stream without creating a broadcast at all. Started, not edited: playing a move does not re-order it, so returning to an older game does not bring it back to the front.