script=/SHiREVault/Backup/OSBackups/SHIRE-MOBILE-SENTINEL-HISTORY-RECOVERY-20260805T120410Z/actual-corrected-pixel-deployment.sh script_characters=42131 script_lines=1028 version_literals=0.7.3,0.7.3-sentinel-mobile-alerts heredoc_count=3 payload_001_start_line=62 payload_001_delimiter=KOTLIN payload_001_bytes=18890 payload_001_lines=735 payload_001_keywords=sentinel_mobile,android_notification payload_001_file=/SHiREVault/Backup/OSBackups/SHIRE-MOBILE-SENTINEL-075-TRANSPLANT-BASELINE-20260805T120731Z/recovered-payloads/heredoc-001-line-00062-KOTLIN.txt payload_001_opening=cat > "$SENTINEL_MOBILE" <<'KOTLIN' payload_002_start_line=799 payload_002_delimiter=PY payload_002_bytes=4144 payload_002_lines=173 payload_002_keywords=sentinel_mobile,main_activity,gradle payload_002_file=/SHiREVault/Backup/OSBackups/SHIRE-MOBILE-SENTINEL-075-TRANSPLANT-BASELINE-20260805T120731Z/recovered-payloads/heredoc-002-line-00799-PY.txt payload_002_opening= chown ray:ray "$SENTINEL_MOBILE"; chmod 0644 "$SENTINEL_MOBILE"; echo "PASS: Correct android.app.job imports installed."; echo; echo "=== PATCHING MOBILE ENTRY POINT AND MANIFEST ==="; python3 - "$MAIN_ACTIVITY" "$MANIFEST" "$APP_BUILD" <<'PY' payload_003_start_line=974 payload_003_delimiter=PY payload_003_bytes=418 payload_003_lines=26 payload_003_keywords=main_activity payload_003_file=/SHiREVault/Backup/OSBackups/SHIRE-MOBILE-SENTINEL-075-TRANSPLANT-BASELINE-20260805T120731Z/recovered-payloads/heredoc-003-line-00974-PY.txt payload_003_opening= chown ray:ray "$MAIN_ACTIVITY" "$MANIFEST" "$APP_BUILD"; chmod 0644 "$MAIN_ACTIVITY" "$MANIFEST" "$APP_BUILD"; echo "PASS: MainActivity and manifest patched."; echo "PASS: Version set to 0.7.3-sentinel-mobile-alerts."; echo; echo "=== BUILDING CORRECTED APK ==="; cd "$APP"; ./gradlew --no-daemon clean assembleDebug 2>&1 | tee "$EVIDENCE/android-build.txt"; if [[ ! -s "$APK" ]]; then echo "STOP: APK was not produced."; exit 1; fi; sha256sum "$APK" | tee "$EVIDENCE/app-debug-apk.sha256"; echo "PASS: Corrected APK built successfully."; echo; echo "=== INSTALLING ON PIXEL ==="; adb install -r "$APK" 2>&1 | tee "$EVIDENCE/adb-install.txt"; MOBILE_DEPLOYED=1; adb shell pm grant "$PACKAGE" android.permission.POST_NOTIFICATIONS >/dev/null 2>&1 || true; adb shell am force-stop "$PACKAGE"; adb logcat -c; adb shell am start -W -n "$PACKAGE/.MainActivity" 2>&1 | tee "$EVIDENCE/pixel-launch.txt"; echo "Waiting for the first private SENTiNEL poll..."; FIRST_POLL=0; for attempt in $(seq 1 120); do if adb logcat -d -s SHiRESentinel:I '*:S' 2>/dev/null | grep -Eq 'POLL_SEEDED|POLL_READY'; then FIRST_POLL=1; break; fi; sleep 1; done; adb logcat -d -s SHiRESentinel:I '*:S' | tee "$EVIDENCE/pixel-first-poll.txt"; if [[ "$FIRST_POLL" -ne 1 ]]; then echo "STOP: Pixel did not complete its first private poll."; exit 1; fi; adb shell dumpsys activity services > "$WORK_DIR/services.txt"; if ! grep -q 'SentinelAlertLinkService' "$WORK_DIR/services.txt"; then echo "STOP: Live SENTiNEL foreground service is not running."; exit 1; fi; echo "PASS: Pixel connected to the private SENTiNEL feed."; echo "PASS: Existing alerts were seeded without flooding."; echo; echo "=== RUNNING MOBILE SELF-TEST ==="; echo "Watch the Pixel for:"; echo "'SENTiNEL mobile self-test'"; adb logcat -c; sudo /usr/bin/python3 "$SENTINEL_BRIDGE" --config "$SENTINEL_CONFIG" --self-test | tee "$EVIDENCE/self-test-source.txt"; SELF_TEST_RECEIVED=0; for attempt in $(seq 1 120); do if adb logcat -d -s SHiRESentinel:I '*:S' 2>/dev/null | grep -q 'MOBILE_SELF_TEST'; then SELF_TEST_RECEIVED=1; break; fi; sleep 1; done; adb logcat -d -s SHiRESentinel:I '*:S' | tee "$EVIDENCE/pixel-self-test.txt"; if [[ "$SELF_TEST_RECEIVED" -ne 1 ]]; then echo "STOP: Mobile self-test did not reach the Pixel."; exit 1; fi; echo "PASS: SENTiNEL mobile self-test reached the Pixel."; echo; echo "=== REVOKING OLD TRANSITION TOKEN ==="; python3 - "$GATEWAY_ENV" "$WORK_DIR/gateway-env.final" <<'PY'