From 36f8e1071d5dac57fbb9d7f14e099e5bf0e5a641 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 19:23:24 -0500 Subject: [PATCH] fix(link): a protocol bump owes four declaration sites, not three MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v4's cross-repo obligation table named module-uo's ingest work and stopped there, so both of that module's PIN sites — DEFAULT_PROTOCOL and the uo_link_config.protocol column default — stayed at 3 when protocol 4 shipped. The consequence is not partial degradation. A sidecar answers a stale client `409 protocol version mismatch` rather than mis-parsing it, so a fresh install read nothing at all from its shard — empty marketplace, empty guild board, no status — until an admin edited the number by hand in Admin → Shard. Existing installs were unaffected, which is why it went unnoticed: their stored row had already been moved by the protocol-3 one-shot, and the stored row wins. Found while standing up a demo deployment for the marketing site's screenshots; fixed in Module-uo. Co-Authored-By: Claude --- link/v4.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/link/v4.md b/link/v4.md index 5699d89..26e6b99 100644 --- a/link/v4.md +++ b/link/v4.md @@ -236,7 +236,7 @@ page listing character names versus one publishing 150 account names, so it carr |---|---| | `servuo-plugins` | member-set diff, `guild.roster` + `guild.leave`, `BridgeJson.Actors`, two `Bridge.cfg` keys, **`overlay.toml` protocol → 4** | | `link` | `PROTOCOL_VERSION` → 4, `members` column + `user_version` migration, roster reassembly, `GET /guilds` projection | -| `module-uo` | `shard_guild_members`, `guild.roster`/`guild.leave` ingest, the kind→feature map entries | +| `module-uo` | `shard_guild_members`, `guild.roster`/`guild.leave` ingest, the kind→feature map entries, **the pinned protocol → 4** | | `installer` | `backup.rs`'s stated reason for skipping the sidecar DB (§3.2 falsifies it) — docs only | | `docs` | this file, `PROTOCOL_2.md` §10.1, `INTEGRATION.md` | @@ -244,6 +244,18 @@ page listing character names versus one publishing 150 account names, so it carr the installer refuses to pair an overlay and a sidecar whose protocol numbers disagree, so a bump landing separately would silently fail to compose into a bundle. +**The pinned protocol is a fourth declaration site, and this table missed it once.** `module-uo` +pins the version the WEBSITE speaks, in two places — `DEFAULT_PROTOCOL` in +`server/model/uoLinkConfig/uoLinkConfig.model.js` and the `uo_link_config.protocol` column default +in `server/db/schema.sql`. Both stayed at 3 when protocol 4 shipped, because this row named only the +ingest. The consequence is not a partial degradation: a sidecar answers a stale client `409 protocol +version mismatch` rather than mis-parsing it, so a fresh install read *nothing* from its shard — +empty marketplace, empty guild board, no status — until an admin edited the number by hand in +Admin → Shard. Existing installs were unaffected, which is why it went unnoticed: the protocol-3 +one-shot had already moved their stored row, and the stored row wins. Fixed in `module-uo` (the pin, +plus a protocol-4 one-shot mirroring the protocol-3 one). **A protocol bump owes four declaration +sites, not three.** + --- ## 6. Verification