Skip to content

Commit df30c20

Browse files
committed
docs(storyboard): split semicolon sentences in the flow PRD
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NbKxMtVCMjprh9UMMaxjYu
1 parent 15bac1c commit df30c20

1 file changed

Lines changed: 40 additions & 40 deletions

File tree

docs/storyboard-flow-prd.md

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ buttons, Video Count toggle) are not part of this flow. See § 4.3.
9292
- 3D camera blocking view (S5 right panel). Candidate for a later slice on
9393
`packages/model3d`.
9494
- In-dialog painting. Brush, palette and eraser open the existing image editor
95-
on the still; the result comes back as a new version.
95+
on the still. The result comes back as a new version.
9696
- PDF or share-link export. ZIP stays.
97-
- Changes to the Director prompt beyond genre, scenes and lighting; changes to
97+
- Changes to the Director prompt beyond genre, scenes and lighting. Changes to
9898
Assemble, the timeline, or the script editor.
9999
- Inferring the flow from a plain prompt. A plain prompt on the New Project
100100
surface keeps going to the project agent. Shape selection across
@@ -104,9 +104,9 @@ buttons, Video Count toggle) are not part of this flow. See § 4.3.
104104
### 4.3 Non-goals
105105

106106
- No plan gating or upsell chrome in the flow. Studio's account page owns plan
107-
state; the flow never shows a remaining-projects banner.
107+
state. The flow never shows a remaining-projects banner.
108108
- No second board component. `StoryboardBoard` gains scene headers and card
109-
affordances; the Studio page and the workspace tab keep hosting it.
109+
affordances. The Studio page and the workspace tab keep hosting it.
110110
- No change to what `Start` does on the New Project surface. The flow is
111111
reached only through the explicit Storyboard entry (§ 6.0).
112112

@@ -141,15 +141,15 @@ Boards saved before this PRD carry no stage and read as `done`.
141141

142142
Stepper across the top, `1. Idea` active. Heading "What's your story?",
143143
subline "We'll turn it into a screenplay and storyboard." Three inspiration
144-
chips seeded from the shipped example boards' loglines; one click fills the
144+
chips seeded from the shipped example boards' loglines. One click fills the
145145
textarea. The prompt card keeps `@` mentions, ref images and entities. `/`
146146
skill completion is off inside the flow. Placeholder: "One sentence is enough,
147147
or paste a full script."
148148

149149
Right column, three option cards and one tutorial card:
150150

151151
- **Upload your file** (PDF, DOCX, FDX). See § 8 for the extraction path and
152-
the error contract. The text lands in the textarea; FDX also yields typed
152+
the error contract. The text lands in the textarea. FDX also yields typed
153153
scenes and dialogue that step 2 uses verbatim.
154154
- **Import your shotlist** (CSV). "Download template" serves a static file.
155155
Import creates scenes and shots, sets `setupStage: "look"`, and advances to
@@ -173,24 +173,24 @@ board. `Back`, `Review your screenplay`.
173173
(when present) the parsed script. On success the store applies the screenplay
174174
and sets `setupStage: "review"`. On failure the stage stays `genre` and the
175175
error shows on the button. Closing the tab mid-call loses the in-flight result
176-
only; rerunning is the recovery.
176+
only. Rerunning is the recovery.
177177

178178
**Review.** The screenplay as text: title, logline, then each scene as a
179179
slugline header with its lighting note, and the shots beneath as action lines
180180
with dialogue. Every field is editable inline and writes through the store
181-
(`updateShot`, `updateScene`); the document is the draft, since nothing else
181+
(`updateShot`, `updateScene`). The document is the draft, since nothing else
182182
writes it during review. `Re-direct` sends the current screenplay back to the
183183
Director as context and applies the revision through `setScreenplay`, which
184184
already merges by shot id and keeps media. Shots the revision drops are
185-
removed; new ones are appended. `Back` returns to genre and keeps the
185+
removed. New ones are appended. `Back` returns to genre and keeps the
186186
screenplay. `Continue to storyboard` sets `setupStage: "look"`.
187187

