-
Notifications
You must be signed in to change notification settings - Fork 0
AT Protocol
The-rift is the official Veiled Dominion lore/canon bot account on Bluesky. It posts public match announcements when a real remote game concludes, and is the planned home for scheduled Rift Report lore drops and cross-promo posts for Violet's Revenge and Mortis.
Current handle: the-rift.bsky.social
Planned handle: @the-rift.veileddominion.loptrlab.com (DNS migration — deferred until consistent posting cadence is established)
File: atprotoPoster.js (repo root, same level as server.js / gameNamespace.js / roomStore.js)
Trigger: gameOver flips true inside gameNamespace.js's make_move handler for a real remote match. Local play, AI opponent, and Spectator mode do not trigger a post.
Authentication: app-password auth via two Cloud Run environment variables.
| Env Var | Purpose |
|---|---|
BLUESKY_HANDLE |
The-rift's Bluesky handle |
BLUESKY_APP_PASSWORD |
App password (not the account password) |
- Log into the-rift's Bluesky account
- Settings → App Passwords → revoke the current password → create a new one
- In GCP Console → Cloud Run →
duet-solo-hackathon→ Edit & Deploy New Revision → updateBLUESKY_APP_PASSWORD - Deploy. No code change needed.
Note: Never paste the app password directly into Cloud Shell. The char-by-char masking in the test script was bypassed by paste input in a prior incident — the password appeared in terminal scrollback. Always set credentials via the Cloud Run env var UI, not the terminal.
Phase 1 (implemented): the-rift posts a public match announcement.
Phase 2 (planned): write match stats back to each player's actor.rpg.stats record on AT Proto, keyed by their DID. This requires OAuth with PKCE + DPoP — not an app password — because it's a public client-side app with no hideable secret.
Planned implementation location: ibloud/duet_engine_architecture (GitHub Pages), not this repo. OAuth's client_id is a publicly-hosted client-metadata.json URL, which GitHub Pages already provides cleanly.
Implementation plan:
- Host
client-metadata.jsonon the ibloud GitHub Pages URL - Use Bluesky's
@atproto/oauth-client-browserpackage via CDN/ESM (no build step, preserves the repo's no-dependency pitch) - Fetch → merge → put into
actor.rpg.stats, reusing the read/normalize logic already induet_engine_architecture/index.html's rpg.actor lookup
Testing plan: Use a throwaway Bluesky account with a disposable rpg.actor record — not a real character, not the-rift — before touching any live data. A merge bug could wipe another game system's data out of a shared actor.rpg.stats record.
| Topic | Location |
|---|---|
| AT Proto contributor docs (this page) | This wiki |
| ATProto audience-building strategy (feed generator, Ozone labeler, Starter Packs, WhiteWind, Bridgy Fed) | Loptr Lab strategy doc (not this repo) |
| Sealed Deck + player profile schema | Player-Profile-Schema |