graphics: stack equal-z Kitty images in kitty's order, live and across reattach #168
No reviewers
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis!168
Loading…
Reference in a new issue
No description provided.
Delete branch "graphics/equal-z-order"
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?
Closes #155.
kitty stacks equal-z images by
(z, image internal id, ref internal id). felis stacked them by the order the client heard of each placement. That inverts kitty's order when a newer image is placed first, and a reattach could reorder them again.The order can't be rebuilt from message order. The live outbox collapses a re-sent image to its last transmission. A put under the
p=of a placement of the other kind keeps kitty's ref, but felis removes and re-adds it. So the daemon now ships both numbers at protocol minor 2:ImageNew.serial: the store's existing creation serial. A re-send keeps it; a delete gives it up.ImagePlacement.serial: the sequence number a placement was first inserted under. It is kept through a same-key replace, an anonymous rekey, and a virtual↔direct conversion. A dump without it backfills from the dumped sequence numbers, soDUMP_VERSIONis unchanged.The shared layout sorts by
(z, image rank, direct before placeholder, placement serial). A minor-1 daemon sends neither number; the client then falls back to first-arrival image rank and shadow order.Two choices were made on purpose:
Both are explained in the explanation doc and the commit body.
Tests: layout ordering units,
Placementsserial invariants plus the proptest model, client-shadow rank, live put serials through the dispatcher, and an end-to-end check that live and rehydrated shadows draw the same kitty order. Mutating either serial path makes the end-to-end check fail.just checkandjust check-windowspass locally.Reviewed with pi (sol): the design passed at round 4 and the implementation at round 1. The two non-blocking implementation notes (CHANGELOG wording, conversion-round-trip test plus fuzz seeds) are addressed in the second commit.
d56b1f1039fcacefd6d1