Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 68 additions & 1 deletion technical-documentation/testing/manual-e2e-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This checklist covers the real desktop capture-to-export path: the parts that un

Sections marked **v1.8.0** cover what that release changed: chat-driven editing through the agent tool set, clip-anchored modifiers, local transcription, the macOS Metal compositor, and the new effect controls.

Sections marked **post-1.10.0** cover what has landed on `main` since the v1.10.0 tag: the AI camera background, the caption anchor model, pixel-resolution crop, editor window bounds, update settings, and the Windows recording encoder and AAC changes. Run the whole file for a release candidate; the marked sections are the ones with no prior release to fall back on.
Sections marked **post-1.10.0** cover what has landed on `main` since the v1.10.0 tag: the AI camera background, the caption anchor model, pixel-resolution crop, editor window bounds, update settings, the Windows recording encoder and AAC changes, **imported audio and voice-over recording**, and **transcript word editing with word insertion**. Run the whole file for a release candidate; the marked sections are the ones with no prior release to fall back on.

## How to run this

Expand Down Expand Up @@ -196,6 +196,41 @@ Zoom, speed, annotation, and full-camera regions are stored against a clip in th
- [ ] Zoom and pan the timeline and confirm each pill's span still matches the time at which its effect fires in the preview.
- [ ] Export a short range that covers a reordered clip and a trim, and confirm the exported frames agree with the preview about where each modifier fires.

## Imported audio and voice-over β€” post-1.10.0

Audio is a **clip-anchored** region on its own lanes, not a free-floating pill: a track travels
with the clip it was placed over through reorder, trim and delete. One user-visible track can be
stored as several fragments (one per clip it covers) that share a `trackId`; the lane draws them
as one pill, and each fragment's `offsetMs` is advanced so a bed spanning a cut does not restart
at the boundary. Most defects in this area are that seam, so prefer a project with **at least two
clips** and place a track across the junction.

Two things here cannot be judged from the preview alone and need an exported file: the mix and
the fades. Export and probe.

- [ ] Import an audio file and confirm it appears as a pill on an audio lane with a waveform, and that a clip lane above is unchanged.
- [ ] Confirm the pill's label names the imported file rather than the project or the primary asset.
- [ ] Play the project and confirm the imported audio is heard **over** the recording rather than replacing it.
- [ ] Open the track's inspector and confirm gain, fade-in, fade-out, loop and mute controls are present.
- [ ] Change the gain and confirm the change is audible in the preview; export and confirm the same level in the file.
- [ ] Mute the track, confirm silence in the preview, and confirm the exported file has that track absent rather than merely quiet.
- [ ] Set a fade-in and a fade-out, then **export and inspect the waveform of the result** β€” the ramps must be at the track's own edges. A fade timed to the end of the programme instead of the end of the track is the specific defect here.
- [ ] Place a track that runs **past the end of the programme** and export: confirm it is cut off at the last frame and that its fade-out is not pulled forward to the truncation point.
- [ ] Enable loop on a track shorter than its span and confirm it repeats to fill the span, in the preview and in the export.
- [ ] Drag a track across a clip boundary and confirm it plays continuously across the junction, with no restart or click at the seam.
- [ ] Reorder the clips underneath a track and confirm the track follows the clip it was placed over rather than staying at its ruler position.
- [ ] Trim away a stretch the track sits over and confirm the track is silent through the cut while its own clock keeps running β€” the words after the cut must land on the picture they belong to.
- [ ] Put a speed region under a track and confirm the track is **not** time-stretched with the picture, and that it still starts where it did.
- [ ] Delete the clip a track is anchored to and confirm the track goes with it rather than being left pointing at nothing.
- [ ] Drag a pill's edge and confirm the **ghost** of the rest of the file is drawn around it, and that the edge stops at the file's bounds instead of running past them.
- [ ] While dragging an edge, confirm the readout shows `in β†’ out / length` and that the numbers move with the drag.
- [ ] Hold `Alt` and drag a pill's body: confirm the media slides **inside** a span that does not move, and that the rate follows the file rather than the timeline β€” a four-minute bed must be traversable without dragging four minutes of ruler.
- [ ] Focus an audio pill and press `Space`: confirm it selects the pill **without** also toggling playback.
- [ ] Record a voice-over against the timeline and confirm the timeline's own audio is silenced for the take, then audible again afterwards.
- [ ] Confirm the recorded take lands on the voiceover lane at the playhead and plays back.
- [ ] **Restart the app, reopen the project, and confirm the imported audio still loads.** Approval to read a file outside the recordings directory is granted by the picker for the session and by the project on load; if that second grant regressed, the waveform is empty and the track is silent only after a restart, which is why this check has to follow one.
- [ ] Ask the assistant to add a music bed and confirm it places one on the correct lane; ask it to remove it and confirm the pill and its asset both go.