188188
**Imported scripts.** An FDX yields typed paragraphs, so scenes and dialogue
189189
are built deterministically by the parser: one scene per `Scene Heading`, one
190190
shot per `Action` paragraph or dialogue block, `dialogue` set from the
191191
`Character` and `Dialogue` paragraphs verbatim. The Director is asked only for
192192
camera, motion and duration per shot and may not alter `dialogue` or scene
193-
order; a post-check (`verifyImportedText`) compares the returned dialogue and
193+
order. A post-check (`verifyImportedText`) compares the returned dialogue and
194194
scene sequence against the parse and restores the parsed values where they
195195
differ, with a review-step notice naming the shots it corrected. PDF and DOCX
196196
yield plain text, so the Director structures it and the same post-check flags,
@@ -256,7 +256,7 @@ Card:
256256
Toolbar during and after a batch: `Retry N failed` appears while any shot's
257257
last job failed and retries each with its saved fields. A banner "Style
258258
changed. N stills and M clips are stale. Re-render stills" appears when § 7.4
259-
finds stale versions; clicking renders stills only, clips stay stale until
259+
finds stale versions. Clicking renders stills only, clips stay stale until
260260
`Render clips`.
261261

262262
Batch jobs are server jobs. A board closed mid-batch reattaches on open: the
@@ -274,7 +274,7 @@ selection footer from Phase 0 keeps only `Edit`, `Iterate`, `Regenerate`,
274274
overwrite. Version pager `k / n`.
275275
- **Right.** The existing takes gallery: every version, select or delete.
276276
- **Header row.** `SCENE N:` slugline as a dropdown that runs `moveShot` to the
277-
end of the chosen scene; the scene's lighting note, editable.
277+
end of the chosen scene. The scene's lighting note, editable.
278278
- **Table row.** Scene, Shot, Description, Dialogue, ERT, Size, Perspective,
279279
Movement, Equipment, Focal length, Aspect ratio, Notes. Field mapping in
280280
§ 7.2. Aspect ratio is the board's value, read-only, linking to Board
@@ -283,7 +283,7 @@ selection footer from Phase 0 keeps only `Edit`, `Iterate`, `Regenerate`,
283283
speaker; `Edit in script` opens the script at the first line. The script
284284
owns words. On an unlinked board the cell is a textarea.
285285
- **ERT on a linked board.** Shows the value with the existing `from takes` /
286-
`pinned` chip. Typing a value pins it (`duration_source: "manual"`); the
286+
`pinned` chip. Typing a value pins it (`duration_source: "manual"`). The
287287
chip toggles back to `audio`, which restores the takes' duration. On an
288288
unlinked board it is a plain number.
289289
- **Script panel** for a linked board stays below the table.
@@ -293,7 +293,7 @@ Save semantics: the table row and the header row are a draft. `Save` commits
293293
the draft as one store update and one undo step. `Regenerate` saves first, then
294294
renders from the saved fields. Closing with unsaved changes asks "Discard
295295
changes?" with `Save` and `Discard`. Version selection, deletion, flip and
296-
upload are not draft state; they commit immediately, as they do today.
296+
upload are not draft state. They commit immediately, as they do today.
297297

298298
Keyboard: `Esc` closes (with the confirm above when dirty), ``/`` step
299299
versions, `Cmd/Ctrl+S` saves.
@@ -341,10 +341,10 @@ render_inputs?: RenderInputs; // see 7.4
341341
Equipment vocabulary in `cameraOptions.ts`: handheld, tripod, steadicam,
342342
gimbal, dolly, slider, crane, drone.
343343

344-
Table column → field: Description → `action`; Dialogue → `dialogue`; ERT →
345-
`duration_seconds` with `duration_source`; Size → `camera.framing`;
346-
Perspective → `camera.angle`; Movement → `camera.movement`; Equipment →
347-
`camera.equipment`; Focal length → `camera.lens`; Notes → `notes`.
344+
Table column → field: Description → `action`. Dialogue → `dialogue`. ERT →
345+
`duration_seconds` with `duration_source`. Size → `camera.framing`;
346+
Perspective → `camera.angle`. Movement → `camera.movement`. Equipment →
347+
`camera.equipment`. Focal length → `camera.lens`. Notes → `notes`.
348348

349349
### 7.3 Ordering contract
350350

