Partial translation is a number, not a feeling
Per-locale coverage against the base key set is a number you can compute every release — without it, shipping a language is a guess nobody owns.
We use Google Analytics to see which pages help people. No ads, no profiles. Privacy Policy
Compose, Kotlin, and multiplatform work — the mechanism under the symptom.
229 posts
Per-locale coverage against the base key set is a number you can compute every release — without it, shipping a language is a guess nobody owns.
A hardcoded string is not just untranslated — it is invisible to the sweep that finds untranslated text, so coverage reports complete while it is not.
Replacing a cached page is several row operations, and a reader arriving between them observes a state that never existed. Make the swap one transaction.
Recomposition scope is set by where a value is read, not where it is declared. Most Compose performance problems are a read placed higher than it needed to be.
Tests that assert on visible text break on copy edits, which trains people to weaken assertions. A test tag is a deliberate contract that survives rewording.
Starting in a platform source set means shared code never gets written. Default to commonMain and let the compiler decide what genuinely cannot live there.
Calling it a configuration cache incompatibility frames a real defect as a missing feature. The task captures a live object where it should capture a value.
The compiler verifies an expect declaration's shape on every platform and nothing verifies its meaning. The narrowest declaration is the only promise you can keep.
Thirty-six fork modules were declared in a template-owned file that syncs by overwrite. The seam built for exactly this was present, documented and empty.
Killing a build daemon discards the configuration cache, build cache, file watching and JIT state at once. Forty seconds becomes half an hour.
Scaffold arranges the app shell and hands back the insets its own bars consume. Ignoring that PaddingValues is the single most common Compose layout bug, and edge-to-edge makes it worse.
A cache and the writes against it drift apart in five distinct ways. Each ships separately, each looks reasonable, and all five look identical to a user.