phux
protocol

L2 — Reserved, no collection tier

There is no L2 collection tier. The L2 discriminant range is reserved on the wire but unused, and SHALL NOT be allocated for a collection lifecycle service.

wire 0.8.0evolving document
Full source summary

There is no L2 collection tier. The L2 discriminant range is reserved on the wire but unused, and SHALL NOT be allocated for a collection lifecycle service. Group membership and names are L3 metadata plus client logic; the one irreducible need, atomic multi-terminal teardown, is a single L1 operation (KILL_TERMINALS). Earlier drafts of this document specified a Collection service; that design is withdrawn.

1. Status

ADR-0030 (option B) dissolves the collection tier. A consumer-side projection can reconstruct any structured view of grouping from L3 metadata it already reads, so the wire gains nothing by carrying a collection lifecycle service. The L2 range stays reserved so the three-tier numbering from ADR-0015 is not reused, but no L2 message SHALL be allocated.

An earlier draft of this document specified a CREATE_COLLECTION / KILL_COLLECTION / RENAME_COLLECTION service with an atomic-kill invariant. That design is withdrawn in full.

2. Where group lifecycle lives instead

Group lifecycle decomposes into mechanisms owned by other documents:

  • Membership and names are L3 metadata plus client logic. A group is a set of TerminalIds under a conventional key; see L3.md for the metadata model and the phux.session.* and phux.tui.* conventions. The server stores these values without interpreting them, so it enforces no membership view — consistency is the client’s responsibility.
  • Atomic teardown is the lone operation a client-side projection cannot perform safely, because killing N terminals one at a time exposes intermediate states to a concurrent observer. The wire serves it with a single L1 operation, KILL_TERMINALS { ids: [TerminalId] }, applied all-or-nothing under the server’s single Mutex<ServerState> lock. That operation is owned by L1.md; its command tag (0x09) is recorded in appendix-reserved.md.

3. GroupId

GroupId is retained as a documented opaque grouping key, not a lifecycle tier — it identifies a group for metadata scoping, with no server-side lifecycle attached. This is settled, not a remnant awaiting removal (bead phux-0bmc closed as resolved-by-rename). The L3 Scope::Group discriminant (L3.md §1) continues to reference it on that basis.

View exact source