## Transcript and captions

- [ ] With no transcript, confirm the pane offers a transcribe action instead of showing an empty editor.
Expand Down Expand Up @@ -244,6 +279,38 @@ Captions are placed by an **anchor and a margin**, not by an invisible band: `an
- [ ] Open a project saved before this change and confirm its captions land where they did, with `insetX` migrated rather than reset.
- [ ] Play across a zoom with captions on and confirm the captions do not scale or drift with the zoom, in the preview and in the export.

### Transcript word editing and insertion β€” post-1.10.0

Three gestures on the word stream: **double-click** corrects a word, **Backspace** cuts it from
the film, and **typing between two words** adds one. The third is DEV-ONLY and must be absent
from a packaged build β€” see the gate check at the end of this section, and run it against a
packaged build, not a dev one.

An added word is **a clip**, not a pause: the clip it lands in is cut in two and a generated clip
goes between the halves, on its own asset with its own file. Until there is TTS that file is a
**test pattern over noise** β€” deliberately unmistakable, because a held frame is indistinguishable
from a decoder stuck at the end of a clip. So "the picture froze" is not a pass here: the mire
must be visible, and at the insertion point rather than at the end of the clip.

- [ ] Double-click a transcribed word, type a correction, commit it, and confirm the word changes in the pane and in the captions.
- [ ] Confirm the correction survives re-transcribing the same asset, with the same timings.
- [ ] Place the caret between two words, type, and confirm an **amber clip** appears on the timeline at that moment β€” not at the end of the clip.
- [ ] Play across it and confirm the mire is on screen for the inserted stretch and the noise is audible, then the recording resumes exactly where it stopped.
- [ ] Confirm the words **after** the insertion still line up with the picture: scrub to a later word and confirm the playhead lands on it, and that its caption appears at that moment and not earlier.
- [ ] Confirm the inserted text gets a caption line **of its own**, over its own media, rather than being glued to the line before it.
- [ ] Double-click the inserted word and make the text **longer**: confirm the amber clip grows and the film grows with it.
- [ ] Make the text **shorter** and confirm the clip shrinks back β€” both directions, not only the one that is easy to see.
- [ ] Delete the inserted word from the transcript and confirm the clip is one clip again, at its original length, with the recording continuous across the join.
- [ ] Insert again, then **drag the amber clip elsewhere on the timeline** and confirm the two halves rejoin behind it, exactly as deleting it does.
- [ ] Zoom out until the amber clip is a few pixels wide, select it, and confirm its edit and delete controls appear beside the clip rather than being clipped away inside it.
- [ ] Confirm the amber clip behaves as an ordinary clip: it can be selected, moved, cropped and deleted from the timeline, and deleting it there removes the word from the transcript too.
- [ ] Export a project containing an insertion and confirm the mire and its noise are in the exported file at the right moment and for the right duration.
- [ ] On the **voice-over** lane, insert a word into a take: confirm the take splits, the generated audio plays between the halves, and the take's later content moves later by that much.
- [ ] Confirm that insertion did **not** lengthen the film β€” the clips decide the length, and a take pushed past the last frame is clamped at export.
- [ ] Insert a word into the **film** while a take is laid over it, and confirm the take's own span is unchanged: it keeps talking against a picture that has slid.
- [ ] Ask the assistant to correct a misheard name and confirm it does; ask it to rewrite an **inserted** word and confirm it refuses with a reason rather than resizing generated media.
- [ ] **Against a packaged build**: confirm typing between two words does nothing, that double-clicking an amber word does not open an editor, and that the transcript hint does not advertise adding words. Correcting an ordinary word must still work β€” that one ships.

## AI chat and providers β€” requires a configured provider

- [ ] Open the chat panel with the top-bar control identified by its `aria-label` and confirm the chat surface appears.
Expand Down
Loading