L2 — Reserved, no collection tier
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 thephux.session.*andphux.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 singleMutex<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.