Clean-room Android — Ship Checklist (live)¶
The remaining path to ship astradial-astracall-android (GPL-free, own engine) to Play Store. [x] = done + verified. Ticked one-by-one. Branch phase3/app-module. Last updated 2026-07-11.
Core thesis PROVEN on real hardware (V2037, 2026-07-11): clean install → app self-requests mic → sign in → REGISTER on our engine → 2-way audio + mute/speaker/DTMF/hangup, all zero-linphone.
A. Proven on-device (V2037, clean install, zero adb)¶
- App self-requests
RECORD_AUDIOon a clean install - Sign in (Firebase → JWT) on Staging + wss line picker
- REGISTER over
wss://stagesip:8089/wson our own engine - Outbound call → 2-way audio (
*43echo) - In-call Mute / Speaker / DTMF / Hangup
- Compose UI renders (login #24, tab shell, keypad, #37 call, Pulse, Tickets)
B. Contract parity (verified in code 2026-07-11)¶
- wss picker gate —
getOrgSipUsersfilterssip_port=='wss' - Manual-entry wss reject — "This SIP user is not provisioned"
- Caller-ID in the in-call UI —
splitParty(Engine.call.remoteParty) - VoIP-push-on-open (register / status GET / revoke, permission-gated) —
VOIP-PUSH-ON-OPEN-HANDOFF.md - Recents →
GET /calls?extension=mine(after the endpoint reaches prod)
C. On-device to verify (needs the phone)¶
- Call audio clean — no buzz after AEC/NS/AGC + hardware-AEC fix
- Portrait-lock — rotating mid-call no longer drops the call UI
- Pulse shows real
/analytics/pulsenumbers (no 0%/106%, no "13/day") - Inbound call — ring (foreground + locked) → answer → 2-way audio
- Killed-app FCM wake rings (cold-start cred-restore)
D. Platform (staging → prod)¶
-
/analytics/pulseon staging (#529) - extension-CDR (
?extension=mine) on staging (#530) - Promote both to prod
- Enable more
sip_port='wss'lines as users adopt (via the editor Mobile toggle)
E. Finish line¶
- Fable-5 audits of the hand-written fixes (mic-perm, reactive tabs, ringing controls, audio APM)
- Cutover — clean-room app becomes the shipping app; retire the fork;
LICENSE→ proprietary (the GPL-free finish) - Verify built AAB: no
liblinphone*.so, noorg.linphone.core, nolinphone-sdk - Release eng — upload signing key / AAB, Play Console listing + screenshots, privacy policy, data-safety
- Closed testing → staged production rollout
Next unchecked, in order¶
- On-device verify (B/C) — call audio + Pulse (needs you on the phone)
- Inbound call test (C) — flip ext 1003 →
extrouting + a 2nd endpoint - VoIP-push-on-open (B) — build the wake-registration feature
- Promote platform endpoints to prod (D) → wire Recents to
extension=mine - Audits (E) → Cutover → release