QA: Critical User Experience
Run this workflow only when the user explicitly asks for QA. A release request alone does not invoke it, and QA results do not approve or block a release.
Test only the signed staging artifact for the requested candidate:
- The app launches and never hangs.
- Onboarding completes from scratch: permissions, sign-in, and provider setup.
- A recording captures both microphone and system audio.
- Stopping the recording produces an automated summary.
- The note syncs to the account and comes back after a local wipe.
Everything else is outside this skill's scope.
Out of Scope
Record incidental failures against the existing Linear ticket without expanding this run:
- AEC quality:
ANLG-98
- Automatic speaker identification:
ANLG-222
- Real-world capture across devices, rooms, and participants:
ANLG-284
- Auth callback and sign-out edge cases:
ANLG-285
- Calendar, events, and notifications:
ANLG-286
- CloudSync activity deferral and transcript integrity:
ANLG-287
- On-device STT/LLM provider matrix:
ANLG-288
Build the Staging Candidate
Trigger desktop_cd.yaml with channel=staging from the requested candidate SHA. Verify the run's head SHA, download that run's artifact by ID, and never use a latest-staging download:
gh workflow run desktop_cd.yaml \
--ref <candidate-ref> \
-f channel=staging \
-f candidate_sha=<40-character-candidate-sha>
gh run view <run-id> --json headSha,url
gh run download <run-id> --name hyprnote-staging-macos-silicon
Record the run URL and DMG SHA-256, install the artifact, and verify the app reports the expected version. The staging artifact must be signed output from that exact workflow run; do not substitute a local build.
Leave the MacBook open on its built-in speakers and microphone with no external audio device attached.
Start from Onboarding
Fully quit Anarlog Staging.
Reset staging permissions while the app is closed:
.agents/skills/qa-critical-ux/scripts/reset-native-qa-permissions.sh
Back up any needed staging data, then remove the staging application data:
rm -rf ~/Library/Application\ Support/com.hyprnote.staging
Launch through LaunchServices without an onboarding override:
open -a "Anarlog Staging" --env>
Missing app data starts onboarding normally. Do not use ONBOARDING=1; resetting permissions asynchronously after initialization can suppress the microphone prompt. Do not edit permission databases.
Complete onboarding for real: grant each permission, sign in with the Pro or trialing test account, select Anarlog cloud (anarlog) in Settings → AI, and turn on encrypted cloud sync in Settings → Sync. Use that account's existing recovery key when prompted. Creating a new key on an account that already has sync fails this item.
Checklist
1. Launch and stay responsive
- The app opens to a usable window without a hang, freeze, beachball, or startup error.
- Quit and relaunch once; startup completes and the UI remains responsive.
- Logs contain no panic, deadlock, or repeated-error loop.
2. Complete onboarding as a Pro user
- Each permission prompt appears and the grant persists.
- Sign-in completes and the app reaches the entitled state without feature-gate prompts.
- Settings → Sync turns on with the account's existing recovery key.
- A stalled, dead, or looping onboarding step fails this item.
3. Create a note and record
Create a note, type content, and verify it persists.
Start recording, then play the bundled fixture from the terminal:
/usr/bin/afplay -v 0.7 -t 180 "$PWD/crates/data/src/english_10/audio.mp3"
The timer runs, microphone and system-audio inputs have nonzero signal, live transcript words appear, and mute/unmute does not wedge the session.
Logs contain no audio_sync_probe_panicked, dropped-sample, or queue-overflow events.
Echo leakage, duplicate phrases, and generic speaker labels are informational under the out-of-scope tickets.
4. Stop and get a summary
- Stopping does not hang while settling.
- An enhanced summary and title are generated automatically, reflect the fixture content, and remain attached with the transcript.
- Restart the app and verify the note, transcript, and summary persist.
5. Sync the note and restore it
After the summary exists, open Settings → Sync. Status must reach Synced, not stay on Connecting, Syncing, Saved locally, or Sync needs attention.
Record the note title shown in the app. Quit Anarlog Staging. Do not reset permissions again. Wipe staging data once more:
rm -rf ~/Library/Application\ Support/com.hyprnote.staging
Launch through LaunchServices, sign in with the same Pro or trialing account, and enter the same recovery key.
The same note, transcript, and summary reappear after restore. A missing note, empty transcript, or missing summary fails this item.
Mid-recording deferral, chat/enhance leases, and hash-stable transcript integrity stay informational under ANLG-287.
Verify results programmatically where possible through the app's supported interfaces and logs. Do not query the app database directly.
Reporting
Report:
- candidate SHA and staging workflow URL
- app version and DMG SHA-256
- PASS or FAIL for each checklist item, with one line of evidence
- out-of-scope observations separately
A failure or SHA mismatch fails the QA run but does not automatically block a release.
1---2name: qa-critical-ux3description: QA Anarlog's critical Pro user journey on a signed staging candidate — onboarding, responsive launch, microphone and system-audio capture, automated summaries, and cloud sync.4---56# QA: Critical User Experience78Run this workflow only when the user explicitly asks for QA. A release request alone does not invoke it, and QA results do not approve or block a release.910Test only the signed staging artifact for the requested candidate:11121. The app launches and never hangs.132. Onboarding completes from scratch: permissions, sign-in, and provider setup.143. A recording captures both microphone and system audio.154. Stopping the recording produces an automated summary.165. The note syncs to the account and comes back after a local wipe.1718Everything else is outside this skill's scope.1920## Out of Scope2122Record incidental failures against the existing Linear ticket without expanding this run:2324- AEC quality: `ANLG-98`25- Automatic speaker identification: `ANLG-222`26- Real-world capture across devices, rooms, and participants: `ANLG-284`27- Auth callback and sign-out edge cases: `ANLG-285`28- Calendar, events, and notifications: `ANLG-286`29- CloudSync activity deferral and transcript integrity: `ANLG-287`30- On-device STT/LLM provider matrix: `ANLG-288`3132## Build the Staging Candidate3334Trigger `desktop_cd.yaml` with `channel=staging` from the requested candidate SHA. Verify the run's head SHA, download that run's artifact by ID, and never use a latest-staging download:3536```bash37gh workflow run desktop_cd.yaml \38 --ref <candidate-ref> \39 -f channel=staging \40 -f candidate_sha=<40-character-candidate-sha>41gh run view <run-id> --json headSha,url42gh run download <run-id> --name hyprnote-staging-macos-silicon43```4445Record the run URL and DMG SHA-256, install the artifact, and verify the app reports the expected version. The staging artifact must be signed output from that exact workflow run; do not substitute a local build.4647Leave the MacBook open on its built-in speakers and microphone with no external audio device attached.4849## Start from Onboarding50511. Fully quit Anarlog Staging.522. Reset staging permissions while the app is closed:5354 ```bash55 .agents/skills/qa-critical-ux/scripts/reset-native-qa-permissions.sh56 ```57583. Back up any needed staging data, then remove the staging application data:5960 ```bash61 rm -rf ~/Library/Application\ Support/com.hyprnote.staging62 ```63644. Launch through LaunchServices without an onboarding override:6566 ```bash67 open -a "Anarlog Staging" --env ONBOARDING=68 ```6970Missing app data starts onboarding normally. Do not use `ONBOARDING=1`; resetting permissions asynchronously after initialization can suppress the microphone prompt. Do not edit permission databases.7172Complete onboarding for real: grant each permission, sign in with the Pro or trialing test account, select Anarlog cloud (`anarlog`) in Settings → AI, and turn on encrypted cloud sync in Settings → Sync. Use that account's existing recovery key when prompted. Creating a new key on an account that already has sync fails this item.7374## Checklist7576### 1. Launch and stay responsive7778- The app opens to a usable window without a hang, freeze, beachball, or startup error.79- Quit and relaunch once; startup completes and the UI remains responsive.80- Logs contain no panic, deadlock, or repeated-error loop.8182### 2. Complete onboarding as a Pro user8384- Each permission prompt appears and the grant persists.85- Sign-in completes and the app reaches the entitled state without feature-gate prompts.86- Settings → Sync turns on with the account's existing recovery key.87- A stalled, dead, or looping onboarding step fails this item.8889### 3. Create a note and record9091- Create a note, type content, and verify it persists.92- Start recording, then play the bundled fixture from the terminal:9394 ```bash95 /usr/bin/afplay -v 0.7 -t 180 "$PWD/crates/data/src/english_10/audio.mp3"96 ```9798- The timer runs, microphone and system-audio inputs have nonzero signal, live transcript words appear, and mute/unmute does not wedge the session.99- Logs contain no `audio_sync_probe_panicked`, dropped-sample, or queue-overflow events.100- Echo leakage, duplicate phrases, and generic speaker labels are informational under the out-of-scope tickets.101102### 4. Stop and get a summary103104- Stopping does not hang while settling.105- An enhanced summary and title are generated automatically, reflect the fixture content, and remain attached with the transcript.106- Restart the app and verify the note, transcript, and summary persist.107108### 5. Sync the note and restore it109110- After the summary exists, open Settings → Sync. Status must reach **Synced**, not stay on Connecting, Syncing, Saved locally, or Sync needs attention.111- Record the note title shown in the app. Quit Anarlog Staging. Do not reset permissions again. Wipe staging data once more:112113 ```bash114 rm -rf ~/Library/Application\ Support/com.hyprnote.staging115 ```116117- Launch through LaunchServices, sign in with the same Pro or trialing account, and enter the same recovery key.118- The same note, transcript, and summary reappear after restore. A missing note, empty transcript, or missing summary fails this item.119- Mid-recording deferral, chat/enhance leases, and hash-stable transcript integrity stay informational under `ANLG-287`.120121Verify results programmatically where possible through the app's supported interfaces and logs. Do not query the app database directly.122123## Reporting124125Report:126127- candidate SHA and staging workflow URL128- app version and DMG SHA-256129- PASS or FAIL for each checklist item, with one line of evidence130- out-of-scope observations separately131132A failure or SHA mismatch fails the QA run but does not automatically block a release.