[v0.1/P1] Reset the first public protocol minor to 0 #313
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#313
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?
Parent: #12. Related: #30, #50, #147, #164, #303–#312.
Decision
The first public wire contract will be protocol 1.0, not protocol 1.10.
Keep the schema package and protocol major unchanged:
felis.v1;PROTOCOL_MAJOR = 1;PROTOCOL_MINOR = 0at the first public tag.Fold the complete schema present at the tagged revision into the minor-0 base. The development-only minor 1–10 history has no released peer and will not become a permanent compatibility obligation.
This supersedes only the minor-number decision recorded on #147. It does not revive #30's proposal to rename the package to
felis.v2or bump the protocol major to 2.Why
The repository states that pre-release snapshots carry no compatibility promise, and no public tag exists. Keeping minors 1–10 would nevertheless preserve sender gates, downgrade branches, ledger rows, and tests for peers that were never released. Every future implementation, including non-Rust peers, would inherit that artificial compatibility surface.
A clean minor-0 baseline makes the first post-release additive change the first real minor transition. That is the point where #164's mixed-minor conversation matrix gains an actual older peer to protect.
Resetting the minor after release would itself violate the frozen negotiation contract. The reset therefore belongs in the last wire change before the first tag.
Scope
PROTOCOL_MINORand the schema-declared minor to0.MINOR_LEDGERand the reference minor ledger to one row: the complete protocol-major-1 base schema.MINOR_*constants, downgrade branches, localMinorTooOldchecks, and tests whose only consumer is a pre-release minor 1–10 peer.skills/felis, andCHANGELOG.mdto say wire1.0.first-releasehandling until the first release baseline is committed; #115 owns making that transition safe.Land this after every other v0.1 wire-shape issue, so the reset describes the exact schema that will be tagged.
Acceptance criteria
1.0in the preface,felis daemon status,felis version/doctor diagnostics, docs, and changelog.felis.proto, generated code,PROTOCOL_MINOR,MINOR_LEDGER, arm metadata, closed-enum metadata, and row-codec metadata agree that every first-release shape belongs to minor 0.just proto,just schema,just check, and the proto compatibility gate pass on the final schema.Principle check
Direction agreed 2026-09-21 after three
soldesign-review rounds (final verdict PASS). Full plan and batch order: see the comment on #12.PROTOCOL_MINOR = 0, one ledger row,delete the ten
MINOR_*constants, the seven.since()calls, theDowngradebranches in daemon/connector/bridge/version, and the tests thatexist only for minors 1–10; fix the two preface golden vectors that embed
0x0A; keepRequires/GatedField/MinorGated/arm_requires/FrameWriter::authorize/check_arm_minoras the live frame for the firstpost-release addition, proven by a synthetic future-minor test; docs
1.10→
1.0; rewrite #164. Out of scope (owned by #115):BREAKING.mdlines,tools/proto/compat.py,proto-baseline/,release.yml,PROTOCOL_MAJOR.Row-codec goldens are unaffected.