Skip to content

Publish milestones 10-21 and assistant panel polish - #11

Merged
mattwebhub merged 140 commits into
mainfrom
webcam-presentation-and-review
Sep 10, 2026
Merged

mattwebhub merged 140 commits into
mainfrom
webcam-presentation-and-review

Conversation

@mattwebhub

Copy link
Copy Markdown
Owner

Summary

Publishes the local development line since the fork foundation: milestones 10 through 21 plus the assistant panel polish.

  • Webcam presentation: circular defaults, animated focus regions, split layouts, voice and spoken context.
  • Caption typography and colors, permission recovery, public presentation assets and documentation.
  • Area effects, microphone removal, speed regions with screen-only timing, assistant recovery.
  • Vector tray, direct-release foundation with signed appcast metadata, App Store foundation and sandboxed target.
  • Sandboxed agent runtimes for the Store edition, provider sign-in, automatic CLI updates for the direct edition (ADR 0020, ADR 0021).
  • Assistant panel: one circular send/stop control, humanized tool rows, shared notice rows, symbol icons keep their colors in both appearances.
  • Owner identifiers and local paths are kept out of the tree; planning docs use <team id>, <app id> and <toone-repo> placeholders.

Verification

  • make format, make lint, warning-free make build.
  • make test: 818 tests in 100 suites pass on the tip.
  • Gated export, presentation-scenario, shim and live-provider checks are recorded per milestone under planning/milestones/*/VERIFY.md; manual interaction rows remain open there.

Notes

https://claude.ai/code/session_013meKgH6fwL3QzP6Tzej4p8

- 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.
…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
mattwebhub merged commit 14f5f3c into main Sep 10, 2026
1 check passed
mattwebhub added a commit that referenced this pull request Sep 10, 2026
Publish milestones 10-21 and assistant panel polish
Sign up for free to 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