{"number":41,"title":"Phase 6 — Paywall smoke tests (S18–S20) + plan-smoke-tests doc sync","body":"Part of #35.\n\n## Goal\n\nThree GMD scenarios cover the paywall gate, banner propagation, and reactive read-only lift on premium activation. End-to-end coverage on a real Android OS that unit + screenshot tests can\u0026#39;t provide.\n\n## Scope\n\n**Modified**\n- `app/src/androidTest/java/com/servicebook/SmokeTest.kt` — add helpers + 3 scenarios\n- `app/coverage-baselines/gmd_smoke.ec` — regenerated baseline (Git LFS)\n- `docs/plan-smoke-tests.md` — already amended; verify it still matches the implemented suite\n\n**New helpers** in `SmokeTest.kt`\n- `setBillingOverride(mode)` — calls `(application as ServiceBookApplication).debugBillingOverride.setMode(mode)` from the test process\n- `addVehicleForTesting(nickname)` — persists a vehicle directly via `VehicleRepository`\n- `@After resetBillingOverride()` — resets to `NONE` to prevent cross-scenario leakage\n\n**Scenarios**\n- **S18** — Upgrade dialog on free tier (1 vehicle + `FORCE_FREE` → tap FAB → dialog → dismiss)\n- **S19** — Read-only banner across paywalled screens (2 vehicles + `FORCE_FREE` → list / detail / settings → banner present, write actions suppressed)\n- **S20** — Read-only lifts on premium activation (2 vehicles + `FORCE_FREE` → flip to `FORCE_PREMIUM` → `waitUntil` banner gone, FAB navigates to AddVehicle)\n\nS20 is the highest-value test — catches stale-state bugs in the `combine` pipeline that unit tests can miss when scope/dispatcher choices differ from production.\n\n## Acceptance\n\n- [ ] `./gradlew pixel2api33Check` green (full smoke suite, S01–S20)\n- [ ] Suite total runtime ≤ 2 min 30 s\n- [ ] `gmd_smoke.ec` baseline regenerated and committed to Git LFS\n- [ ] `docs/plan-smoke-tests.md` matches implemented scenarios (re-read before closing)\n\n## Depends on\n\nPhase 3 — `DebugBillingOverride` must be wired before helpers can call it. Strongly recommended to also have Phases 4–5 merged so banner/dialog `testTag`s exist.\n\n## Reference\n\n`docs/plan-paywall.md` § Phase 6, `docs/plan-smoke-tests.md` Step 6 + S18–S20.\n","state":"open","html_url":"https://github.com/Mesya82/Service-Book/issues/41","user":{"login":"Mesya82","id":32867735,"profile_url":"https://github.com/Mesya82","avatar_url":"https://avatars.githubusercontent.com/u/32867735?v=4"},"author_association":"OWNER","labels":["enhancement"],"reactions":{"total_count":0,"+1":0,"-1":0,"laugh":0,"confused":0,"heart":0,"hooray":0,"rocket":0,"eyes":0},"created_at":"2026-04-28T06:27:59Z","updated_at":"2026-04-28T06:27:59Z"}