atelier-motion.mdatelier-video.mdatelier.mdJourney flow#
Generated from the authored steps below — click a node to jump to that section.
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/videois reachable behind the customer auth shellgetAtelierVideo()returns the populated fixture with twelve shot titles, twelve shot times, and three render queue rows- No route-local
loading.tsxorerror.tsxexists; those states are captured as inherited/absent rather than fabricated
Steps#
1. Open Cinematheque#
- Customer navigates to
/atelier/videofrom the Atelier index,/atelier/motionhandoff, Lilith index, or direct URL. - Page server-renders
apps/oshun/web/src/app/atelier/video/page.tsx, awaitsgetAtelierVideo(), 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", anddata-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 ETA02:14. - sh 07 row exposes queued state, progress
0, title "Reverse · the looker", and ETA04:42. - sh 08 row exposes queued state, progress
0, title "Cut to black, two", and ETA06: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"anddata-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
LBtnwitharia-disabled="true",data-placeholder="true", and tooltipNo 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.tsxorerror.tsxexists 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#
customer/11-atelier/atelier-video.md— primary Cinematheque routecustomer/11-atelier/atelier-motion.md— URL-scoped inbound handoff sourcecustomer/11-atelier/atelier.md— room index entry
Cross-references#
- Motion handoff journey:
atelier-motion-to-cinematheque.md - Coverage matrix:
coverage.md
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