Repository navigation
Fix the iOS app's open bugs before TestFlight - #234
Merged
Merged
Conversation
A placed visual item was about 20 points taller than an empty slot (its padding around the visual against a fixed min-h-16), so everything below moved as items were placed, and the pool's dashed spaces shrank to that min-h-16 once their item left. Each visual is now laid out at one width wherever it sits (half the column, orderItemWidth), and every card, open slot, and dashed space is as tall as the tallest item. Tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…S app Only a concept's visual was measured while the screen before was read, so option cards and order items opened at 240 points and jumped to their height, and a hotspot waited on its parts. The player now measures every HTML visual on the next screen at the width it'll be laid out at (visuals-ahead.ts, from the screens' own classes in visual-widths.ts): a question's visual, each option card at the widths it can take, order items, and a hotspot's parts. A card's panel waits for its layout instead of measuring at the column's width first. The WebView still takes a second or more to draw, so a frame now fades in once its document has loaded instead of popping in over an empty window. Tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After a check the tray grows to show the feedback, and on a long question (map vs forEach's scenario) it covered the marked answer. Marked controls now register with the player (answer-marks.ts), and 250 ms after a check, or after Why? opens, the lowest of them scrolls up clear of the tray, never past its own top, as the web's phone layout does. An option card now takes its mark through Control too, coloring only its border. Tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The mark badge is hidden from accessibility and nothing took its place, so VoiceOver read a checked option the same as before the check. Every answer control (option rows and cards, chips, sort and order items), and an HTML hotspot's parts, now carry the mark in words as their accessibility value, which VoiceOver reads right after the label: "correct", "not right", or "partly right", the player's own screen-reader words from player-core, in the player's language. Tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the server out of reach a lesson said only that it didn't load, the lesson and home requests had no timeout (a server that never answered left a spinner up), and the test lessons on the signed-out home just vanished. The API fetch now gives up after 15 seconds, body and all, and turns a request that fails to reach the server into an OfflineError; the visuals' stylesheet and the test lesson list take the same timeout. A lesson, the Explore feed, and the test lessons then say "Couldn't reach learn.ninja. Check your connection and try again." (a new player string, in every locale) with Try again. Tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ills shadow-xs is Tailwind 4's; Tailwind 3 has none, so every card and control drew no shadow. It's now in the app's theme as the web's (1 pixel down, 2 of blur, 5% black). A shadow needs a solid fill for iOS to work out its shape, and React Native kept advising "cannot calculate shadow efficiently": a control's surface and its pressed shade are now the input tint laid over the page (solid), a mark's 10% tint is mixed into the page's color, the clear states (a used word, a settled pair, a rewound option, a blank's gap) drop the shadow by style, and a filled button shows its press by fading instead of with a translucent fill. No advice in Metro through a lesson. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Open items 2, 3, 4, 5, 8, and 9 are rows 15 to 20 of the fixed table, each with its commit and, where the fix shows, its simulator screenshot; their places in the open list say where they went, so nothing is renumbered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
Six open bugs from the 2026-11-04 iOS bug hunt (
plans/ios-app-bugs.md, open items 2, 3, 4, 5, 8, and 9), fixed before TestFlight testers hit them on their first lesson. One commit each; the hunt's fixed table has them as rows 15 to 20.38de93eaa4f55544ed0b63a035b4shadow-xsin Tailwind 3shadow-xsis in the theme; control surfaces, mark tints, and pressed buttons are solid fills, so Metro's shadow advice is gonefafc9e5f73e2a4Each visible fix was checked on the iPhone 18 Pro simulator against a local server; screenshots are in
plans/ios-app-bugs-{visuals,tray,offline,order}.png. VoiceOver wasn't heard on the simulator, and the shadow itself is too faint to see on dark. New tests cover the layout widths, the visuals measured ahead, the marked-answer scroll, the mark words, and the request timeout.npm run checkis green.🤖 Generated with Claude Code