Privacy-Period-Tracker/docs/qa/ClaudeReport.md

84 lines
4.3 KiB
Markdown

# 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.