# BMW Customer Adapter

This folder is the **only** sanctioned home for BMW-specific code, naming,
branding assets, and integration adapters in the product core.

Authoritative ADRs: [010](../../../docs/adr/010-product-core-vs-customer-adapter-separation.md),
[013](../../../docs/adr/013-composition-profiles-and-customer-variants.md),
[015](../../../docs/adr/015-architecture-boundary-enforcement.md),
[020](../../../docs/adr/020-no-customer-exception-without-adr.md).

## Owner
KADi platform team (interim). To be reassigned when a BMW product owner is
named.

## What lives here

| Folder | Purpose |
| ------ | ------- |
| [`branding/`](./branding) | BMW Group CI tokens (palette, design-system reference). Customer-specific colors, fonts, button shapes — never imported from product-core directly; consumed via the active composition profile. |
| [`demo/`](./demo) | BMW-flavored demo seed data. Used only when `APP_PROFILE=bmw` and `features.demoSeeds = true`. |

Phase 9 will add (placeholders only today):
- `adapters/identity-webeam/` — WebEAM SSO adapter
- `adapters/otel-dynatrace/` — Dynatrace observability exporter
- `adapters/storage-bmw-object-store/` — On-prem object store driver
- `adapters/email-bmw-mail-gateway/` — BMW SMTP gateway
- `adapters/support-itsm-next/` — ITSM.Next ticket sink
- `mappings/q-numbers/` — Q-number ↔ user mapping

## The Law

> The product core must never import from this folder. Period.

Imports may flow customer → core, never core → customer. Boundaries lint
enforces this. The forbidden-strings check allows BMW identifiers here and
nowhere else (except `config/profiles/bmw*` and `governance/`).

## Public API

The entry point is [`index.ts`](./index.ts). External code that legitimately
needs BMW assets (e.g. an admin debug page, a BMW-only smoke test) imports
exclusively from there. Anything in `internal/` or sub-folders is private.
