# TagLauncher 8.2.8 Build 20260630.0128 Code Freeze ## Freeze Scope - Version: `8.2.8` - Build: `20260630.0128` - Branch: `codex/pro-custom-hotkeys-8.2.0` - Freeze tag: `v8.2.8-build20260630.0128` - Freeze commit: the commit pointed to by the freeze tag. - Freeze time: `2026-06-30 03:37:56 +0800` - Operator: Codex This freeze captures the current TagLauncher Pro feature enhancement batch and the blocking Quick Search click-launch fix for App Store handoff. It intentionally excludes unrelated dirty workspace changes under legacy `docs/`, old `src/Release/AppStore-7.8.15...` screenshot deletions, local planning/canvas documents, and `.codex-sessionhistory/` evidence files. ## Included Product Changes - Pro custom hotkeys: - Free users see Pro-gated custom hotkey controls. - Pro users can customize the main AppGrid and global Quick Search shortcuts. - Shortcut recording suspends active global shortcuts during capture and restores them after success, failure, cancel, tab switch, window close, or entitlement change. - Validation allows `Option+Space`, rejects unsafe/invalid shortcuts, and keeps default fallback behavior for free users or invalid saved values. - Pro tag custom colors: - `TagDef.customColor` / `TagCustomColor` support optional sRGB custom colors while preserving old tag data. - Custom colors propagate to AppGrid group titles, tag navigation, and tag editing. - Free users can keep existing custom colors and switch back to base colors, but cannot set new custom colors. - Pro notes quota: - Free users can save 3 custom app notes. - Pro users can save unlimited app notes. - Editing existing notes remains allowed, and deleting notes releases quota. - Pro display modes and theme preview: - Colorful container and colorful grid display modes are Pro-gated. - Free users can preview these display modes for 5 minutes using the same preview model as Pro themes. - Settings / Pro UI: - Adds a dedicated `Pro` settings tab between Data and About. - Keeps settings tab icons line-style and compressed for 8 tabs. - Moves the Pro comparison table into the Pro tab. - Removes repeated large Pro cards from About / Data / Tags / Hotkeys pages. - Removes the restore purchase button from Pro-unlocked states. - About now only keeps app information, help, and contact content. - Localization: - Updates 29 language packs for Pro feature copy, Quick Search hotkey settings, bubble tip settings, and Pro comparison states. - Removes old `5 notes` quota wording from the Pro notes feature copy. - Quick Search blocking fix: - Quick Search panel is an activating key panel and activates TagLauncher before ordering front. - Return / Enter keeps both command delegate and target/action submit fallback. - Mouse / trackpad clicking result rows is handled through `QuickSearchResultRowView.mouseDown` and a panel-level `sendEvent` fallback. - The panel fallback first tries `hitTest`, then recursively scans visible result row geometry by window point, avoiding SwiftUI / `NSHostingView` / `NSScrollView` hit-test gaps. ## Included Project Governance Changes - `AGENTS.md` and `CODE_GOVERNANCE.md` now include a UI Preview Gate for non-trivial TagLauncher UI changes. - The gate requires UI contracts, high-fidelity preview or equivalent marked screenshots, user confirmation before production UI edits, and real rendered / interaction evidence before visual PASS. - These governance changes do not affect the binary build, but are included in the freeze commit as part of this round's delivery guardrails. ## QA Evidence Passed before freeze: - `bash Scripts/quick_search_launch_contract_qa.sh` - `bash Scripts/pro_custom_hotkeys_qa.sh` - `bash Scripts/pro_feature_gate_qa.sh` - `git diff --check -- CODEGRAPH.md src/CHANGELOG.md src/Apptag/Info.plist src/Apptag/QuickSearch.swift src/Scripts/quick_search_launch_contract_qa.sh` - `APP_BUILD=20260630.0128 bash build.sh` - `bash make_dmg.sh` - `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app` - `hdiutil verify build/TagLauncher.dmg` Additional freeze-time artifact verification: - Mounted `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg` read-only. - DMG contents include: - `TagLauncher.app` - `Applications` symlink. - Mounted app metadata: - `CFBundleShortVersionString = 8.2.8` - `CFBundleVersion = 20260630.0128` - Mounted app signature verification: - `codesign --verify --deep --strict --verbose=2 /tmp/TagLauncherFreezeMount/TagLauncher.app` - Result: valid on disk and satisfies designated requirement. - DMG verification: - `hdiutil verify /Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg` - Result: checksum is valid. - Quick Search real GUI click verification: - Opened the built TagLauncher app. - Pressed `Space` through GUI automation to open Quick Search. - Typed `Calculator`. - Confirmed `Calculator` was not running before click. - Clicked the `Calculator` candidate row using a real left-click automation event, not Return. - Confirmed `Calculator` launched and became the frontmost app. - Cleaned up by quitting Calculator. - Screenshot evidence: `/Users/ar/Projects/Taglauncher/.codex-sessionhistory/assets/2026-06-30-quicksearch-calculator-click-pass.png` - Screenshot SHA256: `f50d2cc5908b43309ba58ec6be0001d350391899c17a323d796e7b66cde8d7d7` ## Build Artifacts - DMG: `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg` - DMG SHA256: `47b7d7127781a7c5dbf709b6a9f65be1baa9f1f0f5fd1e93b531fcc61eaaf61a` - Mounted executable SHA256: `27d39957070512e8849b876edaa736ebd89a05e46b04e3312a4ffa4995885b32` Note: after DMG creation, `build/TagLauncher.app` was no longer present in the build directory root. Freeze-time app metadata and signature checks were therefore performed against the app inside the mounted DMG. ## CODEGRAPH Check - Checked: `/Users/ar/Projects/Taglauncher/CODEGRAPH.md` - Change type: - Pro entitlement policy and preview model changes. - Settings / Pro tab UI ownership and protected behavior. - Tag custom color data model and display propagation. - Custom hotkey storage / validation / registration behavior. - Quick Search key panel, Return fallback, and mouse-click launch fallback. - New QA script entries. - Conclusion: updated in this freeze. ## Excluded Dirty Workspace Changes The following dirty areas are intentionally not included in this freeze tag because they are unrelated to the 8.2.8 App build or their ownership is not established in this release handoff: - Legacy `docs/` deletions and website assets. - Old `src/Release/AppStore-7.8.15-20260605.2337/...` screenshot deletions. - Existing edits in old release metadata under `src/Release/AppStore-7.9.1...` and `src/Release/AppStore-7.9.4...`. - Untracked planning / knowledge documents under `Docs/`, `canvas/`, and root-level local notes. - `.codex-sessionhistory/` records and screenshots, which remain local evidence rather than release source. ## Rollback To inspect the frozen source without changing the current branch: ```bash git switch --detach v8.2.8-build20260630.0128 ``` To revert this freeze from a descendant branch: ```bash git revert v8.2.8-build20260630.0128 ``` ## App Store Handoff This code freeze must be completed before any App Store submission work proceeds. App Store upload / submission is outside this freeze step and should start only after the freeze commit and tag exist. ## Remote Push Status - Local freeze commit and local annotated tag were created successfully. - Remote push attempted: - `git push origin codex/pro-custom-hotkeys-8.2.0` - `git push origin v8.2.8-build20260630.0128` - Remote push result: not pushed. - Reason: GitHub HTTPS authentication is not available in this environment: `fatal: could not read Username for 'https://github.com': Device not configured`. - Impact: the local repository has a fixed commit and tag for freeze / rollback. Remote backup is still pending until GitHub credentials are available.