V1 Web PWA · Journey

Journey: Atelier · Cinematheque render queue

A source-reconciled journey record for V1 Web PWA — shipped behavior, state boundaries, failure modes, and the automation evidence available today.

automated · 1 spec verdict: partial· 2026-07-02
10sections5 minread

On this page
Journey at a glance
ActorsContemplative customerReturning makerStudio-bound customer
Automation1 E2E spec(s) · verdict: partial· 2026-07-02

Journey flow#

Generated from the authored steps below — click a node to jump to that section.

flowchart TD s1["1. Open Cinematheque"] s2["2. Review the storyboard"] s3["3. Review the render queue"] s4["4. Inspect selected shot sh 06"] s5["5. Check Cut timeline affordance"] s6["6. Edge-state checks"] s1 --> s2 --> s3 --> s4 --> s5 --> s6 click s1 href "#1-open-cinematheque" click s2 href "#2-review-the-storyboard" click s3 href "#3-review-the-render-queue" click s4 href "#4-inspect-selected-shot-sh-06" click s5 href "#5-check-cut-timeline-affordance" click s6 href "#6-edge-state-checks" s6 --> v(["verdict: partial"]) click v href "../results/atelier-video-render-queue.html" style v stroke:#d6a531,color:#d6a531

A signed-in customer opens Cinematheque, reviews the twelve-panel storyboard, checks the render queue, confirms sh 06 is the selected mid-render shot, and verifies that the Cut timeline action is not yet wired. This captures the V1 Atelier video surface as a deliberate read-only render monitor: state is visible and internally coherent, but panel selection, reordering, live progress updates, and timeline editing are not shipped in the consumer room yet.

Personas#

  • Contemplative customer — primary actor; checks the video plate without entering a studio/editor workspace
  • Returning maker — verifies which shot is selected and whether queued renders are waiting behind the active one
  • Studio-bound customer — verifies that the consumer Cinematheque presents read-only progress and does not pretend to expose Cut timeline editing yet

Pre-conditions#

  • Customer signed in
  • /atelier/video is reachable behind the customer auth shell
  • getAtelierVideo() returns the populated fixture with twelve shot titles, twelve shot times, and three render queue rows
  • No route-local loading.tsx or error.tsx exists; those states are captured as inherited/absent rather than fabricated

Steps#

1. Open Cinematheque#

  • Customer navigates to /atelier/video from the Atelier index, /atelier/motion handoff, Lilith index, or direct URL.
  • Page server-renders apps/oshun/web/src/app/atelier/video/page.tsx, awaits getAtelierVideo(), and renders <AtelierVideo data>.
  • Route root exposes data-atelier-video-page, data-atelier-video-shot-count="12", data-atelier-video-render-queue-count="3", data-atelier-video-current-shot="sh 06", and data-atelier-video-render-progress="64".
  • Plate head reads "The atelier · cinematheque" and "A short film, storyboarded." with chips "04 : 38 / 06 : 00", "9 of 12 shots", and "Rendering · take 02".
  • Step rail exposes all five steps with step 3 "Shot list · cameras, lenses" current.

2. Review the storyboard#

  • Storyboard grid exposes data-atelier-video-storyboard-count="12".
  • All twelve panels render exact labels, times, titles, state attributes, and selection attributes from getAtelierVideoFixture().
  • Shots sh 01–05 are rendered; sh 06 is the only rendering/selected panel; sh 07–10 are queued; sh 11–12 are drafted.
  • sh 06 shows visible rendering · 64% state.
  • Tapping sh 10 does not change selection, update the selected shot card, or navigate.

3. Review the render queue#

  • Render queue exposes three rows.
  • sh 06 row exposes rendering state, progress 64, title "Tilt up · dust in beam", and ETA 02:14.
  • sh 07 row exposes queued state, progress 0, title "Reverse · the looker", and ETA 04:42.
  • sh 08 row exposes queued state, progress 0, title "Cut to black, two", and ETA 06:18.
  • Clicking a queue row leaves the selected storyboard panel and selected shot card on sh 06.

4. Inspect selected shot sh 06#

  • Shot card exposes data-atelier-video-shot-card-shot="sh 06" and data-atelier-video-shot-card-progress="64".
  • Preview shows T+00:48 · 24fps.
  • Progress card shows Rendering 64% and ETA 02:14.
  • Metadata rows show camera, lens, frame rate, length, light, engine, and sound, including "Lilith Cine · v1.4" and "From foundry · 02:14 stem".
  • Clicking the preview is read-only and keeps the route at /atelier/video.

5. Check Cut timeline affordance#

  • "Open in Cut · timeline" renders as a disabled-placeholder LBtn with aria-disabled="true", data-placeholder="true", and tooltip No handler wired — placeholder.
  • Clicking it leaves the customer on /atelier/video.

6. Edge-state checks#

  • At 390 px width, the layout stacks rail → storyboard/queue → shot card without horizontal overflow.
  • Under reduced motion, the route subtree exposes zero animations; progress bars are static rendered values.
  • After the route has loaded, browser offline mode leaves the route root, storyboard, and selected shot card visible.

Post-conditions#

  • Customer can see the current video render state without entering an editor.
  • sh 06 is clearly the selected mid-render shot and the queue behind it is coherent.
  • No fake selection, reorder, live subscription, or Cut timeline route is implied by the current consumer route.

Failure modes#

  • State mismatch — storyboard and render queue agree that only sh 06 is rendering; sh 07 is queued.
  • False affordance — Cut timeline button exposes disabled-placeholder semantics and does not navigate.
  • Read-only non-mutation — storyboard, queue, and preview clicks leave selection and route unchanged.
  • Mobile overflow — 390 px browser check fails if the desktop grid leaks horizontally.
  • Offline after load — static route markup remains visible after the browser context goes offline.
  • Route-local load/error — no local loading.tsx or error.tsx exists yet.
  • Live render progress — no subscription or polling exists yet; progress is static fixture state.

Data & contracts#

  • Route: apps/oshun/web/src/app/atelier/video/page.tsx
  • Component: apps/oshun/web/src/components/lilith/atelier.tsx (AtelierVideo)
  • Data: apps/oshun/web/src/lib/lilith-data/atelier-depth.ts (getAtelierVideoFixture())
  • Writes: none in the current customer surface
  • Realtime: none in current code

E2E coverage#

Spec: apps/oshun/web/e2e/atelier-video-render-queue.spec.ts (4 tests)

Coverage depth: deep for the shipped static/read-only route contract. The spec runs through authenticated real dev infra, verifies all fixture-derived storyboard and queue rows, drives the available click paths to prove non-mutation, asserts disabled-placeholder Cut semantics, and covers mobile, reduced-motion, and offline-stable loaded markup. Remaining gaps are product work: route-local loading/error boundaries, live render updates, storyboard selection/reordering, and a real Cut timeline destination.

Per-view files touched#

Cross-references#

Open questions / known gaps#

  • Add route-local loading and error states that preserve the room's context and recovery action
  • Replace fixture progress with an explicit polling or subscription contract before describing the queue as live
  • Decide whether storyboard selection/reordering belongs in this consumer room or only in the authoring studio
  • Define the Cut timeline destination; until then the disabled placeholder remains the truthful affordance