# ADR 0031. Group Connected partners; confirm names the cascade

## Status
Accepted (as listed in the decisions index).

ADR 0030 keeps Unlink on the PlayerPal Account, one Audience per Unlink
target, operator-led Unlink cascading provider-operator integrations for that
operator, and provider-led Unlink as that integration only. The Account list
was a flat row per connection. Unlink of the operator Party then looked like
“one item, everything gone,” because confirm named the cascade in a sentence
and not the Audiences.

`GET /v1/me` also omitted which operator Party a provider-operator
integration belongs to, so the portal could not list cascade members without
guessing labels or treating every Provider row as in-scope.

## Decision

Connected partners **groups** provider-operator integrations under the
operator Party they are scoped to. Each Unlink target remains one Audience.
Nesting is chrome, not a new Audience kind.

Unlink controls:

- **Operator parent** — Unlink of that operator Party. Confirm **names every
  Audience** that will drop (the operator Party and each nested
  provider-operator integration). Cascade is unchanged.
- **Nested provider row** — Unlink of that provider-operator integration
  only. The operator parent stays, including when it has no children left.
- **Top-level Provider row** — a provider-led integration with **no**
  operator Party connection on this Account. No synthetic operator parent.
  Unlink is that integration only.

`GET /v1/me` connections that are `provider_operator` include
`operator_audience_id`: the operator Party public id (`pp_opr_...`), the
same value as that operator row’s `audience_id`. PlayerPal sets it from
authenticated integration configuration (`operator_party_id`), never from a
partner payload. It is not a private UUID and not `pp_plr_...`.

Do not guess the cascade set from labels. Do not send `operator_id` on
Unlink; the path param is the Audience being Unlinked.

## Consequences

- Operator Unlink confirm can list the real cascade set from `/v1/me`.
- Provider-led-only integrations stay Unlinkable without inventing an
  operator Audience.
- ADR 0030 is not rewritten. Widget Unlink remains a later slice.
- Identity invariants 2, 8, and 12 still hold: no private player UUID to a
  partner, no operator scope from an untrusted provider payload, no player
  PII in the new field.
