L2 — Reserved, no collection tier

evolving Protocol reference

L2 — Reserved, no collection tier

TL;DR. 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. Its full removal is tracked as future work (bead phux-0bmc). The L3 Scope::Group discriminant (L3.md §1) continues to reference it on that basis.