Original Art Archive Validator
This repository contains the reference validator for the Original Art Archive (OAA) Format.
The validator checks whether an OAA archive is valid according to OAA 0.1 Draft archive/content requirements: package structure, required manifest fields, manifest shape, archive path safety, manifest-local-path rejection, reference integrity, extension block shape, external link shape, and resource limits.
The validator uses schema/oaa-manifest.schema.json through jsonschema for manifest-local JSON Schema validation, then applies custom checks for package structure, archive paths, cross-manifest references, embedded file resolution, resource limits, and other rules that cannot be validated from one manifest document alone.
It does not certify reader or writer implementation behavior. A writer can run its emitted archive through this validator to check whether the archive is valid, and a reader can use the validator as a preflight check before reading an archive. The validator does not extract archive contents to disk and does not open or render embedded media files.
The normative format specification is maintained in Original-Art-Archive/oaa-spec.
Installation
Install from PyPI:
python -m pip install oaa-validator
Install development dependencies from a source checkout:
python -m pip install -r requirements\dev-requirements.txt
python -m pip install -e .
Usage
Validate an .oaa archive:
oaa-validator validate path\to\archive.oaa
Validate an unpacked OAA directory layout before packaging:
oaa-validator validate-dir examples\minimal
Emit machine-readable output:
oaa-validator validate-dir examples\minimal --json --show-info
Exit codes:
| Code | Meaning |
|---|---|
0 |
No fatal or error findings. |
1 |
Fatal or error findings were reported, or warnings were promoted with --warnings-as-errors. |
2 |
CLI usage error. |
Closed Base Value Checks
The validator rejects unknown values in OAA closed base value sets:
- Reject
files[].file_kindvalues other thanraw,derivative, andsupporting. - Reject
files[].image_rolevalues other thanraw_scan,raw_photo,corrected_scan,detail,verso, andreferencewhen the field is present and not null. - Reject base
public_metadata.publication_statusvalues other thanpublished_artandunpublished_artwhen the field is present and not null.
Display-oriented strings such as public_metadata.media, public_metadata.artwork_type, artist_credits[].role, public_metadata.for_sale_status, and files[].format are not treated as controlled OAA values.
Traceability
Validator findings include both rule_id and requirement_ids.
Requirement IDs are not embedded in the public specification. They live in requirements/oaa-0.1.yaml, and requirements/traceability.md is generated from the catalog, rule metadata, and fixture metadata.
Only archive-validity requirements may have automated validator rules. Reader, writer, round-trip, public-display, and implementation-behavior statements are excluded from automated validator scope unless they define a concrete archive/content condition.
Refresh the traceability matrix:
python requirements/generate_traceability.py
Check that it is current:
python requirements/generate_traceability.py --check
Publishing
This repository publishes the oaa-validator package to PyPI from .github/workflows/publish.yml.
Publishing uses PyPI Trusted Publishing through the pypi GitHub environment. No PyPI API token is stored in this repository.
Release files for oaa-validator 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oaa_validator-0.1.2.tar.gz | 24.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oaa_validator-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.8 kB
Release files / oaa_validator-0.1.2.tar.gz
| Download URL | oaa_validator-0.1.2.tar.gz |
|---|---|
| Size | 24.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
78b63e130a825a5f3c5e9d3489cb0be36e2858cab40698b6042f368871a097bb
|
|
BLAKE2b-256 checksum How to use checksums |
56634310a32ef9ed9c78ebdb7de6a0211deea4e04e949fa983d77e4d96cecbf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 19, 2026.
Transparency logRelease files / oaa_validator-0.1.2-py3-none-any.whl
| Download URL | oaa_validator-0.1.2-py3-none-any.whl |
|---|---|
| Size | 28.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bac77815e6527dea3b68cefae7cebd37cb2808728d808e3af8d0203be6f14d8d
|
|
BLAKE2b-256 checksum How to use checksums |
f12084cee507a6e3fa67bd7226b6e6796ff71e6fbc538fcbaf087cfcacd56fd0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 19, 2026.
Transparency log