/** * `Session` — a user-named workspace that owns one engine snapshot. * * Sessions partition the demo app: each one holds its own documents, * annotations, evidence items, and links. Membership is implicit — a * session "owns" whatever lives in its engine snapshot. The session * record itself only carries the human metadata (name, timestamps) and * the branded id used as a key in `localStorage` and the ZIP archive * (see ADR-0008). * * The id is opaque (`sess_` per `ids.ts`). The name is the human * label; uniqueness is enforced by the `SessionService` on create and * rename. Names are *trimmed* before storage so a leading/trailing * space does not let two sessions coexist with effectively the same * label. */ import type { SessionId } from "./ids"; export interface Session { readonly id: SessionId; readonly name: string; readonly createdAt: string; readonly updatedAt: string; readonly lastOpenedAt?: string; }