From d6d02f788c955857f31697f3005720967c7994a7 Mon Sep 17 00:00:00 2001 From: Sprite Date: Wed, 9 Sep 2026 17:45:09 +0000 Subject: [PATCH] Second on-device feedback round: eight fixes, and a measured retry policy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ghost bookcase was an inset bug, not a data bug. LocationsScreen's list branch dropped the Scaffold's innerPadding while its empty-state branch applied it, so the first bookcase row rendered under the top app bar and was invisible. Both of the user's bookcases were always real; they just could not see the first one, so they made a second. Every other screen was checked for the same class of bug — Locations was the only one. Metadata lookup is now designed against a measurement rather than a guess (docs/METADATA-SOURCES.md § "Measured again 2026-09-09"): - Google Books keyless is dead for everyone, permanently. The user's residential-IP test returned a quota error naming a shared anonymous PROJECT, not an IP, so the earlier "your phone may well get answers" guess is wrong and is now marked CORRECTED in place. Because combine() turns any Failed-with-no- Found into Unavailable, that standing failure meant every Open Library hiccup surfaced as "one or more sources couldn't be reached". The API key is deliberately deferred by the user; this commit leaves the source broken. - Our own timeouts were manufacturing failures. Over 30 live requests, 13% failed — all fast TLS resets under 2.5s — while successes ran to a median of 4.3s and a max of 22.0s. Two of 26 successes exceeded the old 12s callTimeout, so ~8% of lookups that were about to work were cancelled and reported as unreachable. Timeouts are now 25s/20s/20s. That asymmetry (cheap failures, expensive successes) is what RetryPolicy encodes. It retries TRANSPORT and SERVER_ERROR with a 250ms/750ms jittered backoff, and deliberately does not retry TIMEOUT (the budget is already spent) or RATE_LIMITED (hammering a quota is how an intermittent block becomes a permanent one — this project's IP has already been refused outright once during research). SourceResult.Failed now carries a FailureKind alongside its human reason, and the reason names the specific failure ("tls connection reset, 3 attempts") instead of a generic "network error". That string was already threaded to the UI and dropped on the floor; LookupFailedSheet now renders it. It is the only diagnostic channel we have from a real phone, so nothing may parse it. Also from the same feedback round: - Grouped ModalBottomSheet shelf picker, replacing two near-duplicate flat dropdowns that listed every bookcase x shelf pair. Sections per bookcase, empty bookcases say so, and the most recently used shelf is pinned on top. - The recent shelf persists across sessions (SettingsStore.LAST_SHELF_ID) and is cleared on sign-out. It is offered, never pre-selected: the user weighed that and chose one tap over the risk of silently mis-shelving a book. - Locations dialogs and the manual-ISBN dialog auto-focus their first field. - The library filter menu offers "Add a bookcase to enable filtering" instead of a lone "All books" that is already the active state and cannot be changed. - The Locations button is Material Symbols' "shelves" (a bookcase) instead of Warehouse (a barn). material-icons-extended 1.7.8 has no bookcase glyph. - The scan sheet drops "you can lower the book" — the ISBN echo already says it. assembleDebug exit 0; testDebugUnitTest 172 tests, 1 skipped, 0 failures (was 138); verifyPaparazziDebug exit 0; assembleRelease exit 0, signed with the real release key; zero "always 'false'" warnings on a --rerun-tasks rebuild. Three soft spots are recorded in docs/HANDOFF.md and are NOT verified: the ghost-bookcase Paparazzi snapshot renders a lookalike of the screen rather than the screen, the auto-focus calls swallow their own failure and no emulator exists here, and the picker opens as a sheet stacked on the save sheet. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LSnVqWdiQNEcPFRq1hGZAi --- .../java/org/modg/bookshelf/AppContainer.kt | 19 +- .../data/metadata/GoogleBooksClient.kt | 26 ++- .../data/metadata/OpenLibraryClient.kt | 25 ++- .../bookshelf/data/metadata/RetryPolicy.kt | 110 ++++++++++ .../bookshelf/data/metadata/SourceResult.kt | 88 +++++++- .../bookshelf/data/prefs/SettingsStore.kt | 23 ++- .../ui/components/ShelfPickerSheet.kt | 180 +++++++++++++++++ .../modg/bookshelf/ui/detail/DetailScreen.kt | 38 ++-- .../bookshelf/ui/detail/DetailViewModel.kt | 18 +- .../bookshelf/ui/library/LibraryScreen.kt | 33 +-- .../bookshelf/ui/locations/LocationsScreen.kt | 34 +++- .../org/modg/bookshelf/ui/scan/ScanScreen.kt | 77 ++++--- .../modg/bookshelf/ui/scan/ScanViewModel.kt | 74 ++++--- app/app/src/main/res/drawable/ic_shelves.xml | 15 ++ .../data/metadata/GoogleBooksClientTest.kt | 8 +- .../data/metadata/OpenLibraryClientTest.kt | 8 +- .../data/metadata/RetryPolicyTest.kt | 191 ++++++++++++++++++ .../bookshelf/data/prefs/SettingsStoreTest.kt | 73 +++++++ .../ShelfPickerSheetPaparazziTest.kt | 78 +++++++ .../ui/components/ShelfPickerSheetTest.kt | 53 +++++ .../ui/detail/DetailViewModelTest.kt | 77 +++++++ .../bookshelf/ui/scan/ScanViewModelTest.kt | 100 +++++++++ .../ui/screens/DetailScreenPaparazziTest.kt | 1 + .../screens/LocationsScreenPaparazziTest.kt | 22 +- .../ui/screens/ScanScreenPaparazziTest.kt | 2 + ...GroupedLight_shelf-picker-grouped-dark.png | Bin 0 -> 24655 bytes ...roupedLight_shelf-picker-grouped-light.png | Bin 0 -> 24497 bytes ...seLight_locations-single-bookcase-dark.png | Bin 0 -> 26683 bytes ...eLight_locations-single-bookcase-light.png | Bin 0 -> 28359 bytes ...eetLight_scan-lookup-failed-sheet-dark.png | Bin 28681 -> 32689 bytes ...etLight_scan-lookup-failed-sheet-light.png | Bin 28793 -> 32720 bytes ...ngSheetLight_scan-searching-sheet-dark.png | Bin 17442 -> 13743 bytes ...gSheetLight_scan-searching-sheet-light.png | Bin 17255 -> 13644 bytes docs/HANDOFF.md | 87 ++++++++ docs/METADATA-SOURCES.md | 77 +++++++ logs/G-diagnostics.sid | 1 + logs/G-diagnostics.summary | 19 ++ logs/H1-screens.sid | 1 + logs/H1-screens.summary | 4 + logs/H2-picker.sid | 1 + logs/H2-picker.summary | 10 + logs/WAVE6-DONE | 14 ++ tasks/H1-screens.txt | 137 +++++++++++++ tasks/H2-picker.txt | 143 +++++++++++++ 44 files changed, 1740 insertions(+), 127 deletions(-) create mode 100644 app/app/src/main/java/org/modg/bookshelf/data/metadata/RetryPolicy.kt create mode 100644 app/app/src/main/java/org/modg/bookshelf/ui/components/ShelfPickerSheet.kt create mode 100644 app/app/src/main/res/drawable/ic_shelves.xml create mode 100644 app/app/src/test/java/org/modg/bookshelf/data/metadata/RetryPolicyTest.kt create mode 100644 app/app/src/test/java/org/modg/bookshelf/data/prefs/SettingsStoreTest.kt create mode 100644 app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetPaparazziTest.kt create mode 100644 app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetTest.kt create mode 100644 app/app/src/test/java/org/modg/bookshelf/ui/detail/DetailViewModelTest.kt create mode 100644 app/app/src/test/java/org/modg/bookshelf/ui/scan/ScanViewModelTest.kt create mode 100644 app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-dark.png create mode 100644 app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-light.png create mode 100644 app/app/src/test/snapshots/images/org.modg.bookshelf.ui.screens_LocationsScreenPaparazziTest_locationsSingleBookcaseLight_locations-single-bookcase-dark.png create mode 100644 app/app/src/test/snapshots/images/org.modg.bookshelf.ui.screens_LocationsScreenPaparazziTest_locationsSingleBookcaseLight_locations-single-bookcase-light.png create mode 100644 logs/G-diagnostics.sid create mode 100644 logs/G-diagnostics.summary create mode 100644 logs/H1-screens.sid create mode 100644 logs/H1-screens.summary create mode 100644 logs/H2-picker.sid create mode 100644 logs/H2-picker.summary create mode 100644 logs/WAVE6-DONE create mode 100644 tasks/H1-screens.txt create mode 100644 tasks/H2-picker.txt diff --git a/app/app/src/main/java/org/modg/bookshelf/AppContainer.kt b/app/app/src/main/java/org/modg/bookshelf/AppContainer.kt index b8ea20a..0f8517f 100644 --- a/app/app/src/main/java/org/modg/bookshelf/AppContainer.kt +++ b/app/app/src/main/java/org/modg/bookshelf/AppContainer.kt @@ -93,11 +93,24 @@ class AppContainer(private val context: Context) { // server. A call timeout is load-bearing here: with none, a stalled // connection hangs on OkHttp's default (unbounded) socket timeouts, and the // user is standing at a bookshelf waiting on it. + // + // These were 12s/10s/10s and were MANUFACTURING failures. Measuring the exact + // Open Library call 30 times on 2026-09-09 (docs/METADATA-SOURCES.md) found + // successful requests with a median of 4.3s but a long tail — p90 9.2s, max + // 22.0s, and one connect phase alone of 19.6s. Two of 26 successes exceeded the + // old 12s call timeout, so ~8% of lookups that were about to work were being + // cancelled and reported to the user as "couldn't be reached". + // + // Raising these does NOT slow the failure path: every observed failure was a + // TLS-stage reset returning in under 2.5s, and a socket that is going to break + // breaks long before any of these limits. The timeouts only ever bound the + // slow-success tail, which is precisely what we want to stop truncating. + // 25s > the 22.0s worst observed success, with room to spare. private val metadataHttpClient: OkHttpClient by lazy { OkHttpClient.Builder() - .callTimeout(12, TimeUnit.SECONDS) - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(10, TimeUnit.SECONDS) + .callTimeout(25, TimeUnit.SECONDS) + .connectTimeout(20, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) .build() } diff --git a/app/app/src/main/java/org/modg/bookshelf/data/metadata/GoogleBooksClient.kt b/app/app/src/main/java/org/modg/bookshelf/data/metadata/GoogleBooksClient.kt index ff61fc3..50182b3 100644 --- a/app/app/src/main/java/org/modg/bookshelf/data/metadata/GoogleBooksClient.kt +++ b/app/app/src/main/java/org/modg/bookshelf/data/metadata/GoogleBooksClient.kt @@ -1,7 +1,6 @@ package org.modg.bookshelf.data.metadata import java.io.IOException -import java.net.SocketTimeoutException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.serialization.SerializationException @@ -20,7 +19,18 @@ class GoogleBooksClient( ) { private val json = Json(from = json) { ignoreUnknownKeys = true } - suspend fun lookup(isbn13: String): SourceResult = withContext(Dispatchers.IO) { fetch(isbn13) } + /** + * Retries transient failures per [RetryPolicy]. Note this source's standing + * failure — keyless requests share one exhausted global quota and answer 429, + * which [RetryPolicy] deliberately does NOT retry, so today this costs nothing + * and changes nothing here. See docs/METADATA-SOURCES.md. + */ + suspend fun lookup(isbn13: String): SourceResult = + withContext(Dispatchers.IO) { withRetry { fetch(isbn13) } } + + /** Single un-retried attempt, for tests that need to count calls. */ + internal suspend fun lookupOnce(isbn13: String): SourceResult = + withContext(Dispatchers.IO) { fetch(isbn13) } private fun fetch(isbn13: String): SourceResult = try { val request = Request.Builder() @@ -29,10 +39,8 @@ class GoogleBooksClient( httpClient.newCall(request).execute().use { response -> classify(response.code, response.body.string()) } - } catch (e: SocketTimeoutException) { - SourceResult.Failed("timeout") } catch (e: IOException) { - SourceResult.Failed("network error") + SourceResult.fromException(e) } /** @@ -42,16 +50,16 @@ class GoogleBooksClient( * can never disagree about what a body means. */ internal fun classify(httpCode: Int, body: String?): SourceResult { - if (httpCode !in 200..299) return SourceResult.Failed("http $httpCode") - if (body.isNullOrBlank()) return SourceResult.Failed("empty body") + if (httpCode !in 200..299) return SourceResult.fromHttpCode(httpCode) + if (body.isNullOrBlank()) return SourceResult.Failed("empty body", FailureKind.MALFORMED) return try { val dto = json.decodeFromString(GoogleBooksResponseDto.serializer(), body) val metadata = dto.items.firstOrNull()?.volumeInfo?.toBookMetadata() if (metadata != null) SourceResult.Found(metadata) else SourceResult.NotFound } catch (e: SerializationException) { - SourceResult.Failed("malformed json") + SourceResult.Failed("malformed json", FailureKind.MALFORMED) } catch (e: IllegalArgumentException) { - SourceResult.Failed("malformed json") + SourceResult.Failed("malformed json", FailureKind.MALFORMED) } } diff --git a/app/app/src/main/java/org/modg/bookshelf/data/metadata/OpenLibraryClient.kt b/app/app/src/main/java/org/modg/bookshelf/data/metadata/OpenLibraryClient.kt index fefe696..51c0018 100644 --- a/app/app/src/main/java/org/modg/bookshelf/data/metadata/OpenLibraryClient.kt +++ b/app/app/src/main/java/org/modg/bookshelf/data/metadata/OpenLibraryClient.kt @@ -1,7 +1,6 @@ package org.modg.bookshelf.data.metadata import java.io.IOException -import java.net.SocketTimeoutException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.serialization.SerializationException @@ -23,7 +22,17 @@ class OpenLibraryClient( // Real responses carry fields this DTO doesn't model; never let an unknown key throw. private val json = Json(from = json) { ignoreUnknownKeys = true } - suspend fun lookup(isbn13: String): SourceResult = withContext(Dispatchers.IO) { fetch(isbn13) } + /** + * Retries transient failures per [RetryPolicy]. Measured against the live API, + * 13% of requests fail at the TLS stage in well under a second while successful + * ones take seconds — so a retry is nearly free and removes most of that 13%. + */ + suspend fun lookup(isbn13: String): SourceResult = + withContext(Dispatchers.IO) { withRetry { fetch(isbn13) } } + + /** Single un-retried attempt, for tests that need to count calls. */ + internal suspend fun lookupOnce(isbn13: String): SourceResult = + withContext(Dispatchers.IO) { fetch(isbn13) } private fun fetch(isbn13: String): SourceResult = try { val request = Request.Builder() @@ -32,10 +41,8 @@ class OpenLibraryClient( httpClient.newCall(request).execute().use { response -> classify(response.code, response.body.string(), isbn13) } - } catch (e: SocketTimeoutException) { - SourceResult.Failed("timeout") } catch (e: IOException) { - SourceResult.Failed("network error") + SourceResult.fromException(e) } /** @@ -45,16 +52,16 @@ class OpenLibraryClient( * can never disagree about what a body means. */ internal fun classify(httpCode: Int, body: String?, isbn13: String): SourceResult { - if (httpCode !in 200..299) return SourceResult.Failed("http $httpCode") - if (body.isNullOrBlank()) return SourceResult.Failed("empty body") + if (httpCode !in 200..299) return SourceResult.fromHttpCode(httpCode) + if (body.isNullOrBlank()) return SourceResult.Failed("empty body", FailureKind.MALFORMED) return try { val root = json.parseToJsonElement(body).jsonObject val entry = root["ISBN:$isbn13"]?.jsonObject ?: return SourceResult.NotFound SourceResult.Found(json.decodeFromJsonElement(entry).toBookMetadata(isbn13)) } catch (e: SerializationException) { - SourceResult.Failed("malformed json") + SourceResult.Failed("malformed json", FailureKind.MALFORMED) } catch (e: IllegalArgumentException) { - SourceResult.Failed("malformed json") + SourceResult.Failed("malformed json", FailureKind.MALFORMED) } } diff --git a/app/app/src/main/java/org/modg/bookshelf/data/metadata/RetryPolicy.kt b/app/app/src/main/java/org/modg/bookshelf/data/metadata/RetryPolicy.kt new file mode 100644 index 0000000..372daf1 --- /dev/null +++ b/app/app/src/main/java/org/modg/bookshelf/data/metadata/RetryPolicy.kt @@ -0,0 +1,110 @@ +package org.modg.bookshelf.data.metadata + +import kotlin.random.Random +import kotlinx.coroutines.delay + +/** + * When a failed lookup attempt is worth repeating, and how long to wait first. + * + * Grounded in a measurement of the live Open Library API from 2026-09-09 — 30 + * requests, the exact call [OpenLibraryClient] makes (see docs/METADATA-SOURCES.md): + * + * - 13% of requests failed, every one of them a TLS-stage connection reset. + * - Failures were FAST: 0.23s, 0.31s, 0.59s, 2.46s. + * - Successes were SLOW and long-tailed: median 4.3s, p90 9.2s, max 22.0s. + * + * That asymmetry drives every constant here. A retry costs roughly a fifth of a + * second of the user's time and turns a 13% failure rate into ~1.7% at two + * attempts and ~0.2% at three, which is why the backoff is short rather than the + * conventional exponential-with-seconds. It is also why [isRetryable] refuses to + * repeat a [FailureKind.TIMEOUT]: a timeout means we already spent the full budget + * on that attempt, so repeating it risks tripling the wait for a user standing at + * a bookshelf, and the measurement says slow requests usually eventually succeed + * rather than fail — the fix for those is a generous timeout, not another attempt. + */ +object RetryPolicy { + + /** One original attempt plus two retries. Beyond this the marginal gain is noise. */ + const val MAX_ATTEMPTS = 3 + + /** + * Stop starting NEW attempts once this much time has gone into a single source. + * A backstop against pathological cases (every attempt hitting the slow tail), + * not a normal-path limit. It is deliberately checked only BETWEEN attempts — + * an in-flight request is never cancelled, because the 22-second request in the + * sample was a successful one and killing it would manufacture exactly the + * failure this whole change exists to remove. + */ + const val TOTAL_BUDGET_MILLIS = 30_000L + + /** + * [FailureKind.TRANSPORT] and [FailureKind.SERVER_ERROR] are transient and + * cheap to re-ask. The rest are not: + * - TIMEOUT — the budget is already spent; see the class KDoc. + * - RATE_LIMITED — the source is explicitly asking us to stop. Hammering a + * quota is how an intermittent block becomes a permanent one, + * and METADATA-SOURCES.md records that happening to this + * project's IP during research. When the Google Books API key + * lands, revisit this: a keyed 429 is a per-second rate limit + * and IS worth one Retry-After-respecting retry, unlike + * today's keyless daily-quota 429, which never clears. + * - CLIENT_ERROR — an identical request gets an identical answer. + * - MALFORMED — same bytes, same parse failure. + */ + fun isRetryable(kind: FailureKind): Boolean = + kind == FailureKind.TRANSPORT || kind == FailureKind.SERVER_ERROR + + /** + * Backoff before attempt number [nextAttempt] (2-based: the wait before the + * first retry is `backoffMillis(2)`). 250ms then 750ms, plus up to 40% jitter + * so that two sources — or two phones in the same house — cannot fall into + * lockstep and hammer a recovering server in unison. + */ + fun backoffMillis(nextAttempt: Int, random: Random = Random.Default): Long { + val base = when (nextAttempt) { + 2 -> 250L + else -> 750L + } + return base + random.nextLong(0, (base * 0.4).toLong().coerceAtLeast(1)) + } +} + +/** + * Runs [attempt] until it succeeds, fails un-retryably, or runs out of attempts or + * budget. Returns the LAST result, so the caller always sees a real outcome rather + * than a synthesised one. + * + * A [SourceResult.Failed] that survives retrying has its attempt count appended to + * [SourceResult.Failed.reason] ("tls connection reset, 3 attempts"). That string is + * shown to the user on the scan sheet and is the only diagnostic we get back from a + * real phone — "failed once" and "failed three times in a row" are very different + * stories about the network, and without this they are indistinguishable. + * + * [sleep] and [nowMillis] are injectable purely so tests can run the real policy + * with no wall-clock delay; production callers use the defaults. + */ +suspend fun withRetry( + maxAttempts: Int = RetryPolicy.MAX_ATTEMPTS, + budgetMillis: Long = RetryPolicy.TOTAL_BUDGET_MILLIS, + random: Random = Random.Default, + nowMillis: () -> Long = { System.currentTimeMillis() }, + sleep: suspend (Long) -> Unit = { delay(it) }, + attempt: suspend () -> SourceResult, +): SourceResult { + val started = nowMillis() + var last: SourceResult = attempt() + var attemptsMade = 1 + + while (attemptsMade < maxAttempts) { + val failure = last as? SourceResult.Failed ?: return last + if (!RetryPolicy.isRetryable(failure.kind)) break + if (nowMillis() - started >= budgetMillis) break + + sleep(RetryPolicy.backoffMillis(attemptsMade + 1, random)) + last = attempt() + attemptsMade++ + } + + val failure = last as? SourceResult.Failed ?: return last + return if (attemptsMade > 1) failure.copy(reason = "${failure.reason}, $attemptsMade attempts") else failure +} diff --git a/app/app/src/main/java/org/modg/bookshelf/data/metadata/SourceResult.kt b/app/app/src/main/java/org/modg/bookshelf/data/metadata/SourceResult.kt index bd4ed25..88bb71c 100644 --- a/app/app/src/main/java/org/modg/bookshelf/data/metadata/SourceResult.kt +++ b/app/app/src/main/java/org/modg/bookshelf/data/metadata/SourceResult.kt @@ -1,5 +1,39 @@ package org.modg.bookshelf.data.metadata +import java.io.IOException +import java.io.InterruptedIOException +import java.net.ConnectException +import java.net.SocketException +import java.net.SocketTimeoutException +import java.net.UnknownHostException +import javax.net.ssl.SSLException +import javax.net.ssl.SSLHandshakeException + +/** + * Why a source failed, in the only terms that matter to a caller: is it worth + * asking again? [RetryPolicy] is the single place that decides, so the answer + * cannot drift between the two clients. + */ +enum class FailureKind { + /** Never got an answer: DNS, refused connection, reset socket, failed TLS handshake. */ + TRANSPORT, + + /** We gave up waiting. Distinct from [TRANSPORT] because the budget is already spent. */ + TIMEOUT, + + /** HTTP 429. The source is telling us to stop asking; asking harder is the wrong move. */ + RATE_LIMITED, + + /** HTTP 5xx — the source's problem, and usually a passing one. */ + SERVER_ERROR, + + /** HTTP 4xx other than 429. Repeating an identical request cannot change the answer. */ + CLIENT_ERROR, + + /** 2xx whose body we could not parse. Deterministic: the same bytes will fail again. */ + MALFORMED, +} + /** * Per-source lookup outcome (SPEC.md "Book metadata lookup": "Lookup outcome is * THREE-WAY, never a bare null"). [OpenLibraryClient] and [GoogleBooksClient] each @@ -14,10 +48,54 @@ sealed interface SourceResult { data object NotFound : SourceResult /** - * The source could not be asked, or its answer couldn't be trusted: non-2xx, - * timeout, transport error, or a body that didn't parse. [reason] is a short - * diagnostic ("http 429", "timeout", "malformed json") for logs — never shown - * to the user verbatim. + * The source could not be asked, or its answer couldn't be trusted. [reason] is + * a short diagnostic ("http 429", "tls reset", "malformed json") that is shown + * to the user as supplementary detail on the scan sheet and is our ONLY + * diagnostic channel from a real phone — so it names the specific failure, not + * a generic one. [kind] is the same fact in a form [RetryPolicy] can act on; + * nothing should ever parse [reason] to recover it. */ - data class Failed(val reason: String) : SourceResult + data class Failed(val reason: String, val kind: FailureKind = FailureKind.TRANSPORT) : SourceResult + + companion object { + /** + * Maps a thrown [IOException] to a specific failure. Both clients call this + * so they can never disagree, and so a new exception type gets classified + * once rather than twice. + * + * Measured against the live Open Library API on 2026-09-09 (30 requests): + * every observed failure was a TLS-stage `Connection reset by peer`, and all + * four came back in under 2.5s while successful requests took a median of + * 4.3s. Failures are cheap and fast; that asymmetry is the whole reason + * retrying is worth doing, and why the timeouts are set as generously as + * they are in `AppContainer.metadataHttpClient`. + * + * Order matters: [SocketTimeoutException] is an [InterruptedIOException] and + * [SSLHandshakeException] is an [SSLException], so the specific arms come + * first. OkHttp reports a blown `callTimeout` as a bare + * [InterruptedIOException], which is why that arm exists at all. + */ + fun fromException(e: IOException): Failed = when (e) { + is SocketTimeoutException -> Failed("timeout", FailureKind.TIMEOUT) + is InterruptedIOException -> Failed("timeout", FailureKind.TIMEOUT) + is UnknownHostException -> Failed("dns lookup failed", FailureKind.TRANSPORT) + is SSLHandshakeException -> Failed("tls handshake failed", FailureKind.TRANSPORT) + is SSLException -> Failed("tls connection reset", FailureKind.TRANSPORT) + is ConnectException -> Failed("connection refused", FailureKind.TRANSPORT) + is SocketException -> Failed("connection reset", FailureKind.TRANSPORT) + else -> Failed("network error (${e.javaClass.simpleName})", FailureKind.TRANSPORT) + } + + /** + * Maps a non-2xx HTTP status to a specific failure. 429 is called out + * separately from the rest of 4xx because it is the one client error that is + * about us rather than about the request, and because it is currently + * Google Books' permanent state — see docs/METADATA-SOURCES.md. + */ + fun fromHttpCode(code: Int): Failed = when { + code == 429 -> Failed("http 429 (rate limited)", FailureKind.RATE_LIMITED) + code in 500..599 -> Failed("http $code (server error)", FailureKind.SERVER_ERROR) + else -> Failed("http $code", FailureKind.CLIENT_ERROR) + } + } } diff --git a/app/app/src/main/java/org/modg/bookshelf/data/prefs/SettingsStore.kt b/app/app/src/main/java/org/modg/bookshelf/data/prefs/SettingsStore.kt index b7a2817..35ef865 100644 --- a/app/app/src/main/java/org/modg/bookshelf/data/prefs/SettingsStore.kt +++ b/app/app/src/main/java/org/modg/bookshelf/data/prefs/SettingsStore.kt @@ -26,6 +26,7 @@ class SettingsStore(private val context: Context) { val USER_ID = stringPreferencesKey("user_id") val USER_EMAIL = stringPreferencesKey("user_email") val LAST_SYNC_TIME = longPreferencesKey("last_sync_time") + val LAST_SHELF_ID = stringPreferencesKey("last_shelf_id") fun cursor(collection: String) = stringPreferencesKey("cursor_$collection") } @@ -35,6 +36,13 @@ class SettingsStore(private val context: Context) { val userEmail: Flow = context.dataStore.data.map { it[Keys.USER_EMAIL] } val lastSyncTime: Flow = context.dataStore.data.map { it[Keys.LAST_SYNC_TIME] } + /** + * The shelf most recently assigned to a book — SPEC "remember the most recently + * used shelf" (shelving a box of books usually means one shelf, over and over). + * Never written for "Not shelved"; see [SettingsStore] callers. + */ + val lastShelfId: Flow = context.dataStore.data.map { it[Keys.LAST_SHELF_ID] } + fun cursorFor(collection: String): Flow = context.dataStore.data.map { it[Keys.cursor(collection)] } @@ -62,12 +70,25 @@ class SettingsStore(private val context: Context) { context.dataStore.edit { it[Keys.LAST_SYNC_TIME] = epochMillis } } - /** Sign out: drop the token/user identity but keep the server URL — no need to re-enter it. */ + suspend fun setLastShelfId(shelfId: String) { + context.dataStore.edit { it[Keys.LAST_SHELF_ID] = shelfId } + } + + suspend fun clearLastShelfId() { + context.dataStore.edit { it.remove(Keys.LAST_SHELF_ID) } + } + + /** + * Sign out: drop the token/user identity but keep the server URL — no need to + * re-enter it. Also drops the remembered shelf: a shared library's other + * account shouldn't have its shelving habit leak into this one's session. + */ suspend fun clearAuth() { context.dataStore.edit { it.remove(Keys.AUTH_TOKEN) it.remove(Keys.USER_ID) it.remove(Keys.USER_EMAIL) + it.remove(Keys.LAST_SHELF_ID) } } diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/components/ShelfPickerSheet.kt b/app/app/src/main/java/org/modg/bookshelf/ui/components/ShelfPickerSheet.kt new file mode 100644 index 0000000..067ce86 --- /dev/null +++ b/app/app/src/main/java/org/modg/bookshelf/ui/components/ShelfPickerSheet.kt @@ -0,0 +1,180 @@ +package org.modg.bookshelf.ui.components + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import org.modg.bookshelf.data.local.BookcaseEntity +import org.modg.bookshelf.data.local.ShelfEntity + +/** + * The grouped shelf picker shared by the scan screen's save sheet and the + * detail screen's location picker. Replaces the old flat "Bookcase • Shelf" + * [androidx.compose.material3.DropdownMenu] — which stopped being usable once + * a library had more than a couple of bookcases — with a scrolling + * [ModalBottomSheet] grouped one section per bookcase. A bookcase is not + * itself a place a book can sit, so its header is a non-selectable label; + * only the shelves listed under it are choices. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ShelfPickerSheet( + bookcases: List, + shelves: List, + selectedShelfId: String?, + recentShelfId: String?, + onShelfSelected: (String?) -> Unit, + onDismissRequest: () -> Unit, +) { + ModalBottomSheet(onDismissRequest = onDismissRequest, sheetState = rememberModalBottomSheetState()) { + ShelfPickerContent( + bookcases = bookcases, + shelves = shelves, + selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, + onShelfSelected = { shelfId -> + onShelfSelected(shelfId) + onDismissRequest() + }, + ) + } +} + +/** + * The picker's contents, split out from [ShelfPickerSheet] so it can be rendered + * directly (Paparazzi has no real Window/scrim behind a headless [ModalBottomSheet], + * same problem [org.modg.bookshelf.ui.screens.ScanScreenPaparazziTest]'s class doc + * describes for the camera preview). Internal rather than private so that test can + * reach it. + */ +@Composable +internal fun ShelfPickerContent( + bookcases: List, + shelves: List, + selectedShelfId: String?, + recentShelfId: String?, + onShelfSelected: (String?) -> Unit, +) { + val recent = resolveRecentShelf(recentShelfId, shelves, bookcases) + val recentShelf = recent?.first + val recentBookcase = recent?.second + + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 16.dp, vertical = 8.dp), + ) { + // Omitted entirely when there is no remembered shelf, or it no longer exists + // (deleted since it was last used) — a dangling "Recent" entry would be worse + // than no shortcut at all. + if (recentShelf != null && recentBookcase != null) { + SectionHeader(text = "Recent") + ShelfRow( + label = "${recentBookcase.name} • ${recentShelf.label}", + selected = selectedShelfId == recentShelf.id, + onClick = { onShelfSelected(recentShelf.id) }, + ) + GoldDivider(modifier = Modifier.padding(vertical = 12.dp)) + } + + ShelfRow( + label = "Not shelved", + selected = selectedShelfId == null, + onClick = { onShelfSelected(null) }, + ) + + bookcases.sortedBy { it.position }.forEach { bookcase -> + GoldDivider(modifier = Modifier.padding(vertical = 12.dp)) + SectionHeader(text = bookcase.name) + val bookcaseShelves = shelves.filter { it.bookcaseId == bookcase.id }.sortedBy { it.position } + if (bookcaseShelves.isEmpty()) { + // So an empty bookcase reads as "no shelves yet", not a rendering bug. + Text( + text = "No shelves yet", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + fontStyle = FontStyle.Italic, + modifier = Modifier.padding(vertical = 8.dp), + ) + } else { + bookcaseShelves.forEach { shelf -> + ShelfRow( + label = shelf.label, + selected = selectedShelfId == shelf.id, + onClick = { onShelfSelected(shelf.id) }, + ) + } + } + } + } +} + +@Composable +private fun SectionHeader(text: String) { + Text( + text = text, + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 8.dp, bottom = 4.dp), + ) +} + +@Composable +private fun ShelfRow(label: String, selected: Boolean, onClick: () -> Unit) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(onClick = onClick) + .padding(vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = label, + style = MaterialTheme.typography.bodyLarge, + fontWeight = if (selected) FontWeight.Bold else FontWeight.Normal, + color = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface, + modifier = Modifier.weight(1f), + ) + if (selected) { + Icon( + imageVector = Icons.Outlined.Check, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + } + } +} + +/** + * Resolves [recentShelfId] to the shelf + bookcase it names, or null when there is + * nothing remembered, or the remembered shelf was deleted since — the two cases the + * "Recent" section must be omitted for. Pure so it's directly unit-testable without + * standing up Compose. + */ +internal fun resolveRecentShelf( + recentShelfId: String?, + shelves: List, + bookcases: List, +): Pair? { + val shelf = recentShelfId?.let { id -> shelves.find { it.id == id } } ?: return null + val bookcase = bookcases.find { it.id == shelf.bookcaseId } ?: return null + return shelf to bookcase +} diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailScreen.kt b/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailScreen.kt index 99f5bc6..6cced92 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailScreen.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailScreen.kt @@ -19,8 +19,6 @@ import androidx.compose.material.icons.outlined.ExpandLess import androidx.compose.material.icons.outlined.ExpandMore import androidx.compose.material.icons.outlined.LocationOn import androidx.compose.material.icons.outlined.Save -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -56,6 +54,7 @@ import org.modg.bookshelf.ui.components.BookCover import org.modg.bookshelf.ui.components.BookshelfScaffold import org.modg.bookshelf.ui.components.GoldDivider import org.modg.bookshelf.ui.components.PaperSurface +import org.modg.bookshelf.ui.components.ShelfPickerSheet /** * SPEC.md "detail" screen. [book] filters `deleted = 0`, so once the user @@ -76,6 +75,7 @@ fun DetailScreen( DetailViewModel( bookRepository = container.bookRepository, locationRepository = container.locationRepository, + settingsStore = container.settingsStore, bookId = bookId, ) } @@ -85,6 +85,7 @@ fun DetailScreen( val book by viewModel.book.collectAsState() val bookcases by viewModel.bookcases.collectAsState() val shelves by viewModel.shelves.collectAsState() + val recentShelfId by viewModel.recentShelfId.collectAsState() var retainedBook by remember { mutableStateOf(null) } LaunchedEffect(book) { book?.let { retainedBook = it } } @@ -163,6 +164,7 @@ fun DetailScreen( book = display, bookcases = bookcases, shelves = shelves, + recentShelfId = recentShelfId, onShelfSelected = viewModel::saveLocation, ) } @@ -271,9 +273,10 @@ internal fun LocationSection( book: BookEntity, bookcases: List, shelves: List, + recentShelfId: String?, onShelfSelected: (String?) -> Unit, ) { - var menuExpanded by remember { mutableStateOf(false) } + var pickerOpen by remember { mutableStateOf(false) } val currentShelf = shelves.find { it.id == book.shelfId } val currentBookcase = currentShelf?.let { shelf -> bookcases.find { it.id == shelf.bookcaseId } } val label = if (currentShelf != null && currentBookcase != null) { @@ -291,25 +294,20 @@ internal fun LocationSection( ) { Icon(Icons.Outlined.LocationOn, contentDescription = null, tint = MaterialTheme.colorScheme.secondary) Text(text = label, style = MaterialTheme.typography.bodyLarge, modifier = Modifier.weight(1f)) - Box { - TextButton(onClick = { menuExpanded = true }) { Text("Change") } - DropdownMenu(expanded = menuExpanded, onDismissRequest = { menuExpanded = false }) { - DropdownMenuItem( - text = { Text("Not shelved") }, - onClick = { onShelfSelected(null); menuExpanded = false }, - ) - bookcases.forEach { bookcase -> - shelves.filter { it.bookcaseId == bookcase.id }.forEach { shelf -> - DropdownMenuItem( - text = { Text("${bookcase.name} • ${shelf.label}") }, - onClick = { onShelfSelected(shelf.id); menuExpanded = false }, - ) - } - } - } - } + TextButton(onClick = { pickerOpen = true }) { Text("Change") } } } + + if (pickerOpen) { + ShelfPickerSheet( + bookcases = bookcases, + shelves = shelves, + selectedShelfId = book.shelfId, + recentShelfId = recentShelfId, + onShelfSelected = onShelfSelected, + onDismissRequest = { pickerOpen = false }, + ) + } } @Composable diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailViewModel.kt b/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailViewModel.kt index 850a012..9ce59f6 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailViewModel.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/detail/DetailViewModel.kt @@ -9,6 +9,7 @@ import kotlinx.coroutines.launch import org.modg.bookshelf.data.local.BookEntity import org.modg.bookshelf.data.local.BookcaseEntity import org.modg.bookshelf.data.local.ShelfEntity +import org.modg.bookshelf.data.prefs.SettingsStore import org.modg.bookshelf.data.repo.BookRepository import org.modg.bookshelf.data.repo.LocationRepository import org.modg.bookshelf.data.repo.decodeAuthors @@ -44,6 +45,7 @@ data class BookEditForm( class DetailViewModel( private val bookRepository: BookRepository, private val locationRepository: LocationRepository, + private val settingsStore: SettingsStore, private val bookId: String, ) : ViewModel() { @@ -61,6 +63,10 @@ class DetailViewModel( val shelves: StateFlow> = locationRepository.observeShelves() .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), emptyList()) + /** The shelf most recently assigned to any book, across sessions — surfaced as the picker's "Recent" shortcut. */ + val recentShelfId: StateFlow = settingsStore.lastShelfId + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), null) + fun saveNotes(notes: String) { val current = book.value ?: return viewModelScope.launch { bookRepository.save(current.copy(notes = notes.ifBlank { null })) } @@ -68,7 +74,17 @@ class DetailViewModel( fun saveLocation(shelfId: String?) { val current = book.value ?: return - viewModelScope.launch { bookRepository.save(current.copy(shelfId = shelfId)) } + viewModelScope.launch { performSaveLocation(current, shelfId) } + } + + /** + * The actual save-location logic, split out from [saveLocation] so tests can await it + * directly (as a plain suspend call) instead of racing [viewModelScope]'s launch. + */ + internal suspend fun performSaveLocation(current: BookEntity, shelfId: String?) { + bookRepository.save(current.copy(shelfId = shelfId)) + // "Not shelved" (null) must never overwrite the memory — it isn't a shelf. + if (shelfId != null) settingsStore.setLastShelfId(shelfId) } fun saveEdit(form: BookEditForm) { diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/library/LibraryScreen.kt b/app/app/src/main/java/org/modg/bookshelf/ui/library/LibraryScreen.kt index 6941187..cb6c2b9 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/library/LibraryScreen.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/library/LibraryScreen.kt @@ -18,7 +18,6 @@ import androidx.compose.material.icons.outlined.QrCodeScanner import androidx.compose.material.icons.outlined.Search import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Sort -import androidx.compose.material.icons.outlined.Warehouse import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api @@ -37,6 +36,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -44,6 +44,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import org.modg.bookshelf.AppContainer +import org.modg.bookshelf.R import org.modg.bookshelf.data.local.BookEntity import org.modg.bookshelf.data.local.BookcaseEntity import org.modg.bookshelf.data.local.ShelfEntity @@ -97,7 +98,7 @@ fun LibraryScreen( title = "Bookshelf", actions = { IconButton(onClick = onLocationsClick) { - Icon(Icons.Outlined.Warehouse, contentDescription = "Bookcases & shelves") + Icon(painterResource(R.drawable.ic_shelves), contentDescription = "Bookcases & shelves") } IconButton(onClick = onSettingsClick) { Icon(Icons.Outlined.Settings, contentDescription = "Settings") @@ -202,20 +203,28 @@ internal fun LibraryToolbar( Icon(Icons.Outlined.FilterList, contentDescription = "Filter by bookcase or shelf") } DropdownMenu(expanded = filterMenuExpanded, onDismissRequest = { filterMenuExpanded = false }) { - DropdownMenuItem( - text = { Text("All books") }, - onClick = { onFilterChange(LibraryFilter.All); filterMenuExpanded = false }, - ) - bookcases.forEach { bookcase -> + if (bookcases.isEmpty() && shelves.isEmpty()) { DropdownMenuItem( - text = { Text(bookcase.name, style = MaterialTheme.typography.titleSmall) }, - onClick = { onFilterChange(LibraryFilter.Bookcase(bookcase.id)); filterMenuExpanded = false }, + text = { Text("Add a bookcase to enable filtering") }, + enabled = false, + onClick = {}, ) - shelves.filter { it.bookcaseId == bookcase.id }.forEach { shelf -> + } else { + DropdownMenuItem( + text = { Text("All books") }, + onClick = { onFilterChange(LibraryFilter.All); filterMenuExpanded = false }, + ) + bookcases.forEach { bookcase -> DropdownMenuItem( - text = { Text(" ${shelf.label}") }, - onClick = { onFilterChange(LibraryFilter.Shelf(shelf.id)); filterMenuExpanded = false }, + text = { Text(bookcase.name, style = MaterialTheme.typography.titleSmall) }, + onClick = { onFilterChange(LibraryFilter.Bookcase(bookcase.id)); filterMenuExpanded = false }, ) + shelves.filter { it.bookcaseId == bookcase.id }.forEach { shelf -> + DropdownMenuItem( + text = { Text(" ${shelf.label}") }, + onClick = { onFilterChange(LibraryFilter.Shelf(shelf.id)); filterMenuExpanded = false }, + ) + } } } } diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/locations/LocationsScreen.kt b/app/app/src/main/java/org/modg/bookshelf/ui/locations/LocationsScreen.kt index a1f2e17..4b85eb2 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/locations/LocationsScreen.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/locations/LocationsScreen.kt @@ -32,12 +32,15 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.initializer @@ -94,7 +97,12 @@ fun LocationsScreen( action = { PrimaryButton(text = "Add a bookcase", onClick = viewModel::openAddBookcase) }, ) } else { - LazyColumn(contentPadding = PaddingValues(bottom = 96.dp)) { + LazyColumn( + contentPadding = PaddingValues( + top = innerPadding.calculateTopPadding(), + bottom = innerPadding.calculateBottomPadding() + 96.dp, + ), + ) { items(state.bookcases, key = { it.bookcase.id }) { bookcaseUi -> BookcaseRow( bookcaseUi = bookcaseUi, @@ -268,12 +276,22 @@ private fun BookcaseEditDialog( ) { var name by remember { mutableStateOf(editing?.name.orEmpty()) } var note by remember { mutableStateOf(editing?.note.orEmpty()) } + val nameFocusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + runCatching { nameFocusRequester.requestFocus() } + } AlertDialog( onDismissRequest = onDismiss, title = { Text(text = title, style = MaterialTheme.typography.titleLarge) }, text = { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { - OutlinedTextField(value = name, onValueChange = { name = it }, label = { Text("Name") }, singleLine = true) + OutlinedTextField( + value = name, + onValueChange = { name = it }, + label = { Text("Name") }, + singleLine = true, + modifier = Modifier.focusRequester(nameFocusRequester), + ) OutlinedTextField(value = note, onValueChange = { note = it }, label = { Text("Note (optional)") }, singleLine = true) } }, @@ -292,11 +310,21 @@ private fun ShelfEditDialog( onSubmit: (label: String) -> Unit, ) { var label by remember { mutableStateOf(editing?.label.orEmpty()) } + val labelFocusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + runCatching { labelFocusRequester.requestFocus() } + } AlertDialog( onDismissRequest = onDismiss, title = { Text(text = title, style = MaterialTheme.typography.titleLarge) }, text = { - OutlinedTextField(value = label, onValueChange = { label = it }, label = { Text("Label") }, singleLine = true) + OutlinedTextField( + value = label, + onValueChange = { label = it }, + label = { Text("Label") }, + singleLine = true, + modifier = Modifier.focusRequester(labelFocusRequester), + ) }, confirmButton = { TextButton(onClick = { onSubmit(label) }, enabled = label.isNotBlank()) { Text("Save") } diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanScreen.kt b/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanScreen.kt index bcb8dd3..bd299f0 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanScreen.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanScreen.kt @@ -44,7 +44,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.unit.dp @@ -66,6 +69,7 @@ import org.modg.bookshelf.ui.components.BookshelfScaffold import org.modg.bookshelf.ui.components.EmptyState import org.modg.bookshelf.ui.components.PrimaryButton import org.modg.bookshelf.ui.components.SecondaryButton +import org.modg.bookshelf.ui.components.ShelfPickerSheet /** * SPEC.md "scan" screen: camera + reticle, on-hit bottom sheet, continuous @@ -85,6 +89,7 @@ fun ScanScreen( bookRepository = container.bookRepository, locationRepository = container.locationRepository, metadataRepository = container.metadataRepository, + settingsStore = container.settingsStore, ) } }, @@ -97,6 +102,7 @@ fun ScanScreen( val bookcases by viewModel.bookcases.collectAsState() val shelves by viewModel.shelves.collectAsState() val selectedShelfId by viewModel.selectedShelfId.collectAsState() + val recentShelfId by viewModel.recentShelfId.collectAsState() val permissionState = rememberPermissionState(Manifest.permission.CAMERA) LaunchedEffect(Unit) { @@ -159,6 +165,7 @@ fun ScanScreen( bookcases = bookcases, shelves = shelves, selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, onShelfSelected = viewModel::selectShelf, onSave = { viewModel.save(state.isbn13, state.metadata) }, onSkip = { viewModel.skip() }, @@ -174,6 +181,7 @@ fun ScanScreen( bookcases = bookcases, shelves = shelves, selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, onShelfSelected = viewModel::selectShelf, onSave = { title, authors -> viewModel.saveManualEntry(state.isbn13, title, authors) }, onSkip = { viewModel.skip() }, @@ -185,6 +193,7 @@ fun ScanScreen( ) { LookupFailedSheet( isbn13 = state.isbn13, + reason = state.reason, onRetry = { viewModel.retryLookup(state.isbn13) }, onEnterByHand = { viewModel.enterByHand(state.isbn13) }, onSkip = { viewModel.skip() }, @@ -260,9 +269,8 @@ internal fun ScanReticle(modifier: Modifier = Modifier) { /** * Shown the moment a barcode is decoded, while the metadata lookup runs. It names - * the ISBN it read and says so in words, because a lone spinner reads as "still - * working on it" — the user goes on holding the book up to the camera when the - * camera is already done with it. + * the ISBN it read, because a lone spinner reads as "still working on it" — echoing + * the number back is what tells the user the barcode was actually recognised. */ @Composable internal fun SearchingSheet(isbn13: String) { @@ -283,12 +291,6 @@ internal fun SearchingSheet(isbn13: String) { color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(top = 4.dp), ) - Text( - text = "Barcode read — you can lower the book.", - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(top = 12.dp), - ) } } @@ -321,6 +323,7 @@ internal fun FoundBookSheet( bookcases: List, shelves: List, selectedShelfId: String?, + recentShelfId: String?, onShelfSelected: (String?) -> Unit, onSave: () -> Unit, onSkip: () -> Unit, @@ -353,6 +356,7 @@ internal fun FoundBookSheet( bookcases = bookcases, shelves = shelves, selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, onShelfSelected = onShelfSelected, ) Row(modifier = Modifier.fillMaxWidth().padding(top = 16.dp), horizontalArrangement = Arrangement.spacedBy(12.dp)) { @@ -375,6 +379,7 @@ internal fun ManualEntrySheet( bookcases: List, shelves: List, selectedShelfId: String?, + recentShelfId: String?, onShelfSelected: (String?) -> Unit, onSave: (title: String, authors: List) -> Unit, onSkip: () -> Unit, @@ -409,6 +414,7 @@ internal fun ManualEntrySheet( bookcases = bookcases, shelves = shelves, selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, onShelfSelected = onShelfSelected, ) Row(modifier = Modifier.fillMaxWidth().padding(top = 16.dp), horizontalArrangement = Arrangement.spacedBy(12.dp)) { @@ -429,11 +435,15 @@ internal fun ManualEntrySheet( * Shown when a lookup couldn't be completed — SPEC: "a retry affordance, with * manual entry as the escape hatch; it must NOT claim the book is unknown." No * shelf picker here: saving isn't offered from this sheet, only a path onward to - * one that does (Retry, or the manual-entry form via "Enter by hand"). + * one that does (Retry, or the manual-entry form via "Enter by hand"). [reason] + * is [MetadataRepository]'s diagnostic string (e.g. "open library: network error; + * google books: http 429") — the only channel we have back from a lookup failure + * on a real phone, so it must actually reach the screen instead of being dropped. */ @Composable internal fun LookupFailedSheet( isbn13: String, + reason: String, onRetry: () -> Unit, onEnterByHand: () -> Unit, onSkip: () -> Unit, @@ -445,7 +455,13 @@ internal fun LookupFailedSheet( "This doesn't mean the book is unknown.", style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(top = 8.dp, bottom = 16.dp), + modifier = Modifier.padding(top = 8.dp), + ) + Text( + text = reason, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 4.dp, bottom = 16.dp), ) PrimaryButton(text = "Retry", onClick = onRetry, modifier = Modifier.fillMaxWidth()) Row(modifier = Modifier.fillMaxWidth().padding(top = 12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp)) { @@ -478,9 +494,10 @@ internal fun ShelfPicker( bookcases: List, shelves: List, selectedShelfId: String?, + recentShelfId: String?, onShelfSelected: (String?) -> Unit, ) { - var expanded by remember { mutableStateOf(false) } + var pickerOpen by remember { mutableStateOf(false) } val currentShelf = shelves.find { it.id == selectedShelfId } val currentBookcase = currentShelf?.let { shelf -> bookcases.find { it.id == shelf.bookcaseId } } val label = if (currentShelf != null && currentBookcase != null) { @@ -490,21 +507,18 @@ internal fun ShelfPicker( } Box(modifier = Modifier.padding(top = 12.dp)) { - SecondaryButton(text = label, onClick = { expanded = true }) - androidx.compose.material3.DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { - androidx.compose.material3.DropdownMenuItem( - text = { Text("Not shelved") }, - onClick = { onShelfSelected(null); expanded = false }, - ) - bookcases.forEach { bookcase -> - shelves.filter { it.bookcaseId == bookcase.id }.forEach { shelf -> - androidx.compose.material3.DropdownMenuItem( - text = { Text("${bookcase.name} • ${shelf.label}") }, - onClick = { onShelfSelected(shelf.id); expanded = false }, - ) - } - } - } + SecondaryButton(text = label, onClick = { pickerOpen = true }) + } + + if (pickerOpen) { + ShelfPickerSheet( + bookcases = bookcases, + shelves = shelves, + selectedShelfId = selectedShelfId, + recentShelfId = recentShelfId, + onShelfSelected = onShelfSelected, + onDismissRequest = { pickerOpen = false }, + ) } } @@ -517,6 +531,14 @@ private fun ManualIsbnDialog(onDismiss: () -> Unit, onSubmit: (String) -> Unit) // screen was just rebuilt to eliminate. val isbn13 = remember(text) { IsbnUtils.toIsbn13(text) } val malformed = text.isNotBlank() && isbn13 == null + val focusRequester = remember { FocusRequester() } + val keyboardController = LocalSoftwareKeyboardController.current + // The dialog opens with the field unfocused otherwise — this is the only entry + // point into the field, so make it ready to type into immediately. + LaunchedEffect(Unit) { + runCatching { focusRequester.requestFocus() } + keyboardController?.show() + } AlertDialog( onDismissRequest = onDismiss, title = { Text("Enter ISBN") }, @@ -529,6 +551,7 @@ private fun ManualIsbnDialog(onDismiss: () -> Unit, onSubmit: (String) -> Unit) singleLine = true, isError = malformed, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + modifier = Modifier.focusRequester(focusRequester), ) if (malformed) { Text( diff --git a/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanViewModel.kt b/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanViewModel.kt index 7bd7194..59a91a5 100644 --- a/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanViewModel.kt +++ b/app/app/src/main/java/org/modg/bookshelf/ui/scan/ScanViewModel.kt @@ -15,6 +15,7 @@ import org.modg.bookshelf.data.local.ShelfEntity import org.modg.bookshelf.data.metadata.BookMetadata import org.modg.bookshelf.data.metadata.IsbnUtils import org.modg.bookshelf.data.metadata.MetadataRepository +import org.modg.bookshelf.data.prefs.SettingsStore import org.modg.bookshelf.data.repo.BookRepository import org.modg.bookshelf.data.repo.LocationRepository @@ -28,6 +29,7 @@ class ScanViewModel( private val bookRepository: BookRepository, locationRepository: LocationRepository, private val metadataRepository: MetadataRepository, + private val settingsStore: SettingsStore, val scannerController: ScannerController = ScannerController(), ) : ViewModel() { @@ -51,6 +53,10 @@ class ScanViewModel( private val _selectedShelfId = MutableStateFlow(null) val selectedShelfId: StateFlow = _selectedShelfId.asStateFlow() + /** The shelf most recently assigned to any book, across sessions — surfaced as the picker's "Recent" shortcut. */ + val recentShelfId: StateFlow = settingsStore.lastShelfId + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), null) + init { viewModelScope.launch { scannerController.scanResults.collect { isbn13 -> onScanned(isbn13) } @@ -104,35 +110,53 @@ class ScanViewModel( /** Save from a successful metadata lookup. */ fun save(isbn13: String, metadata: BookMetadata) { - viewModelScope.launch { - bookRepository.createBook( - title = metadata.title ?: "Untitled", - subtitle = metadata.subtitle, - authors = metadata.authors, - isbn13 = metadata.isbn13 ?: isbn13, - isbn10 = metadata.isbn10, - publisher = metadata.publisher, - publishedDate = metadata.publishedDate, - pageCount = metadata.pageCount, - description = metadata.description, - coverSourceUrl = metadata.coverUrl, - shelfId = _selectedShelfId.value, - ) - recordSave() - } + viewModelScope.launch { performSave(isbn13, metadata) } + } + + /** + * The actual save-from-metadata logic, split out from [save] so tests can await it + * directly (as a plain suspend call) instead of racing [viewModelScope]'s launch. + */ + internal suspend fun performSave(isbn13: String, metadata: BookMetadata) { + val shelfId = _selectedShelfId.value + bookRepository.createBook( + title = metadata.title ?: "Untitled", + subtitle = metadata.subtitle, + authors = metadata.authors, + isbn13 = metadata.isbn13 ?: isbn13, + isbn10 = metadata.isbn10, + publisher = metadata.publisher, + publishedDate = metadata.publishedDate, + pageCount = metadata.pageCount, + description = metadata.description, + coverSourceUrl = metadata.coverUrl, + shelfId = shelfId, + ) + rememberShelf(shelfId) + recordSave() } /** Save from the manual-entry form shown when metadata lookup misses (SPEC: pre-filled with the scanned ISBN). */ fun saveManualEntry(isbn13: String, title: String, authors: List) { - viewModelScope.launch { - bookRepository.createBook( - title = title.ifBlank { "Untitled" }, - authors = authors, - isbn13 = isbn13, - shelfId = _selectedShelfId.value, - ) - recordSave() - } + viewModelScope.launch { performSaveManualEntry(isbn13, title, authors) } + } + + /** Same split as [performSave], for [saveManualEntry]. */ + internal suspend fun performSaveManualEntry(isbn13: String, title: String, authors: List) { + val shelfId = _selectedShelfId.value + bookRepository.createBook( + title = title.ifBlank { "Untitled" }, + authors = authors, + isbn13 = isbn13, + shelfId = shelfId, + ) + rememberShelf(shelfId) + recordSave() + } + + /** "Not shelved" (null) must never overwrite the memory — it isn't a shelf. */ + private suspend fun rememberShelf(shelfId: String?) { + if (shelfId != null) settingsStore.setLastShelfId(shelfId) } private fun recordSave() { diff --git a/app/app/src/main/res/drawable/ic_shelves.xml b/app/app/src/main/res/drawable/ic_shelves.xml new file mode 100644 index 0000000..2080c6e --- /dev/null +++ b/app/app/src/main/res/drawable/ic_shelves.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/app/src/test/java/org/modg/bookshelf/data/metadata/GoogleBooksClientTest.kt b/app/app/src/test/java/org/modg/bookshelf/data/metadata/GoogleBooksClientTest.kt index 26611a3..77a6b0d 100644 --- a/app/app/src/test/java/org/modg/bookshelf/data/metadata/GoogleBooksClientTest.kt +++ b/app/app/src/test/java/org/modg/bookshelf/data/metadata/GoogleBooksClientTest.kt @@ -66,25 +66,25 @@ class GoogleBooksClientTest { @Test fun `classify reports Failed for a 404`() { val result = client.classify(404, null) - assertEquals(SourceResult.Failed("http 404"), result) + assertEquals(SourceResult.Failed("http 404", FailureKind.CLIENT_ERROR), result) } @Test fun `classify reports Failed for a 429 keyless-quota response, distinctly from NotFound`() { val result = client.classify(429, null) - assertEquals(SourceResult.Failed("http 429"), result) + assertEquals(SourceResult.Failed("http 429 (rate limited)", FailureKind.RATE_LIMITED), result) } @Test fun `classify reports Failed for a 500`() { val result = client.classify(500, "Internal Server Error") - assertEquals(SourceResult.Failed("http 500"), result) + assertEquals(SourceResult.Failed("http 500 (server error)", FailureKind.SERVER_ERROR), result) } @Test fun `classify reports Failed for a malformed body even on a 2xx status`() { val result = client.classify(200, fixture("malformed.json")) - assertEquals(SourceResult.Failed("malformed json"), result) + assertEquals(SourceResult.Failed("malformed json", FailureKind.MALFORMED), result) } private fun fixture(name: String): String = diff --git a/app/app/src/test/java/org/modg/bookshelf/data/metadata/OpenLibraryClientTest.kt b/app/app/src/test/java/org/modg/bookshelf/data/metadata/OpenLibraryClientTest.kt index cc73301..6e653f3 100644 --- a/app/app/src/test/java/org/modg/bookshelf/data/metadata/OpenLibraryClientTest.kt +++ b/app/app/src/test/java/org/modg/bookshelf/data/metadata/OpenLibraryClientTest.kt @@ -125,25 +125,25 @@ class OpenLibraryClientTest { @Test fun `classify reports Failed for a 404`() { val result = client.classify(404, null, "9780201558029") - assertEquals(SourceResult.Failed("http 404"), result) + assertEquals(SourceResult.Failed("http 404", FailureKind.CLIENT_ERROR), result) } @Test fun `classify reports Failed for a 429, distinctly from NotFound`() { val result = client.classify(429, null, "9780201558029") - assertEquals(SourceResult.Failed("http 429"), result) + assertEquals(SourceResult.Failed("http 429 (rate limited)", FailureKind.RATE_LIMITED), result) } @Test fun `classify reports Failed for a 500`() { val result = client.classify(500, "Internal Server Error", "9780201558029") - assertEquals(SourceResult.Failed("http 500"), result) + assertEquals(SourceResult.Failed("http 500 (server error)", FailureKind.SERVER_ERROR), result) } @Test fun `classify reports Failed for a malformed body even on a 2xx status`() { val result = client.classify(200, fixture("malformed.json"), "9780201558029") - assertEquals(SourceResult.Failed("malformed json"), result) + assertEquals(SourceResult.Failed("malformed json", FailureKind.MALFORMED), result) } private fun fixture(name: String): String = diff --git a/app/app/src/test/java/org/modg/bookshelf/data/metadata/RetryPolicyTest.kt b/app/app/src/test/java/org/modg/bookshelf/data/metadata/RetryPolicyTest.kt new file mode 100644 index 0000000..996a4d2 --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/data/metadata/RetryPolicyTest.kt @@ -0,0 +1,191 @@ +package org.modg.bookshelf.data.metadata + +import java.io.IOException +import java.io.InterruptedIOException +import java.net.ConnectException +import java.net.SocketException +import java.net.SocketTimeoutException +import java.net.UnknownHostException +import javax.net.ssl.SSLException +import javax.net.ssl.SSLHandshakeException +import kotlin.random.Random +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +/** + * Covers the retry decision and the loop that acts on it. Every case is driven by + * the 2026-09-09 measurement of the live Open Library API recorded in + * docs/METADATA-SOURCES.md: fast transient TLS resets (worth repeating) against a + * slow but usually-successful long tail (not worth repeating). + * + * The loop is exercised with an injected clock and sleep, so these assert the real + * policy constants with no wall-clock time and no flakiness. + */ +class RetryPolicyTest { + + private val transport = SourceResult.Failed("tls connection reset", FailureKind.TRANSPORT) + private val found = SourceResult.Found(BookMetadata(title = "Dune")) + + // --- which failures are worth repeating --- + + @Test + fun `transport and server errors are retryable`() { + assertTrue(RetryPolicy.isRetryable(FailureKind.TRANSPORT)) + assertTrue(RetryPolicy.isRetryable(FailureKind.SERVER_ERROR)) + } + + @Test + fun `a timeout is not retried -- its budget is already spent`() { + assertFalse(RetryPolicy.isRetryable(FailureKind.TIMEOUT)) + } + + @Test + fun `a rate limit is not retried -- hammering a quota is how a block becomes permanent`() { + assertFalse(RetryPolicy.isRetryable(FailureKind.RATE_LIMITED)) + } + + @Test + fun `deterministic failures are not retried`() { + assertFalse(RetryPolicy.isRetryable(FailureKind.CLIENT_ERROR)) + assertFalse(RetryPolicy.isRetryable(FailureKind.MALFORMED)) + } + + // --- the loop --- + + @Test + fun `a first-attempt success is returned without retrying`() = runTest { + var calls = 0 + val result = withRetry(sleep = {}) { calls++; found } + assertEquals(found, result) + assertEquals(1, calls) + } + + @Test + fun `a transient failure followed by success returns the success`() = runTest { + var calls = 0 + val result = withRetry(sleep = {}) { + calls++ + if (calls == 1) transport else found + } + assertEquals(found, result) + assertEquals(2, calls) + } + + @Test + fun `retrying stops at MAX_ATTEMPTS and reports how many were made`() = runTest { + var calls = 0 + val result = withRetry(sleep = {}) { calls++; transport } + assertEquals(RetryPolicy.MAX_ATTEMPTS, calls) + // The attempt count is the whole diagnostic value of the string on a real + // phone: one reset and three in a row are different network stories. + assertEquals( + SourceResult.Failed("tls connection reset, 3 attempts", FailureKind.TRANSPORT), + result, + ) + } + + @Test + fun `a single failure is reported without an attempt count`() = runTest { + val timeout = SourceResult.Failed("timeout", FailureKind.TIMEOUT) + var calls = 0 + val result = withRetry(sleep = {}) { calls++; timeout } + assertEquals(1, calls) + assertEquals(timeout, result) + } + + @Test + fun `NotFound is authoritative and is never retried`() = runTest { + var calls = 0 + val result = withRetry(sleep = {}) { calls++; SourceResult.NotFound } + assertEquals(SourceResult.NotFound, result) + assertEquals(1, calls) + } + + @Test + fun `an un-retryable failure short-circuits after one attempt`() = runTest { + var calls = 0 + val result = withRetry(sleep = {}) { calls++; SourceResult.fromHttpCode(429) } + assertEquals(1, calls) + assertEquals(FailureKind.RATE_LIMITED, (result as SourceResult.Failed).kind) + } + + @Test + fun `the budget stops a new attempt but never cancels one in flight`() = runTest { + // Clock jumps past the budget during the first attempt. The result of that + // attempt must still be honoured, and no second attempt may start. + var now = 0L + var calls = 0 + val result = withRetry( + budgetMillis = 1_000L, + nowMillis = { now }, + sleep = {}, + ) { + calls++ + now += 5_000L + transport + } + assertEquals(1, calls) + assertEquals(transport, result) + } + + @Test + fun `backoff is short and jittered, never zero and never seconds long`() { + val r = Random(1234) + repeat(200) { + val first = RetryPolicy.backoffMillis(2, r) + val second = RetryPolicy.backoffMillis(3, r) + assertTrue("first retry backoff was $first", first in 250L..349L) + assertTrue("second retry backoff was $second", second in 750L..1049L) + } + } + + // --- exception and status classification --- + + @Test + fun `socket timeout and a blown call timeout both classify as TIMEOUT`() { + assertEquals(FailureKind.TIMEOUT, SourceResult.fromException(SocketTimeoutException()).kind) + // OkHttp reports an exceeded callTimeout as a bare InterruptedIOException. + assertEquals(FailureKind.TIMEOUT, SourceResult.fromException(InterruptedIOException()).kind) + } + + @Test + fun `the observed live failure -- a TLS-stage reset -- classifies as retryable transport`() { + val failed = SourceResult.fromException(SSLException("Connection reset by peer")) + assertEquals(FailureKind.TRANSPORT, failed.kind) + assertTrue(RetryPolicy.isRetryable(failed.kind)) + } + + @Test + fun `each transport exception gets its own reason, not a generic one`() { + // The reason string is the only diagnostic we get back from a real phone, + // so these must stay distinguishable from each other. + val reasons = listOf( + SourceResult.fromException(UnknownHostException()).reason, + SourceResult.fromException(SSLHandshakeException("h")).reason, + SourceResult.fromException(SSLException("r")).reason, + SourceResult.fromException(ConnectException()).reason, + SourceResult.fromException(SocketException()).reason, + ) + assertEquals(reasons.size, reasons.toSet().size) + assertTrue(reasons.none { it.isBlank() }) + } + + @Test + fun `an unrecognised IOException names its own type rather than saying network error`() { + val failed = SourceResult.fromException(IOException("boom")) + assertEquals(FailureKind.TRANSPORT, failed.kind) + assertTrue(failed.reason, failed.reason.contains("IOException")) + } + + @Test + fun `http statuses map to the kinds that drive retrying`() { + assertEquals(FailureKind.RATE_LIMITED, SourceResult.fromHttpCode(429).kind) + assertEquals(FailureKind.SERVER_ERROR, SourceResult.fromHttpCode(500).kind) + assertEquals(FailureKind.SERVER_ERROR, SourceResult.fromHttpCode(503).kind) + assertEquals(FailureKind.CLIENT_ERROR, SourceResult.fromHttpCode(404).kind) + assertEquals(FailureKind.CLIENT_ERROR, SourceResult.fromHttpCode(400).kind) + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/data/prefs/SettingsStoreTest.kt b/app/app/src/test/java/org/modg/bookshelf/data/prefs/SettingsStoreTest.kt new file mode 100644 index 0000000..9190cf9 --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/data/prefs/SettingsStoreTest.kt @@ -0,0 +1,73 @@ +package org.modg.bookshelf.data.prefs + +import androidx.test.core.app.ApplicationProvider +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +/** + * Covers the "remember the most recently used shelf" feature's persistence layer — + * see [org.modg.bookshelf.ui.scan.ScanViewModel] and + * [org.modg.bookshelf.ui.detail.DetailViewModel] for the callers that decide *when* + * to write, and [org.modg.bookshelf.ui.components.resolveRecentShelf] for how the + * picker decides whether the remembered shelf is still offerable. + */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [34]) +class SettingsStoreTest { + + private lateinit var settingsStore: SettingsStore + + @Before + fun setUp() = runTest { + settingsStore = SettingsStore(ApplicationProvider.getApplicationContext()) + // DataStore's backing file lives in the app's real files dir, which Robolectric + // does not reset between test methods in this class — start every test from a + // known-clean slate instead of depending on method execution order. + settingsStore.clearLastShelfId() + } + + @Test + fun `last shelf id is null before anything is remembered`() = runTest { + assertNull(settingsStore.lastShelfId.first()) + } + + @Test + fun `last shelf id round-trips through the store`() = runTest { + settingsStore.setLastShelfId("sh-top") + + assertEquals("sh-top", settingsStore.lastShelfId.first()) + } + + @Test + fun `setting a new last shelf id overwrites the previous one`() = runTest { + settingsStore.setLastShelfId("sh-top") + settingsStore.setLastShelfId("sh-desk") + + assertEquals("sh-desk", settingsStore.lastShelfId.first()) + } + + @Test + fun `clearLastShelfId drops the remembered shelf`() = runTest { + settingsStore.setLastShelfId("sh-top") + + settingsStore.clearLastShelfId() + + assertNull(settingsStore.lastShelfId.first()) + } + + @Test + fun `sign out clears the remembered shelf so it can't leak to the other account`() = runTest { + settingsStore.setLastShelfId("sh-top") + + settingsStore.clearAuth() + + assertNull(settingsStore.lastShelfId.first()) + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetPaparazziTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetPaparazziTest.kt new file mode 100644 index 0000000..86d4598 --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetPaparazziTest.kt @@ -0,0 +1,78 @@ +package org.modg.bookshelf.ui.components + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import app.cash.paparazzi.DeviceConfig +import app.cash.paparazzi.Paparazzi +import org.junit.Rule +import org.junit.Test +import org.modg.bookshelf.data.local.BookcaseEntity +import org.modg.bookshelf.data.local.ShelfEntity +import org.modg.bookshelf.data.local.SyncState +import org.modg.bookshelf.ui.theme.BookshelfTheme + +/** + * [ShelfPickerSheet]'s grouped picker, replacing the old flat dropdown (SPEC + * task: "the state the whole change exists for"). Renders [ShelfPickerContent] + * directly rather than the real [androidx.compose.material3.ModalBottomSheet] — + * Paparazzi has no real Window/scrim behind a headless sheet, same problem + * [org.modg.bookshelf.ui.screens.ScanScreenPaparazziTest]'s class doc describes. + * Two bookcases, one of them empty, plus a remembered "Recent" shelf — the + * state this whole component exists for. + */ +class ShelfPickerSheetPaparazziTest { + + @get:Rule + val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_6) + + private val livingRoom = BookcaseEntity( + id = "bc-living-room", name = "Living Room", note = null, position = 0, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + private val study = BookcaseEntity( + id = "bc-study", name = "Study", note = null, position = 1, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + private val topShelf = ShelfEntity( + id = "sh-top", bookcaseId = livingRoom.id, label = "Top shelf — fiction", position = 0, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + private val bottomShelf = ShelfEntity( + id = "sh-bottom", bookcaseId = livingRoom.id, label = "Bottom shelf — reference", position = 1, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + + @Test + fun shelfPickerGroupedLight() = snapshotBoth("shelf-picker-grouped") { + Content() + } + + @Composable + private fun Content() = Shell { + ShelfPickerContent( + bookcases = listOf(livingRoom, study), // "study" has no shelves yet — empty-bookcase state + shelves = listOf(topShelf, bottomShelf), + selectedShelfId = bottomShelf.id, + recentShelfId = topShelf.id, // recent shelf, distinct from the current selection + onShelfSelected = {}, + ) + } + + @Composable + private fun Shell(content: @Composable () -> Unit) { + Box(modifier = Modifier.fillMaxWidth()) { + Surface(color = MaterialTheme.colorScheme.surface) { + content() + } + } + } + + private fun snapshotBoth(name: String, content: @Composable () -> Unit) { + paparazzi.snapshot(name = "$name-light") { BookshelfTheme(darkTheme = false) { content() } } + paparazzi.snapshot(name = "$name-dark") { BookshelfTheme(darkTheme = true) { content() } } + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetTest.kt new file mode 100644 index 0000000..789441b --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/ui/components/ShelfPickerSheetTest.kt @@ -0,0 +1,53 @@ +package org.modg.bookshelf.ui.components + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test +import org.modg.bookshelf.data.local.BookcaseEntity +import org.modg.bookshelf.data.local.ShelfEntity +import org.modg.bookshelf.data.local.SyncState + +/** + * [resolveRecentShelf] backs [ShelfPickerSheet]'s "Recent" section: it must be + * omitted, not shown dangling, when there is nothing remembered or the + * remembered shelf no longer exists (deleted since it was last used). + */ +class ShelfPickerSheetTest { + + private val livingRoom = BookcaseEntity( + id = "bc-living-room", name = "Living Room", note = null, position = 0, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + private val topShelf = ShelfEntity( + id = "sh-top", bookcaseId = livingRoom.id, label = "Top shelf", position = 0, + createdAt = 1, updatedAt = 1, syncState = SyncState.SYNCED, + ) + + @Test + fun `no remembered shelf resolves to null`() { + val result = resolveRecentShelf(recentShelfId = null, shelves = listOf(topShelf), bookcases = listOf(livingRoom)) + + assertNull(result) + } + + @Test + fun `a remembered shelf that no longer exists resolves to null`() { + val result = resolveRecentShelf(recentShelfId = "sh-deleted", shelves = listOf(topShelf), bookcases = listOf(livingRoom)) + + assertNull(result) + } + + @Test + fun `a remembered shelf whose bookcase was deleted resolves to null`() { + val result = resolveRecentShelf(recentShelfId = topShelf.id, shelves = listOf(topShelf), bookcases = emptyList()) + + assertNull(result) + } + + @Test + fun `a remembered shelf that still exists resolves to its shelf and bookcase`() { + val result = resolveRecentShelf(recentShelfId = topShelf.id, shelves = listOf(topShelf), bookcases = listOf(livingRoom)) + + assertEquals(topShelf to livingRoom, result) + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/detail/DetailViewModelTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/detail/DetailViewModelTest.kt new file mode 100644 index 0000000..0872e5a --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/ui/detail/DetailViewModelTest.kt @@ -0,0 +1,77 @@ +package org.modg.bookshelf.ui.detail + +import androidx.room.Room +import androidx.test.core.app.ApplicationProvider +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.modg.bookshelf.data.local.BookEntity +import org.modg.bookshelf.data.local.BookshelfDatabase +import org.modg.bookshelf.data.prefs.SettingsStore +import org.modg.bookshelf.data.repo.BookRepository +import org.modg.bookshelf.data.repo.LocationRepository +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +/** + * SPEC's "remember the most recently used shelf" from the detail screen's side: + * [DetailViewModel.saveLocation] must write a non-null shelf to [SettingsStore], + * but "Not shelved" (null) must never overwrite what's already remembered. + */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [34]) +class DetailViewModelTest { + + private lateinit var db: BookshelfDatabase + private lateinit var settingsStore: SettingsStore + private lateinit var viewModel: DetailViewModel + private lateinit var book: BookEntity + private lateinit var shelfId: String + + @Before + fun setUp() = runTest { + val context = ApplicationProvider.getApplicationContext() + db = Room.inMemoryDatabaseBuilder(context, BookshelfDatabase::class.java) + .allowMainThreadQueries() + .build() + settingsStore = SettingsStore(context) + val bookRepository = BookRepository(db.bookDao(), context) + val locationRepository = LocationRepository(db.bookcaseDao(), db.shelfDao(), db.bookDao()) + val bookcaseId = locationRepository.createBookcase(name = "Living Room") + shelfId = locationRepository.createShelf(bookcaseId, label = "Top shelf") + val bookId = bookRepository.createBook(title = "Piranesi") + book = checkNotNull(bookRepository.getById(bookId)) + + viewModel = DetailViewModel( + bookRepository = bookRepository, + locationRepository = locationRepository, + settingsStore = settingsStore, + bookId = bookId, + ) + } + + @After + fun tearDown() { + db.close() + } + + @Test + fun `moving a book to a shelf remembers that shelf`() = runTest { + viewModel.performSaveLocation(book, shelfId) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } + + @Test + fun `marking a book Not shelved does not overwrite the remembered shelf`() = runTest { + settingsStore.setLastShelfId(shelfId) + + viewModel.performSaveLocation(book, null) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/scan/ScanViewModelTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/scan/ScanViewModelTest.kt new file mode 100644 index 0000000..423e12d --- /dev/null +++ b/app/app/src/test/java/org/modg/bookshelf/ui/scan/ScanViewModelTest.kt @@ -0,0 +1,100 @@ +package org.modg.bookshelf.ui.scan + +import androidx.room.Room +import androidx.test.core.app.ApplicationProvider +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest +import kotlinx.serialization.json.Json +import okhttp3.OkHttpClient +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.modg.bookshelf.data.local.BookshelfDatabase +import org.modg.bookshelf.data.metadata.BookMetadata +import org.modg.bookshelf.data.metadata.MetadataRepository +import org.modg.bookshelf.data.prefs.SettingsStore +import org.modg.bookshelf.data.repo.BookRepository +import org.modg.bookshelf.data.repo.LocationRepository +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +/** + * SPEC's "remember the most recently used shelf": [ScanViewModel.save] and + * [ScanViewModel.saveManualEntry] must write the chosen shelf to [SettingsStore] + * so it survives to the next scanning session — except "Not shelved" (null), + * which must never overwrite what's already remembered. + */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [34]) +class ScanViewModelTest { + + private lateinit var db: BookshelfDatabase + private lateinit var settingsStore: SettingsStore + private lateinit var viewModel: ScanViewModel + private lateinit var locationRepository: LocationRepository + private lateinit var shelfId: String + + @Before + fun setUp() = runTest { + val context = ApplicationProvider.getApplicationContext() + db = Room.inMemoryDatabaseBuilder(context, BookshelfDatabase::class.java) + .allowMainThreadQueries() + .build() + settingsStore = SettingsStore(context) + locationRepository = LocationRepository(db.bookcaseDao(), db.shelfDao(), db.bookDao()) + val bookcaseId = locationRepository.createBookcase(name = "Living Room") + shelfId = locationRepository.createShelf(bookcaseId, label = "Top shelf") + + viewModel = ScanViewModel( + bookRepository = BookRepository(db.bookDao(), context), + locationRepository = locationRepository, + metadataRepository = MetadataRepository(OkHttpClient(), Json { ignoreUnknownKeys = true }), + settingsStore = settingsStore, + ) + } + + @After + fun tearDown() { + db.close() + } + + @Test + fun `saving a metadata hit to a shelf remembers that shelf`() = runTest { + viewModel.selectShelf(shelfId) + + viewModel.performSave("9780765326355", BookMetadata(title = "The Way of Kings")) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } + + @Test + fun `saving a manual entry to a shelf remembers that shelf`() = runTest { + viewModel.selectShelf(shelfId) + + viewModel.performSaveManualEntry("9780765326355", "The Way of Kings", listOf("Brandon Sanderson")) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } + + @Test + fun `saving as Not shelved does not overwrite the remembered shelf`() = runTest { + settingsStore.setLastShelfId(shelfId) + viewModel.selectShelf(null) + + viewModel.performSave("9780765326355", BookMetadata(title = "The Way of Kings")) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } + + @Test + fun `saving a manual entry as Not shelved does not overwrite the remembered shelf`() = runTest { + settingsStore.setLastShelfId(shelfId) + viewModel.selectShelf(null) + + viewModel.performSaveManualEntry("9780765326355", "The Way of Kings", emptyList()) + + assertEquals(shelfId, settingsStore.lastShelfId.first()) + } +} diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/screens/DetailScreenPaparazziTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/screens/DetailScreenPaparazziTest.kt index 500d674..a8c7058 100644 --- a/app/app/src/test/java/org/modg/bookshelf/ui/screens/DetailScreenPaparazziTest.kt +++ b/app/app/src/test/java/org/modg/bookshelf/ui/screens/DetailScreenPaparazziTest.kt @@ -78,6 +78,7 @@ class DetailScreenPaparazziTest { book = book, bookcases = ScreenFixtures.bookcases, shelves = ScreenFixtures.shelves, + recentShelfId = null, onShelfSelected = {}, ) } diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/screens/LocationsScreenPaparazziTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/screens/LocationsScreenPaparazziTest.kt index b5ec1b0..cebd330 100644 --- a/app/app/src/test/java/org/modg/bookshelf/ui/screens/LocationsScreenPaparazziTest.kt +++ b/app/app/src/test/java/org/modg/bookshelf/ui/screens/LocationsScreenPaparazziTest.kt @@ -18,6 +18,7 @@ import app.cash.paparazzi.DeviceConfig import app.cash.paparazzi.Paparazzi import org.junit.Rule import org.junit.Test +import org.modg.bookshelf.data.local.BookcaseEntity import org.modg.bookshelf.ui.components.BookshelfScaffold import org.modg.bookshelf.ui.components.GoldDivider import org.modg.bookshelf.ui.components.PaperSurface @@ -40,12 +41,25 @@ class LocationsScreenPaparazziTest { @Test fun locationsPopulatedLight() = snapshotBoth("locations-populated") { Populated() } - @Composable - private fun Populated() = Shell() + /** + * Regression coverage for the ghost-bookcase bug: with the list branch not + * folding in the Scaffold's top app bar inset, a single bookcase's row + * rendered underneath the app bar and was invisible. This renders exactly + * that one-bookcase state; check the recorded PNG shows the bookcase row + * fully below the app bar, not clipped/hidden behind it. + */ + @Test + fun locationsSingleBookcaseLight() = snapshotBoth("locations-single-bookcase") { SingleBookcase() } @Composable - private fun Shell() { - val bookcaseUis = ScreenFixtures.bookcases.map { bookcase -> + private fun Populated() = Shell(ScreenFixtures.bookcases) + + @Composable + private fun SingleBookcase() = Shell(listOf(ScreenFixtures.livingRoom)) + + @Composable + private fun Shell(bookcases: List) { + val bookcaseUis = bookcases.map { bookcase -> BookcaseUi( bookcase = bookcase, shelves = ScreenFixtures.shelves diff --git a/app/app/src/test/java/org/modg/bookshelf/ui/screens/ScanScreenPaparazziTest.kt b/app/app/src/test/java/org/modg/bookshelf/ui/screens/ScanScreenPaparazziTest.kt index eaa8f0f..d0d2dfa 100644 --- a/app/app/src/test/java/org/modg/bookshelf/ui/screens/ScanScreenPaparazziTest.kt +++ b/app/app/src/test/java/org/modg/bookshelf/ui/screens/ScanScreenPaparazziTest.kt @@ -96,6 +96,7 @@ class ScanScreenPaparazziTest { bookcases = ScreenFixtures.bookcases, shelves = ScreenFixtures.shelves, selectedShelfId = ScreenFixtures.deskShelf.id, + recentShelfId = null, onShelfSelected = {}, onSave = {}, onSkip = {}, @@ -127,6 +128,7 @@ class ScanScreenPaparazziTest { ) { LookupFailedSheet( isbn13 = "9780765326355", + reason = "open library: network error; google books: http 429", onRetry = {}, onEnterByHand = {}, onSkip = {}, diff --git a/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-dark.png b/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1758921fb0bc8d14c10238835c5b7ceb43337100 GIT binary patch literal 24655 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 LIx1z#Rxken3-gT> literal 0 HcmV?d00001 diff --git a/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-light.png b/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.components_ShelfPickerSheetPaparazziTest_shelfPickerGroupedLight_shelf-picker-grouped-light.png new file mode 100644 index 0000000000000000000000000000000000000000..827adb1f8dcfc1efa2d8f11984d1c5127721cac8 GIT binary patch literal 24497 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
jC*}O2
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
VCVj--{`Sv5ujEu^iy`m7{vVUX!Y%*+

literal 28793
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
z	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
W3)3zX{`bee>sRfsR9oD8{NDh!!Lz&o

diff --git a/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.screens_ScanScreenPaparazziTest_scanSearchingSheetLight_scan-searching-sheet-light.png b/app/app/src/test/snapshots/images/org.modg.bookshelf.ui.screens_ScanScreenPaparazziTest_scanSearchingSheetLight_scan-searching-sheet-light.png
index 888e6007d61f798b157348a96e135b94f785db95..3267c83fa2c274a283801d7a60d689c78bf4007f 100644
GIT binary patch
literal 13644
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%0Di6zN;eM
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
T3Bey|2wk~kcd^Ry?&JRga`;k?

diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md
index ecec457..da1eab4 100644
--- a/docs/HANDOFF.md
+++ b/docs/HANDOFF.md
@@ -411,3 +411,90 @@ successfully. Use these instead, in this order:
   2. `tail logs/.state` — says SUCCESS / GIVING UP / WALL CLOCK explicitly.
   3. `git status --porcelain` — is there actually work in the tree?
 The sentinel is a convenience, not the record of truth. `logs/.state` is.
+
+## Wave 6 — second on-device feedback round: COMPLETE, verified 2026-09-09
+The user tested the phone build again and sent eight items. All eight are done.
+Two Sonnet workers (`tasks/H1-screens.txt`, `tasks/H2-picker.txt`) took the UI
+work; the ORCHESTRATOR did the retry/backoff work itself in `data/metadata` and
+`AppContainer`, because it needed the live measurement below to design it.
+
+| Check | Result |
+|---|---|
+| `./tasks/gw assembleDebug` | exit 0 |
+| `./tasks/gw testDebugUnitTest` | exit 0 — **172 tests**, 1 skipped, 0 failures (was 138) |
+| `./tasks/gw verifyPaparazziDebug` | exit 0 |
+| `grep "always 'false'"` on a `--rerun-tasks` rebuild | **0 hits** |
+| `./tasks/gw assembleRelease` | exit 0 — 41,810,740 bytes, V2 signer `CN=Bookshelf, O=Montanaro` |
+| boundary check | clean — neither worker touched a build file or the other's packages |
+
+### The ghost bookcase was an inset bug, not a data bug
+`LocationsScreen`'s list branch dropped the Scaffold's `innerPadding` while its
+empty-state branch applied it, so the FIRST bookcase row rendered underneath the
+top app bar and was invisible. Every symptom the user described follows from that:
+invisible first bookcase, no empty state on re-entry (the list was genuinely
+non-empty), a second bookcase created, both showing in the filter menu. **Both
+records were always real and healthy** — the user should delete the spare.
+Every other screen was checked for the same class of bug; Locations was the only
+one. Fix: fold `innerPadding` into the LazyColumn's `contentPadding` (NOT
+`Modifier.padding`, which would clip the scroll area instead of insetting it).
+
+### Metadata: measured, not guessed
+See `docs/METADATA-SOURCES.md` § "Measured again 2026-09-09" for the full data.
+Two things that change how you should think about this app:
+
+1. **Google Books keyless is dead for everyone, permanently.** The user's
+   residential-IP test returned a quota error naming `project_number:624717413613`
+   — a shared anonymous *project*, not an IP. The old note in METADATA-SOURCES.md
+   guessing that a residential IP "may well get answers" is now marked CORRECTED
+   in place. Because `combine()` turns any Failed-with-no-Found into `Unavailable`,
+   this standing failure meant **every** Open Library hiccup surfaced as
+   "one or more sources couldn't be reached". The app has been single-sourced all
+   along. **The user has deliberately deferred the API key — do not add it unasked.**
+2. **Our own timeouts were manufacturing failures.** 30 live requests: 13% failed,
+   all fast TLS resets (<2.5s); successes had a median of 4.3s but a max of 22.0s,
+   and **2 of 26 successes exceeded the old 12s `callTimeout`**. Timeouts are now
+   25s/20s/20s. Failures are fast and successes are slow, so a short timeout buys
+   nothing on the failure path and costs real successes on the slow path.
+
+`RetryPolicy` + `withRetry` (new, `data/metadata/`) retry TRANSPORT and
+SERVER_ERROR only. It deliberately does NOT retry:
+- **TIMEOUT** — the budget is already spent; retrying could triple the wait.
+- **RATE_LIMITED** — hammering a quota is how an intermittent block becomes a
+  permanent one, and METADATA-SOURCES.md records that happening to this project's
+  IP. Revisit when the Google Books key lands: a *keyed* 429 is a per-second limit
+  and does deserve one Retry-After-respecting retry.
+`SourceResult.Failed` now carries a `FailureKind` alongside its human `reason`, and
+`reason` names the specific exception ("tls connection reset, 3 attempts") instead
+of a generic "network error". **That string is now rendered on the scan sheet and
+is our ONLY diagnostic channel from a real phone.** Nothing may parse it.
+
+### Known-soft spots in wave 6 — do not mistake these for verified
+1. **The Paparazzi "regression" snapshot for the ghost bookcase is a lookalike,
+   not the real screen.** `LocationsScreenPaparazziTest` hand-rolls its own
+   Scaffold+LazyColumn copy because the real `LocationsScreen` needs an
+   `AppContainer` (Room + DataStore). The orchestrator verified the REAL fix by
+   reading the diff; the PNG only proves the test's copy is right, and the two can
+   drift — the copy already omits the bottom inset the real screen adds. Splitting
+   a stateless `LocationsContent(state, callbacks)` out of the screen would make
+   this snapshot genuine. Worth doing before anyone trusts it as regression cover.
+2. **The auto-focus calls are unverified.** Three dialogs now do
+   `LaunchedEffect(Unit) { runCatching { focusRequester.requestFocus() } }`. That
+   is the idiomatic form, but there is no emulator here and `runCatching` means a
+   too-early call fails SILENTLY rather than crashing. If a dialog opens unfocused
+   on the phone, that is why; the fix is to await a frame before requesting.
+3. **The shelf picker opens as a bottom sheet stacked on top of the save sheet**
+   (H2's own flagged judgement call). It renders correctly in Paparazzi but
+   sheet-over-sheet is awkward on real Android. Watch it on the device.
+
+### Worker lessons (both are repeats — the prompts already forbade them)
+- **H1 backgrounded a Gradle build and ended its turn**, exactly the wave-4
+  failure, despite an explicit foreground-only instruction AND
+  `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0` being set in `run-task.sh`. Its final
+  message was "I'll wait for this background build to complete." `run-task.sh`
+  still recorded SUCCESS because the process exited 0. **`.state` saying SUCCESS
+  means the process exited cleanly, NOT that the worker finished its task** — read
+  `logs/.summary` and check that the result is an actual report. H1's work
+  was fine, but nobody verified it except the orchestrator.
+- H2 (108 turns, $4.00) followed the brief closely, ran builds in the foreground,
+  and reported honestly, including flagging its own stacked-sheet judgement call.
+  Cost ratio to H1 ($0.66, 5 turns) is roughly the ratio of work actually done.
diff --git a/docs/METADATA-SOURCES.md b/docs/METADATA-SOURCES.md
index 5042f85..a97e1d1 100644
--- a/docs/METADATA-SOURCES.md
+++ b/docs/METADATA-SOURCES.md
@@ -97,6 +97,10 @@ Worth saying plainly, because it bounds how much weight the numbers carry:
   this host sharing a quota pool with other tenants; **your phone, on a
   residential or mobile IP, may well get answers.** That's precisely why the
   app needs to be able to tell us which it got.
+  > **CORRECTED 2026-09-09 — this guess was WRONG.** The user tested from a
+  > residential IP and got the same refusal, naming a shared *project* quota
+  > rather than an IP one. See "Measured again 2026-09-09" at the end of this
+  > file. Do not act on the sentence above.
 - I don't know which three ISBNs you scanned. If you still have the books to
   hand, those three numbers are worth more than another 60 sampled ones.
 
@@ -215,3 +219,76 @@ One thing worth deciding separately: 17% of books legitimately have no cover art
 anywhere. The placeholder now looks deliberate rather than broken, but if you
 want covers on everything, that's a different feature — photograph the book,
 store it as the cover — and not a metadata-source problem at all.
+
+## Measured again 2026-09-09, after the user tested from a residential IP
+
+Two things were settled that the first round could only guess at.
+
+### Google Books keyless is dead everywhere, not just from this box
+
+The user ran the app's exact Google Books call from their home connection and got:
+
+    Quota exceeded for quota metric 'Queries' and limit 'Queries per day'
+    of service 'books.googleapis.com' for consumer 'project_number:624717413613'
+
+That names a **Google Cloud project, not an IP**. Every keyless caller on the
+internet is billed to that one shared anonymous project and its daily quota is
+exhausted. So:
+
+- The earlier caveat — "your phone, on a residential or mobile IP, may well get
+  answers" — is **WRONG**. Delete it from your mental model. It was tested and it
+  is not true.
+- Backoff cannot help. This is a daily quota, not a per-second rate limit.
+- A free API key is the only fix, and it is a complete one: it moves the app into
+  its own project with its own quota (free tier 1,000 req/day).
+
+The knock-on is the part that actually hurt the user. `MetadataRepository.combine`
+turns "any source Failed, none Found" into `Unavailable`. Google Books is a
+PERMANENT standing failure, so **every** Open Library hiccup became `Unavailable`.
+The app has effectively been single-sourced this whole time while reporting
+failures as though two sources had been consulted.
+
+**The user has deliberately deferred the API key.** Do not implement it unasked.
+
+### Open Library: 13% failure, and our own timeout was manufacturing more
+
+30 requests, the exact call `OpenLibraryClient` makes, 1.5s apart, from the sprite:
+
+| | |
+|---|---|
+| failure rate | **13%** (4 of 30) |
+| every failure | curl exit 35 — TLS-stage `Connection reset by peer` |
+| failure latency | 0.23s, 0.31s, 0.59s, 2.46s — **all fast** |
+| success latency | median **4.3s**, p75 6.0s, p90 **9.2s**, max **22.0s** |
+| successes over the old 12s callTimeout | **2 of 26 (8%)** |
+
+Two conclusions, and they point in opposite directions:
+
+1. **Failures are cheap and transient**, so retrying is nearly free. 13% → ~1.7%
+   at two attempts → ~0.2% at three. This is why `RetryPolicy` exists and why its
+   backoff is milliseconds rather than the conventional seconds.
+2. **Successes are slow and long-tailed**, and the app's own
+   `callTimeout(12s)`/`connectTimeout(10s)` were cutting off roughly 8% of
+   lookups that were about to succeed — then reporting them to the user as
+   "couldn't be reached". The app was generating a meaningful share of its own
+   failures. Timeouts are now 25s/20s/20s, above the 22.0s worst observed success.
+
+The asymmetry is the whole design: a short timeout buys nothing on the failure
+path (failures return in under 2.5s regardless) and costs real successes on the
+slow path. That is also why `RetryPolicy.isRetryable` refuses to repeat a
+TIMEOUT — a timeout means the budget was already spent, and the evidence says
+slow requests mostly succeed if you let them finish.
+
+Connection reuse is visible in the data and matters in real use: cold connects
+ran 2-19s while warm ones ran 0.07s. OkHttp pools connections for 5 minutes, so
+scanning a box of books in sequence stays on the fast path after the first book.
+
+### What still is not known
+
+- All 30 requests came from this datacenter IP. The user's phone may see a
+  different failure rate. The reason string now shown on the scan sheet
+  (`SourceResult.Failed.reason`, e.g. "tls connection reset, 3 attempts") is how
+  we find out — it is the only diagnostic channel we have from a real device.
+- The user's own 3-request sample showed 2 failures. That is consistent with 13%
+  (p ~ 5%) but does not confirm it. If their phone reports "3 attempts" often,
+  their network is worse than this one and the retry count deserves revisiting.
diff --git a/logs/G-diagnostics.sid b/logs/G-diagnostics.sid
new file mode 100644
index 0000000..6a15241
--- /dev/null
+++ b/logs/G-diagnostics.sid
@@ -0,0 +1 @@
+9b656dc8-a225-47ec-b6ce-549241854de6
diff --git a/logs/G-diagnostics.summary b/logs/G-diagnostics.summary
new file mode 100644
index 0000000..e6a5c5b
--- /dev/null
+++ b/logs/G-diagnostics.summary
@@ -0,0 +1,19 @@
+=== G-diagnostics  attempts=2 quota_waits=1 hard_fails=0 ===
+cost=$0.28007899999999997 turns=6 err=?
+--- result (tail) ---
+` case. `byIsbnCoverUrl` untouched.
+
+**AppContainer.kt** — `metadataHttpClient` now has `callTimeout(12s)/connectTimeout(10s)/readTimeout(10s)`. PocketBase `okHttpClient` untouched.
+
+**ui.scan:**
+- `ScanCodeFilter.kt` — `accept()` returns `ScanOutcome { Isbn, NotAnIsbn, Ignored }`; one shared debounce mechanism throttles repeats of valid *and* rejected codes alike.
+- `ScannerController.kt` — new `rejectedCodes: SharedFlow` routed alongside `scanResults`.
+- `ScanModels.kt` — `ScanSheetState.NotFound` gained `viaLookupFailure: Boolean = false`; added `ScanSheetState.LookupFailed(isbn13, reason)`; `ScanMetadataOutcome.from` maps all three `LookupResult` cases.
+- `ScanViewModel.kt` — `retryLookup`/`enterByHand` added; lookup logic factored so Retry bypasses the "sheet already showing" guard; `rejectedMessage: StateFlow` with a 3s auto-clear timer.
+- `ScanScreen.kt` — new `LookupFailedSheet` (Retry/Enter by hand/Skip, dismissible, never claims the book unknown); `ManualEntrySheet` reworded via `authoritative: Boolean`; new `RejectedBarcodeBanner` shown over the camera.
+
+**Tests:** classify() cases for both clients, the full 3×3 `combine` matrix, `ScanCodeFilter` throttle tests with an injected clock, `ScannerController` rejected-code routing, updated `ScanModelsTest`, and two new Paparazzi snapshots (`LookupFailedSheet`, rejected-barcode banner) recorded in both light and dark — all visually verified.
+
+No warnings (Kotlin or otherwise) were introduced in any file I touched; a clean `--rerun` compile shows only pre-existing, unrelated deprecation warnings elsewhere in the codebase.
+
+Nothing was left undone relative to the original instructions, and no constraints (forbidden files, no commits, foreground builds, no MockWebServer) were violated.
diff --git a/logs/H1-screens.sid b/logs/H1-screens.sid
new file mode 100644
index 0000000..8f8ec99
--- /dev/null
+++ b/logs/H1-screens.sid
@@ -0,0 +1 @@
+430e1016-0c8c-47a5-905b-ad106cbb6b19
diff --git a/logs/H1-screens.summary b/logs/H1-screens.summary
new file mode 100644
index 0000000..75e2110
--- /dev/null
+++ b/logs/H1-screens.summary
@@ -0,0 +1,4 @@
+=== H1-screens  attempts=1 quota_waits=0 hard_fails=0 ===
+cost=$0.6623552 turns=5 err=?
+--- result (tail) ---
+I'll wait for this background build to complete before continuing.
diff --git a/logs/H2-picker.sid b/logs/H2-picker.sid
new file mode 100644
index 0000000..fee804e
--- /dev/null
+++ b/logs/H2-picker.sid
@@ -0,0 +1 @@
+67bf128a-9c53-4fd2-b9ce-10b99f4a385d
diff --git a/logs/H2-picker.summary b/logs/H2-picker.summary
new file mode 100644
index 0000000..bd3912c
--- /dev/null
+++ b/logs/H2-picker.summary
@@ -0,0 +1,10 @@
+=== H2-picker  attempts=1 quota_waits=0 hard_fails=0 ===
+cost=$3.9990499999999995 turns=108 err=?
+--- result (tail) ---
+ succeeded. New `shelf-picker-grouped-{light,dark}` snapshot shows two bookcases (Living Room with two shelves, one selected/bold/checked; Study empty with "No shelves yet"), plus the "Recent" section and "Not shelved" — verified visually. Existing `scan-searching-sheet` and `scan-lookup-failed-sheet` snapshots regenerated and confirmed correct (no stray "lower the book" line; reason string now visible).
+- Grepped all Kotlin compiler warnings from a forced rebuild: zero `always 'false'` hits anywhere, including my files.
+- `git status --porcelain`: only my owned files changed by me (`data/prefs/SettingsStore.kt`, `ui/scan/ScanScreen.kt`, `ui/scan/ScanViewModel.kt`, `ui/detail/DetailScreen.kt`, `ui/detail/DetailViewModel.kt`, new `ui/components/ShelfPickerSheet.kt`, and new/edited files under `app/app/src/test/**`). Everything else showing modified/untracked (`AppContainer.kt`, `data/metadata/**`, `ui/locations/**`, `ui/library/**`, `res/drawable/**`, `docs/METADATA-SOURCES.md`, locations snapshots) is the orchestrator's/other worker's concurrent work — untouched by me, left as-is.
+
+**Didn't do / judgment calls worth flagging**
+- Nothing skipped from the spec. One design decision: `ShelfPickerSheet` owns its own `ModalBottomSheet`, so tapping "Choose a shelf"/"Change" opens it as a second, stacked sheet over the already-open save/detail sheet — this matches "presented as a Material 3 ModalBottomSheet" literally rather than inlining the list in the existing sheet.
+- Added tests beyond the stated minimum: `SettingsStoreTest` (round-trip, overwrite, clear, clearAuth), `ShelfPickerSheetTest` (`resolveRecentShelf` — null/missing-shelf/missing-bookcase/found cases), `ScanViewModelTest` and `DetailViewModelTest` (remember-on-save/move, "Not shelved" doesn't overwrite).
diff --git a/logs/WAVE6-DONE b/logs/WAVE6-DONE
new file mode 100644
index 0000000..76315a2
--- /dev/null
+++ b/logs/WAVE6-DONE
@@ -0,0 +1,14 @@
+=== WAVE6-DONE written 2026-09-09T15:31:35+00:00 ===
+Workers finished. The orchestrator was NOT necessarily alive for this.
+
+--- H1-screens ---
+[2026-09-09T15:05:30+00:00] H1-screens: SUCCESS after 1 attempt(s), 0 quota wait(s)
+cost=$0.6623552 turns=5
+
+--- H2-picker ---
+[2026-09-09T15:31:29+00:00] H2-picker: SUCCESS after 1 attempt(s), 0 quota wait(s)
+cost=$3.9990499999999995 turns=108
+
+NEXT: orchestrator must independently verify before accepting:
+  cd ~/bookshelf && ./tasks/gw assembleDebug && ./tasks/gw testDebugUnitTest
+  git status --porcelain   # boundary check: who touched what
diff --git a/tasks/H1-screens.txt b/tasks/H1-screens.txt
new file mode 100644
index 0000000..0ca9d1d
--- /dev/null
+++ b/tasks/H1-screens.txt
@@ -0,0 +1,137 @@
+You are a Sonnet worker on the Bookshelf Android app (~/bookshelf). Read
+`docs/SPEC.md` first — it is the authoritative product contract and it wins over
+anything you infer from the code. Do not restate it, do not let it drift.
+
+## Ground rules (violating these fails the wave)
+- Build ONLY with `./tasks/gw ` — never `./gradlew`. A second worker shares
+  this Gradle project dir and concurrent invocations clobber each other. `tasks/gw`
+  is a flock-serialized wrapper.
+- Run builds in the FOREGROUND. Never background a Gradle build and end your turn
+  saying you'll report later — `claude -p` kills background tasks and you will
+  never report at all. Builds take up to 10 minutes; just wait.
+- You own EXACTLY these files:
+      app/app/src/main/java/org/modg/bookshelf/ui/locations/LocationsScreen.kt
+      app/app/src/main/java/org/modg/bookshelf/ui/library/LibraryScreen.kt
+      app/app/src/main/res/drawable/ic_shelves.xml          (new file, create it)
+      app/app/src/test/**                                    (tests you add)
+  Touch NOTHING else. Specifically forbidden: any build file
+  (`app/build.gradle.kts`, `gradle/libs.versions.toml`, `settings.gradle.kts`),
+  `data/**`, `ui/scan/**`, `ui/detail/**`, `ui/components/**`, `ui/nav/**`,
+  `ui/settings/**`, `ui/setup/**`, `AppContainer.kt`. Another worker and the
+  orchestrator own those RIGHT NOW and are editing them concurrently.
+- Do not change any public composable signature. `ui/nav/BookshelfNavHost.kt`
+  calls these screens and you may not edit it.
+
+## Task 1 — the ghost-bookcase bug (highest priority, a real user-facing defect)
+`LocationsScreen.kt` line ~97. The Scaffold hands `content` an `innerPadding` that
+accounts for the top app bar. The empty-state branch applies it; the list branch
+does NOT:
+
+    ) { innerPadding ->
+        PaperSurface(...) {
+            if (state.bookcases.isEmpty()) {
+                EmptyState(modifier = Modifier.padding(innerPadding), ...)   // correct
+            } else {
+                LazyColumn(contentPadding = PaddingValues(bottom = 96.dp)) { // BUG
+
+So the first bookcase row renders UNDERNEATH the app bar and is invisible. A user
+created a bookcase, could not see it, created a second one, and ended up with two
+real bookcases and no idea why. Fix it by folding `innerPadding` into the
+LazyColumn's `contentPadding` so the existing 96.dp bottom inset is PRESERVED and
+added to, not replaced — the bottom inset is what keeps the last row clear of the
+FAB. Something equivalent to:
+
+    contentPadding = PaddingValues(
+        top = innerPadding.calculateTopPadding(),
+        bottom = innerPadding.calculateBottomPadding() + 96.dp,
+    )
+
+Using `contentPadding` rather than `Modifier.padding` is deliberate: it keeps the
+list scrolling under the bar instead of clipping the scroll area.
+
+VERIFY THIS SPECIFICALLY: add a Paparazzi snapshot of `LocationsScreen` in a state
+with exactly ONE bookcase, and confirm in the rendered PNG that the bookcase row is
+fully visible below the app bar. A one-bookcase list is the exact case that was
+broken and it must be the case you prove fixed. If the existing Paparazzi harness
+makes rendering this screen with seeded state impractical, say so plainly in your
+report rather than skipping it silently.
+
+## Task 2 — auto-focus the first field in the location dialogs
+In `LocationsScreen.kt`, `BookcaseEditDialog` (~line 276) and `ShelfEditDialog`
+(~line 299) each open with an unfocused `OutlinedTextField`. The first field
+should take focus and raise the keyboard when the dialog appears. Use a
+`FocusRequester` + `LaunchedEffect(Unit) { focusRequester.requestFocus() }`.
+Bookcase dialog: focus "Name" (not "Note"). Shelf dialog: focus "Label".
+Guard the requestFocus call so it cannot throw if the node isn't attached yet.
+
+## Task 3 — library filter empty state
+`LibraryScreen.kt` ~line 204. The filter DropdownMenu always offers "All books"
+first, then a flat list of bookcases and shelves. When there are NO bookcases and
+NO shelves, the menu contains only "All books" — which is already the active state
+and cannot be changed, so it is a menu with nothing in it.
+
+When `bookcases` and `shelves` are both empty, replace the menu contents with a
+single DISABLED item reading "Add a bookcase to enable filtering". Keep the
+toolbar filter icon visible and enabled (it is how the feature is discovered) —
+only the menu's contents change. When locations DO exist, behaviour is unchanged.
+
+## Task 4 — replace the Warehouse icon with a real bookcase
+`LibraryScreen.kt` line ~100 uses `Icons.Outlined.Warehouse` for the button that
+opens Locations. It renders as a barn and reads wrong. `material-icons-extended`
+1.7.8 has no bookcase glyph (I checked all 1932 outlined icons), so use Material
+Symbols' `shelves`, which is a bookcase frame with shelves and books on them.
+
+Create `app/app/src/main/res/drawable/ic_shelves.xml` with EXACTLY this content.
+This is the SVG path verbatim from Google's CDN. Do not re-derive it, do not
+    "simplify" it, and do not convert its relative (lowercase) commands to absolute
+    ones — Android's pathData parser accepts SVG syntax as-is. Material Symbols ship with
+`viewBox="0 -960 960 960"` — a negative Y origin that Android `` has no
+equivalent for — and the `` is what compensates.
+Removing it renders an empty icon.
+
+    
+    
+    
+        
+            
+        
+    
+
+Then swap the icon at the call site:
+
+    Icon(painterResource(R.drawable.ic_shelves), contentDescription = "Bookcases & shelves")
+
+Keep the existing contentDescription text. `Icon` applies its own tint over a
+Painter exactly as it does over an ImageVector, so the icon still picks up the
+theme colour — do NOT hardcode a colour at the call site. You will need imports
+for `androidx.compose.ui.res.painterResource` and `org.modg.bookshelf.R`, and the
+`Icons.Outlined.Warehouse` import becomes unused — remove it.
+
+## Verify before you report (all in the FOREGROUND)
+    ./tasks/gw assembleDebug
+    ./tasks/gw testDebugUnitTest
+    ./tasks/gw recordPaparazziDebug
+    git status --porcelain
+
+- assembleDebug and testDebugUnitTest must exit 0. The test count is 138 today and
+  must not go DOWN.
+- Grep your build output for the string `always 'false'`. That Kotlin warning class
+  silently blanked every book cover in this app for months by making a `when`
+  branch dead code that still compiled. Zero hits on files you touched.
+- `git status --porcelain` must show ONLY the files you own. If it shows others,
+  you have broken the boundary — report it, do not revert someone else's work.
+- Do not commit. The orchestrator commits after verifying.
+
+## Report
+Finish with a plain report: what you changed per task, the exact exit codes and
+test counts, whether the one-bookcase Paparazzi render actually proves task 1, and
+anything you could NOT do. Do not claim success you did not verify — several
+previous workers on this project over-claimed and were caught.
diff --git a/tasks/H2-picker.txt b/tasks/H2-picker.txt
new file mode 100644
index 0000000..abcac64
--- /dev/null
+++ b/tasks/H2-picker.txt
@@ -0,0 +1,143 @@
+You are a Sonnet worker on the Bookshelf Android app (~/bookshelf). Read
+`docs/SPEC.md` first — it is the authoritative product contract and it wins over
+anything you infer from the code. Do not restate it, do not let it drift.
+
+## Ground rules (violating these fails the wave)
+- Build ONLY with `./tasks/gw ` — never `./gradlew`. Another worker shares
+  this Gradle project dir and concurrent invocations clobber each other.
+  `tasks/gw` is a flock-serialized wrapper.
+- Run builds in the FOREGROUND. Never background a Gradle build and end your turn
+  saying you'll report later — `claude -p` kills background tasks and you will
+  never report at all. Builds take up to 10 minutes; just wait.
+- You own EXACTLY these files:
+      ui/components/ShelfPickerSheet.kt          (new file, create it)
+      ui/scan/ScanScreen.kt
+      ui/scan/ScanViewModel.kt
+      ui/detail/DetailScreen.kt
+      ui/detail/DetailViewModel.kt
+      data/prefs/SettingsStore.kt
+      app/app/src/test/**                         (tests you add)
+  (paths relative to app/app/src/main/java/org/modg/bookshelf/)
+  Touch NOTHING else. Specifically forbidden: any build file
+  (`app/build.gradle.kts`, `gradle/libs.versions.toml`), `data/metadata/**`
+  (the ORCHESTRATOR is editing that right now, in this same working tree),
+  `ui/locations/**`, `ui/library/**`, `ui/nav/**`, `ui/settings/**`,
+  `ui/setup/**`, `AppContainer.kt`, and every file in `ui/components/` EXCEPT the
+  new `ShelfPickerSheet.kt` you create.
+- Do not change any public composable signature. `ui/nav/BookshelfNavHost.kt`
+  calls these screens and you may not edit it.
+- `AppContainer.settingsStore` is already a public val — you do NOT need to change
+  AppContainer to reach it.
+
+## Background: what the user actually reported
+They are shelving books a box at a time, scanning a run of books that all belong
+on the SAME shelf. Two complaints:
+1. The shelf dropdown lists every bookcase×shelf pair in one flat menu. With more
+   than a couple of bookcases that is unusable.
+2. Re-picking the same shelf for every book in the box is tedious.
+
+## Task 1 — a grouped shelf picker, replacing the flat dropdown
+There are currently TWO near-duplicate flat pickers:
+  - `ShelfPicker` in `ScanScreen.kt` (~line 477)
+  - the location picker inside `DetailScreen.kt` (~line 273-310)
+Both build a `DropdownMenu` containing "Not shelved" followed by one flat item per
+(bookcase, shelf) pair, labelled "Bookcase • Shelf".
+
+Replace BOTH with ONE new shared composable in `ui/components/ShelfPickerSheet.kt`,
+presented as a Material 3 `ModalBottomSheet` rather than a dropdown. Contents, top
+to bottom:
+  a. A "Recent" section — see task 2. Omit the whole section when there is no
+     remembered shelf, or when the remembered shelf no longer exists.
+  b. "Not shelved" as an always-available choice.
+  c. One section per bookcase, in `position` order. The bookcase name is a section
+     header (non-selectable — a bookcase is not a location a book can sit in;
+     only shelves are). Its shelves are listed under it in `position` order,
+     labelled with just the shelf label, since the header already gives the
+     bookcase. Make the currently-selected shelf visually distinct.
+  d. A bookcase with no shelves shows its header and an inline "No shelves yet"
+     hint, so an empty bookcase does not look like a rendering bug.
+The sheet must scroll. Do NOT add a search field — the user explicitly deferred
+that; we will add it later if the grouping alone proves insufficient.
+
+Design language is in SPEC.md ("feels like books") and the existing components in
+`ui/components/` are your reference for type, spacing and the gold hairline rules.
+Reuse `GoldDivider` for section separation rather than inventing a new rule.
+
+## Task 2 — remember the most recently used shelf
+Add a `LAST_SHELF_ID` key to `SettingsStore` (a nullable String preference, with a
+`Flow` reader, a setter, and a way to clear it), following the exact
+shape of the keys already there. Clear it in `clearAuth()` alongside the rest —
+signing out of a shared library should not leak the other account's shelf.
+
+Write it whenever a book's shelf is set to a non-null value:
+  - `ScanViewModel` — on save, both from a metadata hit and from manual entry.
+  - `DetailViewModel` — when the user changes a book's location.
+Setting a book to "Not shelved" must NOT overwrite the remembered shelf; it isn't
+a shelf, and clobbering the memory with it would defeat the whole feature.
+
+Surface it as the "Recent" section at the top of the picker, labelled with the
+full "Bookcase • Shelf" text (the section has no bookcase header to lean on).
+
+**Do NOT pre-select it.** The user considered and explicitly rejected
+pre-selection: the risk of silently mis-shelving a book, when the user forgets to
+change it, outweighs saving one tap. A new scan still starts with no shelf chosen;
+the remembered shelf is one tap away at the top of the sheet, and that is all.
+
+Note `ScanViewModel._selectedShelfId` already survives across saves within a single
+scanning session (it is deliberately not reset in `recordSave`). Keep that. What
+you are adding is persistence ACROSS sessions and screens.
+
+## Task 3 — three small fixes in ScanScreen.kt
+3a. In `SearchingSheet` (~line 268), delete the third Text, the one reading
+    "Barcode read — you can lower the book." The user says "Searching…" plus the
+    ISBN already carries it. Update the composable's KDoc, which currently
+    justifies that line — do not leave a comment explaining code that is gone.
+
+3b. `LookupFailedSheet` (~line 435) takes a `reason` parameter and never renders
+    it. `ScanSheetState.LookupFailed(isbn13, reason)` already carries a diagnostic
+    string, and `MetadataRepository` already builds it as e.g.
+    "open library: network error; google books: http 429". It is currently dead —
+    it reaches the UI and is dropped on the floor.
+    Render it, below the existing explanatory paragraph, in
+    `MaterialTheme.typography.bodySmall` and `onSurfaceVariant`. This is the only
+    diagnostic channel we have from a real phone, so it must actually appear.
+    Keep the existing headline and paragraph as they are — the reason is
+    supplementary detail, not a replacement for plain-language copy.
+    NOTE: the orchestrator is concurrently making those reason strings more
+    specific. Do not depend on their exact wording — render whatever you are
+    given, and do not parse, match on, or reformat the string.
+
+3c. `ManualIsbnDialog` (~line 512) opens with an unfocused text field. Auto-focus
+    it and raise the keyboard, via `FocusRequester` +
+    `LaunchedEffect(Unit) { focusRequester.requestFocus() }`. Guard the call so it
+    cannot throw if the node is not attached yet.
+
+## Verify before you report (all in the FOREGROUND)
+    ./tasks/gw assembleDebug
+    ./tasks/gw testDebugUnitTest
+    ./tasks/gw recordPaparazziDebug
+    git status --porcelain
+
+- assembleDebug and testDebugUnitTest must exit 0. The test count is 138 today and
+  must not go DOWN. Add real tests for the logic you introduce — at minimum the
+  SettingsStore round-trip, that "Not shelved" does not overwrite the memory, and
+  that a remembered shelf which no longer exists is not offered. Assertion-free
+  tests are explicitly forbidden by SPEC's quality bar.
+- Add a Paparazzi snapshot of the new picker sheet with at least two bookcases,
+  one of them empty, and a recent shelf present — that is the state the whole
+  change exists for, and no one has ever trusted a worker's word on how this app
+  looks.
+- Grep your build output for the string `always 'false'`. That Kotlin warning class
+  silently blanked every book cover in this app for months by making a `when`
+  branch dead code that still compiled. Zero hits on files you touched.
+- `git status --porcelain` will show files the orchestrator and the other worker
+  are editing (`data/metadata/**`, `ui/locations/**`, `ui/library/**`,
+  `res/drawable/**`). That is EXPECTED. Confirm only that no file outside your
+  own list was changed BY YOU. Never revert or "fix" someone else's work.
+- Do not commit. The orchestrator commits after verifying.
+
+## Report
+Finish with a plain report: what you changed per task, exact exit codes and test
+counts, what the new Paparazzi PNG shows, and anything you could NOT do. Do not
+claim success you did not verify — several previous workers on this project
+over-claimed and were caught.