# ADR-0005: CAMARA app-instance vs deployment identity — `appInstanceId`/`appDeploymentId` are OEG-minted (adopted by SRM), and one operation maps to N app instances
**Status:** accepted — read-path wording superseded by ADR-0007 (single-resource reads use collection query parameters, not path GETs); `instances[].zone_ref` renamed to `zone_id` (zone UUID) by ADR-0013; identity model unchanged
**Status:** accepted — read-path wording superseded by ADR-0007 (single-resource reads use collection query parameters, not path GETs); `instances[].zone_ref` renamed to `zone_id` (zone UUID) by ADR-0013; identity model unchanged; target-tuple pin field names aligned to SRM vocabulary by ADR-0031
# ADR-0013: Zone identity on cross-component contracts is the zone UUID (`zone.id` = CAMARA `EdgeCloudZoneId`); `zone.ref` is internal-only
**Status:** accepted
**Status:** accepted — pin field naming aligned to SRM vocabulary by ADR-0031; zone identity model unchanged
**Date:** 2026-07-05
**Affects:**[srm/interface-contract.md](/srm/interface-contract.md), [srm/persistence-model.md](/srm/persistence-model.md), [srm/end-to-end-examples.md](/srm/end-to-end-examples.md), [oeg/persistence-model.md](/oeg/persistence-model.md), [oeg/app-instance-flow.md](/oeg/app-instance-flow.md), [oeg/app-deployment-flow.md](/oeg/app-deployment-flow.md); amends the `instances[].zone_ref` field of ADR-0005's event shape
@@ -18,7 +18,7 @@ status: "accepted"
Two zone identifiers coexist: `zone.id` (UUID, PK in `srm_db`) and `zone.ref` (human-readable
slug like `zone-berlin-01`, from bootstrap YAML). The docs disagreed on which one crosses
component boundaries: `command.srm.service.deploy` normalizes the CAMARA `edgeCloudZoneId` into
`targets[].resource_zone_id` (a UUID), but `event.srm.operation.completed.instances[].zone_ref`
`targets[].zone_id` (a UUID), but `event.srm.operation.completed.instances[].zone_ref`
was shown carrying the slug in SRM examples and the UUID in OEG flow examples, and OEG's
`app_instances.zone_ref` column was an untyped VARCHAR. Since SRM is authoritative for zones and
OEG proxies the zone list to clients, the CAMARA `EdgeCloudZoneId` a client uses **is** SRM's
@@ -28,7 +28,7 @@ slug confined to logs/ops; (b) slug on events with OEG maintaining a ref→id ma
## Decision
Option (a). Every cross-component field that identifies a zone carries the zone UUID
(`zone.id` = the CAMARA `EdgeCloudZoneId`): `targets[].resource_zone_id` (already true),
(`zone.id` = the CAMARA `EdgeCloudZoneId`): `targets[].zone_id` (already true),
`event.srm.operation.completed.instances[].zone_id` (renamed from `zone_ref`), and OEG's
`app_instances.edge_cloud_zone_id` column (renamed from `zone_ref`, typed UUID). `zone.ref`
remains an internal human-readable label used in bootstrap YAML, structured logs, and operator