VerifierService
- Package:
vir.v1 - Fully-qualified name:
vir.v1.VerifierService - Source file:
verifier_service.proto - RPC count: 12
VerifierService is the gRPC API of the Pillar-6 L5 Verifier-of-Record. Internal-only; external consumers reach it via the AP00001 Edge Gateway (gRPC translation + JWT + rate-limit + bounded-recursion CBOR parse), mirroring the OME service posture.
RPCs
| RPC | Kind | Request | Response |
|-----|------|---------|----------|
| EmitEATReceipt | unary | EmitEATReceiptRequest | EmitEATReceiptResponse |
| EmitReceipt | unary | EmitReceiptRequest | EmitReceiptResponse |
| GetMlBom | unary | GetMlBomRequest | GetMlBomResponse |
| GetOirTrustAnchors | unary | GetOirTrustAnchorsRequest | GetOirTrustAnchorsResponse |
| GetReceipt | unary | GetReceiptRequest | GetReceiptResponse |
| GetReceiptKinds | unary | GetReceiptKindsRequest | GetReceiptKindsResponse |
| ListReceipts | unary | ListReceiptsRequest | ListReceiptsResponse |
| ProjectCapability | unary | ProjectCapabilityRequest | ProjectCapabilityResponse |
| VerifyEnvelope | unary | VerifyEnvelopeRequest | VerifyEnvelopeResponse |
| VerifyOir | unary | VerifyOirRequest | VerifyOirResponse |
| VerifyReceipt | unary | VerifyReceiptRequest | VerifyReceiptResponse |
| VerifyTerminationReceipt | unary | VerifyTerminationReceiptRequest | VerifyTerminationReceiptResponse |
EmitEATReceipt
rpc EmitEATReceipt(EmitEATReceiptRequest) returns (EmitEATReceiptResponse)
- Kind: unary
- Request type:
EmitEATReceiptRequest - Response type:
EmitEATReceiptResponse
Mint a NEW EAT receipt of one of the AP00022 oversight receipt-kinds ("osyra-oversight-redecision-v1" / "osyra-oversight-coverage-v1") under the frozen "osyra-eat-v1" envelope (ADR-245 D5; NOT a new dsTag, NOT a new RPC family). The NET-NEW sign seam of the three-party split: AP00022 ORCHESTRATES (holds no signing key), AP00016 SIGNS. The caller hands a PRE-CANONICALIZED, kind-specific receipt_body + the asserted ws + a fresh eat_nonce + an INDEPENDENT per-tenant capability token (tenant_cap). The verifier re-encode-and-compares the body (malleability defense → OVERSIGHT_BODY_NONCANONICAL), fail-closed-verifies tenant_cap covers ws (T-13b) BEFORE selecting the SERVER-DERIVED per-tenant kid (AP00022 never names the kid → confused-deputy closed), then signs. A reject signs nothing (it is carried in the response reason, NOT a gRPC error).
EmitReceipt
rpc EmitReceipt(EmitReceiptRequest) returns (EmitReceiptResponse)
- Kind: unary
- Request type:
EmitReceiptRequest - Response type:
EmitReceiptResponse
Ingest a source-protocol intent, project it to canonical OAEC, sign, and return a VIR (COSE_Sign1 over Form B, dsTag "osyra-vir-v1").
GetMlBom
rpc GetMlBom(GetMlBomRequest) returns (GetMlBomResponse)
- Kind: unary
- Request type:
GetMlBomRequest - Response type:
GetMlBomResponse
Project a VERIFIED oadr.v1 (OSYRA Attested-Data-origin Admission) receipt into the regulator-shaped CycloneDX-1.7 ML-BOM a GPAI provider files for EU AI Act Art-53(1)(d) PROVIDER-ASSISTANCE (NOT "EU-AI-Act-required"; ENG-2583 / ADR-269). The verifier FIRST re-decides the supplied EAT envelope (signature + envelope claims + the kind's ReDecider over the disclosure carrier) and accepts ONLY an oadr.v1 receipt that VERIFIES; it then runs the PURE DETERMINISTIC projection mlbom.Project(verified-body, pinned-attestor-registry-snapshot) and returns the BOM. Fail-closed: an absent/unverifiable receipt, a non-oadr.v1 kind, or an unconfigured attestor-registry snapshot returns an empty ml_bom + a coded reason — NEVER a hollow regulator artifact (NO STUBS). HONEST SCOPE (ADR-269 D3): provenance is NOT truth — the BOM attests third-party-attested, offline-re-derivable data-ORIGIN admissibility, never that the training data is true/clean/unbiased/lawful, nor that the served artifact was trained only on these parents (the TRAINING SEAM). Wire-neutral; the OADR receipt CID is CITED (BOM→OADR). Additive + buf-breaking-safe (WIRE_JSON). LINEAR: ENG-2583 (ADR-269 D1; SoT propagation).
GetOirTrustAnchors
rpc GetOirTrustAnchors(GetOirTrustAnchorsRequest) returns (GetOirTrustAnchorsResponse)
- Kind: unary
- Request type:
GetOirTrustAnchorsRequest - Response type:
GetOirTrustAnchorsResponse
Publish the config-pinned OIR trust anchors — the gateway COSE_Sign1 Ed25519 public key + the per-model countersignature keys (Ed25519) + the relying-party rollback/currency floors — so the edge can proxy them and the frontend can verify an OIR receipt OFFLINE under the SAME anchors the KindOIR re-decider trusts (NEVER from the receipt body, NOT from IAM's P-256 platform anchors — type-incompatible). PUBLIC keys only; safe to expose. ENG-2546 L3 / ADR-284. Additive + buf-breaking-safe (WIRE_JSON).
GetReceipt
rpc GetReceipt(GetReceiptRequest) returns (GetReceiptResponse)
- Kind: unary
- Request type:
GetReceiptRequest - Response type:
GetReceiptResponse
Fetch a persisted VIR by id (workspace-scoped; multi-tenant isolation §4.6).
GetReceiptKinds
rpc GetReceiptKinds(GetReceiptKindsRequest) returns (GetReceiptKindsResponse)
- Kind: unary
- Request type:
GetReceiptKindsRequest - Response type:
GetReceiptKindsResponse
Report the EAT receipt-kind discriminators this verifier has a registered ReDecider for (capability introspection for clients + the registration-fleet audit). Wire-neutral. Additive + buf-breaking-safe (WIRE_JSON).
ListReceipts
rpc ListReceipts(ListReceiptsRequest) returns (ListReceiptsResponse)
- Kind: unary
- Request type:
ListReceiptsRequest - Response type:
ListReceiptsResponse
List persisted VIR summaries for a workspace, newest-first, with an optional
emitted-at window + source-kind filter and opaque-cursor pagination. Summaries are
lightweight decoded projections (NO encoded_cbor — the list stays cheap); the full
signed receipt is fetched via GetReceipt. Workspace-scoped: a caller only ever sees
its own ws (design §4.6) — never a cross-tenant enumeration oracle.
LINEAR: ENG-1717 (FOLD-1 customer receipt viewer). Extends design §4.4 (4→5 RPCs) to
back the console list/filter surface; additive + buf-breaking-safe (WIRE_JSON). Flagged
to /osyra-arch in review as a new query surface over the existing linkage store.
ProjectCapability
rpc ProjectCapability(ProjectCapabilityRequest) returns (ProjectCapabilityResponse)
- Kind: unary
- Request type:
ProjectCapabilityRequest - Response type:
ProjectCapabilityResponse
Project an OAEC capability into a target protocol P, enforcing ≺_P monotonicity (ADR-054 Layer 1) and emitting the Layer-2/Layer-3 signed sidecars.
VerifyEnvelope
rpc VerifyEnvelope(VerifyEnvelopeRequest) returns (VerifyEnvelopeResponse)
- Kind: unary
- Request type:
VerifyEnvelopeRequest - Response type:
VerifyEnvelopeResponse
Verify an EAT unified receipt envelope (COSE_Sign1 over canonical CBOR, dsTag
"osyra-eat-v1", RFC 9711 EAT) as the L5 verifier-of-record, and DISPATCH the opaque
receipt_body to the kind's registered ReDecider (ENG-2210 / ADR-146). This is the unified
ingest that generalizes VerifyReceipt: the receipt_kind discriminator + body live INSIDE
the signed encoded_cbor (so the RPC surface stays kind-agnostic). The signed workspace
claim (OI-1) is tenant-bound to ws; the eat_nonce is burned single-use. An unknown kind
fails closed. Failures carry an OSY-EAT-5700..5799 (or shared OSY-VIR COSE-layer) code.
vir.v1 RPCs coexist; they deprecate post-GA. Additive + buf-breaking-safe (WIRE_JSON).
VerifyOir
rpc VerifyOir(VerifyOirRequest) returns (VerifyOirResponse)
- Kind: unary
- Request type:
VerifyOirRequest - Response type:
VerifyOirResponse
Re-decide a STANDALONE OIR (Osyra Inference Receipt) COSE_Sign1 — the on-wire VIR-sibling inference-output receipt (dsTag "osyra-oir-v1", ADR-142) — and return the server's authoritative OirReDecision (ENG-2566 / ADR-284 V1.5). DISTINCT from VerifyEnvelope: VerifyEnvelope accepts only an "osyra-eat-v1" EAT envelope (the OIR rides INSIDE the signed EAT body); this RPC accepts the bare OIR COSE_Sign1 directly, so a relying party holding only a standalone receipt can obtain the SAME verdict the KindOIR re-decider produces. The verifier re-runs oir.ReDecide over the CONFIG-PINNED OIR trust anchors (the gateway COSE_Sign1 Ed25519 key + the per-model RFC-9338 countersignature keys + the relying-party rollback/currency floors published by GetOirTrustAnchors) — NEVER from the receipt body and with ZERO server-only or caller-supplied trust input. It re-verifies the gateway signature + the REQUIRED model countersignature + the protected/unprotected byte-allowlists + the dsTag + canonical CBOR + the collapsed-domain guard, then the production policy legs (alg_suite, src, ts freshness, epoch currency floor, min_ver_floor). FAIL-CLOSED by construction: an unconfigured/empty or drifted anchor re-decides REJECT (NO STUBS — never a fabricated accept under a null key). A reject is NOT a gRPC error — the verdict rides OirReDecision.accepted=false + a coded OIR_* reason. On accept the re-decided receipt is durably persisted into the workspace receipt store (ListReceipts companion). HONEST SCOPE (ADR-142 / ADR-177 D5): re-decision binds WHICH inference ran under WHICH gateway-signed folded policy/cap digests — NOT the correctness, safety, or truthfulness of the model output. Additive + buf-breaking-safe (WIRE_JSON). LINEAR: ENG-2566 (ADR-284 V1.5).
VerifyReceipt
rpc VerifyReceipt(VerifyReceiptRequest) returns (VerifyReceiptResponse)
- Kind: unary
- Request type:
VerifyReceiptRequest - Response type:
VerifyReceiptResponse
Verify a VIR's signature, freshness, and Merkle binding without re-emitting.
VerifyTerminationReceipt
rpc VerifyTerminationReceipt(VerifyTerminationReceiptRequest) returns (VerifyTerminationReceiptResponse)
- Kind: unary
- Request type:
VerifyTerminationReceiptRequest - Response type:
VerifyTerminationReceiptResponse
Verify an AP00007 Agent Termination Receipt (COSE_Sign1 over Form B, dsTag
"osyra-term-receipt-v1") as the L5 verifier-of-record / dispute authority (ADR-137 D2;
AP00007 §5.2). Reuses the SAME Form B + COSE_Sign1 substrate — only the index-0 dsTag, the
receipt-specific payload schema (term-receipt-v1.cddl), and the verifier-of-record checks
differ. The outer (issuer) signature and each inner watchdog co-witness ("osyra-watchdog-v1",
out-of-band keys) are verified; the (stop_reason_class, risk_tier) -> placement/tier minima
(ADR-137 D5, served by AP00019) and the sec#1 witness<->receipt session_binding re-derivation
(T8 transplant defense) are enforced. Failures carry an OSY-TERM-4100..4199 code (ADR-137 D4)
in reason. Additive + buf-breaking-safe (WIRE_JSON). LINEAR: ENG-2037 (under EPIC ENG-2034).