Magic tap first run#5
Merged
Merged
Conversation
Introduce a new First Spell (Magic Tap) onboarding flow and screenshot coverage. Adds iOSMagicTapFirstSpellView and iOSFirstSpellVoiceOverRequiredView, integrates a FirstSpellStage into iOSFirstRunView, and wires new cases into iOSScreenshotScene and iOSScreenshotRootView. Adds localized strings for the flow, updates UI tests to capture four new screenshot states (entry, VO required, ready, success), and includes screenshot/fastlane assets and memlog design notes. Also implements accessibility magicTap handling and deterministic screenshot states for consistent captures.
Refactor the Basics sequence UI to use selectable step cards with explicit status (completed/current/locked), visual selection state, and Magic Tap support for launching the selected playable step. Track selected and launched indices to correctly advance the sequence after returning from a game and announce/focus the selected step for VoiceOver. Enhance VoiceOver onboarding screens: add state tracking, status messages, announcement posting, focus management for the Continue button, and a re-check button that verifies VoiceOver before continuing. Update Magic Tap first-spell view to perform the appropriate primary action (cast spell or continue) on Magic Tap and focus the Continue control after learning the spell. Add and update localized strings for new statuses, accessibility hints, and voiceover messages. (Includes an incidental workspace user state file change.)
Add magictap background and spellbook sigil assets and their Contents.json, replace usages of "simon_room_bg" with "magictap_bg" in first-run views, and swap the SF Symbol placeholder for the imported "magictap_spellbook_sigil" image. Update Fastlane screenshot lane to store Xcode artifacts under build_results/fastlane_screenshots (adjust derived data and xcresult paths and create the artifacts dir). Regenerate screenshots in docs/ and fastlane/screenshots/, add memlog design assets/docs, and apply related script tweaks (extract_screenshots.sh, build_and_test.sh, remove_white_background.py).
Update existing magictap_spellbook_sigil.png in the RA11y-iOS asset catalog and memlog design assets, and add new design variants to memlog/requirements/Design/Assets/magictap: magictap_spellbook_sigil3.png, magictap_spellbook_sigil4.png, magictap_spellbook_sigil5.png, magictap_spellbook_sigil5_llm.png, and magictap_spellbook_sigil_first.png. These additions provide multiple sigil variants for use in the app and design system.
Major expansion of ScreenAuditKit/README.md into a full reference (TOC, pipeline, contract format, visual inspectors, CLI, reports, testing, roadmap, etc.). Updated and refreshed screenshot assets under docs/screenshots/** and fastlane/screenshots/** for multiple device sizes. Added memlog/VOAccessibilityResearch.md. Minor Swift change: added a comment in iOSFirstSpellVoiceOverRequiredView.focusContinueButton noting the 250ms VoiceOver settle delay.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
feat: First Spell (Magic Tap) onboarding + QuestPaintScreen unification
UI polish pass still pending — layout and flow are functional and accessible, visual refinements are the remaining gap.
First Spell (Magic Tap) onboarding
Adds a new three-stage sub-flow inside iOSFirstRunView before the Basics sequence: entry screen, VoiceOver required gate, and Magic Tap practice surface. The gate screen detects live VoiceOver state, has a re-check button, posts accessibility announcements on state change, and uses @AccessibilityFocusState to land on the Continue button. The practice surface owns .accessibilityAction(.magicTap) at the screen level so no specific element needs focus — casting the spell moves VoiceOver directly to Continue.
Production art shipped: magictap_bg (warm torchlit backdrop, replaces borrowed simon_room_bg on all three first-run screens) and magictap_spellbook_sigil (transparent hero image). Phase 4 prompt sheet, asset pipeline doc, and Phase 3 mockup verification ticket all added. Four new screenshot scenes registered and captured across iPhone and iPad (FirstSpellEntry, FirstSpellVORequired, FirstSpellReady, FirstSpellSuccess).
Basics sequence improvements
Refactored from a static list to selectable step cards with completed/current/locked status badges. Magic Tap launches the selected playable step. launchedStepIndex tracking prevents phantom sequence advancement on back-navigation without completing a game. VoiceOver focus and announcement fire on appear and after selection.
QuestPaintScreen unification
QuestPaintScreen gains optional accessibilityIdentifier and accessibilityLabel parameters — when set, the scaffold owns .accessibilityElement(children: .contain) on the scroll column. The three first-run screens (entry, first spell, basics) now use QuestPaintScreen directly, eliminating their hand-rolled GeometryReader + ScrollView + ZStack layouts.
Banishment (hard-coded 600pt), Dungeon (hard-coded 680pt), and Enchanter L0/L1/L2 (hard-coded 600pt contentMaxWidth with HStack+Spacer centering) prologues now call QuestPaintContentMetrics via GeometryReader. All land at the authoritative 620pt iPad reading column. Dungeon passes gameKind: .scrollHunt for its gutter bonus. Enchanter L3 (timed playfield) is untouched.
Banishment cleanup
Stale "SF Symbol greybox" language removed from doc comments — raster assets are live, SF Symbols are fallback only. gestureZReference clarified as prologue-only reference art excluded from trap heuristics. DesignTicket-BanishmentMockupVerification.txt added to close the Phase 3 paper trail, including inline Lights Off and VoiceOver contract audits (both PASS).
ScreenAuditKit
README rewritten from a 52-line stub into a full reference covering the pipeline, architecture, CLI, contract format, all nine rule IDs, visual inspector algorithms, report schemas, RA11y integration, OCR boundary, severity model, exit codes, test coverage, current state, and roadmap.
Known gaps
Spacing and type hierarchy on the Magic Tap practice surface needs a final pass
Entry screen card styling not yet aligned with v07 mockup
readyCard paragraph spacing to be reviewed