protocol: reclaim the numbers pre-release churn retired #339

Merged
natsukium merged 1 commit from issue-330 into main 2026-09-22 03:31:25 +09:00
Owner

Closes #330.

The 1.0 base schema no longer carries pre-release history: the 25 reserved declarations and their "field N was…" comments are gone, surviving fields and enum values are renumbered densely, ConnWelcome.build_id (superseded by identity) is dropped, and the 86 base arms omit since: 0, so a since appears only where a minor adds an arm. The five reserved 100; slots stay: they are the live wire-wide correlation envelope for the uncorrelated families, not history. This applies the schema's own rule that a number retired before any baseline exists is free again; BREAKING.md acknowledges the break against the merge-base.

Also records the #326 item-1 decision inline in the IPC explanation: SessionMsg keeps its field-100 envelope as a correlation-capable family with no base arm using it yet.

Decision: the last comment on #330 (six rounds of design review). Code review: pi luna (PASS, two non-blocking fixed: a stale comment, untyped documented) then pi sol (PASS).

First of the sequential proto PRs; #328, #327, #333 rebase on this one.

Closes #330. The 1.0 base schema no longer carries pre-release history: the 25 `reserved` declarations and their "field N was…" comments are gone, surviving fields and enum values are renumbered densely, `ConnWelcome.build_id` (superseded by `identity`) is dropped, and the 86 base arms omit `since: 0`, so a `since` appears only where a minor adds an arm. The five `reserved 100;` slots stay: they are the live wire-wide correlation envelope for the uncorrelated families, not history. This applies the schema's own rule that a number retired before any baseline exists is free again; `BREAKING.md` acknowledges the break against the merge-base. Also records the #326 item-1 decision inline in the IPC explanation: `SessionMsg` keeps its field-100 envelope as a correlation-capable family with no base arm using it yet. Decision: the last comment on #330 (six rounds of design review). Code review: pi luna (PASS, two non-blocking fixed: a stale comment, `untyped` documented) then pi sol (PASS). First of the sequential proto PRs; #328, #327, #333 rebase on this one.
protocol: reclaim the numbers pre-release churn retired
Some checks failed
bench / Criterion full-suite snapshot (pull_request) Has been skipped
fuzz / cargo fuzz nightly long-run (pull_request) Has been skipped
bench / Criterion regression gate (pull_request) Failing after 2m37s
darwin / detect relevant changes (pull_request) Successful in 5s
darwin / darwin docs-only no-op (pull_request) Has been skipped
darwin / build felis (aarch64-darwin) (pull_request) Successful in 53s
fuzz / cargo fuzz smoke (per target) (pull_request) Successful in 1m20s
pr / nix flake check (pull_request) Successful in 44s
pr / cargo build / clippy / test / deny (pull_request) Successful in 2m26s
pr / wire schema is compatible with the base (pull_request) Successful in 15s
pr / frontend smoke (x86_64-linux) (pull_request) Successful in 1m36s
pr / publish felis (x86_64-linux) (pull_request) Has been skipped
windows / detect relevant changes (pull_request) Successful in 4s
windows / windows docs-only no-op (pull_request) Has been skipped
windows / cargo clippy (Windows cross) (pull_request) Successful in 30s
windows / cargo nextest (Windows) (pull_request) Successful in 10m20s
windows / frontend smoke (Windows) (pull_request) Successful in 3m34s
windows / package felis (x86_64-pc-windows-msvc) (pull_request) Has been skipped
95b6688494
The first public wire contract is the minor-0 base schema, and it is
the last point at which a retired number is free to take back: the
schema's own rule is that a number retired while no baseline exists is
free again, and after the freeze every gap is permanent. Carrying them
past it would make a reader of the first public schema reason about
what a missing field used to hold, and would leave the schema narrating
its own pre-release history in comments, which is what git log is for.

`ConnWelcome.build_id` goes the same way: it existed only for a reader
that knows nothing but that field, and no such reader can exist before
the first release. `BuildIdentity` says the same thing typed and in
full, so `felis version` and `felis doctor` read the one field.

Field 100 stays reserved on Conn, Input, Grid, Image and Push. It is
not history but the live wire-wide correlation-envelope slot: reserving
it on the families that carry no envelope is what keeps the number
uniform, so a reader lifts the envelope off any body without a
per-family table.

`since: 0` goes from the base arms because 0 is the proto3 default and
never reaches the descriptor, so spelling it declares a row the schema
cannot be written to carry; an addition is now the one place a `since`
appears.

Renumbering is a wire break, acknowledged in BREAKING.md against the
merge-base: a daemon and a client across this change must be rebuilt
together.

Assisted-by: Claude Code
natsukium force-pushed issue-330 from 95b6688494
Some checks failed
bench / Criterion full-suite snapshot (pull_request) Has been skipped
fuzz / cargo fuzz nightly long-run (pull_request) Has been skipped
bench / Criterion regression gate (pull_request) Failing after 2m37s
darwin / detect relevant changes (pull_request) Successful in 5s
darwin / darwin docs-only no-op (pull_request) Has been skipped
darwin / build felis (aarch64-darwin) (pull_request) Successful in 53s
fuzz / cargo fuzz smoke (per target) (pull_request) Successful in 1m20s
pr / nix flake check (pull_request) Successful in 44s
pr / cargo build / clippy / test / deny (pull_request) Successful in 2m26s
pr / wire schema is compatible with the base (pull_request) Successful in 15s
pr / frontend smoke (x86_64-linux) (pull_request) Successful in 1m36s
pr / publish felis (x86_64-linux) (pull_request) Has been skipped
windows / detect relevant changes (pull_request) Successful in 4s
windows / windows docs-only no-op (pull_request) Has been skipped
windows / cargo clippy (Windows cross) (pull_request) Successful in 30s
windows / cargo nextest (Windows) (pull_request) Successful in 10m20s
windows / frontend smoke (Windows) (pull_request) Successful in 3m34s
windows / package felis (x86_64-pc-windows-msvc) (pull_request) Has been skipped
to 52cf38def0
Some checks failed
bench / Criterion full-suite snapshot (pull_request) Has been skipped
fuzz / cargo fuzz nightly long-run (pull_request) Has been skipped
fuzz / cargo fuzz smoke (per target) (pull_request) Successful in 1m42s
pr / nix flake check (pull_request) Successful in 1m30s
pr / cargo build / clippy / test / deny (pull_request) Successful in 2m36s
pr / wire schema is compatible with the base (pull_request) Successful in 18s
bench / Criterion regression gate (pull_request) Failing after 2m54s
darwin / detect relevant changes (pull_request) Successful in 9s
darwin / darwin docs-only no-op (pull_request) Has been skipped
darwin / build felis (aarch64-darwin) (pull_request) Successful in 52s
pr / frontend smoke (x86_64-linux) (pull_request) Successful in 1m29s
pr / publish felis (x86_64-linux) (pull_request) Has been skipped
windows / detect relevant changes (pull_request) Successful in 9s
windows / windows docs-only no-op (pull_request) Has been skipped
windows / cargo clippy (Windows cross) (pull_request) Successful in 25s
windows / cargo nextest (Windows) (pull_request) Successful in 16m13s
windows / frontend smoke (Windows) (pull_request) Successful in 2m32s
windows / package felis (x86_64-pc-windows-msvc) (pull_request) Has been skipped
2026-09-22 02:45:48 +09:00
Compare
natsukium deleted branch issue-330 2026-09-22 03:31:25 +09:00
Commenting is not possible because the repository is archived.
No description provided.