# review-approval A lawyer's approval of a single block of a review document. The approval is pinned to a PAIR of hashes: the node semantics (the semantic-hash filter applied to the node) and the bytes of the verbalized block. A mismatch in either one moves the approval to stale (LDC-E8202): for semantics, because a different meaning was signed; for text, because different text was signed. ## Versions Accepted `schemaVersion`: `law.review/0.1`. ## Top-level fields | name | type-or-$ref | required | description | |---|---|---|---| | `at` | `string` | yes | Moment of approval. Data about a human action: it comes from outside, not from the verbalizer clock, which is a pure function. The `format` keyword of Draft 2020-12 is only an annotation, so the record shape is held by `pattern`, which matches the Instant type of the normative schemas. | | `kind` | `"review_approval"` | yes | — | | `language` | `string` | yes | Language tag of the text as read and approved. | | `note` | `string` | no | Reviewer's annotation; does not affect the status. | | `programSemanticHash` | [`#/$defs/Digest`](#digest) | no | Semantic hash of the program within which the node was read. Provenance: by itself it does not cause staleness — otherwise editing a neighboring norm would stale-out every approval in the package. | | `reviewer` | `string` | yes | Stable identifier of the reviewer. Who signed is part of the record, not the log. | | `schemaVersion` | `"law.review/0.1"` | yes | — | | `status` | enum (5) | yes | Aligned with the review workflow and coverage levels: only `approved` is a necessary condition for a fragment's transition to VERIFIED. | | `subjectId` | `string` | yes | Stable identifier of the compiled (CLIR) node whose block was approved. | | `subjectSemanticHash` | [`#/$defs/Digest`](#digest) | yes | Semantic hash of the NODE: the node's canonical bytes after the semantic-hash filter (labels, annotations, sourceSpan, and derived hashes excluded). Editing a label does not change it — it changes only the verbalization hash. | | `templatePack` | `string` | yes | Name and version of the template pack in the form `name@version` — text provenance. | | `verbalizationHash` | [`#/$defs/Digest`](#digest) | yes | sha256 of the verbalized block's bytes (not the whole document): approval of one norm must not go stale from editing a neighboring one. | ## Enumerations | location | values | |---|---| | `properties/kind` | `"review_approval"` | | `properties/schemaVersion` | `"law.review/0.1"` | | `properties/status` | `"draft"`, `"reviewed"`, `"verified"`, `"approved"`, `"disputed"` | ## Raw schema [`https://law.arxo.io/schema/review-approval.schema.json`](https://law.arxo.io/schema/review-approval.schema.json) ## `Digest` Type: `string`.