feat(sidecar)!: bump PROTOCOL_VERSION to 3 #20

Merged
whitlocktech merged 1 commits from chore/protocol-3-cutover into edge 2026-07-30 03:03:35 +00:00
Member

What & why

Order 6 of the Protocol 3.0 plan (v3.md §4) — the sidecar half of the cutover.

3.0 is feature-complete on edge: world.ruleset (#17), points.board (#18) and vendor.listing / vendor.listing.remove (#19) all landed there while PROTOCOL_VERSION deliberately stayed at 2. A bump is an operator-visible hard break — web.rs::gate 409s every protected route on mismatch, and the website closes the WS on the ws.hello mismatch — so bumping per phase would have broken the live site four times. This is the one time it happens.

Nothing that existed in v2 changed shape, so the constant and its doc comment are the whole change. The README's worked example moves with it: it still claimed PROTOCOL_VERSION, currently **1**, which was two bumps stale.

Merge order matters. This lands on edge; then the four edgemain PRs merge together, and that merge is the cutover. Merging this one alone changes nothing for anyone, because nothing runs off edge.

How it was tested

cargo build --release and cargo clippy --all-targets clean. Against the release binary:

  • GET /health{"protocol":3,…}, and every response carries x-uolink-version: 3.
  • Authenticated GET /ruleset with X-UOLink-Version: 3200.
  • The same call declaring 2409 {"error":"protocol version mismatch","sidecar_protocol":3,"client_protocol":"2"} — the break lands exactly where it should, and legibly.

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.

AI-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code. I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.
## What & why **Order 6 of the Protocol 3.0 plan ([`v3.md`](https://gitea.whitlocktech.com/RunicGateway/docs/src/branch/edge/link/v3.md) §4) — the sidecar half of the cutover.** 3.0 is feature-complete on `edge`: `world.ruleset` (#17), `points.board` (#18) and `vendor.listing` / `vendor.listing.remove` (#19) all landed there while `PROTOCOL_VERSION` deliberately stayed at `2`. A bump is an operator-visible hard break — `web.rs::gate` 409s every protected route on mismatch, and the website closes the WS on the `ws.hello` mismatch — so bumping per phase would have broken the live site four times. This is the one time it happens. Nothing that existed in v2 changed shape, so the constant and its doc comment are the whole change. The README's worked example moves with it: it still claimed `PROTOCOL_VERSION, currently **1**`, which was two bumps stale. **Merge order matters.** This lands on `edge`; then the four `edge` → `main` PRs merge together, and *that* merge is the cutover. Merging this one alone changes nothing for anyone, because nothing runs off `edge`. ## How it was tested `cargo build --release` and `cargo clippy --all-targets` clean. Against the release binary: - `GET /health` → `{"protocol":3,…}`, and every response carries `x-uolink-version: 3`. - Authenticated `GET /ruleset` with `X-UOLink-Version: 3` → **200**. - The same call declaring `2` → **409** `{"error":"protocol version mismatch","sidecar_protocol":3,"client_protocol":"2"}` — the break lands exactly where it should, and legibly. ## Checklist - [x] I have read [CONTRIBUTING.md](CONTRIBUTING.md). - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it.
wtclaude added 1 commit 2026-07-29 23:05:14 +00:00
Protocol 3.0 is feature-complete on `edge` -- world.ruleset, points.board and
vendor.listing / vendor.listing.remove all landed there while the sidecar kept
declaring 2, because a bump is an operator-visible hard break (409 on every
protected route via web.rs::gate, and the website closes the WS on the ws.hello
mismatch). Doing it per phase would have broken the site four times; this is the
one time it happens.

Nothing that existed in v2 changed shape, so the version constant and its doc
comment are the whole change here. The README's worked example moves with it --
it still claimed "currently 1", two bumps stale.

Verified against the release binary: /health reports "protocol": 3, every
response carries `X-UOLink-Version: 3`, an authenticated request declaring 2 is
refused 409 {"sidecar_protocol":3,"client_protocol":"2"}, and one declaring 3
gets 200 off /ruleset. cargo build --release + cargo clippy --all-targets clean.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech merged commit cfe9ec9017 into edge 2026-07-30 03:03:35 +00:00
whitlocktech deleted branch chore/protocol-3-cutover 2026-07-30 03:03:36 +00:00
Sign in to join this conversation.
No description provided.