iOSSwift
#196
2026-06-216 min read

accessibilityReduceMotion should be a contract. Phase D made it one.

Phase D of an iOS budget app Cursed Energy feature adds five animated layers across sigil, energy, claim, level-up, and streak milestone surfaces. Every one checks accessibilityReduceMotion before firing — a hard gate, not a hint. The uniformity was a rule established on the first addition and held through to the fifth.

Read post
Build LogDVLAW
#197
2026-06-215 min read

Four expired slots and the SLA recovery rule we learned in sequence

Between 12 and 14 June, four scheduled DVLAW slots expired without autonomous recovery. Each failure confirmed the same thing: sibling cancel, substitute fallback, and a missed-slot alarm don't work in isolation. They're one system.

Read post
iOSSwiftUI
#198
2026-06-215 min read

The Accounts calendar strip passed every preview check. On my test iPhone, it answered the wrong question.

The Phase K Accounts screen shipped with a horizontally-scrollable calendar strip. Device QA on my test iPhone showed it was answering the wrong question, so mid-design I deepened Phase O to a three-level navigation flow: inline calendar, full-screen month view, day mode. SwiftUI preview had nothing to say about any of it — the back-nav regression that followed only surfaced under a real thumb.

Read post
DVLAWBuild Log
#199
2026-06-215 min read

The sibling-rehash rule: wired in the prompt, enforced in the filter

The picker generates three thesis variants per upgrade decision. Multiple upgrade taps on the same topic, same source material, different angles: the pipeline could queue two articles that were really one. Fixing that took two layers — one in the drafter prompt, one in the substitute filter — because prompts are probabilistic and filters are not.

Read post
Build LogEditorial
#200
2026-06-206 min read

25 PRs, a rescued BoE fetcher, and a composer taught restraint: the editorial pipeline ships

PR #53 merged on 12 June: the first article through the full X.8 grounded editorial pipeline. The morning sweep showed three gaps that had been quietly open — a stale PR that would have deleted the BoE rates fetcher, a composer inferring beyond its sources, and a design sprint that completed the day after. All three closed within 72 hours.

Read post