Bash -e doesn't just kill on pipefail — it exits on ANY non-zero
command. Even without a pipeline, both xcrun devicectl and ios-deploy
return non-zero on failure, killing the script before the exit-code
check.
Fix: wrap both in 'if command; then exit 0; fi' so -e treats them
as condition-tested (no early exit). Fallback now actually runs.
When devicectl fails under bash -e -o pipefail, the pipeline
(xcrun devicectl ... | tail -3) exits non-zero and -e kills
the script before the if-check. The ios-deploy USB fallback
was dead code.
Fix: redirect to temp file, capture exit code explicitly.
No pipeline = pipefail has no side-channel effect.
- Replace browse tab with Supabase-connected explore tab with filters
- Add React Query for data fetching with loading states
- Add 3 structured programs with weekly progression
- Add Supabase anonymous auth sync service
- Add PostHog analytics with screen tracking and events
- Add comprehensive test strategy (Vitest + Maestro E2E)
- Add RevenueCat subscription system with DEV simulation
- Add i18n translations for new screens (EN/FR/DE/ES)
- Add data deletion modal, sync consent modal
- Add assessment screen and program routes
- Add GitHub Actions CI workflow
- Update activity store with sync integration