Drop the is_temporary boolean from the DB schema (new migration), types,
API routers/helpers/middleware, and all frontend components and tests.
Access control now relies solely on is_client.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Add @xtablo/tablo-views workspace dependency to apps/main
- Update tablo-details.tsx to import from @xtablo/tablo-views and pass required props
- Remove inline EtapesSection and RoadmapSection functions (now in tablo-views)
- Update chat.tsx to import ChatMessages, useChat, useChatUnread from @xtablo/tablo-views
- Fix broken imports in DashboardTaskList, TabloOverviewSection, tablo.tsx, tasks.tsx
- Update kanban/index.ts to re-export from @xtablo/tablo-views
- Fix test files to import components from @xtablo/tablo-views
- Add is_client: false to test mock user objects
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Delete ChatProvider, ChannelPreview, CustomChannelHeader, hooks/channel.ts
- Replace TabloDiscussionSection with chatscope-based implementation using useChat
- Update tablo-details.tsx to use useChatUnread instead of useTabloDiscussionUnread
- Remove streamToken field from User type in UserStoreProvider
- Remove useSignUpToStream from shared auth hooks
- Remove stream-chat and stream-chat-react packages
- Remove stream-chat-react CSS import from main.tsx
- Clean up all streamToken references from test mocks and helpers
- Update chat.test.tsx and tablo-details.layout.test.tsx for new implementation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ensures the UpgradeBlockProvider waits for both user and organization
data before computing the block reason, preventing premature paywall
flash. Temporary users are never blocked.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
useUser() throws when the store is null (before user data is fetched).
Switch to useMaybeUser() which safely returns null.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>