@@ -392,7 +392,7 @@ export interface RenderInputs {
392392
Written when the job is enqueued and stored on the version when the asset
393393
lands, so a render that finishes after a style change carries its
394394
enqueue-time inputs. A version is **stale** when its `render_inputs` differs
395-
from the inputs the same shot would use now; the comparison is pure
395+
from the inputs the same shot would use now. The comparison is pure
396396
(`isVersionStale(shot, board)`) and derived at render time, never persisted as
397397
a flag. Versions without a record (legacy, upload, flip, image-editor edit)
398398
are never stale. A keyframe-mode clip is also stale when its
@@ -424,7 +424,7 @@ never enter a prompt.
424424
`setStylePreset(entityId)`: one store operation, one undo step. Removes every
425425
entity of kind `style` from `board.entityIds`, adds the chosen id, sets
426426
`board.style` to its descriptor. Per-shot include and exclude lists for
427-
characters, locations and props are untouched; a per-shot exclusion of a style
427+
characters, locations and props are untouched. A per-shot exclusion of a style
428428
entity is removed, since styles apply board-wide. Nothing renders. Staleness
429429
follows from § 7.4.
430430

@@ -456,13 +456,13 @@ Columns, header row required, order free:
456456
scene, shot, description, dialogue, duration_seconds, size, perspective, movement, equipment, focal_length, notes
457457
```
458458

459-
`scene` and `description` are required; a file missing either header is
459+
`scene` and `description` are required. A file missing either header is
460460
refused with the missing names. Parsing is RFC 4180 through a real CSV parser:
461461
quoted fields, embedded commas, multiline dialogue. A `scene` value that starts
462-
with `INT.`, `EXT.` or `INT./EXT.` becomes the slugline; otherwise the scene is
462+
with `INT.`, `EXT.` or `INT./EXT.` becomes the slugline. Otherwise the scene is
463463
named `Scene N`. Vocabulary columns match the option lists
464-
case-insensitively; a non-match leaves the field unset. `duration_seconds`
465-
must be a positive number; otherwise unset. Every discarded value is listed in
464+
case-insensitively. A non-match leaves the field unset. `duration_seconds`
465+
must be a positive number. Otherwise unset. Every discarded value is listed in
466466
the import report (row, column, value) shown after import, so the creator can
467467
fix it in the dialog. A row with an empty `description` is skipped and
468468
reported.
@@ -471,7 +471,7 @@ reported.
471471

472472
Shipped as system entities of kind `style`, one row each, read-only,
473473
thumbnails under a `package://` path, seeded the way example boards are.
474-
`Add your own style` always creates a user-owned copy; a preset's descriptor
474+
`Add your own style` always creates a user-owned copy. A preset's descriptor
475475
never changes under a user.
476476

477477
## 8. Imports
@@ -503,26 +503,26 @@ imports the rest and shows the report.
503503

504504
- **D1 — One setup component, two hosts.** `StoryboardSetupFlow` renders
505505
inside the New Project tab and Studio home. The board's `setupStage` and
506-
fields are the flow's state; there is no wizard store.
506+
fields are the flow's state. There is no wizard store.
507507
- **D2 — Explicit entry only.** The flow starts from the Storyboard card or the
508508
Studio "Make a video" card. A plain or `/skill` prompt on the New Project
509509
surface keeps going to the project agent. (Resolves F1.)
510510
- **D3 — Persisted stage, not inferred state.** `setupStage` decides where a
511511
board opens. No field value (shots, style, genre) is read as progress.
512512
(Resolves F2.)
513513
- **D4 — Review before pixels.** The Director runs at the end of step 2 and its
514-
output is shown as text; no still renders before step 3's button.
514+
output is shown as text. No still renders before step 3's button.
515515
- **D5 — Scenes on the screenplay, one global order.** § 7.3. Assemble, the
516516
script link and the timeline keep reading `shot.index`. (Resolves F4.)
517517
- **D6 — Style preset = style entity, applied by one operation.** § 7.5. No
518518
`stylePreset` field. (Resolves F6.)
519519
- **D7 — Staleness is derived from a per-version render record.** § 7.4. No
520520
stale flag is stored. (Resolves F6.)
521521
- **D8 — Camera fields reach the prompt or they do not ship.** § 7.5 is in
522-
scope for P1; the dialog's fields are not rearranged before their prompt
522+
scope for P1. The dialog's fields are not rearranged before their prompt
523523
effect exists. (Resolves F5.)
524524
- **D9 — The script owns words.** On a linked board dialogue is read-only in
525-
the board and edited in the script; duration follows takes unless pinned,
525+
the board and edited in the script. Duration follows takes unless pinned,
526526
through the existing toggle. Studio still extracts a linked script, now at
527527
`Continue to storyboard`. (Resolves F3, Q1.)
528528
- **D10 — Imported dialogue is deterministic.** FDX dialogue and scene order
@@ -579,10 +579,10 @@ tests on the store and hooks, not on the parsers. The
579579
3. Genre appears in the Director prompt (asserted in the hook's test) and as a
580580
chip on the board.
581581
4. The review step renders the directed screenplay as text with no render job
582-
started; a shot edited there is the shot that renders in step 3. Re-direct
582+
started. A shot edited there is the shot that renders in step 3. Re-direct
583583
keeps the ids and media of shots the revision retains.
584584
5. An FDX import's dialogue lines and scene order appear in the review verbatim
585-
and in order, asserted against the fixture; a Director response that
585+
and in order, asserted against the fixture. A Director response that
586586
changes one is restored and the shot is named in the notice.
587587
6. Studio extracts the linked script at `Continue to storyboard`, from the
588588
reviewed screenplay.
@@ -595,10 +595,10 @@ tests on the store and hooks, not on the parsers. The
595595
Assemble's clip order equals `shot.index`.
596596
10. Each field marked yes in § 7.5 appears in the composed prompt for that mode
597597
and is absent otherwise, in the UI path and the headless path.
598-
11. Hover toolbar: download saves the still or clip; duplicate inserts after
598+
11. Hover toolbar: download saves the still or clip. Duplicate inserts after
599599
the source with script links dropped and `duration_source: "manual"`;
600600
delete asks once.
601-
12. Entity names in a card's action render as chips; a shot with dialogue shows
601+
12. Entity names in a card's action render as chips. A shot with dialogue shows
602602
the filled icon.
603603
13. "~M:SS remaining" appears only when a duration was measured for that model
604604
and kind.
@@ -607,13 +607,13 @@ tests on the store and hooks, not on the parsers. The
607607
read-only on a linked board and the ERT chip toggles `duration_source`.
608608
15. Flip, image-editor edits and uploads each add a version, never overwrite;
609609
upload selects the new version.
610-
16. PDF, DOCX and FDX uploads land as text through the extraction route; a
610+
16. PDF, DOCX and FDX uploads land as text through the extraction route. A
611611
scanned PDF and a malformed file write nothing and show the § 8.2 notice.
612-
17. A CSV missing `scene` or `description` is refused naming the header; a
613-
multiline quoted dialogue cell imports intact; an invalid duration and an
612+
17. A CSV missing `scene` or `description` is refused naming the header. A
613+
multiline quoted dialogue cell imports intact. An invalid duration and an
614614
unknown vocabulary value import with the field unset and appear in the
615615
report.
616-
18. A board closed during a batch shows the landed versions on reopen; failed
616+
18. A board closed during a batch shows the landed versions on reopen. Failed
617617
shots show Retry and `Retry N failed` retries only those.
618618
19. Every criterion above that is a document operation also passes when driven
619619
through the § 10 tools during setup and on the board.
@@ -627,7 +627,7 @@ tests on the store and hooks, not on the parsers. The
627627
genre, scenes and lighting, ordering operations in the store, `shot-prompt`
628628
module wired into `useGenerateShot` and the headless render tools, render
629629
record on enqueue and land, `isVersionStale`, `setStylePreset`,
630-
`duplicateShot`, tool additions in § 10. No UI change. Ships alone; the
630+
`duplicateShot`, tool additions in § 10. No UI change. Ships alone. The
631631
board already benefits from prompt composition.
632632
- **P2 — Setup flow.** Entry cards, stepper, inspiration chips, genre grid,
633633
Direct with stage transitions, review view, aspect select, preset tiles from
@@ -648,13 +648,13 @@ P2 and P3 are independent after P1. P4 depends on P3's card footer.
648648

649649
- **R1 — Director quality with scenes.** Asking for scenes and shots in one
650650
structured call may lower shot quality. Evaluate on the shipped example
651-
briefs before P2; fall back to two calls (scenes, then shots per scene).
651+
briefs before P2. Fall back to two calls (scenes, then shots per scene).
652652
- **R2 — Inspector removal.** Creators work in the docked inspector today. The
653653
dialog must reach parity (script panel, cost line, entity chips, duration
654654
toggle) before P4 removes fields.
655655
- **R3 — Prompt change alters existing renders.** § 7.5 adds lens, angle and
656656
lighting to every still prompt, so a regenerate after P1 differs from before.
657-
Acceptable; the render record makes the difference visible as stale.
657+
Acceptable. The render record makes the difference visible as stale.
658658
- **R4 — Batch reattachment.** Criterion 18 depends on the generation store
659659
reconciling by job id on open. If today's overlay only tracks in-memory
660660
jobs, P3 adds the persisted pending-job list.

0 commit comments

Comments
 (0)