Prepare from your normal account
Stage the current app, prepare the old-source fixture, and start both private loopback servers.
Stage your current installation
STAGE="$HOME/Library/Developer/CopyLasso/G55/main-app-staging"
mkdir -p "$STAGE"
mv /Applications/CopyLasso.app "$STAGE/CopyLasso-0.2.2.app"Stage the updater-test fixture
ditto "$HOME/Library/Developer/CopyLasso/G55/c99bec65be187c02b920b6519152ba935ec44253/update-fixture/derived/Build/Products/Debug/CopyLasso.app" "/Users/Shared/CopyLasso-G55-Updater-Fixture.app"Terminal tab 1 · candidate DMG server
python3 -m http.server 58455 --bind 127.0.0.1 --directory "$HOME/Library/Developer/CopyLasso/G55/c99bec65be187c02b920b6519152ba935ec44253/host-smoke-serve"Terminal tab 2 · updater server
python3 -m http.server 58457 --bind 127.0.0.1 --directory "$HOME/Library/Developer/CopyLasso/G55/c99bec65be187c02b920b6519152ba935ec44253/update-fixture/serve-v1"Create the account
- System Settings → Users & Groups → Add User.
- Choose Standard.
- Full name:
CopyLasso G55 Qualification. - Account name:
copylasso-g55. - Choose any temporary password. Do not connect an Apple Account.
- Fast-user-switch into the account. Do not log out of the normal account.
Confirm a genuinely clean account
All four machine-state checks must be absent before installation.
test ! -e /Applications/CopyLasso.app && echo APP_ABSENT || echo APP_PRESENT
defaults read io.github.bennetthilberg.copylasso >/dev/null 2>&1 && echo PREFS_PRESENT || echo PREFS_ABSENT
test ! -e "$HOME/Library/Containers/io.github.bennetthilberg.copylasso" && echo CONTAINER_ABSENT || echo CONTAINER_PRESENT
security find-generic-password -s io.github.bennetthilberg.copylasso.capture-history -a archive-key-v1 >/dev/null 2>&1 && echo HISTORY_KEY_PRESENT || echo HISTORY_KEY_ABSENTAPP_ABSENT
PREFS_ABSENT
CONTAINER_ABSENT
HISTORY_KEY_ABSENTQualify public 0.2.2
Prove the clean account and public install path before testing the candidate.
Download in a Safari Private Window
https://github.com/bennetthilberg/copylasso/releases/download/v0.2.2/CopyLasso-0.2.2.dmg
https://github.com/bennetthilberg/copylasso/releases/download/v0.2.2/CopyLasso-0.2.2.dmg.sha256Verify quarantine, checksum, and Gatekeeper
cd "$HOME/Downloads"
xattr -p com.apple.quarantine CopyLasso-0.2.2.dmg && echo QUARANTINE_PRESENT
shasum -a 256 -c CopyLasso-0.2.2.dmg.sha256
spctl -a -vv -t open --context context:primary-signature CopyLasso-0.2.2.dmg- Open the DMG.
- Confirm it contains only CopyLasso and the Applications shortcut.
- Drag CopyLasso into Applications.
Inspect the installed app
APP=/Applications/CopyLasso.app
/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$APP/Contents/Info.plist"
/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$APP/Contents/Info.plist"
/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' "$APP/Contents/Info.plist"
lipo -archs "$APP/Contents/MacOS/CopyLasso"Expect io.github.bennetthilberg.copylasso, 0.2.2, build 5, and both arm64 and x86_64.
Functional baseline
Remove the public baseline
Return the disposable account to a precise empty state.
defaults delete io.github.bennetthilberg.copylasso 2>/dev/null || true
rm -rf "$HOME/Library/Containers/io.github.bennetthilberg.copylasso"
security delete-generic-password -s io.github.bennetthilberg.copylasso.capture-history -a archive-key-v1 2>/dev/null || true
tccutil reset ScreenCapture io.github.bennetthilberg.copylassoInstall the exact 0.3.0 candidate
Download through Safari so the private candidate receives genuine quarantine metadata.
Download in a new Safari Private Window
http://127.0.0.1:58455/CopyLasso-0.3.0.dmg
http://127.0.0.1:58455/CopyLasso-0.3.0.dmg.sha256Verify the immutable candidate
cd "$HOME/Downloads"
xattr -p com.apple.quarantine CopyLasso-0.3.0.dmg && echo QUARANTINE_PRESENT
shasum -a 256 CopyLasso-0.3.0.dmg
shasum -a 256 -c CopyLasso-0.3.0.dmg.sha256
spctl -a -vv -t open --context context:primary-signature CopyLasso-0.3.0.dmg96f07eff7719f6c5b4b819af846d9ac825e13d4959d6f45d14d19fffa943bb96- Mount the DMG.
- Confirm the two-item layout.
- Drag CopyLasso into Applications.
APP=/Applications/CopyLasso.app
/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$APP/Contents/Info.plist"
/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$APP/Contents/Info.plist"
/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' "$APP/Contents/Info.plist"
lipo -archs "$APP/Contents/MacOS/CopyLasso"
codesign --verify --deep --strict --verbose=2 "$APP"
spctl -a -vv -t exec "$APP"Expect production bundle ID, 0.3.0, build 6, both architectures, valid signature, and Gatekeeper acceptance.
Run the candidate feature matrix
Check each item once. Record anomalies even if a retry succeeds.
Onboarding and permission recovery
Recognition
Settings, feedback, and accessibility
Private capture history
security find-generic-password -s io.github.bennetthilberg.copylasso.capture-history -a archive-key-v1 >/dev/null 2>&1 && echo HISTORY_KEY_PRESENT || echo HISTORY_KEY_ABSENTBefore opting in, expect HISTORY_KEY_ABSENT.
Lifecycle and display behavior
Exercise the 0.2.2 → 0.3.0 update
Use the nonshipping old-source fixture; the update payload remains the untouched candidate.
- In Finder, open
/Users/Shared. - Copy
CopyLasso-G55-Updater-Fixture.appinto Applications. - Rename it to
CopyLasso.appif needed. - Launch it and confirm About shows
0.2.2 (5).
Create recognizable retained state
Install through the updater
Verify the transition
Restore your normal account
Leave the disposable account available until the evidence has been recorded.
rm -rf /Applications/CopyLasso.app
mv "$HOME/Library/Developer/CopyLasso/G55/main-app-staging/CopyLasso-0.2.2.app" /Applications/CopyLasso.app
open /Applications/CopyLasso.appSend one report when you finish.
Fill in PASS or FAIL, add anything unusual, and send the whole block back in the original Codex task.
G55 fresh-install qualification
Clean account preflight: PASS / FAIL
Public 0.2.2 checksum and Gatekeeper: PASS / FAIL
Public 0.2.2 onboarding and permission recovery: PASS / FAIL
Public 0.2.2 OCR and QR capture: PASS / FAIL
Candidate DMG SHA256 matched: YES / NO
Candidate signature, Gatekeeper, version 0.3.0 (6), Universal 2: PASS / FAIL
Candidate onboarding and permission recovery: PASS / FAIL
English OCR: PASS / FAIL
Additional-language OCR: PASS / FAIL
QR: PASS / FAIL
Code 128: PASS / FAIL
Data Matrix: PASS / FAIL
PDF417: PASS / FAIL
Aztec: PASS / FAIL
QR-over-text precedence: PASS / FAIL
No-result and Escape: PASS / FAIL
Sound enabled and disabled: PASS / FAIL
Rapid reuse and focus preservation: PASS / FAIL
Settings, About, keyboard, VoiceOver, appearance: PASS / FAIL
Launch at Login enable/disable: PASS / FAIL
History default-off: PASS / FAIL
History opt-in, persistence, copy, delete, clear, disable: PASS / FAIL
No screenshot persistence observed: PASS / FAIL
Multi-display clamping: PASS / FAIL
0.2.2 fixture offered 0.3.0: PASS / FAIL
Later did not install: PASS / FAIL
Download required separate install confirmation: PASS / FAIL
Install and relaunch reached 0.3.0 (6): PASS / FAIL
Existing preferences retained: PASS / FAIL
History remained off with no key/archive: PASS / FAIL
Offline updater failure did not affect capture: PASS / FAIL
No rollback to 0.2.2 offered: PASS / FAIL
Anything unusual:
- ...