Changes for decisions/index.md: 1 added line, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -41,3 +41,4 @@ the reasoning lives here. Never renumber; supersede instead (see the record-deci
*[ADR-0036](0036-srm-owns-network-capability-expiry.md) - SRM owns expiry of async network capabilities and reports it via event.srm.operation.status metadata (qos_status_info); OEG runs no timer and maps it to CAMARA DURATION_EXPIRED
*[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
| `source_spec` | object | No | Canonical provenance (`srm.params/v1` → `source_spec`): which external spec this payload was normalized **from**. See below. |
**`source_spec` — the publisher states the provenance.**`source_spec` records which external
API family, API, and version the canonical payload was translated from
([canonical-parameters-schema.md](/srm/canonical-parameters-schema.md) §1). Only the publisher
knows it: OEG and the TMF/GSMA mappers own the external-spec-to-canonical translation
(ADR-0003), so only they have seen the original request. SRM stores it and never branches on it.
Optional for additive compatibility (§A evolution rule). When absent, SRM falls back to the
`source_spec` on the matched `service_capability_requirement.parameters` — the catalog template
written at onboarding, which is a real recorded provenance rather than a synthesized one. SRM
does **not** derive `source_spec` from the envelope `source` field: `source` records which
component published the message, not which specification the payload was mapped from, and the
two differ (FM may relay a CAMARA-shaped request with `source=federation`).
**`profile_ref` → snapshot merge.** Command payloads may carry `profile_ref` at the top of
`network_capability` (this contract). When persisting `capability_instance.parameters_snapshot`,
@@ -280,6 +294,7 @@ until separately specified.
| `target` | object | No | Replacement target when the capability allows retargeting |
| `profile_ref` | string | No | Replacement profile; merged into snapshot as `parameters.profile_ref` |