---
path: /lilith-studio/release
surface: customer
domain: lilith
auth: signed-in + studio:editorial
source: apps/oshun/web/src/app/lilith-studio/release/page.tsx
status: walked
last_walked: >-
  2026-06-28 automated release-bridge walk (Playwright Chromium against real dev
  infra) — validated the release bridge route under the Lilith Studio editorial
  gate, release stage attributes, rollback pointer, evidence gate statuses,
  route-continuity links, and embedded provenance bundle for
  `prov:lilith-studio:release-bridge:v3-shell`. Evidence:
  `apps/oshun/web/e2e/lilith-studio-shell-smoke.spec.ts` and
  `apps/oshun/web/e2e/lilith-provenance-inspector-smoke.spec.ts`.
---

# Lilith Studio · release bridge

## Purpose

Operational release-readiness page for the V3 Lilith Studio shell. It closes the
previous shell-route gap where the surface grid advertised
`/lilith-studio/release` but no route existed. The page keeps draft,
editorial-candidate, release-edition, rollback, evidence-gate, and provenance
posture visible before V3 authoring work is promoted out of the studio.

## Entry points

- Lilith Studio shell "Release bridge" surface tab → "Open Release bridge"
- Direct URL / bookmark — yes, signed-in editorial only
- Route-continuity link from the page back to `/lilith-studio`

## Layout regions

`page.tsx` exports metadata and renders `<LilithStudioReleaseBridge />`. The
route is wrapped by `apps/oshun/web/src/app/lilith-studio/layout.tsx`, which
owns the shared `ShellLayout active="studio"` and `studio:editorial` access
gate.

- **Header**: eyebrow "Lilith Studio / Release bridge", h1 "Release posture",
  one-sentence operational summary.
- **Branch state panel** (`aria-label="Release stages"`): ordered list of three
  `data-release-stage-item` rows — draft, editorial candidate (current), release
  edition.
- **Evidence gates panel** (`aria-label="Release evidence gates"`): four
  `data-release-gate` rows — policy, taxonomy, provenance, version-history.
- **Route continuity panel** (`aria-label="Release route links"`): four internal
  links carrying `data-release-route-link` — Lilith shell, provenance hub,
  versioning lane, review workflow.
- **Embedded provenance inspector**: `<LilithProvenanceInspector />` with
  `surfaceId="release-bridge"` and the release-bridge provenance asset from
  `LILITH_STUDIO_SHELL_PROVENANCE_ASSETS`.

## States

- [x] **Loading** — client component; no network fetch; route renders once the
      shared shell hydrates.
- [x] **Editorial access granted** — shell layout renders the release bridge for
      `studio:editorial`. Covered by `lilith-studio-shell-smoke.spec.ts`.
- [x] **Non-editorial access denied** — inherited from
      `lilith-studio/layout.tsx`; covered at shell level by
      `lilith-studio-shell-smoke.spec.ts` and sub-route level by
      `lilith-scene-editor-smoke.spec.ts`.
- [x] **Current stage** — root `data-release-stage="editorial-candidate"` and
      the matching stage row has `data-current="true"`.
- [x] **Rollback pointer** — root `data-rollback-pointer="draft"`.
- [x] **Evidence passed / ready** — policy, taxonomy, and provenance gates are
      `passed`; version-history is `ready`.
- [ ] **Offline** — pure client surface should render once cached; cold offline
      navigation is not separately asserted.
- [ ] **Standalone PWA** — inherits Lilith Studio shell safe-area behavior; not
      separately asserted for this route.

## Interactions

### Route continuity

- [x] **Lilith shell** (`data-release-route-link="/lilith-studio"`) →
      `/lilith-studio`
- [x] **Provenance hub** (`data-release-route-link="/lilith-studio/provenance"`)
      → `/lilith-studio/provenance`
- [x] **Versioning lane**
      (`data-release-route-link="/studio/hathor/entity-version-management"`) →
      `/studio/hathor/entity-version-management`
- [x] **Review workflow**
      (`data-release-route-link="/studio/review-approval-workflows"`) →
      `/studio/review-approval-workflows`

### Release state

- [x] **Three stage rows** (`data-release-stage-item`) — read-only; draft,
      editorial candidate, release edition.
- [x] **Four evidence gates** (`data-release-gate`) — read-only; policy,
      taxonomy, provenance, version-history.

### Provenance

- [x] **Embedded `LilithProvenanceInspector`** —
      `data-testid="lilith-provenance-inspector-release-bridge"`, one release
      asset, default `data-open-provenance-id` =
      `prov:lilith-studio:release-bridge:v3-shell`, bundle includes
      `"surfaceId": "release-bridge"`.

## Data & contracts

- **Reads**:
  - local constants in `LilithStudioReleaseBridge.tsx`
  - `LILITH_STUDIO_SHELL_PROVENANCE_ASSETS` from
    `apps/oshun/web/src/app/lilith-studio/LilithStudioShell.tsx`
- **Writes**: none; route is read-only release posture.
- **Realtime**: none.
- **Caching**: client bundle only; no BFF fetch.
- **Auth/role check**: inherited from `lilith-studio/layout.tsx` via
  `hasLilithStudioAccess()` requiring `admin:*` or `studio:editorial`.

## Cross-references

- Parent shell: [`lilith-studio.md`](./lilith-studio.md)
- Provenance hub: [`lilith-studio-provenance.md`](./lilith-studio-provenance.md)
- Component sources:
  - `apps/oshun/web/src/app/lilith-studio/release/page.tsx`
  - `apps/oshun/web/src/app/lilith-studio/release/LilithStudioReleaseBridge.tsx`
  - `apps/oshun/web/src/app/lilith-studio/LilithProvenanceInspector.tsx`
- E2E evidence:
  - `apps/oshun/web/e2e/lilith-studio-shell-smoke.spec.ts`
  - `apps/oshun/web/e2e/lilith-provenance-inspector-smoke.spec.ts`

## Open questions / known gaps

- [ ] Release bridge is currently read-only posture; confirm whether future
      publish/rollback actions should POST to a release queue or remain in V1
      Studio's versioning lane.
- [ ] Cold offline and standalone PWA safe-area behavior are inherited but not
      asserted specifically for this route.
