Skip to content

docs: ICM lifecycle and API compatibility governance draft#497

Draft
hdamker wants to merge 2 commits intocamaraproject:mainfrom
hdamker:docs/icm-lifecycle-and-compatibility
Draft

docs: ICM lifecycle and API compatibility governance draft#497
hdamker wants to merge 2 commits intocamaraproject:mainfrom
hdamker:docs/icm-lifecycle-and-compatibility

Conversation

@hdamker
Copy link
Copy Markdown
Collaborator

@hdamker hdamker commented Apr 21, 2026

What type of PR is this?

  • documentation

What this PR does / why we need it:

Adds a draft governance document for ICM version evolution and its dependencies with CAMARA API versions, placed under documentation/SupportingDocuments/. Agreed by the Release Management WG to serve as the base for further discussion in response to the ICM WG's request to define release governance between ICM and APIs.

Key elements:

  • Three-contract model (API Consumer ↔ API, API Consumer ↔ AS, ICM ↔ API)
  • Semver discipline for ICM starting at 1.0.0
  • Per-major lifecycle tiers (Supported / Deprecated / Retired), with Preferred as a designation applied to one Supported major at a time
  • Flat x-camara-min-icm-version declaration in API specs, publication-time fixed
  • Compatibility matrix as a derived artifact
  • Aggregators recognized as ecosystem normalizers

Open governance decisions (durations, exception process, interaction with certification) are listed in §15 for WG discussion.

Which issue(s) this PR fixes:

Relates to #351 and #459. Also related: camaraproject/IdentityAndConsentManagement#324 and camaraproject/IdentityAndConsentManagement#340.

Special notes for reviewers:

This is a draft for WG discussion. §15 lists the open governance decisions that need WG agreement before adoption. Feedback welcome inline or as review comments.

Changelog input

release-note
Added draft supporting document on ICM lifecycle and API compatibility governance.

Additional documentation

None.

