pmacs/pmacs-protocol/src
Levi Neuwirth b2a273b1fd
docs,test: 1a review round 3 --- an overclaimed first, and a vacuous row
**"The first frontend→instance extension needing a gate in both
directions" was false**, and checking it took one grep: the v19 terminal
family and the v21 panel family each have an inbound variant AND an
outbound one, each gated. "First inbound-only extension" does not hold
either --- v7's `TripleDown` and v11's `Context` are inbound-only
`PointerKind` variants.

So the superlative is gone rather than weakened. The rustdoc now states
the PROPERTY and its consequence: the gate is producer-side and
receiver-side, and for an inbound variant the receiving half is the
load-bearing one, because withholding would otherwise be the peer's job
and a client built from this same crate can encode the discriminant
whatever it negotiated. The v19/v21 precedent is named so the shape does
not read as novel; what is unusual is only that this extension has no
outbound counterpart, so the receiver check is the whole of the daemon's
half.

**`multi_scalar_text_input_creates_no_typed_provenance` proved half of
what its name claimed.** It started from a fresh editor, where the
command chain is ALREADY empty, so asserting emptiness afterwards passed
whether or not `break_command_chain` ran --- the assertion could not
fail for the reason it existed.

Split in two. The record half keeps its name and its claim; the chain
half is a new row that PRIMES the chain first and then asserts it
cleared. Priming goes through 1a's own single-scalar path, because
`pmacs.command.invoke('buffer.self-insert')` cannot prime it: rotation
belongs to the dispatcher and invoking the command directly deliberately
never rotates --- the first attempt at this row failed on exactly that
precondition, which is a better outcome than passing on a chain that was
never live.

**M-1a-2 deletes `break_command_chain` from the multi-scalar branch and
fails the new row alone**; the other six stay green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-12 17:29:21 +02:00
..
cell.rs protocol v6: per-severity diagnostic underline colors (SGR 58) 2026-06-10 19:16:42 -04:00
crdt.rs session 1 commit 3/4: CrdtOp moved to pmacs-protocol 2026-05-20 09:32:09 -04:00
ids.rs session 1 commit 1/4: workspace + identity types moved to pmacs-protocol 2026-05-20 09:11:33 -04:00
lib.rs feat(gpu,protocol): 1a --- A1-A5 and the v24 TextInput variant 2026-08-12 16:35:21 +02:00
message.rs docs,test: 1a review round 3 --- an overclaimed first, and a vacuous row 2026-08-12 17:29:21 +02:00
panel.rs feat(bottom-panel): split the GPU document bottom into three boundaries 2026-07-29 18:30:57 -04:00
scroll.rs feat(gpu): horizontal scroll — QoL Stage 5, closing the long-lines arc (#223) 2026-08-08 10:55:49 +00:00
terminal.rs Keep the v21 panel wire dark for v20 clients 2026-07-28 14:08:17 -04:00
transport.rs session M-1 — Pointer wire + daemon byte-space mouse semantics 2026-06-10 13:10:17 -04:00
wire_grid.rs fix(panel): review round 1 — buffer_id, the transport ratchet, shared bounds 2026-07-26 17:31:04 -04:00