<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Peter Lavskiy · Engineering notes</title><description>Engineering notes from shipping iOS apps: speech and audio on iOS, Swift concurrency, testing, and building a solo app with Claude Code.</description><link>https://lavskiy.dev/</link><language>en</language><item><title>The retry that parsed and billed twice: idempotency for an LLM pipeline</title><link>https://lavskiy.dev/blog/llm-import-safe-to-retry/</link><guid isPermaLink="true">https://lavskiy.dev/blog/llm-import-safe-to-retry/</guid><description>Production failures in a Claude parsing pipeline on Cloudflare Workers: a retry that billed twice, a 429 disguised as a bad file, a 403 from Hong Kong.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>Cloudflare Workers</category><category>Claude</category><category>Reliability</category><category>iOS</category><category>Backend</category></item><item><title>Six months of Claude Code on a shipping iOS app: the rules, not the prompts</title><link>https://lavskiy.dev/blog/claude-code-solo-ios-app/</link><guid isPermaLink="true">https://lavskiy.dev/blog/claude-code-solo-ios-app/</guid><description>A senior iOS engineer&apos;s real setup for Claude Code on a shipping app: a CLAUDE.md written as an onboarding doc, 771 tests as the gate, an allow list that drifted, and a worktree sprint that half worked.</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>Claude Code</category><category>iOS</category><category>Swift Testing</category><category>Xcode</category><category>Engineering</category></item><item><title>SpeechAnalyzer in production on iOS 26: stale finals, audio timestamps, and a bug that survived stop()</title><link>https://lavskiy.dev/blog/speechanalyzer-ios-26-in-production/</link><guid isPermaLink="true">https://lavskiy.dev/blog/speechanalyzer-ios-26-in-production/</guid><description>Three months of SpeechAnalyzer and SpeechTranscriber in a live iOS 26 app: the setup, the late final that fired cues early, the vocabulary API that fails silently, and why the simulator cannot test any of it.</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>Swift</category><category>Speech</category><category>iOS 26</category><category>AVFoundation</category><category>Swift Concurrency</category></item></channel></rss>