# Decision: `session.*` is Lifeloop top-level lifecycle vocabulary
**Status:** Accepted on 2026-05-28, scope `lifeloop.v0.2`.
**Issue:** [#82 - Audit Lifeloop lifecycle vocabulary for stale session terminology](https://github.com/nantobv/lifeloop/issues/82).
## Decision
Lifeloop keeps the public `session.*` event names in `lifeloop.v0.2`.
In the Lifeloop contract, `session.*` means the top-level harness lifecycle
boundary: starting, started, ending, and ended. It is not a claim that every
client owns or exposes a product concept named "session".
CCD maps those Lifeloop events onto CCD-owned channel, thread, spin, lease,
checkpoint, and renewal operations. CCD must continue to expose its own
vocabulary (`thread`, `spin`, `frame`, and `checkpoint`) and must not introduce
a CCD session abstraction just because the incoming Lifeloop wire event is
named `session.*`.
## Why
The `session.*` names are already public wire contract:
- `src/wire.rs` serializes `LifecycleEventKind::{SessionStarting,
SessionStarted, SessionEnding, SessionEnded}` to `session.*`.
- `tests/wire_contract.rs` pins those literal names.
- `docs/specs/lifecycle-contract/body.md`, conformance fixtures, manifests,
and client fixtures all use those names.
Renaming them would be a breaking wire change and would require the schema-bump
and tombstone process. The audit found no current need for that break: the stale
part was CCD-facing prose treating the Lifeloop wire word as CCD vocabulary.
## Implications
- No schema bump is required.
- Existing conformance fixtures named `session_*` remain valid because they pin
Lifeloop wire events, not CCD concepts.
- CCD integration specs should say "top-level lifecycle" when describing CCD
behavior and reserve `session.*` for the Lifeloop event names themselves.