From dd1676bc0a1921483ef491ffe8385df15c76a34b Mon Sep 17 00:00:00 2001 From: sami Date: Thu, 10 Sep 2026 15:31:01 +0400 Subject: [PATCH 1/2] proto: renumber ADR 0015 (0014 collided with PKG's), fix stale README versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PKG landed docs/adr/0014-conformance-runs-through-ctest.md (dad88fc) and this lane's 0014-generated-binding-changes-and-versioning.md landed in the same integration round, both as 0014. Renumbered this one to 0015 — second merger renumbers. Updated the two cross-references (contracts/README.md rule 4, proto-answers-daemon-m1.md P1) and the in-file header. Also while in contracts/README.md: the file-tree comment and the "Method surface" heading still said v1.2.0; both now v1.4.0 to match VERSION. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_012fgjnqFCS5h5L7gZTZo3rV --- contracts/README.md | 6 +++--- contracts/proto-answers-daemon-m1.md | 2 +- ....md => 0015-generated-binding-changes-and-versioning.md} | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename docs/adr/{0014-generated-binding-changes-and-versioning.md => 0015-generated-binding-changes-and-versioning.md} (98%) diff --git a/contracts/README.md b/contracts/README.md index 144c744..5592fb6 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -35,7 +35,7 @@ Nobody else commits here. Everybody else *generates from* here. ``` contracts/ -├── VERSION # protocol semver — v1.2.0, minor-bumped from the v1.0.0 freeze +├── VERSION # protocol semver — v1.4.0, minor-bumped from the v1.0.0 freeze ├── openrpc.json # human-readable API doc (generated from schema/) ├── schema/ │ ├── envelope.schema.json # JSON-RPC 2.0 envelope + our error codes @@ -67,7 +67,7 @@ subset, `fixtures/` documents the fixture shape and the placeholder rules. "Retype → major" is about the **wire** — a field a client parses off the socket. A change that leaves the wire byte-identical but breaks a *generated binding's* source API (a C++ virtual's return type, a struct name) is a **minor** bump plus a migration - note — see `docs/adr/0014-generated-binding-changes-and-versioning.md`. + note — see `docs/adr/0015-generated-binding-changes-and-versioning.md`. 5. **Changes arrive as a PR to `contracts/` alone**, containing: schema edit + fixtures + regenerated code + `VERSION` bump. Lanes rebase onto it. This is the only synchronization point in the whole project — keep it cheap and frequent rather than big and rare. @@ -102,7 +102,7 @@ All four carry **the same JSON-RPC 2.0 payloads**. The framing differences stop transport layer; no method behaves differently depending on how it arrived — except that methods marked `"privileged": true` in the schema are refused over the WebSocket transport. -## Method surface (v1.2.0 — expand only via PR) +## Method surface (v1.4.0 — expand only via PR) ### Session | Method | Params → Result | diff --git a/contracts/proto-answers-daemon-m1.md b/contracts/proto-answers-daemon-m1.md index a4efdd2..f5072b4 100644 --- a/contracts/proto-answers-daemon-m1.md +++ b/contracts/proto-answers-daemon-m1.md @@ -63,7 +63,7 @@ how lanes are told to regenerate and adapt. Minor, not major: a major would make `session.hello` refuse a client whose wire behaviour is unchanged. The rule — a generated-binding API break with an unchanged wire is minor + migration note, because `VERSION` is the protocol version, not the C++ ABI — is written up as -`docs/adr/0014-generated-binding-changes-and-versioning.md` (this instance is +`docs/adr/0015-generated-binding-changes-and-versioning.md` (this instance is mechanical; the ADR records the rule for the next one, which GUI will also consume since it already links `velox::proto`). `kProtocolVersion` moves to `"1.4.0"` with it. diff --git a/docs/adr/0014-generated-binding-changes-and-versioning.md b/docs/adr/0015-generated-binding-changes-and-versioning.md similarity index 98% rename from docs/adr/0014-generated-binding-changes-and-versioning.md rename to docs/adr/0015-generated-binding-changes-and-versioning.md index 3351282..56e33f7 100644 --- a/docs/adr/0014-generated-binding-changes-and-versioning.md +++ b/docs/adr/0015-generated-binding-changes-and-versioning.md @@ -1,4 +1,4 @@ -# ADR 0014 — Versioning a generated-binding break with an unchanged wire +# ADR 0015 — Versioning a generated-binding break with an unchanged wire **Status:** accepted · **Date:** 2026-09-10 · **Lane:** PROTO **Prompted by:** the 1.4.0 bump (DAEMON's P1 — `HandlerResult` / `HandlerError` on the From 1aed222ae2804e7ec25e1239f899497c7f6e76c7 Mon Sep 17 00:00:00 2001 From: sami Date: Thu, 10 Sep 2026 15:31:01 +0400 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20ADR-number=20convention=20in=20CLAU?= =?UTF-8?q?DE.md=20=C2=A77=20=E2=80=94=20second=20merger=20renumbers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six lanes pick ADR numbers with no allocator. This lane dodged one collision by taking 0012 while DAEMON drafted 0011, and just hit a real one — two 0014s in the same integration round. Codify what already happened in practice: take the next free number in main's docs/adr/, and on collision whoever merges second renumbers and fixes cross-refs rather than round-tripping. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_012fgjnqFCS5h5L7gZTZo3rV --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index d6ce8df..b9364af 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -68,3 +68,8 @@ you change observable behaviour, update the doc in `docs/` that describes it in Ask in the PR rather than guessing at the interface. A day of clarification is cheaper than an M2 integration rewrite. And record real decisions as an ADR in `docs/adr/` — the next agent to touch this will have none of your context. + +**ADR numbers:** there is no allocator. Take the next free number in `main`'s +`docs/adr/` (gaps from reserved-but-unwritten entries are fine to fill). Lanes draft in +parallel, so collisions happen: whoever merges **second** renumbers, updates any +cross-references, and keeps going — it is not worth a round trip.