Protocol 2.0/2.1 uo-link integration — boards, cross-links, news gump, account provisioning #65
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/protocol2-integration"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Integrates the new uo-link Protocol 2.0 / 2.1 surfaces into the site (spec:
uo-link/docs/INTEGRATION.md). Everything reuses the established champs/pages pattern: ingest to our own MariaDB → snapshot on WS (re)connect → public/admin SSE → token-free public endpoints, with the sidecar token never leaving the server.What's included (9 commits)
Boards (ingest + UI)
/site/guilds), Governors (/site/governors, City-Loyalty) with term history captured from day one (idempotent transition capture;votesleft null since the feed carries only candidate counts), Presence ("Players Online" widget with region buckets), and the Houses registry.PUBLIC_KINDS; boards snapshotted on every reconnect (guarded so an empty/failed board never wipes another).Cross-links
titles+ guild/governor chips;/admin/users/:idgains a Standing section (governorships held + guilds led). Guild is leadership-only (verifiable from current state — no stale-membership guessing).News gump (2.1)
utils/newsGump.js): push on publish, silent refresh on edit, pull on unpublish/delete, and reconcile on every reconnect.Account provisioning
createAccount/unlinkAccountsidecar calls; hybrid game-account signup (POST /player/shard/account+ staffPOST /admin/shard/account), admin email invites (user_invites, sha256-hashed single-use tokens; email or copyable link), tokened accept flow, admin unlink, andaccount.*ingest reconciliation.House visibility (role-tiered)
/site/houses→ IDOC-only, location only. Staff/admin/houses→ full registry (owner/price/decay). Player portal → own houses ("home status"). Registry deltas (house.update/remove, which carry owner/price) removed from the public SSE channel.Schema
New tables:
shard_guilds,shard_governors,shard_governor_terms,shard_presence,user_invites;shard_housesextended with registry columns. New settings:game_account_signup. (Includes a fix for a;-in-inline-comment that broke the boot schema splitter.)Verification
Notes for deploy
X-UOLink-Version); setuo_link_config.protocol = 2.SignupMode= website/hybrid (Bridge.cfg) andRequireIpForCreatesatisfied by a real forwarded browser IP (works behind Pangolin; loopback is refused locally by design).🤖 Generated with Claude Code
Phase 1 of the Protocol 2.0/2.1 integration: the read/ingest backend for the four new uo-link boards, following the established champs/pages pattern (ingest → our MariaDB + snapshot-on-reconnect + public SSE + token-free public endpoint). - Schema: shard_guilds, shard_governors, shard_governor_terms, shard_presence; extend shard_houses with the house.update registry columns (owner_name, co_owners, friends, price, decay, in_registry) so the decay-transition and registry feeds share one house row without clobbering each other. - Ingest: route guild.update/remove, city.update, presence.online, house.update/remove; log guild.join (real-time joins feed); region.enter is broadcast-only. All new public kinds added to the SSE allowlist. - Governor term history captured from day one: on every observed governor CHANGE the open term is closed and a new one opened, idempotent so backfill/duplicate city.update never spawn spurious terms. votes stays NULL (the feed carries only candidate count, not tallies) — we never fabricate vote numbers. - Client + backfill: getGuilds/getGovernors/getHouses/getPresence; snapshot each board on every WS (re)connect, independently guarded so an empty/failed board (e.g. no City Loyalty) never wipes another. - Public endpoints: /shard/{guilds,governors,governors/:city/history,presence,houses}. - Tests: ingest routing for all new kinds + governor term-capture idempotency (15 new; full suite 179/179). Swagger regenerated. Refs .plans/protocol2-integration.md (Phase 1). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>