apps/* -> @workspace/core, @workspace/core-*, bounded contracts, @workspace/ui, @workspace/api-client, shared configapps/* -> never @workspace/supabase-* or another apppackages/core / core-* -> may import contracts and matching @workspace/supabase-*packages/supabase-* -> may import their contracts + supabase-runtime only; never apps/core/other providerscontract packages -> zod/better-result and lower contracts only; never core or providers
Contract packages expose explicit subpaths (./schemas, ./service, ./errors, domain roots). They do not expose a runtime . barrel that pulls Zod into client graphs.
Keep the DAG acyclic: foundation → identity → tenant; CRM depends on tenant; catalog on CRM; work on CRM/catalog; commerce on CRM/catalog/work; portal on CRM/catalog/commerce; conversations on identity/tenant; automation on conversations/commerce. Platform must not import conversations; orchestration joins those packages in core-*.