Skip to content

fix(editor): harden timeline playback and export - #25

Draft
lightninglu10 wants to merge 18 commits into
mainfrom
v1-editor-hardening
Draft

fix(editor): harden timeline playback and export#25
lightninglu10 wants to merge 18 commits into
mainfrom
v1-editor-hardening

Conversation

@lightninglu10

@lightninglu10lightninglu10 commented Aug 27, 2026

Copy link
Copy Markdown

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 4f64f8e44dd741e1c48fc42023116db9c62747fe passed 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

Exact-head interaction workflow

Active voiceover guardRazor split and Ripple Delete
Mic recording remains activeRipple Delete closes the gap

@lightninglu10

Copy link
Copy Markdown
Author

Exact-head QA — PASS

Verified commit 86bb52682419f6f2d5b8fd82c96b5a42dbca3e65 from the clean v1-editor-hardening worktree.

  • Real-browser timeline-body click committed frame 102, canceled the queued marquee-preview callback, stayed paused, and did not restore the stale preview on the next animation frame.
  • Seven changed test files passed 43/43 tests under Node 22.
  • Full test suite passed 4,796 tests; build, changed-code health, architecture gates, changed-file formatting, and portable headless editing passed.
  • No page errors or failed requests were observed. The only browser warning was the expected missing-GPU-adapter warning in headless Chromium.

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.

@lightninglu10
lightninglu10 marked this pull request as ready for review August 27, 2026 02:10
@codepress-reviewer-dev

Copy link
Copy Markdown

Starting initial review of 86bb5268 from baseline 4d62e808... 👀

View automation run

@codepress-reviewer-devcodepress-reviewer-devBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • Critical — timeline clicks can finalize an active voiceover take.handleTimelineClickCapture still 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 with isMicRecordingActive(...) before it mutates playback, and add an integration-level TimelineContent click 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.

View automation run

@codepress-reviewer-dev

Copy link
Copy Markdown

Review head 86bb52682419f6f2d5b8fd82c96b5a42dbca3e65; round 1; 17 reviewed file(s), 0 pending/skipped file(s). 2 subsystem record(s) retained; 0 omitted.

View automation run

@lightninglu10
lightninglu10 marked this pull request as draft August 27, 2026 02:26
@lightninglu10

Copy link
Copy Markdown
Author

Exact-head QA — PASS

Verified commit 4f64f8e44dd741e1c48fc42023116db9c62747fe from the clean v1-editor-hardening worktree with real Playwright Chromium.

  • Active microphone take, both recording and paused: clip and empty-track clicks caused no pause, seek, preview mutation, or take finalization.
  • After cancel/reset: normal clip preview commit and empty-track click-to-seek worked.
  • Razor split and contiguous Ripple Delete worked through the real UI.
  • Console errors: 0; page errors: 0; failed requests: 0; Invalid source position: 0; stale skim overlay: 0.
  • Focused verification: 8 files / 119 tests passed. npm run check and npm run build passed.

Full QA report · Artifact manifest · Full-quality video

Exact-head interaction workflow

Active voiceover click guardNormal empty-track seek
Mic recording remains activeNormal click seeks
Razor splitContiguous Ripple Delete
Razor splitRipple Delete closes the gap

@lightninglu10lightninglu10 self-assigned this Aug 27, 2026
@lightninglu10
lightninglu10 marked this pull request as ready for review August 27, 2026 05:25
@lightninglu10
lightninglu10 marked this pull request as draft August 27, 2026 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@lightninglu10