# description
A portable, fail-closed rights-clearance artifact for one creative work. The schema validates BOTH an accepted (cleared) and a rejected (deny) manifest: a deny is a valid answer, not an error, so descriptive sub-fields under work/source are optional and the deny path carries only what is recoverable from the rejection. Structural validity is independent of determination-rule recognition: an unrecognised basis.rule is structurally valid and yields a non-fatal 'unrecognised_rule' advisory at verification time, never a schema rejection. The @context URI is the sole normative authority for term expansion; specVersion is human-readable convenience only.

# properties.@context.description
JSON-LD context. MUST include the openclearance v0.1 context IRI: the sole normative authority for expansion and validation.

# properties.specVersion.description
Human-readable version convenience. Not normative: the @context IRI fixes the actual vocabulary.

# properties.work.description
The work being cleared. Only `id` is guaranteed; descriptive fields are present on the accept path and absent on the deny path (a rejected record is not fully identified).

# properties.work.properties.artist.properties.lifespan.description
Display-form life dates (e.g. '1853-1890'); not a structured date.

# properties.work.properties.yearStart.description
Machine-normalized start year; negative = BCE.

# properties.work.properties.yearEnd.description
Machine-normalized end year; negative = BCE.

# properties.source.description
Provenance source. `museum` is guaranteed (its `code` is the federation identifier); URLs and images are present on the accept path.

# properties.rights.description
The rights determination carried (not adjudicated) by this manifest.

# properties.rights.properties.statement.description
Rights-statement URI (CC / rightsstatements.org). null on a deny: no positive open-rights statement applies.

# properties.rights.properties.sourceApiValue.description
Forensic link binding the raw museum API value to its field name. null on a deny.

# properties.clearance.description
The instant, machine-actionable answer. Each facet pairs a boolean with a structured basis.

# properties.verification.description
How the rights determination was reached, as an auditable event. Actor vs tool are distinct; on a deny the actor is the engine rights-gate, not the museum.

# properties.citation.description
Rendered attribution strings. Omitted for an unidentified rejected record.

# properties.extensions.description
Forward-compatible vendor escape hatch. Producers MAY carry namespaced extension data here; consumers MUST ignore terms they do not recognise.

# $defs.basis.description
The structured reasoning behind one clearance boolean. Shape is normative; rule ids are an open set (see the rule registry).

# $defs.basis.properties.rule.description
Bare kebab-case determination-rule id resolving to https://openclearance.org/v0.1/rules#<rule>. NOT a closed enum: an unrecognised id is valid and yields an 'unrecognised_rule' advisory.