Dictation on a fresh install
The first time someone used dictation on a new install, the app crashed at the permission prompt. The review missed it; a new automatic run-through caught it.
Attendance app, Thursday 2 October 2026
Over coffee at Il Lido after the Cottesloe run, at about 07:45, Aaron mentioned that the number keyboard on the checklist could not be put away. The work started at 10:37. By 22:09 a new build of the app, number 11, was on TestFlight for Colin, with that fix, a full review of the app, and ten bundles of improvements behind it. Claude Fable 5.1 orchestrated the day in Claude Code; Opus 5.5 and Sonnet 5.5 did the reading and the building. This sheet records the day.
Counted at the end of the day.
Blue is a bundle landing, red is something that went wrong, yellow is the upload.
Each bundle landed on its own and was checked on one simulated iPhone before the next one started.
8..2 shows an error instead of quietly keeping the old distance. Six automatic run-throughs, including Aaron's exact steps.Thirteen bundles of work, each built by one helper and landed as one step, so any one of them can be taken out again on its own.
| Bundle | What it does for the app | Built by | Result |
|---|---|---|---|
| Screen fixes | A guest-history reminder that never appeared now does; voice entry no longer finishes early | Opus 5.5 | landed |
| Sync fixes | Held-back submissions can be merged or overwritten; one sender per phone | Opus 5.5 | landed |
| Test clean-up | Steadier automatic checks that no longer need to queue | Sonnet 5.5 | landed |
| Accessibility | VoiceOver labels, values and announcements | Sonnet 5.5 | landed |
| Outbox and background sending | Sending in the right order, even when the app is in the background | Opus 5.5 | landed |
| Tidy-ups | Faster look-ups of saved data; oversized test files split | Sonnet 5.5 | landed |
| Platform details | Logging, expiring reminder taps, dead code removed | Sonnet 5.5 | landed |
| Settings and wording | A Siri row, clearer messages, no test scaffolding in the shipped app | Sonnet 5.5 | landed |
| Shared sync messages | One wording for sync results on every screen | Opus 5.5 | landed |
| Data safety | Saved data that cannot open is set aside and kept, never deleted | Opus 5.5 | landed |
| Colour and contrast | Darker tiles under white text, with a before-and-after page of 64 screenshots | Opus 5.5 | set aside, the original colours stay |
| Confirm waits for a real change | The prefilled distance alone no longer enables Confirm | Opus 5.5 | landed |
| Faster reading of saved data | One reader shared across the app instead of a new one each time | Sonnet 5.5 | landed |
The parts you'll notice. The rest is plumbing.
8..2 shows an error and disables Confirm or Add. Leaving the field blank still means "keep what the sheet has".Six things the review did not list. Each one left a rule in the handoff notes.
The first time someone used dictation on a new install, the app crashed at the permission prompt. The review missed it; a new automatic run-through caught it.
One screen kept redrawing itself forever once the promotion screen opened on top of it. Guessing cost more than testing: trying each bundle in turn found the one line, and putting it back fixed it.
The iPhone simulator service crashed nineteen times with three simulators starting while three builds ran. A restart cleared it. Rule: one simulator at a time.
A queued job watched for a phrase that an earlier step had already printed, so two jobs shared one simulator and 34 of 35 checks were void. Rule: wait for the previous job to finish, not for a phrase.
After a failed build, the checks quietly ran the previous build and reported a pass. Rule: rebuild after each bundle lands and only test what just built.
Apple refused the upload until Colin signed a new developer agreement, and the signature took a few minutes to apply everywhere. The upload tool now explains Apple's refusal in plain words.
Free space fell from 346 GB in the morning to 86 GB by evening. The files were never the problem.