docs mobile p24 t01 device matrix - AlexandreZanata/Abastevo GitHub Wiki
P24-T01 — Android candidate and device matrix (partial)
Status: IN_PROGRESS on codex/phase-24-android-acceptance. Issue: #96 OPEN. Entry G23 satisfied (P23 PR #95 merged b4f664e). Binds B-BR-C01–C06 and BUC-C01–C05. No migration, no backend change, no iOS work.
Device rows
- Xiaomi 2311DRK48G (Redmi 13C 5G), Android 16 (API 36), arm64-v8a, heap 512 MB, en-US: first run 18/21 green (connected suites had never run in CI).
- Emulator
anpfuel-low26, API 26 (SQLite 3.18.2), x86_64, 2 GB: local low-end row for the minSdk floor (signal, not a hardware replacement). - Required but missing rows (block acceptance until proven): real low-end API 26–30 hardware (encode/perf, owned by P24-T03); second OEM skin.
Fixes landed from device evidence (this task)
- FTS API-26 crash FIXED:
remove_diacritics=2needs SQLite 3.20+/ICU (probed on-device); schema v7 uses plainunicode61plus the pre-normalizednormalized_namecolumn, so "SAO" (normalized) and "SÃO" (raw) both match on every API level.MIGRATION_6_7rebuilds the derived index (catalog rows untouched);BigInteger.TWO(Java 9+) replaced withBigInteger("2")afterAnonymousDeviceKeysDeviceTestproved it missing on API 26. Manually verified E2E on the API 26 emulator: fresh install → auto-sync (~20k rows) → location → FTS "sao" matches → home with data. - FreshInstall device test rewritten to the real auto-download flow (was asserting the manual picker against default auto-download).
- HomeScreenTest now asserts the merged accessibility announcement (descendants are intentionally merged).
- Restored the Search entry chip on home (
Routes.SEARCHhad zero callers — dead route); manually verified home → SearchScreen on API 26. - Historical migration tests (V1–V6 from-states contain
remove_diacritics=2, which cannot exist on API 26) self-skip there via a shared SQLite probe and run fully where supported. - Worker device tests are mockk-free (hand fakes run the real use cases): mockk cannot intercept final use-case methods on API 26 ART (real method ran → NPE).
- PostSync journey: entry fixed via the Search chip; full script re-run pending.
- Device caveat: MIUI cancels installs intermittently (
INSTALL_FAILED_USER_RESTRICTED) even with Install-via-USB enabled — each reinstall may need on-screen confirmation.
Feature matrix (proof pointers, this tree)
- Anonymous lookup/offline/sync: JVM
:domain408 +:data207 +:app147 suites green; device AppendixA2 + startup rows green. - Accounts/providers:
AuthViewModelTest, backend account/identity integration (P22 evidence); real provider proof stays P24-owned (no device account run yet). - Contribution/correction/outbox/expiry: outbox + edit + expiry suites green (P21–P23 evidence).
- Social/moderation/ratings: feedback/moderation suites + device community row green.
- Alerts/vehicles: alert suites incl. dedupe green (P23-T01).
- Privacy/erasure: footprint/erase suites green; 24 h photo expiry covered (P21-T04).
Candidate
Tested tree: branch head at device run (bd6dcdd + this commit). No candidate SHA is frozen while proofs are missing.
Validation (device proofs, this turn)
:data:connectedDebugAndroidTestFULL green both rows: API-26 emulator 43 tests 0-fail (7 skipped: 5 migration self-skips where v6 history cannot exist + 2 live@Ignore); Xiaomi API 36 43 tests 0-fail (2 skipped: live@Ignoreonly).V6ToV7DatabaseMigrationTestexecuted + PASS on Xiaomi newer SQLite.AnpScaffoldTest: PASS on Xiaomi API 36 → the inset failure is an API-26-emulator-only row (pre-existing, env).TempSeedDumpTestR3.1.2/R3.1.3 replication:R313_REPLICA_ROW=truetwice on the API-26 emulator; probe fulfilled and removed, flow stays covered byAppendixA2PostSyncTest.AppendixA2PostSyncTestR3.1.9 expectation corrected (test-only): the fuel icon is decorative by design and the FilterChip carries the text label, so the operability contract is label + click action, not a duplicate content-description node. End-to-end green still unproven (blocked by R3.1.3 flake below).AppendixA2PostSyncTestR3.1.3 search is FLAKY across rows, not env-specific: Xiaomi 1 pass (green through R3.1.8) + 2 fails at the 120s row wait; API-26 emulator stalls identically;TempSeedDumpTestidentical-query replication stayed green 2x on the emulator. When stuck, the screen shows title + field (query committed) + footer only — no rows, no empty-state, no min-chars hint — i.e. the search flow never emits. Prime suspects for the next instrumented slice: first-query cost chain (seedIfEmpty→ FTS → fuzzyfindAllover 5571 rows + per-resultfindCatalogEntry), cross-process DataStore prefs access (seeder writesUserPreferencesDataStore/SyncStateDataStorefrom the test process, app reads them), background worker contention. Next: temporary timing instrumentation in the search path to identify, then fix; no thresholds weakened.AppendixA2FreshInstallTest: red on the offline emulator (no network route; auto-download needs real network) — networked-device proof pending (not attempted this turn; device time went to R3.1.3 triage).
Test-stage closure (explicit user decision, 2026-10-02)
-
Status:
TEST_STAGE_CLOSED_USER_MANUAL— the automated device-proof loop is PAUSED by explicit user request. The user validates the app manually and reports breakage; this is NOT an automated acceptance claim. Issue #96 stays OPEN; noLOCAL_DONE/integration status is inferred. -
Last diagnostic finding (temp timing logs, reverted before commit, never shipped): the
curitibasearch path completes in ~800ms with outcomeSuccess(FTS 2 rows → 3 candidates) — the query layer is fast when it runs. The R3.1.3 stall therefore strikes before/during emission on some runs (Xiaomi 1 pass + 3 fails at the row wait; emulator stalls; Temp replication green). Root cause still undiagnosed; re-instrument if it resurfaces in manual validation. -
Carried as open manual-validation items: R3.1.3 search reliability, R3.1.9 end-to-end green (expectation corrected to label + click action, unproven green),
AppendixA2FreshInstallTestnetworked-device proof, real low-end hardware row. -
FreshInstall page-count fix (test-only change for the 4-page onboarding).
-
JVM
OnboardingViewModelTestpager test still green (4-page walk). -
git diff --checkclean; secret scan PASS. T01 stays IN_PROGRESS: missing/failed proof blocks acceptance by task rule.