Repository navigation
feat: product and QA review against the PRD, twenty findings fixed and driven in the web harness - #74
Conversation
…e verse, count every card The reading preference now falls back to the text the language carries, so a saved "Everyday words" choice no longer makes a literal-only language unreadable (ST-3, ST-1). The Hebrew and Greek texts join the reading choices whenever their pack is installed, and a language with no text offers them from its empty state with a way back (ST-7). A tapped verse is journaled through corpus.opened without reassembling the chapter, so last-read and bookmarks are at the verse (ST-1, ST-10). The audio bar says when a chapter has no audio instead of offering a download (ST-4). Every library card carries a count in its own unit and the header counts resource types (ST-5). A missing article link says so, and the helps panel tells absent from empty (ST-6, ST-2). Scenarios ST-1, ST-3, ST-4, ST-5 and ST-7 were extended and observed red first.
… when a pack lands The download card states what is on the phone and what is missing, and shows the last install failure for the language in place; the offline copy now says what the app does (HO-5, ON-2). The packs module records an install-wide failure per pack and tells listeners when a pack lands, fails or leaves, so Home redraws without polling. Choosing a language before any catalog refresh fetches the catalog first, so "Continue in English" on a fresh phone no longer fails with an empty plan. The Settings name field opts out of system autofill like onboarding, and ON-4 refuses a name field that does not (ON-3).
…ongside English, a Training course outline, Play asks before moving a group A movement renders its text and, under Talk about it, its questions, with the kernel naming where the questions came from (FO-2, FO-3). The local-language study questions stay in the outline when the English movements are shown alongside (FO-5). Training has a course outline screen grouped by manual, with the active group's lesson marked (FO-1). Play starts a session at the opened story without moving the group; the dock asks in one sentence before moving it (FO-3, FO-4).
…oad, a count that matches the pack The offline notice says new languages cannot be downloaded until the phone reconnects, and the empty list names its cause. Catalog releases carry the sum of their ingredient sizes, so a language row shows about how much the pack downloads. The resource count is what the language pack offers (LA-1). Running copy drops product names (PRD 10.1).
…both region signals, the lockup on About Opening the full story from the invitation card goes through partners.open, so it counts as an impact-story open (PA-2, PA-6, PRD 9). A security note shows only when the story carries one; the shipped story carries its own. The United States test needs a US time zone and a locale region that is US or unknown (PA-2, decision 97). About carries the full lockup (PRD 10.2), and external links say visibly that they open in the browser.
21 keys added and 9 reworded in English and drafted in the 15 locales, with each locale's plural categories; impact.securityNote, formation.coverage.questions and study.audio.streaming removed everywhere. strings check: 491 keys in 16 locales.
Progress tracker entry Q1: the twenty findings, what was observed red, what the driven web harness and the adversarial read found, and what did not run (no emulator in the sandbox).
InstallProgress.bytes counts downloaded bytes while a resource transfers and measured bytes once it is unpacked, so the line read "174 MB so far" for a 41 MB download on the iOS device run. The percent and the resource counts carry the status; home.download.detail leaves every locale.
On main a fresh phone never downloaded English in CI, because choosing before any catalog refresh failed with pack.empty-plan, so Home sat idle while the flows ran. With that fixed the real English install runs during every flow, and on the software-rendered simulator the progress card updating every second kept XCTest from taking the view snapshot Maestro asserts on: the Settings and Languages flows failed twice while the failure screenshots show the screens open. The required main pass now points git.door43.org, cdn.door43.org and unfoldingword.org at the runner through /etc/hosts, so the download fails fast and the flows drive a quiet Home; the optional pass restores them for download-language.yaml. The Android emulator passed with the download running and keeps its own resolver.
|
CI on The earlier Generated by Claude Code |
…ear an answered replace question from the pack status
What this is
A product-owner and QA review of the built app against
docs/PRD.md, then the fixes. Every Must requirement in sections 7 to 13 was compared with its code, its scenario and its strings. Twenty misalignments were found where a scenario proved a kernel fact the screen did not show, or proved a narrower proxy than the requirement. GitHub refused issue creation from the session at the time, so the findings were fixed directly; they are listed below with the extra defects found while testing.The twenty findings
Study
corpus.opened, so last-read, Home's Continue reading and bookmarks are at the verse.Home, onboarding, settings
Formation
Languages
Partners and About
partners.opennow.Found while testing, also fixed
Driving the real screens in Chromium over the memory adapters found four defects the extended scenarios had not caught: choosing the Hebrew text did nothing when Study opened at its last-read place (
open()ignored the request); the library's Five movements card could not install the formation row; "Continue in English" on a fresh phone failed withpack.empty-planbecause no catalog had been fetched yet and Home showed nothing wrong; and Home never redrew its download card when a pack landed in the background, because it listened to preferences and bookmarks only. The packs module now records an install-wide failure per pack and exposesonChange.An adversarial read of the diff found seven more: the original-text view was a dead end for a language with no text, every verse tap re-assembled the chapter and journaled an event, the Home count over-counted during an update, the Training outline could split a manual in two, its empty state misreported the cause, the Languages count and size disagreed, and the move prompt appeared after a failed start.
Decisions taken
Recorded in the PRD decision log (row 97) and the scenarios: the invitation's region test needs both signals; last-read and bookmarks are at the verse; Play never moves a group without a confirm; the Languages count is what the language pack offers; the Library header counts resource types. Each is a product call the PRD left open; say so if any should go the other way.
Strings
21 keys added and 9 reworded in English and drafted in the 15 locales with each locale's plural categories (
docs/strings-review.md).impact.securityNote,formation.coverage.questionsandstudy.audio.streamingremoved everywhere.stringscheck: 491 keys in 16 locales, each 491/491.Verification
npm run verifygreen on the final tree: lint and format, typecheck, 822 tests, knip, 9 checks, 63 scenarios, 51 Must requirements traced (0 unproven), 21 fixture burritos, both bundles clean of sim code. The live contract step was skipped: git.door43.org answers 403 from the sandbox.npm run shots: 182 screenshots across light, dark, reduced blur, RTL, Urdu, Hindi and large text; 0 text boxes escaping their parent; 39 targets under 44 px, all inline links exempt under decision 86; no page errors.Progress tracker entry:
docs/progress_tracker.md, 2026-10-05 Q1.No new dependencies.
🤖 Generated with Claude Code
https://claude.ai/code/session_01SLy4DDVTydCyFA38LqekuJ
Generated by Claude Code