Draft response to the ICM WG request to Release Management (ICM#324, ICM#340,
RM#351/camaraproject#459) defining governance for ICM version evolution and its dependencies
with CAMARA API versions.

Built on a three-contract model (API Consumer ↔ API, API Consumer ↔ AS, ICM ↔
API), semver discipline at ICM 1.0.0, per-major lifecycle tiers
(Preferred/Supported/Deprecated/Retired), a flat x-camara-min-icm-version
declaration in API specs, a derived compatibility matrix, and explicit
recognition of aggregators as ecosystem normalizers.
@hdamker hdamker marked this pull request as draft April 21, 2026 17:05
Copy link
Copy Markdown
Collaborator

@tanjadegroot tanjadegroot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First set of comments before going any further. In general:

I think we need to decouple this document from implementations of ICM (auth server, certificate authority, etc.).

There is only 1 contract for API consumers: the API version definition (which includes its declared minimum ICM version expressing its compatibility).

API providers must ensure to offer ICM-compatible API version implementations at all times (and hence update their ICM implementation. I prefer to

  • remove reference to AS / certificate authorities, only refer to ICM or ICM version
  • remove the notion of API - ICM contract, use instead the term ICM-compatibility.
  • remove triangle relationship to simplify.

I prefer to use lifecycle state instead of lifecycle tier (more usual for understanding).

The "orthogonal API" concept, seems to be in contradiction with the objective to move API forward and deprecate ICM versions. I would prefer to drop it as anyway has only 5 occurrences - 2 of which in the definition itself and others can easily be dropped, so the additional concept and definitions are superfluous.

But maybe we need a x-camara-minimum-icm special value if "not applicable" or "any" (or 1.0.0" ? for APIs that are ICM-compatible by default (independently of the version) ? This could make it more clear for ICM implementation evolution, which API version implementations need to be upgraded.

I reviewed up to section 5 along the above lines.


## 1. Scope and Purpose

This guideline defines how Identity and Consent Management (ICM) evolves as an independent Working Group and how CAMARA APIs declare and maintain compatibility with ICM versions. It answers the question posed by the ICM Working Group to Release Management: under what rules can API versions and ICM versions co-evolve while still providing clear compatibility guarantees to API Consumers, aggregators, and certification authorities?
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This guideline defines how Identity and Consent Management (ICM) evolves as an independent Working Group and how CAMARA APIs declare and maintain compatibility with ICM versions. It answers the question posed by the ICM Working Group to Release Management: under what rules can API versions and ICM versions co-evolve while still providing clear compatibility guarantees to API Consumers, aggregators, and certification authorities?
This guideline defines lifecycle management of Identity and Consent Management (ICM) versions and how CAMARA APIs declare and maintain compatibility with ICM version. It answers the question posed by the ICM Working Group to Release Management: under what rules can API versions and ICM versions co-evolve while still providing clear compatibility guarantees to API Consumers ?


This guideline defines how Identity and Consent Management (ICM) evolves as an independent Working Group and how CAMARA APIs declare and maintain compatibility with ICM versions. It answers the question posed by the ICM Working Group to Release Management: under what rules can API versions and ICM versions co-evolve while still providing clear compatibility guarantees to API Consumers, aggregators, and certification authorities?

The guideline recognizes operational reality: providers offer the same API version against multiple ICM versions, aggregators depend on this flexibility, and API Consumers combine an API version and an ICM version into a single usage contract — if either side changes in a way that affects them, their integration must adapt.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The guideline recognizes operational reality: providers offer the same API version against multiple ICM versions, aggregators depend on this flexibility, and API Consumers combine an API version and an ICM version into a single usage contract — if either side changes in a way that affects them, their integration must adapt.
The guideline recognizes operational reality: providers offer the same API version against multiple ICM versions, aggregators depend on this flexibility, and API Consumers require an API version and an ICM version to be part of a single usage contract — if either aspect changes in a way that affects them, their implementation must adapt.


Terms defined in the CAMARA Commonalities glossary (API, API Consumer, API Provider, meta-release, semantic versioning, scope, etc.) are not repeated here. This section defines terms specific to this guideline.

- **ICM↔API contract**: the set of ICM-defined rules that shape how APIs are specified — scope format, `securitySchemes` syntax, sub claim format, token structure assumed by the API. Distinct from the contract between API Consumer and API (operations, schemas) and the contract between API Consumer and Authorization Server (flows, grants, assertions).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **ICM↔API contract**: the set of ICM-defined rules that shape how APIs are specified — scope format, `securitySchemes` syntax, sub claim format, token structure assumed by the API. Distinct from the contract between API Consumer and API (operations, schemas) and the contract between API Consumer and Authorization Server (flows, grants, assertions).
- **ICM-compatibility**: the guarantee that an API version respects the set of rules defined by a given ICM versionauth flows, grants, assertions, scope format, `securitySchemes` syntax, sub claim format, token structure assumed by the API, relevant operations and schemas.

Terms defined in the CAMARA Commonalities glossary (API, API Consumer, API Provider, meta-release, semantic versioning, scope, etc.) are not repeated here. This section defines terms specific to this guideline.

- **ICM↔API contract**: the set of ICM-defined rules that shape how APIs are specified — scope format, `securitySchemes` syntax, sub claim format, token structure assumed by the API. Distinct from the contract between API Consumer and API (operations, schemas) and the contract between API Consumer and Authorization Server (flows, grants, assertions).
- **Orthogonal API**: an API whose specification is not affected by differences between ICM major versions — its `securitySchemes`, scopes, and operational semantics are valid under any ICM major currently in the Supported tier. The majority of current CAMARA APIs are orthogonal.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure we need to introduce this concept nor to have a definition for this. Just use ICM-compatibility across major ICM versions.

I would prefer to drop it


- **ICM↔API contract**: the set of ICM-defined rules that shape how APIs are specified — scope format, `securitySchemes` syntax, sub claim format, token structure assumed by the API. Distinct from the contract between API Consumer and API (operations, schemas) and the contract between API Consumer and Authorization Server (flows, grants, assertions).
- **Orthogonal API**: an API whose specification is not affected by differences between ICM major versions — its `securitySchemes`, scopes, and operational semantics are valid under any ICM major currently in the Supported tier. The majority of current CAMARA APIs are orthogonal.
- **ICM major version**: the major component of an ICM semantic version (e.g., "1.x"). Starting with ICM 1.0.0, major-version increments indicate client-facing changes that cannot be expressed additively.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **ICM major version**: the major component of an ICM semantic version (e.g., "1.x"). Starting with ICM 1.0.0, major-version increments indicate client-facing changes that cannot be expressed additively.
- **ICM major version**: the major component of an ICM semantic version (e.g., "1" on "1.y.z"). Starting with ICM 1.0.0, major-version increments indicate client-facing changes that cannot be expressed additively (e.g. breaking changes for API consumers)

- **Exception (waiver)**: a time-bound, governance-approved compatibility authorization that permits a specific (API version, ICM version) pair outside the normal rules.
- **Compatibility matrix**: the derived artifact listing which (API version, ICM version) pairs are compatible at a given point in time (see §12).

## 3. The three contracts
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to drop this section and the 3 contracts as not needed IMHO, only the API definition is a contract for API consumers (with x-camara-minimum-icm included).

The API - ICM "contract" or rather ICM-compatibility guarantee should be by API providers who should ensure ICM compatibility of their API implementations


## 4. Core rule

**An API version is bound to the ICM major version whose ICM↔API contract it was written against.**
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**An API version is bound to the ICM major version whose ICM↔API contract it was written against.**
**An API version is ICM-compatible with any Supported ICM version declared in its published definition and higher available ICM versions.**


**An API version is bound to the ICM major version whose ICM↔API contract it was written against.**

For APIs whose contract is not affected by differences between ICM majors — *orthogonal APIs*, which make up the large majority of current CAMARA APIs — the binding has no operational effect: such an API remains compatible with any ICM major currently in the Supported tier.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For APIs whose contract is not affected by differences between ICM majors — *orthogonal APIs*, which make up the large majority of current CAMARA APIs — the binding has no operational effect: such an API remains compatible with any ICM major currently in the Supported tier.
For APIs who are not impacted by differences between ICM majors — which make up the large majority of current CAMARA APIs — the binding has no operational effect: such an API remains compatible with any ICM version currently in the Supported state.


For APIs whose contract is not affected by differences between ICM majors — *orthogonal APIs*, which make up the large majority of current CAMARA APIs — the binding has no operational effect: such an API remains compatible with any ICM major currently in the Supported tier.

For APIs whose ICM↔API contract IS affected (e.g., an API that uses a specific scope format introduced in an ICM major, or relies on an operator-token mechanism), the binding is explicit and operational: the API can only be served by AS implementations that honor its ICM major's contract.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For APIs whose ICM↔API contract IS affected (e.g., an API that uses a specific scope format introduced in an ICM major, or relies on an operator-token mechanism), the binding is explicit and operational: the API can only be served by AS implementations that honor its ICM major's contract.
For APIs whose ICM-compatibility is impacted (e.g., an API that uses a specific scope format introduced in a new ICM version, or relies on an operator-token mechanism), its compatibility is explicitly expressed in the API version's x-camara-minimum-icm field and operational: the API version can only be served by ICM implementations that provide this ICM version.


For APIs whose ICM↔API contract IS affected (e.g., an API that uses a specific scope format introduced in an ICM major, or relies on an operator-token mechanism), the binding is explicit and operational: the API can only be served by AS implementations that honor its ICM major's contract.

Concretely: `x-camara-min-icm-version: 1.2.0` declared in an API spec means the API was written against the ICM 1.x ICM↔API contract and requires features introduced from ICM version 1.2.0 onward within that major.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Concretely: `x-camara-min-icm-version: 1.2.0` declared in an API spec means the API was written against the ICM 1.x ICM↔API contract and requires features introduced from ICM version 1.2.0 onward within that major.
Concretely: `x-camara-min-icm-version: 1.2.0` declared in an API version means this API version was written against the features introduced from ICM version 1.2.0 and onward.

Collapse to one defined ICM-compatibility concept (API spec relative to ICM
version), use 'state' instead of 'tier' for ICM major lifecycle, require
lowest Supported ICM version as the publication-time floor, and distinguish
technical compatibility from CAMARA compliance.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants