Lexicons
Resolution Roulette stores all game data in your AT Protocol Personal Data Server (PDS) using three custom record types, or lexicons. Because the records live in your PDS, you own them — you can read, export, or delete them with any AT Protocol client independently of this application.
me.gdey.resolutionroulette.entry
The game record
One record per game. Holds the title, goal date, reveal hour, and the full list of
candidates. Each candidate has a stable integer id that
elimination and promotion records reference, plus an optional
eliminatedOn timestamp that is set directly on the
candidate when it is eliminated.
key — TID (assigned at creation)
required — resolutionDate, startDate, resolutions, createdAt
optional — title, announcePrefix, tagUsers, tags
me.gdey.resolutionroulette.elimination
Daily elimination record
Written by the background worker once per day per active game. Contains a strong
reference to the parent entry, the eliminated candidate's id and a snapshot of its
text, and the calendar date (eliminationDate) for which
it was eliminated. The text snapshot means the elimination record remains self-contained
even if the entry is later edited.
key — TID (assigned at write time)
required — entryRef, eliminatedId, eliminatedText, eliminatedAt, eliminationDate
me.gdey.resolutionroulette.promotion
Winner record
Written on the goal date when a winner is chosen. The record is created
before the Bluesky post so that the promotion is durable even if the post
fails. Once the app.bsky.feed.post succeeds, its AT URI
is patched into the promotion record's optional
postUri field.
key — TID (assigned at write time)
required — entryRef, promotedId, promotedText, promotedAt
optional — postUri (patched after post succeeds)
Raw JSON schemas are served at
/lexicons/me/gdey/resolutionroulette/{name}.json
and are compatible with standard AT Protocol tooling.
See the AT Proto lexicon guide
for more on how lexicons work.