Packages/EnsembleSupport | Low-level shared Foundation utilities used across packages and app targets, including privacy-safe log redaction and audio payload validation. | Do not put app behavior, UI, persistence, network clients, or platform service orchestration here. |
Packages/EnsembleAPI | Plex HTTP/auth clients, request builders, API models, connection policy, WebSocket transport. | Do not import UI, CoreData, or app target code. |
Packages/EnsemblePersistence | CoreData stack, managed objects, repositories, downloads/artwork persistence. | Do not put UI or network orchestration here. |
Packages/EnsembleSiriShared | Pure Siri/system-media identity, index models, payload codecs, resolver/ranking logic, phrase normalization/scoring, and App Group constants. | Do not import CoreData, Intents UI, SwiftUI, Spotlight, or playback services. |
Packages/EnsembleDomain | Watch-portable account/media/playback models. | Do not pull in full EnsembleCore. |
Packages/EnsemblePlex | Watch-portable Plex facade built on EnsembleAPI and EnsembleDomain. | Do not duplicate low-level Plex request logic. |
Packages/EnsembleWatchCore | Watch bootstrap, credentials, catalog cache, local playback, local/remote Now Playing state. | Do not link EnsembleUI or full iOS playback graph. |
Packages/EnsembleCore | ViewModels, services, domain models, DI, sync/playback/offline/profile logic. | Do not introduce SwiftUI views. |
Packages/EnsembleUI | SwiftUI views, platform UI adapters, reusable components. | Do not place business logic or persistence here. |