From Aaron's keyboard to build 11.
14 h 24 min, one restart.

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.

Totals.

Counted at the end of the day.

51
changes recorded, in 12 bundles
28
helpers run by Fable 5.1: 7 read the app, 7 double-checked their findings, 11 built the bundles, 3 patched
125
files touched, 33 of them new
+6078 / −2143
lines of code added and removed
437 to 493
automatic checks of the app's logic, all passing
63 to 71
automatic run-throughs of the real screens, all passing in one 21-minute session
115
findings from the review, each checked a second time
83
held up; 5 were wrong, 6 were repeats, 4 already fixed, 8 need a real phone

The day in motion.

Blue is a bundle landing, red is something that went wrong, yellow is the upload.

Clock
22:09
Bundles landed
12
Checks passing
493
Latest
Build 11 on TestFlight

Splits.

Each bundle landed on its own and was checked on one simulated iPhone before the next one started.

  1. Aaron's report, Il Lido. After the Cottesloe run: the number keyboard on Actual kms had no way off the screen, so it hid the bottom of the roster.
  2. Work starts. Three helpers check every place the app asks for typing. Only the two number fields had the problem.
  3. Keyboard fixed. A Done key above the number pad, scrolling the list puts it away, a distance typed with the keyboard still up is kept, and a typo like 8..2 shows an error instead of quietly keeping the old distance. Six automatic run-throughs, including Aaron's exact steps.
  4. Review written up, safety point set. Seven helpers read the whole app with Swift know-how loaded: 106 findings. Seven more checked each one against the code: 83 held up, 9 new ones found. A roll-back point was saved before any fix.
  5. Plan: nine bundles in four rounds. Each bundle touches its own files, so they can be built side by side. Opus 5.5 takes the tangled work, Sonnet 5.5 the mechanical, with Fable 5.1 planning, merging and checking.
  6. Screen fixes landed. One new run-through found that the first use of dictation on a fresh install crashed the app. Fixed the same hour.
  7. Mac restart. The iPhone simulator service crashed nineteen times with three simulators starting while three builds ran. New rule: one simulator at a time.
  8. Sync fixes landed. A held-back submission can be merged or overwritten again, and two copies of the sync engine can never send the same row.
  9. Test clean-up landed. The logic checks ran five times over to prove they no longer need to queue.
  10. Accessibility landed. Better VoiceOver labels and announcements.
  11. Outbox and background sending landed. One sender at a time, and a locked phone means try later, not give up.
  12. Tidy-ups landed. Faster look-ups of saved data; three oversized test files split.
  13. Platform details landed. Better logging that never records the secret, old reminder taps expire, dead code removed.
  14. Settings and wording landed. A Siri row, clearer messages, test scaffolding kept out of the shipped app.
  15. Shared sync messages landed. One wording for sync results across every screen.
  16. The guest history freeze. Two run-throughs hung with the app at full speed. Two guesses at the cause were wrong. Testing each bundle in turn found it in the last one; putting one line back fixed it.
  17. Data safety landed. If the app's saved data ever fails to open, it is set aside and kept, never deleted, and the app says so once.
  18. Everything green. A release build, then every screen run-through in one go: 71 checks, no failures.
  19. Colin's calls. The darker colour scheme rejected, the originals stay. The data-safety wording approved. Two more fixes picked to do before the build.
  20. Faster reading of saved data landed.
  21. Confirm waits for a real change. The prefilled distance on a fresh run no longer enables Confirm by itself.
  22. Build 11 packaged. The web and sheet checks passed, the build number went up, the TestFlight notes were written first. Apple refused the upload: a developer agreement needed Colin's signature.
  23. Build 11 on TestFlight. Accepted by Apple and ready on Colin's phones. Notes attached.
  24. The sweep. Free space back from 86 GB to 335 GB. See below.

The bundles.

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.

BundleWhat it does for the appBuilt byResult
Screen fixesA guest-history reminder that never appeared now does; voice entry no longer finishes earlyOpus 5.5landed
Sync fixesHeld-back submissions can be merged or overwritten; one sender per phoneOpus 5.5landed
Test clean-upSteadier automatic checks that no longer need to queueSonnet 5.5landed
AccessibilityVoiceOver labels, values and announcementsSonnet 5.5landed
Outbox and background sendingSending in the right order, even when the app is in the backgroundOpus 5.5landed
Tidy-upsFaster look-ups of saved data; oversized test files splitSonnet 5.5landed
Platform detailsLogging, expiring reminder taps, dead code removedSonnet 5.5landed
Settings and wordingA Siri row, clearer messages, no test scaffolding in the shipped appSonnet 5.5landed
Shared sync messagesOne wording for sync results on every screenOpus 5.5landed
Data safetySaved data that cannot open is set aside and kept, never deletedOpus 5.5landed
Colour and contrastDarker tiles under white text, with a before-and-after page of 64 screenshotsOpus 5.5set aside, the original colours stay
Confirm waits for a real changeThe prefilled distance alone no longer enables ConfirmOpus 5.5landed
Faster reading of saved dataOne reader shared across the app instead of a new one each timeSonnet 5.5landed

What changed.

The parts you'll notice. The rest is plumbing.

  • A Done key above the number pad on Actual kms and Add Run, and scrolling the list puts the keyboard away. A distance typed with the keyboard still up is kept when you tap Confirm.
  • Honest distances. A typo like 8..2 shows an error and disables Confirm or Add. Leaving the field blank still means "keep what the sheet has".
  • Confirm waits for a real change. The prefilled distance on a fresh run no longer enables it on its own.
  • The first use of dictation no longer crashes at the permission prompt on a fresh install.
  • The "Review local guest history" reminder now appears when there is something to review. It never had.
  • Outbox: a held-back submission can be merged or overwritten, not only discarded. One sync runs at a time. The Unsynced tile counts guest changes too, and says "1 submission".
  • Settings has a Siri and Shortcuts row, and the reminders switch waits while it updates.
  • Messages are plain text with a coloured symbol, and VoiceOver reads each problem once. Rows read "Checked, Voice".
  • A reminder or Siri shortcut older than ten minutes is ignored instead of opening a run you have forgotten about.
  • If the app's saved data ever fails to open, it is set aside and kept, never deleted, and a one-time notice says where it went.

Found on course.

Six things the review did not list. Each one left a rule in the handoff notes.

Crash

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.

Freeze

Guest history

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.

Tools

Simulator meltdown

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.

Process

A job started early

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.

Tools

A false pass

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.

Release

Apple's agreement

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.

The sweep.

Free space fell from 346 GB in the morning to 86 GB by evening. The files were never the problem.

25 GB
of real build output and test results across seventeen working copies
35
stale simulated iPhones deleted, 57 down to 22
54 GB
reported for a folder that is only a window onto the simulator, not real files
335 GB
free after Time Machine's local snapshots were cleared