Skip to content

feat(mobile): hackathon mobile app#2237

Merged
Gilbert09 merged 111 commits into
mainfrom
hackathon-mobile-app
May 22, 2026
Merged

feat(mobile): hackathon mobile app#2237
Gilbert09 merged 111 commits into
mainfrom
hackathon-mobile-app

Conversation

@dmarticus
Copy link
Copy Markdown
Contributor

Problem

Hackathon-built React Native mobile companion app for PostHog Code. Opening this PR to consolidate the work, get it under review, and figure out next steps for merging.

Changes

  • New Expo / React Native app under apps/mobile/ (SDK 54, expo-router, NativeWind v4, React Query, Zustand).
  • Skill-based task automation flows, plan approvals, PostHog chips, repo selector with caching.
  • Task loading states, old-task hydration fixes, plan crash fix, app icon swap.
  • EAS / Expo prod build setup.
  • Merged in latest main (1 conflict in TaskInput.tsx — kept both the cloud-repo-picker memo and main's new busyState from useGitQueries; removed an orphaned setIsCloudBranchPickerOpen call that main had retired).

How did you test this?

  • Ran pnpm --filter @posthog/code typecheck after the merge — passes.
  • Pre-commit lint-staged (biome + repo-wide typecheck) ran cleanly on the merge commit.
  • Mobile UI work was validated on simulator during the hackathon, not re-verified post-merge.

Publish to changelog?

no

oliverb123 and others added 11 commits May 17, 2026 15:50
# Conflicts:
#	apps/code/src/renderer/features/task-detail/components/TaskInput.tsx
- Remove unused totalCount destructure in ReportList
- Replace non-null assertions in useInboxReports queryFns with runtime guards
- Reformat with-adi-registration plugin
- Mock phosphor-react-native and react-native-safe-area-context globally so their ESM type syntax doesn't crash the CJS loader
- Mock @react-native-async-storage/async-storage with an in-memory backing map so persist middleware writes don't blow up under environment: node
- Reset repositoryCacheStore in useIntegrations.test.ts beforeEach so module-singleton state doesn't leak between tests
# Conflicts:
#	apps/code/src/renderer/features/task-detail/components/TaskInput.tsx
@dmarticus dmarticus marked this pull request as ready for review May 21, 2026 15:29
Comment thread .github/workflows/mobile-build.yml Fixed
dmarticus and others added 9 commits May 21, 2026 09:58
…ntain permissions'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Pass matrix/input values through env vars instead of interpolating
${{ }} directly into run: steps, resolving the semgrep
run-shell-injection findings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reverts 974e9cd (fix(code): preserve repo selection in task input), a
desktop-only change by Annika that was not on origin/main and unrelated
to the mobile app work on this branch. Preserves the unrelated busyState
wiring that a later main merge added to TaskInput.tsx.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The composer only offered plan/default/acceptEdits. Desktop also exposes
"auto" (model classifier approves/denies permission prompts), which cloud
Claude runs support. Add it to the mobile mode list with a Sparkle icon
and wire it through to initial_permission_mode (already passed verbatim).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The unit-test CI job ran until the 30-minute cutoff because the mobile
vitest suite never exited. Root cause: AutomationForm.test.tsx loads a
component tree that imports phosphor-react-native, and the global mock in
the test setup returned a bare Proxy. Vitest can't introspect a Proxy's
exports from a setup file, so it fell through to the real phosphor module,
which wedges the worker (huge icon library, node-incompatible). All other
component tests mock phosphor locally, so only this one hit the real module.

Replace the Proxy with an explicit, introspectable icon mock covering the
icons the app imports. Also stub nativewind and react-native-reanimated,
which likewise fail to evaluate under vitest's node environment (Flow
syntax / native worklet runtime), so any component importing them
transitively can render in tests without hanging.

Full mobile suite now passes and exits in ~3s.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
These two docs/plans/*.md files were scratch planning notes added during
the hackathon and aren't on main. Drop them so the branch only carries
shipping code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Android service account key now lives in EAS credentials, so the
promote workflow no longer writes it from a repo secret. Drop the
GOOGLE_SERVICE_ACCOUNT_KEY secret, the file-writing/cleanup steps, and the
serviceAccountKeyPath from eas.json — eas submit picks the key up from EAS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Gilbert09 Gilbert09 merged commit dd74d08 into main May 22, 2026
15 checks passed
@Gilbert09 Gilbert09 deleted the hackathon-mobile-app branch May 22, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants