protocol: say "no value" by absence in the session roster #165
No reviewers
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
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis!165
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/proto-session-normalize-144"
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?
Fixes #144.
Three fields of the session roster row spelled "the daemon has no value
here" with a value drawn from the field's own domain:
sequence = 0fora daemon below minor 3,
idle_seconds = 0for an attached session, anda hand-formatted string for an attach instant whose shape nothing could
check. Presence carries all three now:
SessionInfo.sequenceis explicitly optional and 1-based, so a wire0is a decode error rather than a fourth meaning; the switch ringfalls back to id order only on absence.
SessionInfo.idle_secondsis absent while attached, which frees0to mean the second it names.
Attachment.attached_atis agoogle.protobuf.Timestamp, whose rangea decoder checks. The RFC 3339 formatter moves to
felis-cli, itsonly user, so the CLI's machine surface keeps publishing the same
string.
This is a pre-release wire break, acknowledged in
crates/felis-protocol/proto/BREAKING.mdagainst the rebase base:daemon and client must be rebuilt together.
Doc cascade:
docs/reference/ipc.md(per-field absent-value semanticsand the minor-3 ledger row),
docs/explanation/ipc.md(the argument forabsence over an in-band sentinel, recorded once rather than per field),
the
docs/how-to/reap recipe whose jq filter documented0as"attached", and
CHANGELOG.md.Verified: just check green (fmt, clippy, nextest, deny, proto-compat);
reviewed by pi luna + pi sol; docs proofread by Gemini gemini-3.8-flash-high
Deferred
table — #29/#146 own that table rewrite; the three fields' frozen
semantics are already stated in the existing bullets.
Attachment's fields only, none ofwhich was renamed.
describes a rare CI-flake risk from
SystemTime::now()non-monotonicity, not a concrete wrong output or a named acceptance
criterion; hardening beyond what #144 requires.
attached_at— duplicate of the "guaranteed decode failure" finding(same lines, same wire-type/decode-outcome inaccuracy); merged under
that title and fixed there.
reviewer, not a finding about the diff itself; no fix in this PR's
scope addresses it.
c19ccfcef914fe57a30b14fe57a30b6f29d13313