Data Model: Relocate SaaS-Sync Flag to Core

No data entities, schemas, or persisted state. The "model" is the moved symbol set and the re-export graph.

Moved symbols (INTEGRATION saas/rollout.py → CORE core/saas_sync_config.py)

SymbolKindNote
SAAS_SYNC_ENV_VARstr constant"SPEC_KITTY_ENABLE_SAAS_SYNC"
_TRUTHY_VALUESfrozenset[str] (private){"1","true","yes","on"}
_DISABLED_MESSAGEstr (private)byte-frozen (contract)
is_saas_sync_enabled() -> boolpure env read
saas_sync_disabled_message() -> strreturns _DISABLED_MESSAGE

Re-export graph after the move (single definition, many delegating surfaces)

core/saas_sync_config.py   ← the ONE definition (CORE authority)
   ▲ imported by
   ├─ readiness/coordinator.py          (CORE caller — repointed, FR-002)
   └─ saas/rollout.py                   (retained shim: re-exports, FR-003/D-02)
         ▲ re-exported by
         ├─ saas/__init__.py
         ├─ sync/feature_flags.py  → sync/__init__ facade
         └─ tracker/feature_flags.py → tracker/__init__ facade

Invariant: exactly one def is_saas_sync_enabled / def saas_sync_disabled_message (NFR-002); every arrow above is a re-export, not a redefinition. Object identity is preserved end-to-end (so test_rollout.py's is assertions hold).