Uh oh!
There was an error while loading. Please reload this page.
fix(editor): harden timeline playback and export - #25
Conversation
lightninglu10
commented
Aug 27, 2026
Exact-head QA — PASSVerified commit
Repository-wide unused-export and formatting scans still contain known baseline findings outside this PR's changed paths; no new changed-path finding was introduced. Evidence: pointer workflow, before click, settled committed frame. |
Starting initial review of |
There was a problem hiding this comment.
Findings
Critical — timeline clicks can finalize an active voiceover take.
handleTimelineClickCapturestill runs before the new mic-aware bubble handlers, and it unconditionally pauses playback. The recording controller interprets that external pause as a request to finalize an active take. As a result, clicking a clip or empty track during recording can stop the take; the later mic guard only prevents its own handler from seeking. Please gate the capture handler withisMicRecordingActive(...)before it mutates playback, and add an integration-levelTimelineContentclick test while recording.Warning — consider splitting future changes by behavior. The selected-sequence export binding, preview-worker sample ownership, timeline playback behavior, and paste-placement changes are independently landable. Splitting those into focused PRs would make validation and rollback clearer; this is not a merge blocker for the current correction.
The overall ownership model is otherwise appropriate: the mic-recording controller should remain the authority for recording lifecycle, while timeline input handlers must decline transport mutations during an active take.
Reviewed `4d62e808`...`86bb5268`. Diff collection and GitHub posting were handled by the automation.Review head |
lightninglu10
commented
Aug 27, 2026
Exact-head QA — PASSVerified commit
Full QA report · Artifact manifest · Full-quality video
|





Summary
This hardens the editing loop behind CodePress-hosted FreeCut: timeline body clicks seek where users click, adjacent timeline edits ripple without accidental dead space, Split/Razor is discoverable from the UI and keyboard, linked clips paste as a rigid group, and frame stepping includes the final frame.
It also fixes the reported playback and export failures. Stale media-skim overlays are cleared before playback and across host remounts, decoder sample ownership is safe, direct export renders the selected sequence through its final frame, and the export source remains bound to the authoritative composition snapshot.
Verification
Exact head
4f64f8e44dd741e1c48fc42023116db9c62747fepassed fresh real-browser QA. Active microphone recording and paused takes ignored clip and empty-track transport mutations; after cancel/reset, normal preview commit and click-to-seek worked. Razor split and contiguous Ripple Delete also passed through the real UI, with zero console/page errors, failed requests,Invalid source position, or stale skim overlays.The focused suite passed 119 tests across eight files.
npm run check,npm run build, CI, and all seven repository push gates pass. Final independent code review is pending, so the PR remains draft.Full QA report · Artifact manifest · Full-quality video
Demo