# Platform Registry Runtime Verification v1

Status: active verification evidence
Owner: Platform Architecture
Last updated: 2026-06-02

## Purpose

Record whether the platform registry families are runtime load-bearing in the
current Platform Shared Services Model implementation.

This is not a new architecture direction. It is the evidence artifact for the
L1 completion check: when a registry is not yet enforced at runtime, the result
must become explicit follow-up work instead of an implicit assumption.

## Summary

| Registry family | Runtime status | Evidence | Follow-up |
|---|---|---|---|
| Scope | Load-bearing | `packages/platform/iam/service.go` calls `GetScope` and denies inactive or missing scopes in `EvaluateScopePermission`. | None for L1. |
| Usage unit | Load-bearing | API billing service and billing-worker rating/ledger write paths validate `usage_unit` through `UsageUnitRegistry`; `cmd/api/main.go` and `cmd/billing-worker/main.go` wire billing with `platformregistry.NewService(...)`. | None for L2 runtime adoption. |
| Audit action | Load-bearing | `packages/platform/audit.Service` can validate action ID lifecycle and target type through `AuditActionRegistry`; `cmd/api/routes_platform_evidence.go` uses the registry-aware audit helper for registered platform evidence bundle/item writes. Dynamic legacy audit action families remain outside this L2 proof until their registry coverage is complete. | None for L2 runtime adoption. |
| Notification template | Load-bearing | `packages/platform/notification.LegacyAdapter` validates event template ID, active lifecycle, websocket channel, and severity before delivery; `cmd/notification-relay/main.go` wires the relay through the seed-backed platform registry. | None for L2 runtime adoption. |
| Evidence type | Load-bearing | `packages/platform/evidence.Service.RecordItem` validates evidence type lifecycle, retention class, and allowed result values when constructed with an `EvidenceTypeRegistry`; `cmd/api/routes_platform_evidence.go` wires the API evidence item write path through the seed-backed platform registry. | None for L2 runtime adoption. |
| Artifact type | Load-bearing | `packages/platform/artifacts.ValidateRegistryPromotion` validates active artifact type, owner, runtime eligibility, source type, and required trust state through the registry; app artifact promotion requires the active `app_bundle` registry entry before inventory promotion runs. Broader release/security artifact families remain L3 expansion candidates. | None for L2 runtime adoption. |
| Policy/entitlement | Load-bearing for quota writes | `packages/platform/policy.ValidateQuotaDecisionRegistry` validates active `quota` snapshot kind and `compute_allocation_slots` quota dimension through the registry; allocation-concurrency policy writes fail closed before `platform_policy_values` mutation and record snapshot/dimension versions in audit metadata. Broader entitlement snapshot use remains second-consumer/L3 work. | None for L2 runtime adoption. |
| Product | Load-bearing | Live `/api/v1/apps/registry` exposure is routed through `packages/products/appplatform/catalog.Service`, which requires the `app-platform` product registry entry to exist and be active before returning registry metadata. General second-product onboarding still requires packet proof before L3 retirement. | None for L2 runtime adoption. |

## L1 Interpretation

L1 requires that the registry runtime state is known and tracked. It does not
require every registry family to be fully load-bearing before the structural
contract can be declared complete.

The L1 completion rule is:

- runtime-loaded registries must identify the exact consuming path;
- partial registries must identify the bypass path;
- missing runtime enforcement must have a Fairway follow-up task;
- no registry family may remain documented-only without an owner and next task.

## L2 Adoption Target

L2 requires these registry families to become runtime load-bearing through a
second consumer or through the production path that depends on them. The adoption
tasks are tracked under `PSSM-L2-OPERATIONAL-PROOF`.
