Changes for decisions/0038-device-targeted-control-path-resolution.md: 1 added line, 1 removed line.
Original line number
Diff line number
Diff line
@@ -9,7 +9,7 @@ status: "accepted"
# ADR-0038: Control-path resolution for device-targeted capabilities is SRM's, via an adapter probe
**Status:** accepted
**Status:** accepted — the boolean return type is superseded by [ADR-0040](/decisions/0040-target-serveability-is-a-tri-state.md); everything else stands
Changes for decisions/index.md: 2 added lines, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -42,3 +42,5 @@ the reasoning lives here. Never renumber; supersede instead (see the record-deci
*[ADR-0037](0037-canonical-target-ports.md) - target.device.ports / target.application_server.ports join srm.params/v1's canonical target descriptor, generic across every capability with a device/application-server target rather than allowlisted per capability_type
*[ADR-0038](0038-device-targeted-control-path-resolution.md) - device-targeted capabilities resolve their control path by probing candidate adapters with can_serve_target; the loop and the choice stay in SRM, the per-backend answer comes from TF-SDK
*[ADR-0039](0039-source-spec-stated-by-publisher.md) - source_spec is stated by the publishing component (OEG from CAMARA, FM from OPG.04) on network capability commands; SRM never derives it from the envelope source and never synthesizes a family, API, or version
*[ADR-0040](0040-target-serveability-is-a-tri-state.md) - can_serve_target answers can_serve | unknown_subscriber | unsupported_identifier; a boolean cannot carry the 404/422 split §E.2 requires, and 404 needs positive evidence (supersedes ADR-0038's boolean)
*[ADR-0041](0041-tfsdk-owns-adapter-construction.md) - TF-SDK builds adapters behind a factory keyed by adapter kind; SRM resolves control_path_ref to an instance but never enumerates adapter kinds
Changes for oeg/architecture.md: 2 added lines, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -264,6 +264,8 @@ These questions are not resolved by the current architecture text. Keep them vis
-**F1. Catalog cache:** In-process TTL vs another transient cache for `event.srm.catalog.updated` invalidation? *Recommendation:* start with in-process + short TTL; move to a shared transient cache only when load requires.
-**F2. Consent / User Identity Token:** Where does the User Identity Token enter — header vs body? *Recommendation:* follow the CAMARA security profile plus OPG.02 privacy guidance; store opaque reference in `operations.metadata` JSONB, delegate validation to SRM.
-**F3. Location Retrieval's identifier-echo fallback is an unresolved guess:** when SRM's `srm_resolved_identifier` is absent, OEG echoes the first identifier the request supplied in a fixed order (`ipv4`, `phone_number`, `ipv6`, `network_access_id`) — the mapper's own docstring calls this a guess that may not match the identifier the network actually used ([oeg/interface-contract.md](/oeg/interface-contract.md) §N.4). No decision exists for why this order, or whether guessing is acceptable at all for a CAMARA field the consumer is expected to trust.
-**F4. `app_provider_id`/`tenant_id` are hardcoded `"placeholder"`:** no JWT-claim extraction exists yet, so every request — including Location Retrieval — is tagged with a fake provider id. For Location Retrieval specifically this also means `device` cannot be omitted the way the vendored CAMARA spec allows when the subject is derivable from the token, so the published API contract is stricter than intended until this is resolved ([oeg/interface-contract.md](/oeg/interface-contract.md) §N.4).