Merge to Main #58
Conversation
Add profile usage dashboard
Fix profile dashboard build encoding
Fix pricing promise gaps
Codex/UI redesign
Codex/UI redesign
❌ Deploy Preview for tera-ai failed.
|
Codex/UI redesign
Codex/UI redesign
Codex/UI redesign
Codex/UI redesign
Fix credit enforcement and pricing fallback
Fix chat persistence and sync Supabase credits migration
Fix final chat warning and credit cap flow
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Align profile usage dashboard with active limits
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Codex/UI redesign
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…root Add SOUL.md with Boil the ocean text
build-tera-mobile-foundation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 03b43ff038
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!onboardingComplete) return <Redirect href="/(onboarding)" />; | ||
| if (!session) return <Redirect href="/(auth)/sign-in" />; | ||
| return <Redirect href="/(tabs)" />; |
There was a problem hiding this comment.
Guard all signed-in routes, not just the index redirect
session is only checked in app/index.tsx, so any direct navigation/deep link to /(tabs) or /conversation/[id] bypasses auth and renders signed-in surfaces while logged out. This is a regression from the previous root-layout gating and can expose protected UI/data paths whenever the app is opened on a non-index route; add a guard in protected layouts (or root stack) so null sessions are redirected globally.
Useful? React with 👍 / 👎.
| const [session] = await Promise.all([ | ||
| getStoredSession(), | ||
| loadOnboardingState(), | ||
| ]); |
There was a problem hiding this comment.
Always mark bootstrap hydrated when storage reads fail
Bootstrap awaits Promise.all without error handling, so if either getStoredSession() or loadOnboardingState() rejects (e.g., SecureStore/AsyncStorage runtime errors), setHydrated(true) is never reached and the app can remain stuck on the loading screen indefinitely. Wrap this block in try/catch/finally (or equivalent) so hydration completes with safe fallback state even on storage failures.
Useful? React with 👍 / 👎.
Codex/upgrade tera mobile sdk 54
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 98979547a9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <EmptyState title="Start this thread" body="Ask a question and Tera will respond here." /> | ||
| )} | ||
| <View style={styles.composer}> | ||
| <Composer disabled={sendMessage.isPending} onSubmit={(value) => sendMessage.mutate(value)} /> |
There was a problem hiding this comment.
Disable composer for missing conversations
When a user opens a non-existent conversation ID, the screen shows the Conversation not found state but the composer is still enabled because it only checks sendMessage.isPending. Submitting in this state still triggers sendMessage with that invalid ID, clears the input, and gives no visible message output because rendering remains in the !conversation.data branch. This creates a broken UX loop and unnecessary API calls; the composer should be hidden/disabled unless a conversation is loaded.
Useful? React with 👍 / 👎.
| return; | ||
| } | ||
| setError(''); | ||
| resetPassword.mutate(undefined, { |
There was a problem hiding this comment.
Pass entered email into reset-password mutation
The forgot-password submit path validates email but then calls resetPassword.mutate(undefined), so user input is dropped before the mutation runs. Because the mutation is parameterless, the API boundary for password reset cannot receive the target address, which will break real reset delivery when the mock is replaced and also gives misleading behavior during integration testing.
Useful? React with 👍 / 👎.
Codex/cloudflare deploy
Finish Cloudflare Workers deployment setup
Fix Next.js 16 Turbopack build error for Cloudflare deployment
Fix Turbopack build errors for Cloudflare deployment
Add Render deployment config for backend-server
Add tera-web (Next.js frontend) to Render Blueprint
Fix duplicate function/param merge artifacts in mistral.ts
Fix const reassignment error in mistral.ts
No description provided.