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

57 lines
2.1 KiB
Markdown
Raw Normal View History

chore: adopt the project template and add the Kotlin/Compose skeleton Period was a bare directory holding one 2,527-line specification, with no git repository, no tracker and no documentation convention. This is the adoption from Projects/Template/START-HERE-New-Project.md, plus a project that compiles so the hooks and future guards have something real to run against. Documents. scaffold.sh created 19 paths, 0 skipped. The specification moved to docs/planning/PRODUCT_PLAN.md unchanged in substance, with a status header; the capitalised Docs/ is gone. Every scaffolded document was filled in for Period. docs/OPERATIONS.md deleted — an offline app is not a deployed service. DOC_TRUST_MAP.md written last, describing what is actually here, including what this project deliberately does not have. Code. Four Gradle modules. domain/cycle and domain/prediction are kotlin("jvm") and cannot see the Android SDK, so the engine is testable without an emulator — 17 tests pass, 12 of them the acceptance cases from PRODUCT_PLAN.md §51. BaselinePredictionEngine is a robust-median prototype and explicitly not the product; it exists so Batch 02's replacement can be shown to be better rather than merely different. Versions verified against their official sources today rather than inherited from the specification's own numbers, which that document asks for: Kotlin 2.4.10, AGP 9.3.1, Gradle 9.7.0, Compose BOM 2026.08.00, Room 2.8.4, Hilt 2.60.1. AGP 9 ships Kotlin built in, so org.jetbrains.kotlin.android is no longer applied. compileSdk is 37 because current AndroidX requires it; targetSdk stays 36, Play's floor from 2026-08-31, and the difference is deliberate. Six scripts taken into scripts/; the rest declined and named in docs/TOOLS.md. Three hooks in .githooks/, with pre-commit adapted to Gradle. closes #1 closes #2
2026-08-18 02:16:47 -05:00
# Claude QA Coverage — Period
```
Status: Current
Owner: _null
Last reviewed: 2026-08-18
Governs: what each QA pass actually reached
Review trigger: Any QA round run
```
> Pass by pass, what was reached and what was not. The point of this file is the
> **Blocked** and **Not run** rows: a pass left out of a report reads exactly
> like a pass that succeeded, and that is how untested code ships believing it
> was tested.
## No round has been run
There is nothing to report yet, and this section says so rather than leaving the
file looking like a round that found nothing. The first round can only happen
once there is an app to run — the passes in
[`ClaudeQAPlan.md`](ClaudeQAPlan.md) all require a build, and Batch 01 is what
produces one.
The table below is the shape each round fills in. It is deliberately left with
no rows rather than pre-filled with "Not run", because a round that never
happened and a pass that was skipped are different facts.
## Round N — YYYY-MM-DD at `sha`
| Pass | Result | Notes |
| --- | --- | --- |
| A — First run | | |
| B — Core loop | | |
| C — Failure paths | | |
| D — Persistence and migration | | |
| E — Forecast under hard histories | | |
| F — Notification privacy on a lock screen | | |
| G — Accessibility | | |
| H — Data ownership and leakage | | |
Results are `Pass`, `Partial`, `Blocked` or `Not run` — and the last three carry
what stopped them and the issue number, never a blank.
## Standing gaps
Things no round has ever covered, carried forward until they are. This list
existing is not a failure; it not existing while the gaps do is.
- **Everything.** No build exists yet.
- **Physical-device coverage is undecided.** Passes F and G need a real device
with a lock screen and TalkBack; which device that is has not been chosen, and
an emulator is not a substitute for either.
- **Long-horizon accuracy** — whether predictions measurably improve at 3, 6 and
12 confirmed cycles — cannot be reached by a QA round at all. It needs either
a simulated history harness or real elapsed time, and until one exists the
product's headline claim is tested only at the unit level.