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 |
|---|---|---|
|
|
Closed support and evidence outcome vocabularies. |
|
identifiers |
Required fixed rows and the validated static-or-dynamic row identifier union. |
|
models |
Canonical production capability advertisement. |
|
models |
The published support matrix, its evidence references, and compatibility interval. |
|
function |
Intersects installed entry points with packaged production configuration. |
|
function |
Validates the release evidence chain and publishes the final inventory. |
|
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.
Advertisement models and collection¶
AdvertisedManagedProviderV1 and AdvertisedHILDeviceV1¶
class AdvertisedManagedProviderV1(BaseModel):
provider: str
selector: str
regions: tuple[str, ...]
entry_point_value: str
distribution: str
version: packaging.version.Version
class AdvertisedHILDeviceV1(BaseModel):
device_class: str
model: str
serial: str
driver_selector: str
distribution: str
version: packaging.version.Version
Provider, selector, region, device class, model, and serial are nonblank
lowercase slug atoms. Regions are nonempty, unique, and sorted. Provider rows
sort by (provider, selector) and HIL rows by (device_class, model, serial);
the canonical_order_key property returns those respective keys. The entry
point value or driver selector is retained as installed metadata and is not an
additional dynamic row-ID segment.
AdvertisedInventoryV1¶
class AdvertisedInventoryV1(BaseModel):
schema_version: Literal[1]
source_revision: GitSha
managed: tuple[AdvertisedManagedProviderV1, ...]
hil: tuple[AdvertisedHILDeviceV1, ...]
entry_points_sha256: Sha256
packaged_configs_sha256: Sha256
inventory_sha256: Sha256
Managed and HIL entries are sorted and have unique ordering keys. Use
AdvertisedInventoryV1.create(**fields) to calculate inventory_sha256; direct
parsing instead verifies the supplied hash. source_revision is exactly 40
lowercase hexadecimal characters and each SHA-256 is exactly 64.
collect_advertised_inventory¶
def collect_advertised_inventory(
installed_distributions: Iterable[Distribution],
packaged_configs: Mapping[str, object],
source_revision: str,
) -> AdvertisedInventoryV1: ...
packaged_configs must have exactly managed and hil list keys. A managed
row supplies provider, selector, and a nonempty regions list; a HIL row
supplies device_class, model, and serial. The function accepts only
installed entry points in rfgen.managed_providers and rfgen.hil_devices,
requires exact configuration-to-entry-point agreement in both directions, and
rejects duplicate entry points or noncanonical configured identity atoms.
It returns a self-hashed AdvertisedInventoryV1. It raises
AdvertisedInventoryError for malformed distribution metadata or configuration,
duplicates, disagreement, and rejected advertisement schema input.
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¶
Execution Evidence, the required evidence-validation boundary.
Maturity Matrix, release qualification status and scope.
Build and CI, the retained release inputs and local gate sequence.