[v0.1/Proto Review] Version ConnectionMode additions through the minor ledger #312
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis#312
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Why
ConnectionModeis a routing discriminator carried inConnMsg::Hello. Adding a new mode changes which message families the daemon admits, so it is part of the long-lived IPC compatibility surface.The current minor gate covers
ConnMsg::Welcome.identity, butConnMsg::Hello.modeis not included infelis-protocol/src/minor.rs.ConnectionModealso has nosince_minormapping. The conversion layer rejects unknown enum values, so a newer client that sends a future mode to an older daemon will likely lose the connection without a sender-sideMinorTooOldresult.The design documentation says that a new surface should use a new mode rather than reintroducing per-feature bits. That makes mode growth an expected extension path, not an unlikely corner case.
Decision required before v0.1.0
Choose one compatibility policy:
ConnectionMode::since_minor, include the Hello mode inMinorGated, record each mode in the minor ledger, and test mixed-minor handshakes.The first option is preferable if a future observer, recorder, or headless rendering mode should interoperate with older installations without a coordinated major upgrade.
Acceptance criteria
Related: #5, #46, #50.
Direction agreed 2026-09-21 after three
soldesign-review rounds (final verdict PASS). Full plan and batch order: see the comment on #12.ConnectionMode::since_minor,Hello.modeinMinorGated, ledger rows per mode. After #313 every shipped mode issince=0, so tests use a synthetic future mode.