docs← Back to article

Markdown for LLMs

review-approval

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# 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`.