* refactor(app): move workspace setup-status fetch into the setup store The workspace screen ran a fetch-once-and-store workflow inline in a useEffect, deduped by a hidden requestedWorkspaceSetupStatusKeyRef state machine and a manual cancellation flag. The fetch + dedup + response validation only existed inside the component, so it could only be exercised through E2E. Move the workflow into useWorkspaceSetupStore as an idempotent ensureSetupStatus action with the daemon client injected as a port. The store owns the in-flight dedup (requestedKeys) and clears the marker on error/removal so a later attempt retries. The component effect now just delegates; the ref and cancellation flag are gone. This makes the workflow unit-testable with a fake client (no mocks) and is the first slice of pulling business logic out of the workspace-screen god component. * fix(app): release the setup-status in-flight marker on every settle Greptile P1: when fetchWorkspaceSetupStatus returned a null snapshot or a mismatched workspaceId, the key stayed in requestedKeys forever, so a later mount could never retry — a regression versus the old component-scoped ref, which reset on remount. Make requestedKeys a pure in-flight marker: add it before the fetch and release it in a finally once the request settles (success, ignored, or error). A settle that stored no snapshot leaves no marker, so the next call retries; once a snapshot lands, the snapshots[key] guard prevents redundant refetches. This also lets removeWorkspace/clearServer drop their now-redundant requestedKeys pruning. Adds tests for retry-after-null-snapshot and retry-after-mismatched-workspace.
Welcome to your Expo app 👋
This is an Expo project created with create-expo-app.
Get started
-
Install dependencies
npm install -
Start the app
npx expo start
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go, a limited sandbox for trying out app development with Expo
You can start developing by editing the files inside the app directory. This project uses file-based routing.
Get a fresh project
When you're ready, run:
npm run reset-project
This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.
Learn more
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join the community
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.
Dictation debugging
Set EXPO_PUBLIC_ENABLE_AUDIO_DEBUG=1 before running npx expo start to render the in-app audio debug card. Pair it with the server-side STT_DEBUG_AUDIO_DIR flag so every dictation includes a copyable path to the saved raw audio file.