diff --git a/technical-documentation/testing/manual-e2e-checklist.md b/technical-documentation/testing/manual-e2e-checklist.md index 2d122c0b0..c0a22dfb5 100644 --- a/technical-documentation/testing/manual-e2e-checklist.md +++ b/technical-documentation/testing/manual-e2e-checklist.md @@ -950,3 +950,4 @@ These checks are the human slice: an agent cannot click Apple's picker (see abov | 2026-10-03 | `main` @ `0624c148` (sources identical to `v2.0.0-rc.13` in `crates/`, `src/`, `electron/`), packaged locally (`electron-builder --mac dir --arm64`, ad hoc signed), `compositor_view.node` SHA256 `7c1d38d664d29fa78615c386aa86e53456f1e662289ad53a2a128d588b99d560`; baseline the installed `v2.0.0-rc.12` DMG (Developer ID) | macOS 26.5 (25F71), Mac mini M1, 1920×1080 @ 2× | Partial, no defect | **Shader split, corner fast path, background cache and trail scissor (#982, #983, #984) on Metal. Not a computer-use pass:** `request_access` was refused with nobody at the machine, so the editor was driven over CDP (synthesised clicks on the inspector, preview pixels read from the canvas). `cargo test -p openscreen-compositor --lib --tests`: 407 passed, 0 failed, `every_shader_entry_point_compiles` (with the `LAYER_MODELS` library) and the macOS device-frame and 3D-cursor tests included; the `tests/` render binaries are Windows/Linux only and ran 0. **Export** (`openscreen export`, MP4 1080p60): bench project plus four variants (laptop + 3D cursor + click impact + blur, phone dark + Prism Glow + Aurora gradient, monitor + click impact + colour, window + full blur), frames extracted with ffmpeg: device frames with their shadows, 3D cursor with its shadow, click impact, trail, rounded corners and backgrounds all present. Same projects exported losslessly (`ffv1` candidate added locally, measurement only) with the rc.12 and main addons in one bundle: luma differs by 1/255 on anti-aliased edges, and by up to 20/255 on at most 159 px of a few frames along the 3D models' silhouettes (Metal fast math, models now in their own library); nothing missing. **Preview:** wallpaper image → gradient → colour → back, blur 50 % → 0 %, aspect 1:1 → Auto each return the exact starting frame; a static background holds still over 1 s of playback, *Aurora* animates; laptop and phone frames draw their shadows. **Perf** (screen-recorder-benchmark `commons-upload`): rc.12 1.134× floor, main 1.066×, figures in `rendering-performance.md`. **Not covered:** real recording, HUD, tray, computer-use input, the GUI export dialog, Escape, a 1.11.0-rc.1 run in the same session (discarded: a Parsec session went live mid-run), Windows (the D3D11 port is still unrun on a real GPU) and Linux. | | 2026-10-11 | dev helper from `fix/os920-resample-continuity` @ `aa27e6fdf` (audio fix commits `50a433168` cross-packet continuity + `e29119445` starvation-resume restart; helper and test exe built from the committed tree with `npm run build:native:win`; test-exe sha256 `bb6921d0…`); historical evidence archived under former fork staging PR `My-Denia/openscreen#23` for study issue #920 §24; current submission: upstream PR [getopenscreen/openscreen#1113](https://github.com/getopenscreen/openscreen/pull/1113), open, with CI green on the head under review | Windows 11 build 26340.9616; **both audio endpoints fixed 48 kHz shared mode** (measured: single-valued 480-frame/10 ms packets, 0 non-aligned) | Partial — no defect found; two paths not real-machine testable on this host | **Audio resampling continuity slice (#920 item 24), helper-level + real-machine hybrid.** The defect: `convertAudioWithGain`'s non-integer branch held no cross-packet state, so identical input produced different output depending on packet boundaries (48k→44.1k, 100-frame packets: 14700→14720 frames, drifting positions). The fix adds cumulative integer-rational output accounting (K(N)/C(N)), absolute-position interpolation with the legacy arithmetic preserved, bounded retention, and a `finalizeAudioConversion` tail used only by the stateless test-facing overload; a second commit restarts the interpolation stream at mixer starvation-resume (automated-review P2: the new state could otherwise complete ≤⌈T/S+½⌉ deferred frames across a real-time gap using pre-gap samples — a blend the pre-fix stateless converter never made; integer decimation and same-rate paths keep their pre-existing cross-gap behavior, pinned by controls). **Evidence:** assertion-based old-FAIL on the pristine pinned base (9 named failures) → new-PASS; full native suite **176/176** and focused 54/54 on that base; starvation fix proven behaviorally old-FAIL (`50a433168`: 1 failing mixer-path test — resumed queue 368 bytes vs cold 364, first frame −12594 = pre-gap/post-gap blend vs cold +16384) → PASS after `e29119445`. **Submitted-tree native validation, separately attributed:** pre-chain validation of the candidate tree that became `5764aa2b6e` completed `npm run build:native:win` with 0 errors, full native suite **177/177**, and focused suite **55/55**, including `os920-finalize-appends-after-whole-frames` PASS. These are separate submitted-tree results, not a re-run or replacement of the historical pinned-base pass above. **Real machine (matched-rate only):** 6×60 s 48 kHz/48 kHz recordings (3 pre-fix/3 fixed helpers interleaved) + pause/resume takes — all valid, marker spacing 3.0000–3.001 s, old/new within each other's repeat envelope, zero clipping; captured real callback streams replayed through old/new converters **6/6 byte-identical**; no regression observed. **Mismatched-rate real capture (second pass, same day, owner-enabled):** the default render endpoint (JM6PRO) was switched to 16-bit/44100 Hz and the encoder target forced to 48000 via the production `OPENSCREEN_WGC_FORCE_AAC_SOURCE_RATE` surface (the video-rate-alignment path); five 35 s takes ran old×2 / fixed×2 / instrumented-fixed with the same marker harness. Every real loopback packet was exactly 441 frames (3496/3496 — this hardware produces perfectly aligned 10 ms geometry, so the packet-boundary defect class is not reachable on it and stays covered by the deterministic suites); decoded old vs fixed output is time-aligned at zero offset with 97.4 % byte-identical frames and residual maxdiff 170 (AAC block-boundary quantization from the one-frame first-packet emission difference — no drift, no regression); each build repeated byte-identically; the mixer's startup starvation-padding path ran on real hardware (~70 ms). Starvation/underrun beyond startup was **not** reproduced on real hardware — covered by the deterministic real-`AudioMixer`-path tests above; no full capture-to-export GUI cycle, editor/export/transcript sections, webcam, GIF or non-audio checks for this slice; macOS/Linux N/A (WGC-only code). Fork CI did not run at pass time (GitHub-side Actions suspension on the repo — settings and workflow states reported enabled/active while every dispatch returned 422; full evidence in the run); Actions was restored later the same day and CI has since run green on each exact head under review (runs 38119381114, 38121492689, and 38125479601 recorded for their respective exact heads — run evidence in the project archive). This CI has no native C++ job — the native evidence is the local MSVC build and suites above. Upstream PR #1113 is open, with CI green on the head under review; awaiting maintainer review. | | 2026-10-12 | installed `v2.1.0` candidate, CI-built DMG `Openscreen-macOS-Apple-Silicon-2.0.0.dmg` from build run 38252812147 (`openscreen-mac-arm64`, `release/v2.1.0` @ `9c55596e1`), Developer ID signed and notarized (`spctl`: accepted, Notarized Developer ID, M4LK7C6S84), installed over the previous `/Applications/Openscreen.app`; About reports `2.0.0 (dmg)` (the branch does not bump `package.json`), Electron 41.2.1, Chromium 146.0.7680.188, Node 24.14.1 | macOS 26.5 (25F71), Mac mini M1 (arm64), one 3840×2160 display at 2×, no camera (Scaleway MDM `allowCamera=false`), BlackHole 2ch as the only input | Partial, 6 defects | Real OS mouse and keyboard through computer-use, launched with `open --env OPENSCREEN_DIAGNOSTIC=1` (no content-protection flag needed on 26), then `OPENSCREEN_MAC_SOURCE_PICKER=legacy` for every take after the first; tones into BlackHole (440 Hz) and the speakers (1 kHz) gave the mic and system-audio signals; every number below is ffprobe/ffmpeg on the files. **Covered, post-2.0.0 first:** recordings folder (row last, native picker, take lands in the custom folder, row survives restart, *Reset to default* only while custom and takes return to `userData/recordings`, deleted folder recreated by the next take, ejected volume gives "Can't reach the recordings folder", 298 MB volume refused from the HUD and the voice-over with "Not enough disk space ... (only 298 MB free)", from Record mode no take and no file but the toast was not captured, Restart on a volume filled under 500 MB gives "The new recording could not start. The previous one was deleted." with no file left); mic double-click stays off; Play past the last clip holds clip 2's own last frame and stops at the total (#997); duplicate clip carries zooms, speed and annotation (#1011); Edit clip trim-bar playhead, in-point frame, scrub with *Apply* disabled, grip pushes the playhead; zoom trails and their in/out/pan/trim/junction tooltips, trails follow a dragged trim, a trim between two zooms breaks the pan, end of timeline is no junction; Names and terms ("OpenScreen" spelled, opening kept, not Title Case; one undo restores field and transcript), transcript Backspace cut and Cmd+Z (#1012), Cmd+Z inside an edited word; agent: filler words plus a quoted phrase as one trim with no sliver, *Screen turned left* then *3D Orbit*, stretch into a neighbour refused naming it; two conversations and the last reply survive a quit right after the reply, history is per project; MCP stdio (`help` lists `mcp`, `listSources`, `startRecording` on a window: 2944×1926 take in the custom folder, no Apple picker, 3 clicks 1.7 s apart grouped into one zoom; edit while closed, `exportVideo` 25.82 s = 33.82 − 8 s trim, `getFrames`, `restoreCheckpoint` back to the raw take, stale warning with `projectId`; edits refused on the project open in the editor and on a closed project without checkpoint); in-app server off by default, *Running* with port, token and snippets; GIF of 61 s at 20 fps Small in about 8 s; Glass Lens and 3D Glass Lens in preview and in a 720p export (refraction, shadow); *Mouse clicks* off by default, *Click volume* row, clicks in the export at the speed-mapped times (±20 ms). **Covered, rest of the file:** HUD launch, layout toggle, drag without drift or jump, language menu, tooltips on both bars idle and recording (a teleported pointer needs one small move, as a hand gives), gear lists inputs with a moving meter, "No camera found" and no *Camera quality* row, camera toggle refused with "Camera not found.", hide and tray refocus, tray menus idle and recording (only *Stop Recording*), quit and relaunch, single instance (`open -n` exits), *Update Settings* modes persisted in `update-settings.json` across restart; app menu items; About box; legacy selector; Record mode rows, Auto-zoom row only with Editable cursor, mic meter, hand-over to the HUD with the same settings, zooms placed after a take and none with Auto-zoom off; pause/resume, Restart, cancel without editor, stop from HUD and from the tray; gear does not open during a take; full-screen take fills 3840×2160 edge to edge (HiDPI), HUD absent, desktop icons absent while still on the desktop; mic and system audio each audible alone and together (−23.8 / −34.6 dB band levels); editor opens in Edit with the take and toast; New project, Import, *Add to timeline* toast, Media card name/duration/size, Export disabled with no asset; local transcription on Metal with French detected; Cmd+O, theme and language switches (UI and native menus follow, back to English); export dialog (formats, qualities with sizes, fps, no codec, GIF options and summary), MP4 progress, cancel with no partial and same options, retry, *Saved to*, *Show in folder*, GIF cancel keeps the existing destination, MP4 in QuickTime and GIF in Preview; imported audio pill named after the file at −18 dB with 1 s fades, a bed past the programme end is cut without pulling its fade-out forward; Save Diagnostics from the app menu writes a bundle; reopened project keeps clips, in/out, zooms, speeds and trims. **Defects:** (1) dragging a zoom into a neighbour of the same level passes into it instead of stopping flush (#1008): 23.0 s zoom dragged left landed at 20.055–21.984 s over 19.975–21.904 s, a 2 px nudge still overlaps by 40 ms; the pair draws as one pill and a level change on one half changed both, so #1017 could not be judged on exactly touching regions; medium. (2) MP4 export of the speech fixture (source −17.6 LUFS, +4.9 dBTP) measures −17.3 LUFS, sample peak −0.59 dBFS, true peak +0.5 dBTP against about −16 LUFS and at most −1 dBTP; medium. (3) agent title "Demo OpenScreen" with a switch to 9:16 in the same turn: box 95 %×9.33 % at size 64, only "Demo" visible in the preview and in the exported frame at 3.0 s; medium. (4) click sounds missing on a duplicated clip: clip 1 clicks at 6.04, 10.26, 14.44, 28.59, 36.91 s are in the export, the duplicate's click expected at 43.17 s is absent; low to medium. (5) HUD error toasts sit over the HUD's own controls, their × does not take the click (it reaches the window behind) and they stay while the pointer is over them; the mic toast at take start hid Pause, Restart and Cancel until the pointer left; medium. (6) a microphone picked as "BlackHole 2ch (Virtual)" is not resolved by the SCK helper (`[native-sck] recording the default input; microphone was not resolved`), so every take toasts "The chosen microphone could not be identified"; low. **Observations, not filed:** transcription shows "Transcribing 0%" for the whole job, 66.2 s of French in 101.6 s and 112 s (0.6–0.7× real time with the fr CTC aligner) against 61× on a speech-free take; the legacy *Windows* tab listed one window while the Claude window was on screen; the disk-space refusal comes after the 3-2-1 countdown; "Loop off" writes a NETSCAPE loop count of 1. **Skipped:** Apple's picker slice and the permissions window's first-run rows (operator asked for an unattended legacy run; Screen Recording already granted and not reset; one early take went through the picker and is not judged); every camera, webcam-quality, Full Camera and camera-background check (MDM blocks cameras); Windows, Windows on ARM, Linux and macOS 13/14 sections (other OS or version); Intel ONNX check (arm64 only); second display at another scale (one display); GIF speed against v2.0.0 (no v2.0.0 left installed to compare); in-app MCP edits and port change (no HTTP MCP client here without downloading one) and `setPointerTrack`; Escape checks and Ctrl/Shift-scroll (unreachable from computer-use on this Mac); Spaces switch (no system key combos granted); no-microphone refusal and unplugged mic (BlackHole cannot be removed here); not run for time: captions and caption placement, translation, annotation types (image, arrow, blur), v1.8.0 anchoring section, most audio-track checks, voice-over take, inspector facets, shortcuts dialog, editor window bounds, migrated-project persistence, chat rewind/compaction/rename/delete, export speed-region audio section. | +| 2026-10-12 | installed `v2.1.0` candidate after `release/v2.1.0` was fast-forwarded to `main` @ `bd04d3a7` (adds #1147, #1151, #1155, #1158, #1160, #1166, #1131), CI-built DMG `Openscreen-macOS-Apple-Silicon-2.0.0.dmg` from build run 38309126813 (`openscreen-mac-arm64`), Developer ID signed and notarized (`spctl`: accepted, Notarized Developer ID, M4LK7C6S84); the SCK helper is dated 23:22 that day and carries the new Chromium suffixes (Virtual, Bluetooth, Built-in) | macOS 26.5 (25F71), Mac mini M1 (arm64), one 3840×2160 display at 2×, no camera (MDM), BlackHole 2ch as the only input | Pass, scoped to the merged fixes | **Targeted re-run of the six fixes from the pass above, real OS mouse and keyboard through computer-use**, launched with `open --env OPENSCREEN_DIAGNOSTIC=1 --env OPENSCREEN_MAC_SOURCE_PICKER=legacy`; numbers are ffprobe/ffmpeg on the files. **#1158 (HUD toasts):** "Camera not found." now shows centred above the horizontal bar, clear of every control, and its × dismisses it with a real click. **#1147 (microphone suffix):** "BlackHole 2ch (Virtual)" picked explicitly in the gear, mic on, HUD take: no "could not be identified" toast, no `microphone was not resolved` line in the main log, and a 440 Hz tone sent into BlackHole is in the take at −23.7 dB band level; only one input exists here, so picking an input that is not the default was not exercised. **#1151 (click sounds on a duplicated clip):** re-export (720p 30 fps) of the two-clip project: clip 1 clicks at 6.04, 10.26, 14.44, 28.59, 36.91 s unchanged, and the duplicate's click is now present at 43.16 s (expected 43.17 s). **#1166 (export loudness):** the speech fixture exported at 1080p 30 fps measures true peak −1.5 dBTP (was +0.5), sample peak −1.52 dBFS, integrated −17.2 LUFS (the clipped source cannot reach −16 without re-clipping, as the PR states), AAC at 264 kb/s. **#1160 (agent title fit):** the chat agent, asked to switch to 16:9, add "Bonjour OpenScreen", then switch to 9:16, refits both titles (56 px and 61 px, one line each); the exported 1080×1920 frames show "Demo OpenScreen" and "Bonjour OpenScreen" whole, where the earlier build showed only "Demo". Smoke: launch, HUD, record, stop and editor open, Cmd+O, export dialog. **Skipped:** #1155 (Windows WGC helper only, needs a 10 min loaded take on Windows); the rest of the file (covered by the row above on the earlier build). |