Run on macOS 26 with Screen Recording granted. Use a Release + sandboxed build for final sign-off.
Evidence folder: qa-evidence/final-ship-2026-08-12/
- Build: PASS —
xcodegen generate, Debug, and Release builds completed. - Release app checks: PASS for bundle ID, display name, minimum macOS version, menu-bar mode, Sparkle feed URL, universal binary, sandbox entitlement, no
get-task-allow, Sparkle public key, and release smoke checks. - Export codecs: PASS for selected PNG/JPEG/HEIC/TIFF/WebP output paths; PNG/JPEG/TIFF use system bitmap encoders, HEIC uses ImageIO, and WebP uses local libwebp.
- Recording writer/export: PASS for deterministic low-level MP4 finalization with H.264 video, AAC audio, and
moovmetadata; production writer unit coverage verifies pause skip behavior and temporary-file install before replacing the final output; trim model coverage exports readable MP4 and animated GIF outputs without a save panel. - History: PASS for create/restore/save/delete, filter predicate, and retention pruning against the persisted local index.
- No-network-AI invariant: PASS —
Scripts/verify-no-network-ai.shreports no cloud/network AI identifiers, network client APIs limited to optional Supabase upload, and Apple local Vision/Translation framework use. - Website: PASS for
npm run lintandnpm run build. - Website export artifact: PASS —
Scripts/verify-website-export-artifact.shconfirms staticWebsite/outcontains byte-identicaldownloads/Parcel.zipandappcast.xmlfromWebsite/public. - Appcast structure: PASS —
Scripts/verify-release.shvalidates well-formed XML, feed title, parseablepubDate,sparkle:os, enclosure type, version/build, and download URL. - Release script syntax: PASS —
Scripts/final-local-qa.shvalidates the release/appcast/preflight shell scripts withbash -n. - Workflow syntax: PASS —
local-qa-current/release/workflow-syntax.logparses GitHub workflow YAML and validates each embeddedrun:block withbash -n. - CI non-gated coverage: PASS — push/PR CI runs script syntax, no-network-AI verification, Debug build,
ParcelUnit, website lint, and website build. - GitHub release signing/setup: PASS/GATED — tag-release CI has explicit
contents: write, imports a base64 Developer ID Application.p12into an ephemeral keychain, removes the temporary.p12, runs the same release preflight/build/notary/appcast verifier path, builds and verifies the website export payload, then creates the GitHub Release; final release still gates until the certificate/notary/manual-QA secrets are configured. - Release preflight hook: PASS/GATED — public
Scripts/release.shrunsScripts/verify-release-gates.shbefore archive/export work and exits early when release-machine gates are missing. - Appcast updater: PASS/GATED — dry-run with a fake Sparkle signer derives version/build/title/pubDate from a temp app ZIP, writes ZIP length/signature into a temp appcast, rejects malformed appcast input without modifying it, and leaves
Website/public/appcast.xmlunchanged; final real appcast update remains gated until the notarized ZIP exists. - Sparkle public key consistency: PASS — source
SUPublicEDKey, the Sparkle Keychain account public key, and the current website ZIP app key match. - Real Sparkle signing dry-run: PASS — temp-copy signing uses the installed Sparkle
sign_update, derives app metadata, updates a temp appcast, matches ZIP length, populates an EdDSA signature, verifies it against the ZIP, and leaves the real appcast unchanged. - Release gate preflight: PASS/GATED —
Scripts/verify-release-gates.shchecks Developer ID, notary credentials, Sparkle signing material, Screen Recording proof, second-display access, Supabase live credentials, and macOS 13 VM availability before a public ZIP attempt. - Release gate handoff: PASS/GATED —
Scripts/write-release-gate-handoff.shwrites a release-machine evidence packet for the external gates that cannot be closed on this machine. - Release gate evidence verifier: PASS/GATED —
Scripts/verify-release-gate-evidence.shchecks completed handoff folders and currently reports 2 pass / 0 fail / 15 gated on the local packet. - Release gate evidence verifier self-test: PASS — synthetic complete evidence passes, missing manual metadata gates, and failed final logs fail.
- Local QA runner: PASS/GATED —
Scripts/final-local-qa.shcompleted build, unit, media, website/export, release-gate preflight, and release-verifier stages; only credential/environment gates remain. - Ship status summary: PASS —
Scripts/ship-status.shsummarizes the final evidence folder into local completion, public-release unblocked percentage, and remaining gates. - Public claims audit: PASS/GATED —
qa-evidence/final-ship-2026-08-12/CLAIMS_AUDIT.mdmaps README, parity, and checklist claims to direct evidence or explicit gates; no contradictory claim evidence was found. - Release verifier: PASS/GATED —
Scripts/verify-release.shreports 23 pass / 0 fail / 5 gated on the current website ZIP. - XCTest host stability: PASS — app-hosted
ParcelUnitlaunches skip coordinator, Sparkle, hotkey, and onboarding side effects, so the final harness reaches XCTest reliably. - Unit tests: PASS —
ParcelUnitcovers 51 local model tests: export-format claims, selected export encoder containers, sRGB export conversion, Retina scale-down Capture resizing, Capture preference defaults/toggles, shutter sound feedback policy, extra Capture Area hotkey bindings, Selection aspect preset cycling/ratio geometry/Shift bypass, window snap hit testing, all-display stitch desktop arrangement, countdown display/DND policy behavior, Pin opacity/close gesture mapping, Pin lock/visibility state, recently-closed restore stack behavior, clipboard image import, print payload sizing/pagination, share payload item/anchor behavior, production recording writer finalization/pause behavior, recording temporary-file install, recording trim MP4/GIF export, recording max-resolution geometry, keystroke HUD label/PiP placement behavior, previous Capture/recording area preference state, Scroll Capture vertical/horizontal stitching and no-overlap rejection, window Capture matte removal, brand kit save/reload/remove persistence, color swatch persistence/dedupe/capping, smart highlighter snap-to-text-box behavior, Quick Access shortcut/swipe mapping, 14-Tool inventory, Arrow/Censor style inventories, Censor erase outside-ring Retina sampling, URL-scheme actions, after-Capture action planning, hotkey/recording preference models, OCR strip-line-break formatting, WebP bytes,.parcelround-trip, History create/restore/save/delete/filter/retention prune, Upload disabled/not-configured behavior, Supabase upload request/success URL handling, Supabase HTTP error handling, local Vision QR detection and Capture-point coordinate mapping, local PII classification, annotation undo/redo + Layer order, document settings outside undo, transform remapping, crop transform remapping, expand/combine transform placement, and filename templates. - UI automation: PARTIAL — app launch and menu contents passed; capture/recording UI tests are blocked until Screen Recording is granted to the exact test/release app path.
- Computer Use: BLOCKED —
node_repl+@oai/skycan inspect a normal System Settings window, proving the runtime is alive, but Parcel bundle-id targeting is ambiguous because several local builds sharedev.parable.Parcel; exact disposable app-path targeting and SystemUIServer/menu-bar targeting time out. Refreshed evidence is captured atqa-evidence/final-ship-2026-08-12/local-qa-current/ui/computer-use-sky-refresh-current.md, with prior details incomputer-use-sky-normal-window-sanity-current.md,computer-use-sky-focused-probes-current.md, the earlier Parcel state JSON files, and the timeout log. - Public ZIP release: BLOCKED — no Developer ID Application identity and no notary credentials. Current website ZIP is Apple Development signed and rejected by Gatekeeper; the real Sparkle appcast signature should be generated only after the final notarized ZIP exists.
- Hardware/service gates: BLOCKED — second display, live Supabase credentials, and macOS 13 VM were unavailable.
Build under test: _______________
Tester: _______________
Date: _______________
- Screen Recording granted for Parcel in System Settings → Privacy & Security
- App quit and reopened after granting permission
- At least one external display connected (for multi-monitor tests, optional)
- Press ⌘⇧2 (or configured hotkey) — frozen Overlay appears on all displays
- Drag a region — dimensions label updates
- Release — Editor opens with cropped Capture
- ⌘C copies to clipboard — paste into Preview/Messages matches on-screen Canvas
- ⌘S saves PNG — file matches on-screen Canvas
- Save as JPEG, HEIC, TIFF — each format opens correctly
Notes: _______________
- Hover over window — highlight appears
- Single-click window — snaps Selection to window bounds
- Tab cycles aspect presets during drag
- Edge snap works near screen edges
- Menu: Capture After 3s — countdown in menu bar, then Overlay
- Capture After 5s / 10s work
Notes: _______________
- Menu: Capture All Displays — stitched Capture opens in Editor
- Multi-monitor: all displays visible in stitch (if applicable)
- Error alert shown if stitch fails (simulate by disconnecting display mid-capture if possible)
Notes: _______________
- Menu: Scroll Capture — Overlay with scroll mode
- Drag tall region — initial frame captured
- Scroll source content, menu: Add Scroll Frame — frame count increments
- Menu: Finish Scroll Capture — stitched tall Capture in Editor
- Cancel scroll capture from menu — no orphan Editor
- Overlap validation error surfaced on bad frames
Notes: _______________
Tools: Select, Arrow, Rectangle, Ellipse, Text, Pencil, Censor, Number, Stamp, Highlighter, Measure, Spotlight, Loupe, Eyedropper
- Each Tool creates an Annotation
- Select: move and resize handles work
- Arrow: all 5 styles via toolbar
- Censor: Blur, Pixelate, Solid, Erase modes
- ⌘Z undoes last annotation change
- ⇧⌘Z redoes
- Adjustments changes are not in undo stack
- Beautify changes are not in undo stack
Notes: _______________
- Adjustments panel: change brightness/contrast — Canvas updates
- Preset applies correctly
- Reset restores neutral
- Beautify: enable gradient, padding, radius, shadow, chrome
- Export matches Beautify preview
- Save brand kit — persists after Editor close
- Load brand kit from panel
Notes: _______________
- Inspect Capture → Recognize Text — OCR results appear
- QR code in Capture — detected and readable
- Face in Capture — face regions detected
- Censor Detected Sensitive Text — PII regions censored
- Censor Detected Faces — face blur censors added
- Translate (macOS 26+) — on-device translation in Vision panel
- No network traffic during Vision (except optional Upload)
Notes: _______________
- Open Editor — entry auto-created in History
- Add annotations, close Editor
- Menu: Capture History — entry listed with thumbnail
- Open entry — annotations, adjustments, beautify, output format restored
- Delete entry — removed from list
- Clear All — confirmation, list empty
Notes: _______________
- Menu: Start Recording — save panel, recording begins
- Menu bar shows recording state / elapsed
- Stop Recording — trim Editor opens
- Trim in/out points — preview updates
- Export MP4 — plays with audio
- Export GIF — animates
- Microphone captured on macOS 15+ (if enabled in system)
Notes: _______________
- Local mock: disabled/not-configured path returns a user-facing configuration error
- Local mock: configured upload builds the expected Supabase Storage request and public URL
- Local mock: bad-credential/HTTP error includes status code and response body
- Preferences: project URL, anon key, bucket configured
- Editor: Upload — progress shown
- Link copied to clipboard — URL opens in browser
- Upload disabled when not configured
Notes: _______________
- Preferences: record new shortcut (e.g. ⌘⇧P)
- New shortcut triggers Capture
- Quit and relaunch — shortcut still works
Notes: _______________
- Fresh install / revoke permission — Capture opens Preferences
- Recording without permission — opens Preferences (not generic alert only)
- Grant permission → Quit & Reopen — Capture works
- First-run onboarding shown once, skipped on relaunch
Notes: _______________
- Capture uses SCStream fallback (not SCScreenshotManager)
- Recording uses LegacyRecordingWriter (not SCRecordingOutput)
- Core flows 1, 5, 8 pass on macOS 13
Notes: _______________
- Capture Previous Area (menu / ⌘⇧5) after one region Capture
- Preferences: Ask for name + after-Capture Copy / Pin / Editor toggles
- Hold ⇧ while dragging Selection — aspect preset ignored
- Recording: countdown, pause, resume, max resolution, mono audio
- Quick Access: ⌘C ⌘S ⌘E ⌘W; swipe down discards
- Pin: scroll opacity, middle-click close, Hide/Show Overlays, Close All Pins
- Restore Recently Closed + Open from Clipboard
- History: filter, Pin from row, retention prune
-
parcel://capture/regionandparcel://capture/previous(URL scheme enabled) - Editor: transform menu (rotate/flip/expand), WebP export, Print, Share
- Save / open
.parcelproject round-trip - Filename template tokens apply on Save / Upload
Notes: _______________
- Sandbox enabled — Capture, recording, save panel, history all work
- Gatekeeper: notarized zip opens without right-click workaround
- Sparkle: Check for Updates finds appcast (no crash if offline)
Notes: _______________
| Result | Count |
|---|---|
| Pass | ___ / 12 core + ___ release |
| Fail | ___ |
| Blocked | ___ |
Ship recommendation: ☐ Ready ☐ Fix blockers ☐ Defer macOS 13 claim