# NDC Device Plane

`device-plane` is the provider-neutral runtime boundary for physical devices.
It is intentionally separate from Foundry, Engine L2, External Data Plane and
the preserved Gelios integration.

Current implementation status: local fail-closed foundation; not deployed.

- `packages/device-protocol-contract` owns safe discovery and presentation
  contracts.
- `packages/arusnavi-b2-adapter` owns the first model-profile evidence and a
  fail-closed framing boundary.
- `services/device-control-core` owns the initial PostgreSQL schema, health
  boundary and disabled-by-default quarantine ingest.
- `services/device-gateway` owns a disabled-by-default, loopback-only TCP
  evidence listener that sends no bytes and extracts no identifier until the
  official framing contract is known.
- `docker-compose.device-plane.yml` publishes only loopback health endpoints
  and keeps the raw TCP listener unpublished.
- No device command can be built or sent.
- No real IMEI, ICCID, password, packet or provider credential is stored in
  this source tree.

The planned runtime services are:

- `device-control-core`: contours, discoveries, devices, bindings, policy and
  audit;
- `device-gateway`: raw TCP sessions, bounded codecs and presence;
- `device-postgres`: private persistent state.

The Foundry `Device Manager` is a canonical page template using a server-owned
`device-plane-control` binding. It is not a service in this directory.

Run the foundation tests:

```bash
npm test
```

See [IMPLEMENTATION_BASELINE.md](docs/IMPLEMENTATION_BASELINE.md) for the
placement, security and rollout contract.

The canonical runner registry and deterministic artifact builder live in
`../infra/deploy-runner`. The runner must be separately promoted and verified
before any Device Plane artifact is staged or planned.
