# Shared §2 verified onboarding prelude — covers cold-start → SHome1st → # "aku mau curhat" → S2 Nama → VerifChoiceSheet "verifikasi nomor HP" → # S5b USP (if first-timer) → S3a Phone → S3b OTP → verifyOtp. # # After this subflow returns, the post-OTP redirect has fired: # - intent=onboarding (set in routeForVerifChoice verified branch) → # /payment/entry → /payment/discount-paywall (S6) for eligible users, # OR /payment/method-pick for has_transacted=true users. # Callers assert which destination is visible. # # Pre-reqs (parent flow's responsibility): # - `env:` with TEST_PHONE and BACKEND_INTERNAL_URL. # - reset_phone.js + launchApp clearState: true BEFORE this subflow. # - ≥1 mitra online so the "aku mau curhat" CTA is enabled. # # Selector style: same regex-merged-node rules as # onboarding_returning_user.yaml apply (see feedback-maestro-wsl-setup). appId: ${APP_ID_ANDROID} --- # Welcome carousel auto-advances 0→1→2 (1s each). Wait for Mulai on slide 3. - extendedWaitUntil: visible: text: "Mulai" timeout: 15000 - tapOn: text: "Mulai" retryTapIfNoChange: true # SHome1st "aku mau curhat" CTA → /auth/display-name. - extendedWaitUntil: visible: text: "(?s).*aku mau curhat.*" timeout: 30000 - tapOn: "(?s).*aku mau curhat.*" # S2 Nama — type name + Lanjut. No hideKeyboard (TextField.onSubmitted # would auto-fire _submit and tear down the screen before Lanjut tap # resolves). The "Nama panggilan" hint isn't visible in a11y; point-tap # the field area (28% of viewport y on tested Pixel profile). - extendedWaitUntil: visible: text: "(?s).*Siapa namamu.*" timeout: 10000 - tapOn: point: "50%, 28%" - inputText: "MaestroNew" - tapOn: "lanjut" # VerifChoiceSheet — verified branch sets onboardingIntentProvider = # onboarding (verif_choice_sheet.dart L87) so the router can route to # /payment/entry post-OTP. - extendedWaitUntil: visible: text: "(?s).*Mau curhat sebagai siapa.*" timeout: 10000 - tapOn: "(?s).*verifikasi nomor HP.*" # S5b USP — first-timer only (usp_seen=false after clearState). If # parent flow pre-marked USP as seen, this step is skipped because the # verified branch goes straight to /auth/register. - runFlow: when: visible: text: "Sebelum mulai" commands: - tapOn: "(?s).*aku ngerti.*" # S3a phone input → kirim kode. - extendedWaitUntil: visible: text: "(?s).*nomor wa-mu.*" timeout: 10000 - tapOn: point: "60%, 47%" - inputText: "81234567890" - tapOn: "(?s).*kirim kode.*" # S3b OTP — peek stub, auto-submits on 6th digit. - extendedWaitUntil: visible: text: "Masukkan OTP" timeout: 15000 - runScript: file: ../scripts/peek_otp.js env: TEST_PHONE: ${TEST_PHONE} BACKEND_INTERNAL_URL: ${BACKEND_INTERNAL_URL} - inputText: ${output.OTP}