{ "output": "Successfully modified file: /home/Messier82/projects/service-book/docs/plan-smoke-tests.md (1 replacements). Here is the updated code:\n...\n\n**Verifies:** `PaywallStatusCard` correctly signals read-only state on `VehicleListScreen`; `AppGate` propagates `isReadOnly` through all ViewModels; write-action UI is suppressed or disabled.\n\n---\n\n### S20: Reactive Lift on Premium Activation (Paywall)\n\n**Precondition:** Vault configured; 2 vehicles present; `setBillingOverride(FORCE_FREE)`.\n\n**Flow:**\n1. Launch on `VehicleListScreen`. Verify the read-only status card is displayed.\n2. From the test process, call `setBillingOverride(FORCE_PREMIUM)`.\n3. `waitUntil` the status card is no longer displayed (timeout 5s — involves DataStore write + Flow combine + recomposition).\n4. Tap the \"Add Vehicle\" FAB and verify it navigates to `AddEditVehicleScreen` (no upgrade sheet).\n5. Press back; tap \"Car A\" → `VehicleDetailScreen`. Verify the status card is absent and the \"Add Record\" FAB is enabled.\n\n**Verifies:** Reactive lift of read-only mode end-to-end through `BillingManagerImpl` → `AppGate` → ViewModels → UI on the real Compose pipeline. Catches stale-state bugs in the gate's `combine` pipeline that unit tests can miss when scope/dispatcher choices differ from production.\n\n---\n\n..." }