Publish milestones 10-21 and assistant panel polish - #11
Merged
Merged
Conversation
- CutTimeline value type: split, canCut, elapsed/source mapping, gaps, boundary times, normalization, track visibility flags - EditorState region helpers delegate to CutTimeline without behavior change; splitVideoRegion(atTime:) and clearVideoCuts() added - 21 CutTimelineTests, written first
IconButton with hand.point.up.left before the zoom controls, enabled by CutTimeline.canCut(at:) at the playhead, splits without moving playback
- TimelineView+CutTrack.swift hosts the slice views (moved unchanged from the Screen track) plus dimmed gap bands - Screen track shows a plain non-interactive bar while cuts exist - Track gated by EditorState.showCutTrack in sidebar, content, height
- SyncedPlayerController.gapSkipDecision pure function (tested first), skipsGaps flag, boundary observer at slice ends, removed in teardown - togglePlayPause seeks into the next slice from a gap in edit mode - Preview hides the screen in gaps whenever cuts exist
- Video region history entries read Cut added / removed / adjusted - Restored and loaded regions pass through CutTimeline.normalized() - HistoryChangeRulesTests written first
- EditorState.exportVideoRegions / exportTrimRange extracted and pinned - ExportConfiguration.outputDirectory (seam S3) honored by the compositor through FileManager.saveURL(for:extension:in:)
…s-cut # Conflicts: # planning/upstream-sync.md
- EditorStateVideoRegionsTests and EditorStatePlaybackTests pin split, clear, normalized restore, undo/redo, gap handling on the 2 s fixture - docs/editor.md and AGENTS.md describe keep-slices and the Cuts track
ExportPipelineTests run only with REFRAMED_RUN_EXPORT_TESTS=1 and verify that two kept slices export to a one-second file into outputDirectory
Introduce TimelineGeometry, a pure value type built from a CutTimeline, a width and a TimelineDisplayMode, that owns every time-to-x mapping in the editor timeline: x(forSource:), sourceTime(forX:), visibleDuration, pieces(forRegion:end:) and rulerInterval(zoom:). In source mode the mapping is the old time / totalSeconds * width expression, so existing layout is unchanged; in compressed mode gaps collapse to zero width, the ruler labels the kept duration, and a scrub that lands on a cut marker resolves to the next slice start. Route the ruler, playhead, screen, cuts, camera, spotlight, audio and zoom tracks through one xPosition(forSource:width:) / sourceTime(forX:width:) pair on TimelineView. Waveforms drop samples that fall in a gap, and regions that span a cut show a marker per piece via the reusable RegionCutMarkers view. In compressed mode the Cuts track keeps its edge drags and re-flows the timeline live while dragging; body moves, double-clicks, drags and popovers on every other track are disabled. Add a transport-bar toggle next to the cut button, visible only while the Cuts track is shown, and reset the mode to source when the track disappears. Covered by TimelineGeometryTests.
…e and history wiring
…k editing, drop missing files on open
…m store with sidecar cache
…dio tab, Audio tab enabled without captured audio
One circular send/stop control inside the composer, humanized tool rows with activity and failure states, shared notice rows, and shaped backgrounds instead of clipping so symbol icons keep their colors in both appearances. Claude-Session: https://claude.ai/code/session_013meKgH6fwL3QzP6Tzej4p8
mattwebhub
added a commit
that referenced
this pull request
Sep 10, 2026
Publish milestones 10-21 and assistant panel polish
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Publishes the local development line since the fork foundation: milestones 10 through 21 plus the assistant panel polish.
<team id>,<app id>and<toone-repo>placeholders.Verification
make format,make lint, warning-freemake build.make test: 818 tests in 100 suites pass on the tip.planning/milestones/*/VERIFY.md; manual interaction rows remain open there.Notes
mainand will need a rebase after this merges.https://claude.ai/code/session_013meKgH6fwL3QzP6Tzej4p8