L2 — Containers
The runnable / deployable pieces and how they connect. Presentation depends
only on the client_sdk facade; the local↔cloud choice is configuration,
not code.
Why / changed from the POC: the SDK is pure Dart (no dart:ui) and
constructed config-driven — createClient({config}), never by injecting an
adapter — so the same app binary runs fully local or cloud-backed. The
design_system has no client_sdk dependency (model-agnostic), and
presentation never imports drift/supabase. See the
design system decisions and the
CLAUDE.md load-bearing rules on the overview.