# Claude QA Report — Privacy: Period Tracker ``` Status: Current Owner: _null Last reviewed: 2026-08-18 Governs: the QA verdict — build SHAs, round summaries, the overall judgment Review trigger: Any QA round run ``` > The QA verdict. Companion to [`ClaudeQACoverage.md`](ClaudeQACoverage.md) > (what each pass reached) and [`ClaudeQAPlan.md`](ClaudeQAPlan.md) (the > playbook). > > **Defects are issues, not entries here.** A defect found in a round is filed > in the tracker with a severity label, where it can be assigned, closed by a > commit, and counted. This file keeps the part a tracker is bad at: a judgment > about whether the thing is fit to ship. ## Current run-state - **Last QA round:** Round 4 — 2026-08-18, partial (A and B pass; C, D, E, F, G and H partial) - **Last verified build SHA:** `f43e1c2` - **Last tested device / environment:** emulator `PeriodMinSdk26`, API 26, Pixel 6 profile, debug build, at font scales 1.0, 1.3 and 2.0 - **Overall status:** Five of eight batches are done and Batch 06 has begun: Settings is now the screen §36 describes, and Delete My Data is reachable, confirmed and irreversible. The app has run at its minimum Android version and at the largest accessibility font scale, and both found defects that had been shipping unnoticed — a navigation bar that wrapped its labels mid-word, and a privacy option whose label was not clickable at all, so the control deciding what a lock screen shows could only be changed by hitting the radio button exactly. Both are fixed. The pattern is now four rounds old and unchanged: **every defect of consequence in this project has been found by a person using the app, and none by a test.** The tests are what stop them coming back. The standing gaps are the same shape — nobody has yet looked at an actual locked screen, and TalkBack has still never been run, which is now the single most valuable unspent hour. ## Open defects **Do not list them here, and do not read a defect count out of this file.** The Command Center's docs report parses this document for open `P0` / `P1` / `P2` counts, and under this convention they are always zero — the defects are in the tracker, which is the whole point. The zeros here mean *this file does not hold them*, never *there are none*. Filed as issues in this repository's tracker, labelled by what they cost: - **P0** — ships broken, or loses data - **P1** — materially wrong, but shippable - **P2** — cosmetic or low impact - **release-blocker** — a release built today would be *wrong*, not merely incomplete Severity is what it costs, not how annoying it is to fix. Every defect needs the build SHA it was found at — a finding that cannot be re-tested cannot be closed — so put it in the issue body. ## Round notes One entry per round, the verdict only. What each pass reached, and what it could not, lives in [`ClaudeQACoverage.md`](ClaudeQACoverage.md) and is deliberately not repeated here. - **Round 4 — 2026-08-18 at `f43e1c2`, partial.** Batch 06 began, and driving it found two defects in controls that already looked finished: navigation labels wrapping mid-word at font scale 2.0, and a privacy option whose row was inert because only its radio button was clickable. Verdict: the privacy controls now behave as their own dialog promises — checked by setting a preference, deleting all data, and confirming the preference survived. - **Round 3 — 2026-08-18 at `0451fbe`, partial.** Fertility and reminders landed and pass F became runnable for the first time. Verdict: fit to keep building, not fit to ship — the privacy promise is proved against the notification object and never against a locked screen. Two defects, both in how Android behaves rather than in the app's logic, and both found by running on a device. - **Round 2 — 2026-08-18 at `19edf4c`, partial.** Every screen Batch 03 built was driven by hand. Verdict: the product became coherent, and three defects surfaced that no unit test would have caught — one of them dark mode, broken since Batch 01. - **Round 1 — 2026-08-18 at `adc5075`, partial.** Two passes were all the first build could support. Verdict: sound enough to keep going, and the first thing tried by hand crashed the app with 70 unit tests green — which is the argument for driving it at all.