Verification summary schema
The field contract of the verification summary object, read from verification_summary.schema.json. The schema file is the normative artifact; this page is a reading of it. Raw schema file at the release tag.
| Property of the schema | Value |
|---|---|
Schema identity ($id) |
https://schemas.loquitur.dev/v1/verification_summary.schema.json |
| JSON Schema dialect | https://json-schema.org/draft/2020-12/schema |
| Root type | object |
| Additional properties at the root | refused |
| Required at the root | object_type, schema_version, bundle_id, status, reason_codes, reason_code_vocabulary_version |
Fields
Field paths are dotted; [] marks the members of an array item. “Required” is stated against the object that holds the field.
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
object_type |
string | yes | const "verification_summary" |
|
schema_version |
string | yes | enum: v2 |
|
bundle_id |
string | yes | minLength 1 | |
asset_id |
string or null | no | ||
asset_type |
string or null | no | pattern ^[a-z0-9][a-z0-9_]{0,63}$ |
An asset type: an identifier, a value of the registered vocabulary asset_type (verification-vocabularies.md section 5), or null. |
status |
string | yes | enum: pass, warning, review, fail |
|
reason_codes |
array of string | yes | minItems 1; uniqueItems; items: enum: AUTHORIZATION_ISSUER_KEY_EXPIRED, AUTHORIZATION_ISSUER_KEY_NOT_YET_EFFECTIVE, AUTHORIZATION_ISSUER_KEY_REVOKED, AUTHORIZATION_ISSUER_KEY_SUSPENDED, AUTHORIZATION_ISSUER_NOT_RECOGNISED, AUTHORIZATION_SCOPE_MISMATCH, AUTHORIZATION_SIGNATURE_NOT_VERIFIED, AUTHORIZATION_SIGNING_METHOD_UNSUPPORTED, AUTHORIZATION_TRUST_MATERIAL_OUTSIDE_VALIDITY_WINDOW, AUTHORIZATION_TRUST_REGISTRY_AMBIGUOUS_KEY, AUTHORIZATION_VERIFIED, BUNDLE_EXTRA_FILES, COMPLETENESS_OFFLINE_CHECKS_SKIPPED, COMPLETENESS_OFFLINE_MATERIAL_MISSING, COMPLETENESS_OFFLINE_MISSING_CANONICAL_INPUT, COMPLETENESS_OFFLINE_MISSING_MANIFEST, CONFLICTING_EVIDENCE_DETECTED, FRESHNESS_OK, FRESHNESS_P1_TIMESTAMP_OOW, FRESHNESS_WARNING, INTEGRITY_CHECK_FAILED, INTEGRITY_OFFLINE_CANONICALIZATION_FAILED, INTEGRITY_OFFLINE_ENVELOPE_LINKS_MISMATCH, INTEGRITY_OFFLINE_ENVELOPE_SHA_MISMATCH, INTEGRITY_OFFLINE_EXTRA_FILES_STRICT, INTEGRITY_OFFLINE_FAIL, INTEGRITY_OFFLINE_INPUT_HASH_MISMATCH, INTEGRITY_OFFLINE_MANIFEST_FILE_MISMATCH, INTEGRITY_OFFLINE_MANIFEST_SHA_MISMATCH, INTEGRITY_OFFLINE_SCHEMA_INVALID, INTEGRITY_OK, MARK_ASOF_UNPARSEABLE, MARK_FAR_OUTSIDE_RANGE, MARK_NEAR_BOUNDARY, MARK_OFFSET_FROM_MIDPOINT, MARK_OUTSIDE_RANGE, MARK_STALE, MATERIAL_CHANGE_DETECTED, METHOD_BINDING_MISSING, MISSING_MARK_FIELDS, MISSING_REQUIRED_INPUTS, NEEDS_REVIEW, OFFLINE_CANONICAL_INPUT_MISSING, OFFLINE_INPUT_HASH_NOT_VERIFIED, OFFLINE_MANIFEST_MISSING, OFFLINE_MATERIAL_MISSING, OFFLINE_REPLAY_FAILED, OFFLINE_REPLAY_REVIEW, OFFLINE_REPLAY_SKIPPED, OFFLINE_REPLAY_WARN, P1_TIMESTAMP_OUT_OF_WINDOW, POLICY_BUNDLE_EXTRA_FILES, REQUIRED_CLAIMS_PRESENT, REQUIRED_EVIDENCE_PRESENT, UNSUPPORTED_KEY_CLAIM, VOCABULARY_VALUE_INVALID, VOCABULARY_VALUE_UNKNOWN |
|
reason_context |
array or null | no | items: no additional properties | LCP-0008: the facts that make an actionable code actionable. A bare code says a key expired; it does not say which key or when. Every field but code is optional on purpose, because a producer able to name only the code must still be able to report at all. code is typed as a plain string here rather than carrying a second copy of the enum above: the vocabulary is checked against the reason-code catalog by loquitur.schemas.verdict_grounds, and a second hand-maintained copy of a vocabulary is the shape that produced the signing-prefix drift corrected in LCP-0006. |
warnings |
array of string | no | ||
policy_id |
string or null | no | ||
policy_version |
integer or null | no | minimum 1 | |
policy_pack_sha256 |
string or null | no | pattern ^sha256:[a-f0-9]{64}$ |
|
policy_checks |
object or null | no | ||
policy_checks.evaluation_clock_iso |
string | no | pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])$ |
RFC 3339 instant, and the one place in this package where a numeric offset is accepted alongside Z: this is a trace of the clock a policy was evaluated against, reported by the evaluator, not a value any commitment is computed over. The signed surfaces, registry_entry and trust_registry, stay Z-only. A pattern of the form …T.*(Z|…) would accept 2026-13-45Tnot a time at allZ, so each part of the instant is bounded. |
policy_surface |
object or null | no | ||
freshness_posture |
object or null | no | ||
required_claims_status |
object or null | no | ||
supported_vs_declared_summary |
object or null | no | ||
key_checks |
array or object or null | no | ||
key_metrics |
array of object | no | ||
reason_code_vocabulary_version |
string | yes | const "loquitur.reason_codes.v1" |
Example
The schema carries one example instance under its root keyword example, an annotation that decides nothing about any instance. Read it in the raw schema file.
Project site: loquitur.dev
Source: loquitur-protocol/docs/specification/schemas/verification_summary.schema.json at 3ff7899c0c76. Licence of this page's text: MIT OR Apache-2.0.