Skip to content

v2.1.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@EtienneLescot EtienneLescot released this 15 Oct 13:13

Changes since v2.0.0

  • feat(website): show a live demo in the hero
  • fix(website): smooth docking and align the responsive preview
  • fix(website): keep framing aligned during pane transitions
  • style(website): give the timeline tool palette more room
  • feat(website): announce v2 above the new homepage promise
  • fix(website): announce that OpenScreen v2 is here
  • fix(website): stabilize preview resizing and timeline spacing
  • style(website): announce v2 with a compact hero badge
  • style(website): remove the clipped preview glow
  • style(website): cap the editor and footage width
  • fix(website): retain larger footage at its natural ratio
  • style(website): give the homepage introduction more room
  • feat(website): detect the platform for direct downloads
  • perf(website): serve responsive wallpapers from Cloudflare R2
  • style(website): update the demo headline and translations
  • docs(testing): log the v2.0.0-rc.15 computer-use e2e pass
  • docs(testing): link the rc.15 defects to their issues
  • docs: add missing third-party notices
  • docs: limit the Recordly notice to the code taken from it
  • docs: drop the upstream link from the Recordly notice
  • fix(preview): hold the webcam's last frame when a clip is entered past its end
  • fix(record): keep the Camera row off when no camera can be opened
  • fix(record): run one camera check for a double click
  • ci: start release notes at the previous stable tag, by SemVer
  • fix(editor): keep Edit clip's Apply in view and its edit through a backdrop click
  • fix(timeline): copy anchored modifiers onto a duplicated clip
  • fix(editor): close top-bar menus on a click on the empty bar
  • fix: close menus on Escape and hand focus back to their trigger
  • fix(transcript): keep a skipped word's restore control beside it
  • fix(transcript): let Ctrl/Cmd+Z in the transcript undo a cut
  • fix(editor): draw the Edit clip menu above the timeline
  • fix(ui): open a tooltip on keyboard focus, not on any focus
  • fix(export): stop an MP4 export between frames, publish only a finished file
  • fix(export): enable Cancel during an MP4 export (#1014)
  • docs: describe MP4 export cancellation and its manual check
  • fix(audio): keep each take on its own clips through a clip edit (#1011)
  • fix(audio): relabel a joined clip's takes without re-cutting them (#1011)
  • fix(timeline): keep a dragged region whole when it repels (#1008)
  • fix(timeline): keep a boundary piece that rounds to a whole millisecond
  • fix(hud): keep the HUD's size while it is dragged at fractional scaling (#1004)
  • fix(hud): refuse an empty size from the renderer
  • fix(preview): stop the free-run at the end of the programme (#997)
  • fix(preview): hold the last clip's own last frame, not the first one its cut removed
  • test(preview): check the view played up to the last clip's end
  • fix(timeline): edit one region of a merged pill, not the whole pill (#1017)
  • fix(timeline): keep a 1 ms overlap in one edit group; refresh the consumer table's line refs
  • feat(mcp): checkpoints to revert a whole agent turn in one step
  • docs(mcp): list restoreCheckpoint among the destructive tools
  • fix(transcript): refuse every native edit the block does not handle (#1038)
  • fix(hud): arrow-key navigation in the language menu (#1015)
  • fix(ai-edition): fan speed and Full Camera regions out to both halves of an insertion (#1037)
  • fix(chat): close the reasoning menu and model quick-pick on Escape (#1039)
  • fix: leave Escape to the rewind confirmation over the model quick-pick
  • fix(record): never record a microphone the OS does not list (#995)
  • fix(record): let a second click during the microphone check take the first back
  • fix(record): drop a pending microphone turn-on once the take starts
  • fix(mac): count the HUD timer from the helper's first frame (#901)
  • docs(stt): record why transcript cuts are not snapped to quiet points (#1023)
  • feat(timeline): measure zoom transition windows on the timeline (#1028)
  • feat(ai-edition): tell the agent and MCP clients where zoom transitions are (#1028)
  • fix(ai-edition): measure a trim without clipId on every clip of its asset; say speed scales the move both ways
  • fix(windows): keep the screen video on the clock when the writer misses ticks (#945)
  • fix(windows): give the screen and webcam clocks one origin per tick
  • fix(gif): build the same palette for the same frame (#952)
  • perf(gif): prune the nearest-colour search on a red-sorted palette (#952)
  • perf(gif): map and LZW-encode frames on a worker pool (#952)
  • docs(perf): record where GIF export time went (#952)
  • fix(gif): bound frames submitted but not yet written
  • feat(timeline): draw each zoom's move-in and move-out as trails (#1028)
  • fix(editor): name the inspector's icon controls in the shared tooltip
  • chore: bump nix package to v2.0.0
  • feat(timeline): show and report the pan between chained zooms (#1028)
  • feat(stt): pass a prompt field to whisper as its initial prompt
  • feat(transcription): per-project names and terms for Whisper
  • test: declare the names and terms save in the write audit
  • fix(stt): frame the names and terms as a glossary prompt
  • fix(media): save the terms on the latest document, regenerate after the save
  • fix(media): regenerate only after the terms saved
  • fix(preview): stop Chromium decoding a soundless recording's picture
  • fix(preview): end a wall-clock element whose duration arrives late
  • ci(nix): build PRs that touch the PipeWire and whisper sources, and assert the libEGL rpath
  • feat(timeline): flag zoom moves a clip junction cuts (#1028)
  • fix(compositor): keep Full Camera full across a trim inside it
  • fix(capture): enumerate screens and windows in separate calls on X11
  • ci(nix): require every sources attempt to report a display
  • ci(release): refresh the Nix npm hash in the version-bump commit
  • ci(release): run the hash refresh from the dispatched ref
  • fix: #966
  • docs(macos): say a picker capture leaves out every OpenScreen window
  • fix(agent): preserve recorded cursor visibility
  • docs(agent): name visible:false in the getCursorTrack tool description
  • fix(macos): say when a restart discarded the take and drop the empty file a failed start leaves
  • fix(i18n): translate the failed-restart toast
  • test(macos): cover the empty-file cleanup after a failed start
  • fix(i18n): polish Simplified Chinese tooltips
  • fix(i18n): keep control names in zh-CN icon tooltips
  • docs(i18n): match zh-CN docs to the renamed app labels
  • fix(linux): respect an explicit Ozone display backend
  • refactor(linux): share the Wayland session check with source enumeration
  • fix(stt): preserve media-clock audio offsets
  • feat(cursor): add Glass Lens, a glass cursor that refracts the picture in 2D and 3D
  • test(cursor): count Glass Lens in the theme picker, and document glass cursors
  • docs(cursor): add the compositor's Glass Lens renders
  • docs(perf): record the shader and background-cache fixes on a Mac mini M1
  • fix(nix): use wrapped Electron in dev shell
  • fix(nix): point the dev shell at bin/ on every system
  • test(compositor): share the D3D11 render-test harness
  • test(compositor): silence the unused re-export in the shared harness
  • build: ship the third-party licence texts in the installers
  • fix(build): read a crate's license-file and fail when cargo cannot list the crates
  • fix(linux): retry PipeWire capture with shared memory
  • fix(linux): only fail video sessions on early stream errors
  • fix(linux): fail cursor-only sessions on errors before streaming
  • fix(cli): let the Linux portal select recording sources
  • fix(cli): log that the portal picks the source and --display/--window do not apply
  • feat(linux): add standard AppImage update metadata
  • feat(workbench): keep versioned measurements and offline replay
  • fix(workbench): bind the replay sample to its standalone source
  • fix(workbench): reject transport failures and keep compare weights honest
  • fix(workbench): keep compare identity request-bound
  • fix(workbench): hash the request contract once for compare identity
  • fix(workbench): share the judge budget and hash transport once
  • fix(workbench): bind retry evidence, fingerprints, and Chat model identity
  • test(workbench): regenerate the transport-bound scripted control
  • fix(workbench): keep pre-round retry failures in attempt evidence
  • test(workbench): retie the scripted control to the retry-evidence fix
  • fix(workbench): adopt only the retained attempt cassette
  • test(workbench): retie the scripted control to the retained-attempt fix
  • fix(workbench): score undecided repetitions and compare fractional trials correctly
  • fix(workbench): attribute judge evidence correctly
  • fix(workbench): scan decoded Responses requests before adoption
  • test(workbench): regenerate the scripted control on the final source tree
  • fix(workbench): inspect response evidence before adoption
  • fix(workbench): validate fingerprints and judge evidence
  • perf(workbench): capture the judge source identity once per invocation
  • docs(workbench): say the scripted control only replays on its own source tree
  • docs(ai-edition): note maxRetries only reaches the OpenAI-compatible model
  • feat(ai): persist Agent chat sessions per project
  • fix(ai): queue chat history writes off the main thread
  • docs(ai): describe persisted Agent chat sessions
  • fix(ai): keep a deleted project's chat out of the cache until its file is gone
  • fix(linux): remove libfuse2 dependency from AppImage runtime
  • fix(recording): refuse to start a take on a nearly full disk
  • feat(recording): let the recordings folder be changed
  • feat(editor): choose the recordings folder in Record mode
  • fix(recording): keep earlier takes reachable after a folder change
  • feat(cursor): play a click sound on every recorded click
  • click sound: answer the two review findings
  • click sound: drop stopped hits, and preview only what the edit plays
  • click sound: scope the preview's cues to the clip on screen
  • click sound: test the preview against the clip it is crossing
  • fix(export): drop an export the dialog closed while the click sound was read
  • fix(cursor): find the click samples in installers and mute them with the cursor
  • docs: credit the click sounds in the notices' current format
  • fix(cursor): stop the click volume where the export limiter does
  • fix(cursor): stage the click samples once when two callers ask together
  • feat: remove selected filler words by transcript ID
  • fix(agent): preserve zoom transition warnings in filler cuts
  • feat(agent): generalize filler removal into removeWords
  • fix(recording): say when a Restart lost the take on Windows and Linux too
  • fix(audio): decode every audio stream on the media clock for peaks and STT
  • fix(stt): kill the audio stream probe when extraction is aborted
  • test(compositor): measure the Glass Lens refraction as an edge shift
  • feat(mcp): let MCP clients read and edit every project, not only the open one
  • fix(mcp): compare the whole project file before saving an MCP edit to it
  • fix(mcp): make closed-project edits atomic and undoable
  • fix(mcp): count the open-file dialog's read of a project file
  • fix(mcp): read a named project before asking the editor about it
  • docs(mcp): describe the read-first routing and the open-file dialog gap
  • fix(macos): record without the microphone when macOS lists no audio input
  • test(compositor): fix two local-only D3D11 render tests
  • fix(editor): never save back a project's own file from the open dialog
  • fix(nix): ship every public asset, cursors included, by pointing public/ at dist/
  • feat(build): add pure Windows helper arch-resolution module
  • feat(build): make Windows WGC helper build arch-aware (x64/arm64, native+cross)
  • feat(build): add build:win:arm64 and build:native:win:arm64 scripts
  • build: include arch in Windows installer filename to avoid x64/arm64 collision
  • ci: build Windows x64 and arm64 installers via matrix
  • docs: document Windows arm64 native helper build and installer
  • fix(build): wipe WGC build dir on target-arch change to prevent stale-compiler wrong-arch binaries
  • ci: fetch win32-arm64 sharp prebuilt for arm64 packaging (non-fatal)
  • fix(build): check the Windows native payload for the target arch
  • feat(build): build the D3D11 compositor addon for the target arch
  • feat(build): stage the Visual C++ runtime for the target arch
  • build(deps): electron-builder 26.16.1 — fixes the arm64 NSIS installer
  • fix(stt): fall back to the x64 whisper helper on Windows on ARM
  • fix(test): run the WGC smoke tests against the host's own helper
  • feat(build): build the whisper helper natively for Windows on ARM
  • fix(build): refuse --arch without a value instead of building for the host
  • fix(build): keep argument boundaries in the whisper VS environment wrapper
  • ci: build the Windows arm64 installer natively and publish one update feed for both arches
  • build(nix): update npmDepsHash for the electron-builder bump
  • style: apply Biome formatting to the Windows helper scripts
  • fix(build): ship the x64 OpenMP runtime with the arm64 installer's whisper fallback
  • fix(wgc): build the BGRA to NV12 converter without SSE2 on ARM64
  • fix(build): check every shipped Windows binary's architecture, and refuse a partial x64 whisper fallback
  • fix(build): generate the third-party licences in build:win:arm64
  • ci: drop the caption-assets cache, nothing in the Windows job fills it
  • fix(website): keep the Windows download on the x64 installer
  • docs: describe the per-arch Windows installers and CI artifacts
  • feat(edit-clip): scrub the clip to frame the crop
  • fix(edit-clip): seek the preview to the playhead once metadata loads
  • docs: recommend udev rule for Wayland mouse click capture (#1084)
  • Update installation.md with udev rule clarification
  • docs: Use 'getfacl /dev/input/event*' instead of 'getfacl /dev/input/by-id/mouse' #copilot
  • docs(i18n): carry the udev rule for Wayland clicks into every locale
  • fix(pipewire-capture): name the udev rule in the click-capture warning
  • docs: say keystrokes are ignored, not unread, by Wayland click capture
  • docs(i18n): carry the click-capture scope wording into every locale
  • docs: promise the udev rule keeps the keyboard out, not every key code
  • docs(i18n): carry the keyboard wording into every locale
  • docs: recommend the udev rule wherever Wayland clicks are mentioned
  • docs(i18n): carry the udev rule recommendation into every locale
  • docs: add a security policy pointing to private vulnerability reporting
  • docs: adopt the Contributor Covenant 2.1 code of conduct
  • docs: use the project address for conduct reports and pin support to the latest stable release
  • docs(faq): explain why a quit-on-close utility can quit OpenScreen on macOS
  • docs(readme): point macOS users whose OpenScreen quits to the FAQ entry
  • docs: add the Product Hunt launch badge to the README and the homepage
  • docs(website): show the Product Hunt badge next to the download button
  • docs(website): match the Product Hunt badge to the download button height, light theme
  • docs: document the Windows 10 workaround for an unclickable recording bar
  • docs(website): translate the Windows 10 recording-bar FAQ entry
  • fix: skip the HUD's content protection on Windows before 11 22H2
  • docs: unset the protection flag before the Windows capture-exclusion check
  • fix(website): let links to our own repo send the referrer, so GitHub credits the site
  • feat(mcp): openscreen mcp, the editing tools plus record, export and frames on stdio
  • feat(mcp): setPointerTrack, so a take driven by a script gets a cursor and its zooms
  • docs: the openscreen-demo skill, and how to let an agent make the whole video
  • fix(mcp): fail a crashed runner instead of hanging, and close finished runners
  • fix(mcp): claim a take before stopping it, and apply pointer tracks one at a time
  • fix(ai-edition): text like the editor's, sets that land where asked, and a format tool
  • feat(mcp): getFrames reads a project's export at ruler seconds
  • fix(mcp): read an export through the document it rendered
  • fix(mcp): keep an export record only when it matches its video
  • feat(ai-edition): let the agent set a zoom's 3D camera
  • docs: a pull request video recipe in the openscreen-demo skill
  • docs: show the #5 Product of the Day rank on the site and in the README
  • docs: one line to paste into Claude Code, and a skill that sets OpenScreen up
  • docs(skill): the macOS Accessibility permission that click zooms need
  • fix(website): point /discord at a permanent invite
  • add contributing for mac
  • fix(windows): preserve non-integer resampling continuity across packets
  • fix(recording): pick a webcam mode by frame rate before size
  • fix(recording): ask the webcam reader for the selected mode's frame rate
  • fix(homebrew): use symbol format for macOS dependency
  • fix(linux): give up when no first frame follows the portal picker
  • docs(testing): cover what landed since v2.0.0 in the e2e checklist, and run macOS unattended
  • docs(testing): run Apple's picker checks before the Screen Recording grant
  • fix(recording): let a webcam's MJPEG mode win when it is faster or sharper
  • fix(macos): resolve microphones Chromium labels with a transport suffix
  • fix(cursor): play click sounds for every clip of a recording
  • fix(windows): repeat the owed screen slots so a loaded writer catches up
  • fix(windows): keep a change skipped on a past slot pending for the live one
  • fix(hud): place toasts above the bar and let their close button take the click
  • fix(agent): fit a text annotation to its words in the shipped fonts, and refit it on a format change
  • fix(agent): state what a text too wide at the minimum size does
  • fix(agent): fall back to the estimate when a font's advances cannot be read
  • fix(audio): hold the export's true peak under -1 dBTP
  • fix(audio): re-check the true peak after the limiter's gain
  • docs(testing): log the macOS e2e pass on v2.1.0 build 38252812147
  • docs(testing): log the macOS re-run of the merged fixes on build 38309126813
  • fix(export): put the whole timeline on one frame grid
  • fix(recording): keep the Windows screen video on the audio's clock
  • fix(recording): stamp a legacy-path tick after its frame wait, and skip it while paused
  • fix(mcp): refuse stdio edits to a project open in the app's editor
  • fix(mcp): let only the editor that set the open-project marker clear it
  • fix(cli): give each CLI run its own Chromium session data
  • fix(cli): key CLI session folders by run, and judge a pid only in its own namespace
  • fix(mcp): say that minimized and hidden windows are not listed
  • fix(mcp): name the other desktops and full-screen apps in the hidden-window note
  • docs(mcp): stop promising a zoom on each recorded click
  • docs(mcp): say clicks share a zoom only when they are close on screen too
  • fix(timeline): stop a region dragged into an identical one flush against it
  • fix(ai-edition): refuse a set that runs into a look-alike region
  • fix(chat): format every message time where it is drawn
  • fix(chat): show a stored time that is no date as stored
  • fix(editor): open the highlighted project on Enter in the Open project dialog
  • fix(hud): put the bar back where it was dropped once a popover closes
  • docs(testing): log the v2.1.0 Windows e2e pass on build run 38252812147
  • docs(website): Discord as a pill beside GitHub in the header
  • fix(website): grow the editor captions' slot for longer translations
  • refactor(mcp): one source for MCP text, setPointerTrack through the runner
  • fix(mcp): report a failed sidecar write as a partial edit, document checkpoint eviction
  • docs(mcp): restoreCheckpoint has its own refusal while MCP edits is off
  • docs(testing): log the Windows re-run of the merged fixes on build run 38370716184
  • feat(mcp): forward openscreen mcp document calls to the running app
  • fix(mcp): let the app's answers carry documents above 10 MiB, document checkpoints not crossing over
  • docs(mcp): a lost createCheckpoint answer makes no local checkpoint
  • feat(mcp): serve the media tools from the in-app server
  • docs(mcp): one tool surface on both transports
  • fix(mcp): leave the user's recording settings as they were when an in-app take fails or the app quits
  • feat(agent): region tools set and read every zoom, annotation and audio setting
  • docs: region tools reach arrows, blurs, zoom settings and audio fades
  • feat(mcp): setEditorSettings and a settings block in getCurrentDocument
  • docs(mcp): document setEditorSettings and the settings read
  • fix(mcp): offer auto only while the timeline holds one composition, keep the current format writable
  • fix(mcp): refuse a camera crop and pan that place the framing in two spots
  • feat(mcp): rename a project, import and remove its media, create one
  • docs(mcp): the project and media tools, and why deleting a project is not one
  • fix(mcp): let the editor read an imported .oga, keep a created project's id when its checkpoint fails, check an existing video for private content
  • feat(mcp): export with the Export dialog's options, record the webcam and the system cursor
  • docs(mcp): the export and record options, on the site and in the skill
  • fix(cli): refuse --quality and --fps on a GIF export, as exportVideo does
  • fix(mcp): createProject links no webcam to a video from elsewhere
  • fix(mcp): say when device names need a permission, refuse GIF flags on an MP4
  • refactor(timeline): share the editor's insert-clip and crop writes as pure mutators
  • feat(mcp): insertClip, duplicateClip, addAutoZooms and per-clip crop
  • docs(mcp): describe the clip tools, and stop promising to split a clip
  • fix(mcp): name the duplicated clip by id, and give every asset on a file its cursor read
  • fix(timeline): apply a clip's range and crop in one pass
  • feat(mcp): transcribe an asset over MCP with the on-device Whisper
  • feat(mcp): read, style and translate the captions through the agent tools
  • feat(cli): openscreen captions writes a transcript and turns captions on
  • docs: captions, translation and transcription over MCP and in the CLI
  • docs(website): carry the captions and transcription changes into the translations
  • fix(mcp): caption a transcript only the legacy mirror holds, say transcribe waits for a same-language run
  • fix(mcp): read the project again when a waiting transcription starts
  • fix(mcp): run no Whisper for a project deleted while its transcription waited
  • docs(skill): record a narrated take with microphone: true
  • docs(mcp): say the captions live in getCaptions, not in the settings block
  • test(workbench): out-of-scope-styling asks for colour grading, which no tool reaches
  • fix(cli): captions writes nothing over a project saved while it transcribed
  • test(mcp): delete the project only once the waiting transcription has found it
  • fix(cli): captions writes beside the project and renames it over, after the check
  • fix(cli): captions replaces the real project file and keeps its permissions
  • fix(cli): captions creates its temp file exclusively
  • docs: a source dropped on the clip row is appended, there is no split-and-insert dialog
  • docs: say the clip row takes a video source; a dropped audio file goes on the audio lane
  • fix(mcp): send no quality with a GIF export
  • fix(windows): keep the recording bar always on top after a popover or dialog closes
  • fix(windows): put the bar back on top when the source picker closes
  • fix(export): a GIF that plays once carries no loop block
  • docs(testing): log the Windows MCP pass on main build run 38538195250
  • docs(testing): log the Windows MCP re-run on main build run 38564622152
  • fix(mcp): route every take start and stop through one recording-state setter
  • docs(testing): log the Windows pass of the in-app MCP server
  • ci(website): deploy the site to Cloudflare Workers instead of GitHub Pages
  • fix(website): format the wrangler configs, redirect www straight to https, refresh README notes
  • docs(testing): log a headless Linux pass under WSL on build run 38564622152
  • docs(testing): log the macOS e2e pass on main build run 38581408372
  • fix(linux): ship the shared ffmpeg CLI so native transcription can run
  • docs(testing): log the macOS retest of the in-app MCP recording on build run 38598557320
  • fix(mcp): let getFrames read a GIF export
  • fix(cli): open the app when macOS hands a launch to a running CLI process
  • fix(cli): drop activates that come right after a GUI launch
  • fix(macos): record the whole system audio mix in a window take
  • fix(macos): keep a window take going when its audio stream cannot be set up
  • fix(stt): drop the renderer audio-decode fallback and say ffmpeg is missing
  • docs(stt): describe the transcription request as path-first
  • test: wait for the held export to start instead of sleeping 20 ms
  • docs(testing): log the macOS retest of #1214, #1215 and #1216 on build run 38615516865
  • fix(mcp): record the window an in-app take names, even where Apple's picker owns sources
  • fix(cli): hide the Dock icon again after opening the GUI from a CLI run
  • fix(macos): log each step of Apple's picker flow and any lost process
  • docs(testing): log the macOS retest of #1232 and #1233 on build run 38627769728
  • docs: spec agent-written shader effects
  • feat(compositor): shader effects contract v1 and the Windows pass
  • feat(effects): shader effects in the document, and the agent tools
  • feat(compositor): the Linux pass of shader effects
  • feat(effects): the recording's surface in the effect contract
  • fix(effects): address the review of the shader effects integration
  • ci: run CI on integration branches
  • feat(compositor): the macOS shader effects pass (Metal)
  • feat(compositor): the macOS effect inputs carry the footage plane
  • feat(compositor): the Metal pass keeps what the scene shows, and maps the footage plane
  • fix(compositor): a hidden cursor still hands effects its pointer and clicks
  • feat(effects): check an effect's code off the main thread, and price the tiers on an M1
  • test(compositor): the Windows test frame carries its size
  • feat(effects): getFrames renders from the document when no export is current
  • refactor(effects): one effect at a time, no lanes
  • feat(effects): the Effects lane and the effect inspector
  • docs(website): the Custom effects page
  • fix(effects): getFrames names a frame it could not render, and the review's doc fixes
  • fix(effects): CodeRabbit's second pass on the integration PR
  • docs(testing): log the macOS pass on release/v2.1.0 build 38370716184
  • docs(testing): drop the look-alike zoom merge from the defects, note the release head moved
  • docs(testing): record the mcp launch issue as #1214, fixed after this build
  • fix(cli): give a CLI run no application menu
  • feat(website): measure audience and download clicks with cookieless PostHog
  • feat(website): tag Microsoft Store links with a website campaign ID
  • feat(website): the OpenScreen PostHog project token
  • fix(website): count only OpenScreen release assets on github.com as downloads
  • feat: count active installs with one anonymous daily ping
  • feat: the OpenScreen PostHog project token for the usage ping
  • fix: CI=false no longer silences the usage ping; the FAQ names the per-event random ID
  • fix(cli): set the empty menu before macOS launches the CLI run
  • fix(cli): replace the bare Quit menu with an empty one once ready
  • docs(testing): log the Windows retest of v2.1.0 build run 38714540858

Full Changelog: v2.0.0...v2.1.0-rc.1