Changes for decisions/index.md: 1 added line, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -37,3 +37,4 @@ the reasoning lives here. Never renumber; supersede instead (see the record-deci
*[ADR-0032](0032-databus-validation-failure-split-by-answerability.md) - DataBus validation failures split by answerability: dead-letter only unattributable messages; every readable-envelope failure returns failed_before_start
*[ADR-0033](0033-async-network-capability-caller-id.md) - async network-capability caller-facing ids (QoD sessionId, trafficInfluenceID) are OEG-minted and adopted as service_instance.id; external_ref reverts to the realization ref
*[ADR-0034](0034-network-capability-delete-is-async.md) - network-capability delete is async via command.srm.network.capability.deactivate, and its completion is consumed to a terminal record state
*[ADR-0035](0035-qod-session-service-specification.md) - a QoD session references one platform-seeded service specification held in OEG config; profile names stay unvalidated, and QoS profiles are a catalog-layer concern (resolves F2)
| `operation_id` | UUID FK -> `operations` | The **activate** operation that created this row; the deactivate operation references back via its own `metadata` |
| `service_specification_id` | UUID | Sent on the activate command. **Open — see OQ-QOD-01 below.** |
| `service_specification_id` | UUID | The platform-seeded QoD specification, read from OEG config; identical on every row today (ADR-0035). Stored per row so the offering a session was provisioned under stays auditable once per-offering specifications exist |
| `state` | VARCHAR(32) | `REQUESTED`/`AVAILABLE`/`UNAVAILABLE` are activate-derived and surface as CAMARA `qosStatus`; `DELETION_REQUESTED`/`DELETED`/`ERROR` are teardown-derived and surface as `404` |
> Candidate resolutions: (a) one QoD specification seeded at platform bootstrap alongside the
> `qod_session` capability, its id in OEG config; (b) one per `app_provider_id`, created
> get-or-create on first use via `POST /internal/catalog/service-specifications`; (c) relax the
> field for `capability_type=qod_session` in the SRM contract. Not resolved; blocks the QoD
> activate path end to end. Related: `/qos-profiles` is currently unimplemented, and whatever
> backs it is the natural home for a profile → specification mapping.
**`traffic_influences`** — the OEG-side record for `POST /traffic-influences`. Same shape and lifecycle as `qod_sessions`: `traffic_influence_id` is OEG-minted and adopted by SRM as `service_instance.id` (ADR-0033), the row is written at request time, advanced by the activate completion, and driven to a terminal state by the deactivate completion (ADR-0034). It does **not** carry OQ-QOD-01: its `service_specification_id` is resolved from the request's registered `appId` via `app_registrations.app_registration_id` (ADR-0011).
> **Where the QoD `service_specification_id` comes from (ADR-0035).** A QoD session has no CAMARA
> registration step and therefore no `appId` to resolve from — CAMARA QoD exposes only
> `/sessions`, `/sessions/{id}`, `/sessions/{id}/extend`, `/qos-profiles` and
> `/qos-profiles/{name}`, and none of those onboards anything. The platform therefore **seeds one
> QoD service specification at deployment** (`ref=qod-session`, no deployment units, a single
> `qod_session`/`network` capability requirement with an empty `policy`), alongside the bootstrap
> that materializes zones, network domains and the `qod_session` capability itself. OEG holds its
> id in configuration (`QOD_SETTINGS__SERVICE_SPECIFICATION_ID`) and sends the same value on every
> activate — no lookup, and no call to SRM on the request path.
>
> Profile names stay **unvalidated**: `qosProfile` travels as `profile_ref`, a free string the
> adapter resolves (REQ-SRM-08), and the network is the only authority that can refuse a session.
> Everything a caller varies — profile, duration, device, application server, ports — is written
> per session into `capability_instance.parameters_snapshot`, so one specification serves an
> unbounded number of distinct sessions.
>
> An operator that later wants to constrain QoD adds one specification per offering, each carrying
> real limits in its requirement's `policy`; OEG's resolution then moves from the configured
> constant to a lookup keyed on `qosProfile`, and `/qos-profiles` is served from that mapping.
> Per-tenant entitlement layers on top through `api_subscriptions`. Neither step changes the
> command shape, this table, or the CAMARA surface.
**`traffic_influences`** — the OEG-side record for `POST /traffic-influences`. Same shape and lifecycle as `qod_sessions`: `traffic_influence_id` is OEG-minted and adopted by SRM as `service_instance.id` (ADR-0033), the row is written at request time, advanced by the activate completion, and driven to a terminal state by the deactivate completion (ADR-0034). It needs no seeded specification (ADR-0035): its `service_specification_id` is resolved from the request's required `appId` via `app_registrations.app_registration_id` (ADR-0011).
| 2.0 | 2026-08-05 | Added `qod_sessions` and `traffic_influences` (QodSession/TrafficInfluence entities, ownership rows 9-10, relationships, table definitions) under ADR-0033/ADR-0034; `operations.operation_type` split into activate/deactivate; recorded open question OQ-QOD-01 on the QoD `service_specification_id`. |
| Sync query/data | Internal HTTP for Device Location/Status; no inventory |
| QoS / capability profiles | Referenced by `profile_ref` in canonical params; optional `capability_profile` catalog deferred |
| QoS / capability profiles | Referenced by `profile_ref` in canonical params — unvalidated today; validation, when added, is a catalog-layer specification per offering (ADR-0035) |
@@ -208,7 +215,7 @@ SRM-owned data is consumed only via SRM internal APIs or published events, never
| REQ-SRM-05 | Interface with infrastructure via TF-SDK adapters for SBI-OAM and SBI-NR. |
| REQ-SRM-06 | Publish `event.srm.operation.status` and `event.srm.operation.completed` per Interface Contract §C (Phase 1 status model). |
| REQ-SRM-07 | Support federated work through the same commands with `source=federation` and `federation_partner_ref`. |
| REQ-SRM-08 | Reference QoS/capability profiles via `profile_ref` in canonical params; optional`capability_profile`catalog deferred. |
| REQ-SRM-08 | Reference QoS/capability profiles via `profile_ref` in canonical params — an unvalidated free string the adapter resolves. Profile validation is deferred; when added it lives in the catalog layer as one `service_specification` per offering, not as a`capability_profile`table (ADR-0035, F2). |
| REQ-SRM-09 | Idempotent command processing: duplicate `operation_id` creates no duplicate runtime rows (enforced at `service_order`). |
| REQ-SRM-10 | Return RFC 7807 problem details for all HTTP **error** responses. |