docs(link): add the Protocol 3.0 design #63
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/link-v3-plan"
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?
What & why
A survey of the live ServUO tree against everything the bridge already surfaces found that the bridge covers live activity well and covers shard content and standings almost not at all — every leaderboard, every ruleset fact, every "where do I find X", and the entire player economy outside a player's own vendors are absent.
This adds
link/v3.md, the canonical Protocol 3.0 design. It records the full 17-item gap list (so the items not scoped now aren't re-derived later) and specs the four features that are.Three scope areas:
anonymous → logged_in → player → staff → adminladder. Every default reproduces today's behavior, so the retrofit is a no-op until an admin changes something. Two rules an admin cannot override:acct/webIdare admin-only always, and an unmapped event kind is never broadcast belowadmin(fail closed).world.ruleset,points.board,vendor.listing/vendor.listing.remove.Two things worth reviewer attention:
BridgeJson.Actor()writesacctandwebId;shardState.model.js:346 shapeGuild()returns the payload verbatim;GET /api/v1/public/shard/guildsis anonymous. A guild leader's game account name and website user id are readable by anyone today. Same path for/public/shard/governors, andActoralso feeds three kinds on the anonymous SSE stream. Part A ships first and alone because of this.shardBroadcast.jsbecomes the highest-risk file in 3.0. It moves from a staticPUBLIC_KINDSallowlist to per-connection audience filtering — the security boundary moves with it.Visibility lives entirely on the website. The sidecar stays a dumb forwarder: it accepts frames, persists them, forwards them verbatim, and serves store-backed reads. It defines no access parameters and advertises no capabilities.
Rollout.
PROTOCOL_VERSIONgoes 2 → 3 exactly once, at the end. Each repo gets anedgebranch cut frommain; every part PRs intoedge; the coordinatededge→mainmerge is the cutover. A schema migration movesuo_link_config.protocol(row and column default) so the bump doesn't strand the integration on a manual admin edit.Also resolves an open question from
PROTOCOL_2.md§10.4, which deferred VvV pending "which PvP system does this shard run?" —VvV.cfg Enabled=TrueandFactions.cfgis off. Recorded as unblocked, not scoped for 3.0.Docs-only; no code changes. Targets
edge, notmain.How it was tested
N/A — documentation. Every file path, line reference, config value and API signature cited in the design was read directly from the live ServUO tree and from the four repos; the leak in §3.1 was traced end to end (
BridgeJson.cs:85-117→shardState.model.js:346→shard.controller.js:131) rather than inferred.Checklist
AI-assisted contributions (required)
Claude Code (Opus 5). I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with aCo-Authored-Bytrailer.License