rfgen.release_support_inventory

rfgen.release_support_inventory publishes the immutable support matrix for a release. It joins the caller-collected production advertisements with the previously validated execution-evidence, claim-source, and scientific-coverage records. It does not discover plugins while publishing, run tests, contact a cloud provider, or manufacture evidence.

All models on this page are strict and frozen Pydantic v2 models. They reject unknown fields, do not coerce incompatible values, and cannot be mutated after construction. The two inventory records carry an RFC 8785 canonical-JSON SHA-256 self-hash, calculated after excluding their own hash field.

Public API

Symbol

Kind

Purpose

SupportStatus, EvidenceStatus, EvidenceKind

StrEnum

Closed support and evidence outcome vocabularies.

StaticRequiredRowId, SupportRowId

identifiers

Required fixed rows and the validated static-or-dynamic row identifier union.

AdvertisedManagedProviderV1, AdvertisedHILDeviceV1, AdvertisedInventoryV1

models

Canonical production capability advertisement.

SupportRowV1, EvidenceRefV1, MigrationRangeV1, ReleaseSupportInventoryV1

models

The published support matrix, its evidence references, and compatibility interval.

collect_advertised_inventory

function

Intersects installed entry points with packaged production configuration.

build_release_support_inventory

function

Validates the release evidence chain and publishes the final inventory.

AdvertisedInventoryError, SupportInventoryErrorCode, SupportInventoryError

errors

Caller-visible failure boundary for collection and release publication.

The module relies on Pydantic v2 for strict parsing, packaging for PEP 440 versions and specifier sets, semantic-version for the release version, and rfc8785 for the canonical self-hash. Its cross-record policy is framework code because these libraries do not know which production checks must bind one rfgen release together.

Closed values and identifiers

Support and evidence enums

SupportStatus is SUPPORTED, EXPERIMENTAL, or UNSUPPORTED. EvidenceStatus is PASS, FAIL, UNAVAILABLE, or SKIPPED. EvidenceKind is UNIT, INTEGRATION, GOLDEN, PLUGIN, SCHEMA, TRANSACTION, CONTROLLER, MANAGED_PROVIDER, HIL, SUPPLY_CHAIN, RESTORE, or SCIENTIFIC.

StaticRequiredRowId contains exactly the core Python/platform, extras, Sionna/CUDA, wheel, schema-upgrade, transaction/annotation/controller-chaos, and restore checks. SupportRowId additionally accepts only these dynamic forms:

managed-provider:{provider}:{selector}:{region}
hil:{device_class}:{model}:{serial}

Each dynamic segment must match ^[a-z0-9][a-z0-9._-]{0,62}$; : is only a separator. validate_dynamic_row_id(value: str) -> str exposes the same validation for boundary adapters.

Support records

SupportRowV1 and EvidenceRefV1

class SupportRowV1(BaseModel):
    row_id: SupportRowId
    component: str
    version_spec: packaging.specifiers.SpecifierSet
    python: packaging.specifiers.SpecifierSet
    os: str
    arch: str
    accelerator: str | None = None
    provider: str | None = None
    status: SupportStatus
    required: bool
    evidence_ids: tuple[str, ...]
    support_until: date
    eol_at: date | None = None

class EvidenceRefV1(BaseModel):
    id: str
    kind: EvidenceKind
    uri: str
    sha256: Sha256
    status: EvidenceStatus
    started_at: datetime
    finished_at: datetime
    environment_sha256: Sha256

Row evidence IDs are unique and stored in sorted order. Row ordering is (str(row_id), component, python, os, arch, accelerator or "", provider or ""). eol_at cannot precede support_until. Evidence IDs are unique in an inventory and evidence sorts by ID; timestamps are UTC and started_at cannot follow finished_at.

MigrationRangeV1 and ReleaseSupportInventoryV1

class MigrationRangeV1(BaseModel):
    minimum: packaging.version.Version
    maximum: packaging.version.Version

class ReleaseSupportInventoryV1(BaseModel):
    schema_version: Literal[1]
    release_version: semantic_version.Version
    distribution_version: packaging.version.Version
    source_revision: GitSha
    advertised_inventory_sha256: Sha256
    rows: tuple[SupportRowV1, ...]
    evidence: tuple[EvidenceRefV1, ...]
    run_manifest_schema_versions: tuple[int, ...]
    migration_range: MigrationRangeV1
    plugin_specifier: packaging.specifiers.SpecifierSet
    limitations: tuple[str, ...]
    trust_policy_sha256: Sha256
    created_at: datetime
    inventory_sha256: Sha256

The migration interval is inclusive and requires minimum <= maximum. ReleaseSupportInventoryV1.create(**fields) canonicalizes and self-hashes the published record. Schema versions are positive, unique, and sorted; limitations must be nonblank; all evidence must finish at or before created_at; and every row’s support period must still cover the inventory creation date.

Publication boundary

build_release_support_inventory

def build_release_support_inventory(
    *,
    advertised: AdvertisedInventoryV1,
    claim_index: ClaimSourceIndexV1,
    scientific_coverage: ScientificCoverageReportV1,
    validator: ExecutionEvidenceValidatorV1,
    module_statuses: tuple[ModuleStatusV1, ...],
    execution_manifests: tuple[WorkstreamExecutionManifestV1, ...],
    chapter_gates: tuple[ChapterGateReportV1, ...],
    scientific_results: tuple[ScientificValidationResultV1, ...],
    selector_inventories: Mapping[str, SelectorInventoryV1],
    release_version: semantic_version.Version,
    distribution_version: packaging.version.Version,
    source_revision: str,
    rows: tuple[SupportRowV1, ...], evidence: tuple[EvidenceRefV1, ...],
    run_manifest_schema_versions: tuple[int, ...], migration_range: MigrationRangeV1,
    plugin_specifier: packaging.specifiers.SpecifierSet, limitations: tuple[str, ...],
    trust_policy_sha256: str, created_at: datetime,
) -> ReleaseSupportInventoryV1: ...

The function first uses only the Layer 11 validate_bundle and validate_chapter_gate boundary to revalidate execution evidence. It then requires passing Chapter 1-6 gates, a Chapter 7 manifest sealing Waves 1-3, matching plan/guide/revision bindings, one engineering-validated module status per claim source, and a matching passing scientific result for each scientific module. scientific_coverage must be PASS and bind the exact claim_index.index_sha256.

Required support IDs are all StaticRequiredRowId values, one managed row for each advertised (provider, selector, region), and one HIL row for each advertised device. The rows must cover that set exactly. Required rows must be SUPPORTED with only PASS evidence. Advertised rows must be required, SUPPORTED, and reference PASS SCIENTIFIC evidence. An optional row that references UNAVAILABLE or SKIPPED evidence must be UNSUPPORTED.

The return value is a canonical, self-hashed ReleaseSupportInventoryV1; no partial inventory is returned on failure.

Errors

SupportInventoryError has a machine-readable code and human-readable message. SupportInventoryErrorCode is exactly DUPLICATE, MISSING_REQUIRED, EVIDENCE, CONTRADICTION, EXPIRED, ADVERTISEMENT, or SCIENTIFIC. Callers can use the code for remediation or release reporting without parsing prose. It covers duplicate or omitted rows/evidence, failed or stale execution evidence, contradictory support state, expired support, advertisement disagreement, and missing or non-passing scientific bindings.

See Also