Files
flamenet-messenger-android/app/src
Paul Hitt 945978972a The on-device suite catches up with the app
🔴 **Nine defects, all of them in the test, none in the app.** These
suites were written before the tab split, the age gate and the two
sign-out doors, and had not run since. Each staleness hid behind the one
before it, and every error message blamed the wrong thing.

1. **The age gate was never filled.** `submit` is `enabled = … &&
   (!registering || birthYear.length == 4)`, and `performClick()` on a
   disabled Compose node does not throw — it does nothing.
2. **`submit` was below the fold.** Adding that field pushed the button
   off a 1080x2400 screen. An off-screen node still reports ENABLED —
   that is a state check, not a visibility one — so the gesture reached
   nothing. Proved by logging inside the app: `signIn` was never called,
   through 450 seconds of waiting.
3. **The peer's name was typed into a button.** `new-contact` is the
   FIELD; `lookup-contact` is the Look-up button.
4. **The lookup step was skipped**, so `confirm-contact` never appeared —
   the app refuses to turn a typed string straight into a contact,
   because a typo would silently become a stranger.
5. **`buddy-<id>` vs `buddy-circle-<id>`.** Home shows the circles row.
   The suite reported "never became a contact" about a contact on screen.
6. **RECORD_AUDIO was never granted.** The mic dialog is not in the app's
   Compose tree, so the failure read "No compose hierarchies found" — as
   though the app had died rather than a dialog covering it.
7. **Sign-out was a no-op**: the row needed scrolling to, AND the
   destructive rows confirm in place, so one tap only armed it.
8. **It used the wrong door.** A plain sign-out KEEPS the device and
   credential by design — right for a person, wrong for a suite whose
   next test wants a different account. `sign-out-erase` is the one that
   clears the vault.
9. **Groups and stories are on their own tabs**, and `stories` is the
   strip on Home, not the Stories tab, which carries `new-story`.

⚠️ `signOutIfSignedIn` no longer wraps itself in `runCatching`. Swallowing
that failure is what made the damage appear three screens later in a
different test.

⚠️ The two waits that span a relay POLL — a contact reaching the roster,
a group reaching the list — are 150s. They are the only two that flake,
because neither is refreshed by the response to its own write.

All four tests pass. Not yet all in one run: the add-contact lookup is
throttled per window, and four tests share it.
2026-09-06 06:51:25 -04:00
..