Compatibility matrixstable
§8 Repository changes on this branch
Shipped alongside the standards artifacts. None changes a Record's shape. The rows that sit inside standards/ver/1.1-draft/ are draft-normative — what they require becomes normative only if 1.1 ratifies; nothing else in this table is normative.
| Change | Class | Record-level impact |
|---|---|---|
30–31 Aug audit response: validator arms (FAMILIES_1_1, entry-level VER1001/1005/1010, VER1009 retention, VER1208 binding, VER1011), three fixtures, §5.4/§5.5/§14 draft additions, ADR-0009, ledger REV-30–35 | additive 1.1 (draft) + implementation-only | None for 1.0.x records — every new behavior is --schema 1.1-draft-gated and test-pinned byte-identical otherwise |
standards/ver/1.0.0/ frozen copy + RELEASE.md + annotated tag ver/1.0.0 | editorial | None. Copies, never moves; spec/ stays at its published path. The tag is created on the publishing commit by the checklist in `VERSIONING.md` §3.3, which also states how to verify it |
packages/ver-validator/ — the vera-profile/1.0 conformance validator | editorial (tooling) | None. Reports on Records; it does not define them |
conformance/ — valid and invalid fixtures plus a manifest | editorial (tooling) | None. Partially answers TEST-NO-FROZEN-FIXTURES; the decoder image corpus ships separately, as standards/decoder-corpus/1/ |
standards/registry/ — the governed VER Registry; snapshot 1 (ea0fab73…4b9c09a5) seeding sixteen actions, two perceptual algorithms, eight source classes, six segment families | editorial | None. It records value spaces the schema already defines and opens nothing: provenance.chain[].action is opened by the 1.1 draft schema, not by this directory, and the other three enums stay closed (§6 row 2.4). A 1.1 Record may cite the snapshot in provenance.registry; snapshot 1 registers exactly the sixteen actions §2.3 defines, so no Record needs it to resolve a token |
standards/decoder-corpus/1/ — implementation profile verd-pillow/1 and a 21-Asset reference corpus | editorial (deliverable) | None on Record shape, and no Record carries a field naming its decoder profile. What changes is the reading of annex E12: see the E12 row in §4 |
standards/reference-sets/ — ten reference images and three measured per-space manifests | editorial (tooling) | None. Publishes the artifact §8.2's set_manifest_sha256 digests; defines no Record shape and declares no tolerance. A Record may cite a set digest today; nothing requires one until 1.1 ratifies |
standards/ver/1.1-draft/wire-profile/ — revised VER-F lexicon, retraction lexicon, per-field openness statement | additive 1.1 (wire profile) | None on the Record plane. The wire-plane impact is real and version-gated: a VER-F record declaring verVersion: "1.1" is read against this revision, and a 1.0 record is read against the frozen revision-1 document, selected by verVersion. Named slots phashDct64/pdq are replaced by perceptual[]; verVersion, cpnpVersion and privacy lose their lexicon defaults; image.format, embedding.dtype and privacy become closed value spaces |
standards/ver/1.1-draft/ver-recipe.schema.json, HIGH-TRUST-PROFILE.md | additive 1.1 (companion artifacts) | None. §6 rows 3.4 and 3.5 classify what each carries |
packages/ver-validator/ — the vera-profile/1.1-draft profile: 26 new codes, and the --registry, --lineage-peer and --profile inputs | additive 1.1 (profile rules) | Stated once, for all twenty-six. VER105, VER106, VER406–VER411, VER608, VER609, VER902–VER904, VER1006–VER1009, VER1205–VER1207 and VER1601–VER1606 fire only when schema_version is 1.1-draft, so the record-level impact of every one of them is none for 1.0.x records. No existing code was renumbered, re-titled or re-graded (ADR-0003), and 1.0.0/1.0.1 validation output is unchanged. Two consequences a consumer can observe: VER104 is suppressed on a 1.1-draft run — §7 makes the same three quantities normative there and a severity that changes with the selected schema is not expressible in one code, so VER105 (error) and VER106 (warning) carry them — and is untouched for 1.0.x; and the report's profile member takes a second value, vera-profile/1.1-draft, so a consumer pinning the literal vera-profile/1.0 should read schema_version instead |
conformance/ — 30 fixtures for the 1.1 draft, lineage-peers/, and a corpus-local registry snapshot | editorial (tooling) | None. No existing fixture changed — not a byte, not an expected code — so 1.0.x results are unchanged. Corpus consumers must implement three new optional manifest.json entry keys (registry, lineage_peers, profile); they are not decoration, because a runner that ignores lineage_peers runs the cycle fixture with no graph to search and disagrees with the manifest. manifest_version moves to 1.1 to mark that, and the corpus id becomes ver-conformance/1.1-draft, which names the newest release covered rather than the only one. A consumer reading only 1.0-era keys should skip entries carrying "schema": "1.1-draft". conformance/registries/test-registry-snapshot.json carries zero trust, exactly as conformance/keys/corpus-signing-key.pub.pem does: it is not standards/registry/snapshots/1/registry.json, must never be substituted for it, and nothing may cite it as evidence that any token is registered |
docs/standards/VER-size-corpus.md, scripts/measure_record_sizes.py | editorial (tooling) | None. Measures §6 row 7's five quantities over this project's own corpus. Measurement evidence, not deployment evidence |
GOVERNANCE.md — the standards-track governance process, and the mechanics of a review period | editorial (process) | None. Satisfies `VERSIONING.md` §3.4 condition 6; condition 5's review period has not opened, and writing this document does not open one |
hashing.py: pdq_hash returns a bare 64-hex digest (HASH-01) | patch-compatible correction (implementation) | Fixes a producer that emitted pdq/1.0:<hex> into perceptual[].value. Records already emitted were never schema-valid under 1.0.1 |
models.py: wire-model field constraints (MOD-01) | patch-compatible correction (implementation) | None on Record shape. Rejects a path-traversal payload at the wire boundary. Deployment impact — fails closed: RecordIdentity.phashDct64 is now pattern-constrained (^[a-f0-9]{16}$), so atp.lite_from_full raises ValidationError for a full Record carrying no phash-dct/64 digest where it previously published an empty string onto the firehose. A producer that publishes without a pHash stops publishing rather than emitting a malformed wire record. Full disclosure in the ledger's Appendix A, "Intentional behavior change" |
models.py: Hashes docstring corrected (MOD-02) | editorial (implementation) | None. The docstring claimed pixel does not change when metadata changes; it now states the E1 survival profile — descriptive metadata only |
jetstream.py: hex guard before path construction (WIRE-06) | patch-compatible correction (implementation) | None. Closes a remotely triggerable arbitrary file write |
recordio_segments.py: honest conformance_level, record_id preimage (REC-01, REC-09) | patch-compatible correction (implementation) | record_id values change for newly produced Records — the old preimage collided across distinct Records (annex E16). Existing Records keep their identifiers |
Root pyproject.toml, tests/conftest.py, ruff/pytest fixes | editorial (tooling) | None |
docker-compose.yml: pinned qdrant/qdrant:v1.19.0 + healthcheck | editorial (tooling) | None |
README.md, CLAUDE.md, CHANGELOG.md, VERSIONING.md, this file, docs/ | editorial | None |
