VER 1.1
Unratified. Adds the registry, lineage, model bundle manifests and redaction commitments. Producers must not emit 1.1 records to third parties.
Artifacts
| File | Size | sha-256 |
|---|---|---|
| HIGH-TRUST-PROFILE.md | 13.4 KiB | be2445caa1c4421d081319867bae457feee5abc0331a961e7738e2501bcf3f93 |
| VER-1.1-draft.md | 108.2 KiB | b5c809dc4445bd483e3276a4c649fc31093dd0fa710f935f14d32891ea267b78 |
| example-record-lineage.json | 19.7 KiB | a5cc2da85532d1d5b9be558c8f4ec0af68e4588096ae12d715536270ead42994 |
| ver-recipe.schema.json | 4.4 KiB | 65587a411d2630d212314222d188319ef92e23955c1efb5bce57993838ccb01b |
| ver-record.schema.json | 50.5 KiB | a424b4967cf39943c53a83df3869b674e42efb61aac7d23495b778c8189dd31e |
| wire-profile/README.md | 23.0 KiB | e06cedd5909769d99a4045a47bb4e6ca790c70ebb48422d31083266f33757bbc |
| wire-profile/org.verstandard.record.lexicon.json | 27.1 KiB | 527104ebe1efa1b1bbfc0046119e0a2d7a78108daf0431548207d45644e71f07 |
| wire-profile/org.verstandard.retraction.lexicon.json | 7.1 KiB | ec790f432749efc033597c3fcb7b98fc7df73938c3af56e79eebbbbb239ba05e |
⚠ DRAFT — NOT RATIFIED — DO NOT PUBLISH RECORDS AGAINST THIS
Everything in this directory is a working draft dated 23 August 2026. No artifact here is published, stable, or citable as a standard.
$idhttps://verstandard.org/schemas/ver-record-1.1-draft.jsonis a draft identifier and will be replaced by an immutable…/ver-record-1.1.jsonat ratification; the draft identifier will not be reused.Producers MUST NOT emit
"ver_version": "1.1"to third parties outside an agreed ratification trial. Consumers MUST NOT treat this schema as a conformance authority. Every numeric threshold in the draft is a proposal awaiting evidence.
The verdict, stated plainly
1.1 stays a draft until the blocking deliverables below exist.
The 23 August owner review took five architecture decisions — ADR-0004 through ADR-0008 are now Accepted, three of them with revisions that are in this directory's artifacts, and ADR-0006's closure leaves the VER standards track with no open decisions. That is genuine progress and it is not ratification. Decisions taken are the cheap half. What ratification requires is the other half. Six of the seven rows below now have an artifact behind them where none did on 23 August: two are discharged, four carry a stated remainder, and the seventh has not started.
| Deliverable | Where it stands, and what ratifying today would still cost |
|---|---|
| The VER Registry, governed and snapshot-addressable | Exists — standards/registry/, governed per ADR-0004 C1, snapshot 1 published and addressed by its JCS digest. §2.3 no longer ships an unconstrained string with registry language over it, which is the defect SCH-22 names. The three value spaces §2.4 leaves closed are seeded in the snapshot, not opened by it |
| The decoder implementation profile and reference corpus | Published — standards/decoder-corpus/1/, profile verd-pillow/1, 21 Assets, re-derived on every commit. A cross-producer pixel_hash claim can now leave PROVISIONAL (E12) — but only between implementations evaluated against that profile, and exactly one has been evaluated, the one that generated the corpus |
| Reference-set manifests for every space this project ships | Published — standards/reference-sets/, three spaces, every vector_sha256 measured. set_manifest_sha256 is satisfiable where nothing satisfied it before; no descriptor this project emits cites one, so no tolerance is yet claimed against a set |
| The revised VER-F lexicon | Drafted — standards/ver/1.1-draft/wire-profile/. Every §14 MUST is now a requirement on an artifact that exists. §14.1 item 5 requires the lexicon and the reference implementation to be resolved in the same revision, and only the lexicon half exists |
| 1.1 validator rules and conformance fixtures | Both exist and run in CI — 26 new codes gated to --schema 1.1-draft, one negative fixture each, four positive ones beside them. The 1.1 rules the schema cannot express, which is most of §15.4, are now checked rather than described |
| Two independent implementations, interoperating | Still missing, unchanged. The format has been read by one party and written by one party |
| A measured corpus behind §7's size numbers | Measured — over this project's own corpus. docs/standards/VER-size-corpus.md puts numbers where three round figures and a coherence argument stood. That is measurement evidence, not deployment evidence: the numbers are proposals strengthened by it, not ratified by it |
Publishing a standard whose deliverables do not exist is how 1.0 acquired the 189-finding audit this branch is answering. VERSIONING.md §3.4 now states the publication bar in general terms; this section is that bar applied to 1.1.
Contents
| File | Role | SHA-256 |
|---|---|---|
VER-1.1-draft.md | The draft specification: normative text for every addition, plus the VER-F wire-profile draft | b5c809dc4445bd483e3276a4c649fc31093dd0fa710f935f14d32891ea267b78 |
ver-record.schema.json | Draft JSON Schema 2020-12 | a424b4967cf39943c53a83df3869b674e42efb61aac7d23495b778c8189dd31e |
example-record-lineage.json | Draft example exercising lineage, registry actions, bundle manifests, artifacts, redaction commitments, and compute blocks | a5cc2da85532d1d5b9be558c8f4ec0af68e4588096ae12d715536270ead42994 |
ver-recipe.schema.json | Draft JSON Schema 2020-12 for the §3.4 recipe envelope — the document lineage.recipe_sha256 commits to | 65587a411d2630d212314222d188319ef92e23955c1efb5bce57993838ccb01b |
HIGH-TRUST-PROFILE.md | The named high-trust conformance profile vera-profile-high-trust/1.1-draft: one severity promotion over the base 1.1-draft profile | be2445caa1c4421d081319867bae457feee5abc0331a961e7738e2501bcf3f93 |
wire-profile/org.verstandard.record.lexicon.json | Revised VER-F record lexicon (atproto Lexicon 1, revision: 2, same NSID), implementing draft §14.1–§14.8 | 527104ebe1efa1b1bbfc0046119e0a2d7a78108daf0431548207d45644e71f07 |
wire-profile/org.verstandard.retraction.lexicon.json | The §14.6 tombstone — a new collection naming a retracted record and a reason | ec790f432749efc033597c3fcb7b98fc7df73938c3af56e79eebbbbb239ba05e |
wire-profile/README.md | The §14.8 per-field open/closed statement, and the §14.2/§14.5/§14.6/§14.7 producer and consumer duties | e06cedd5909769d99a4045a47bb4e6ca790c70ebb48422d31083266f33757bbc |
The profile validator in packages/ver-validator/ now carries a 1.1-draft profile beside the 1.0 one (--schema 1.0.0 | 1.0.1 | 1.1-draft, reporting itself as vera-profile/1.1-draft), so the artifacts in this directory can be checked with it — checklist row 12. The verification section below stays a bare schema check, because it must run without installing anything:
is the no-install invocation; pip install -e packages/ver-validator plus ver-validate is the alternative for environments whose virtualenv has pip (this repository's .venv does not).
Compatibility posture
VER 1.1 adds capability. CPNP-1 is unchanged and cpnp_version stays "1.0", so a 1.1 Record's pixel_hash lives in the same universe as a 1.0 Record's, and nothing on this branch moves a pixel_hash.
Moving a Record from 1.0.1 to 1.1 is a real migration. An earlier revision of this draft advertised the 1.1 schema as a superset of the 1.0.1 schema — ver_version and dim/dtype and "nothing else". That property was real, and it was bought by leaving encodable rules out of the schema: the binary-space constraints, the multi-segment index requirement, the tolerance floor, the URI/digest couplings, and seven objects that the prose closes and the schema did not. The owner review deprioritised the superset goal, and the trade is now made the other way: every rule JSON Schema can express is expressed, and the migration is enumerated instead of avoided.
Draft §12.1 is that enumeration — fourteen rows, each with the failure pointer a validator emits when the edit is not made. It is empirical, not asserted: the "Verification" section below carries the command that produces it, and the numbers in §12.1 are that command's output against this repository's own artifacts.
The short version, measured:
- the 1.0.1 golden example fails the 1.1 schema on three pointers —
/ver_version,/spaces/0/reference,/spaces/1/reference; - across the ten 1.0.1
conformance/valid/fixtures, those same two edits (declare 1.1, addset_manifest_sha256) account for every failure in eight of them. Two fixtures reach three further rows between them:binary-dtype.json(abinaryspace declaringmetric: "cosine"and a cosine tolerance) andredacted-with-proof.json(salted_sha256in the ledger and in the normalized view). **Five of §12.1's fourteen rows are reached by that corpus; nine are reached by nothing in it**, which is why 1.1 needed fixtures of its own — row 11 below, now discharged.
Rules that remain outside the schema are listed in draft §15.4 and are there for one of two reasons, each stated per rule: JSON Schema cannot express them at any price (uniqueness, cross-member arithmetic, digest recomputation, graph acyclicity, domain ownership), or they are deliberately profile-graded with the reason given (the size limits, per-kind preprocessing completeness, the redacted-value shape below the top level of the normalized view). The "not encoded to preserve compatibility" bucket is empty.
How the example's digests were produced
Every hash in example-record-lineage.json is a real digest of bytes that were actually constructed, not a placeholder. The construction is deterministic and reproducible:
- Assets. Two 64×48 PNG parents are generated from closed-form pixel functions — parent A:
(R,G,B) = ((4x)%256, (5y)%256, (3(x+y))%256); parent B:((7y)%256, (3x)%256, (xy+17)%256)— and the 128×48 composite places A at x=0 and B at x=64.content_hashis the SHA-256 of the encoded PNG file bytes (Pillow,compress_level=9);image.source_bytes_ref.byte_lengthis that file's real length. pixel_hash. Computed with the 1.0 §4 preimage over the real decoded buffer: `SHA-256(UTF-8("VER1:" + width + ":" + height + ":sRGB8:") + raw_bytes),raw_bytesbeing exactlywidth · height · 3` interleaved RGB octets. The parents'pixel_hashvalues inlineage.parents[]are computed the same way over the parent buffers.phash-dct/64. A genuine 64-bit DCT perceptual hash of the Canonical Buffer, computed withimagehash4.3.2 per errata item E22. Nopdq/1.0digest is carried, because this draft pins no PDQ implementation and a fabricated one would be worse than none.- Vectors.
v[i] = sin(i + 1 + phase), L2-normalized, packed little-endianfloat32(phase = 0for the canonical visual vector,1.5for the contextual one); the binary vector is `bit i = 1 iff sin(i+1+0.25) > 0`, packed 8 bits per octet MSB-first. Byte lengths therefore satisfydim × 4(3072) andceil(dim/8)(32) exactly, and the contextualvector_ref.sha256is the digest of its 3072 real octets. bundle.manifest_sha256. SHA-256 of the RFC 8785 JCS serialization of{"files": [...]}over the bundle's files sorted by path — thever-bundle-manifest/1construction, computed rather than asserted. **The two spaces derive different values**, and that is the point of draft §4.2's rule that a bundle lists the files affecting the forward pass the space declares: thejoint_visual_textspace listsconfig.json,model.safetensorsandtokenizer.json; the image-onlybinaryspace over the same checkpoint lists the first two and MUST NOT list the tokenizer, which cannot affect an image embedding. Its PCA basis, which does affect its output, is pinned inmodel.artifacts[]withrole: "pca_basis", because it is not a file of the checkpoint.weights_sha256. The digest ofmodel.safetensorsalone — a producer's documented choice under annex E29's reading, identical for the two spaces because they load the same weight file. It is deliberately not the bundle digest: draft §4.2 keepsweights_sha256producer-scoped and puts the cross-producer pin inmanifest_sha256, and the example shows the two side by side so the difference is visible rather than described.descriptor_sha256. SHA-256 of the JCS serialization of each space descriptor with its owndescriptor_sha256member removed.set_manifest_sha256. SHA-256 of the JCS serialization of a real reference-set manifest per space: `{"reference_set_version": "1", "space_id": …, "items": [{name, content_sha256, pixel_sha256, vector_sha256} × 3]}`, whose three items are the two parents and the composite with their truecontent_hashandpixel_hashvalues and the digest of a vector generated by the same closed form as above. The manifest documents themselves are illustrative (E26) — they are not published anywhere — but the digests are of bytes that exist.recipe_sha256. SHA-256 of the JCS serialization of the recipe envelope of draft §3.4, which is exactly:
The same value appears as the compose chain event's params_sha256 and inside recipe_uri, so the three are cross-checkable.
params_sha256on thenormalizeevent. SHA-256 of the JCS serialization of `{"black_point_compensation": false, "cmm": "lcms2", "cpnp_version": "1.0", "intent": "relative_colorimetric"}`. It is a real digest of a real parameter document, not a placeholder — this is the member the 1.0.0 example filled with an arbitrary string.- Raw segments. The two XMP packets and the C2PA payload are real byte strings and their
sha256values are the digests of the decoded octets (errata E11). The XMP family occupies two segments, so both carryindex— which is what makes the example exercise §10.1's newly-encoded rule. The ICC segment is carried by reference; its 3144-octet blob declares its own true length in its first four octets — deliberately, so this example never repeats the 1.0.0 example's self-contradicting truncated profile (errata E26) — and is built asuint32be(3144) ‖ "VER-ILLUSTRATIVE-ICC-PROFILE-BODY-"padded to 3144 octets withbyte[i] = (i·37 + 11) mod 256. commitment_sha256. The draft §5.3 construction, computed:
with value = "51.4779N" — the GPS latitude as it appeared in the normalized view, so JCS(value) is the ten octets "51.4779N" including the quotes — and a 32-octet salt whose hex is 5f2b9d4c7a10e836c1d94f0b2e7a6538bd41c09e72a5f3861d0b4e97ca25f8d3. The salt is published here and only here. It is in this file so the digest is reproducible; it is correctly absent from the Record, which is the entire mechanism. A real deployment's salt is never written down anywhere a reader of the Record can reach.
Two things the example deliberately does not carry. There is no sign chain event, because the example carries no provenance.signature and the 1.1 schema now forbids the one without the other (§2.3.3) — fabricating a signature value to demonstrate a rule about signatures would be the exact defect class this revision exists to remove. And there is no provenance.registry, because every action in the chain is one of the sixteen the specification itself defines, so no registry snapshot is depended on. Both rules are negative and belong in conformance fixtures, which is where they now are — invalid/ver1207-… and invalid/ver1205-…, checklist row 11.
Still illustrative, and marked as such by errata item E26: the URIs, the model checkpoint identity, the reference-set identifiers, the PCA basis, and the C2PA manifest content. They are not retrievable and no conformance claim may rest on them.
Verification
From the repository root.
1 — the schema is a legal 2020-12 schema, the example validates, and the migration is exactly what §12.1 says:
Expected: check_schema: OK; the 1.1 example at 0 error(s); the 1.0.1 example at exactly three — /ver_version (const) and /spaces/0/reference, /spaces/1/reference (required); every 1.0.1 conformance/valid/ fixture showing only those two edits, except binary-dtype.json (five: adding /spaces/0/metric and two more on /spaces/0/reference) and redacted-with-proof.json (five: adding two on /metadata/redactions/0 and one on /metadata/normalized/Iptc4xmpExt:PersonInImage); and the four 1.1-draft fixtures in that directory — l3-full-1-1.json, lineage-composed.json, lineage-dangling.json, lineage-exported.json — at 0 error(s).
2 — the hardened bundle path grammar (ADR-0007, finding REV-05):
Expected: every REJECT line False, every ACCEPT line True.
3 — the space_id widening, over the grammar rather than over an example:
Expected: rejected by 1.1: 0; then four 1.0.1-valid identifiers accepted by both, then four 1.1-only identifiers accepted only by 1.1.
4 — every digest in the example recomputes:
Expected: every line True.
Ratification checklist
Nothing here ratifies until every row is resolved. Resolved rows are done; BLOCKING rows stop publication outright.
Decisions — resolved
| # | Item | Decision | State |
|---|---|---|---|
| 1 | Provenance actions: open string + closed core set, sixteen specification-defined tokens, registry-snapshot binding, target, uri, sign ⇒ signature | ADR-0004 | Accepted — conditionally. Conditions C1–C3 are row 8 below; C4 and C5 are encoded in the draft schema |
| 2 | Lineage: resolvable parent references, pixel_hash as {value, cpnp_version}, recipe_uri ⇒ recipe_sha256, a specified recipe envelope | ADR-0005 | Accepted — model adopted, shape revised. Encoded; the eight semantic fixtures are row 11 |
| 3 | Redaction: commitment REQUIRED for a producer-performed redaction, upstream_withheld for the never-held case, commitment_sha256 + commitment_alg, ver-redaction-commitment/1 | ADR-0006 | Accepted — revised Option A. This was the standards track's only open decision; it is closed |
| 4 | Model bundles: weights_sha256 NOT redefined, bundle.manifest_sha256 with bundle_digest_alg, hardened path grammar, artifacts[], checkpoint_uri ⇒ revision | ADR-0007 | Accepted — principle adopted, construction revised. Encoded |
| 5 | embeddings[].dim/dtype REQUIRED for 1.1 records, and the binary rules encoded | ADR-0008 | Accepted as written. Its ratification conditions are row 11 |
| 6 | Close the seven accidentally-open schema objects | draft §15.2 | Encoded in the draft schema — sha256Hash/pixelHash, model, reference, the space's provenance, metadata.trust[], conflicts[].values[], embedding.recipe. The closure vote is taken at ratification, per VERSIONING.md §2.3; until it is, the closure is drafted rather than decided |
| 7 | Encode every JSON-Schema-encodable rule; the superset goal is withdrawn | draft §1, §15 | Done. The "not encoded for compatibility" bucket is empty; §15.4 states why each remaining rule cannot be or is not encoded |
Deliverables and evidence — blocking
| # | Item | Gate | State |
|---|---|---|---|
| 8 | The VER Registry document exists and is governed: stable URL, immutable addressable snapshots, a digest per snapshot, append-only history, a deprecation policy, named maintainers, an appeals path. Initial entries: the sixteen actions, two perceptual algorithms, eight source classes, six segment families. Conformance binds to a snapshot (provenance.registry), tokens are never reused, deprecation never invalidates history | ADR-0004 C1–C3 | Done. standards/registry/, governed per ADR-0004 C1: a stated stable URL with this directory as its source of truth, immutable snapshots/<n>/ addressing, a SHA-256 over each snapshot's RFC 8785 JCS form, append-only HISTORY.md, a written deprecation policy, maintainers via .github/CODEOWNERS, appeals via GOVERNANCE.md §5. Snapshot 1 (ea0fab7379049ff86e77be87d7db84efd818177ba6d5e5e66fd82ab34b9c09a5) seeds all four lists — sixteen actions, two perceptual algorithms, eight source classes, six segment families. C2 is schema-encoded as provenance.registry; C3's tiers are recorded per entry; tests/test_record_registry.py recomputes the digest and compares the seed lists against the schema's own enums. Seeding is not opening: the draft opens provenance_action alone (§2.3), perceptual_alg/source_class/segment_family stay closed enums (§2.4), and source_class stays gated on its grade table being registry-backed at the revision that opens it |
| 9 | Decoder implementation profile + reference corpus published (errata E12) | Deliverable | Done. standards/decoder-corpus/1/ — implementation profile verd-pillow/1, corpus ver-decoder-corpus/1, 21 Assets with their expected Canonical Buffer digests in manifest.json, re-derived on every commit by tests/test_record_decoder_corpus.py, which satisfies VERSIONING.md §3.4 condition 3 and its "names a test rather than an intention" half. One toolchain has been evaluated against it — the one that generated it, which shows determinism, not interoperability; a second, independently built decoder reproducing all 21 digests is §3.4 conditions 1–2, i.e. row 14. PROFILE.md §6 names what release 1 does not pin, non-sRGB ICC sources first |
| 10 | Reference-set manifests published for every space this project ships, now that set_manifest_sha256 is REQUIRED and a reference block without one is schema-invalid | Deliverable | Manifests published; row partially met. standards/reference-sets/ — three spaces × ten images, every vector_sha256 a real measured forward pass, asserted by tests/test_record_refset_manifests.py. set_manifest_sha256 is satisfiable where nothing satisfied it before. Still BLOCKING for §8.2: no descriptor this project emits carries a reference block at all, so no tolerance is declared against a set and VER404 warns correctly. The follow-up is named, not done — descriptor wiring, and tolerance numbers that are measured across reloads, library versions and hardware rather than chosen |
| 11 | Conformance fixtures for every 1.1 addition, positive and negative, including: ADR-0005's eight lineage fixtures (exported, composed, duplicate, contradictory, self-parent, cycle, missing digest, dangling — draft §3.5); ADR-0008's byte-order, dtype-aware-encoder and exactly-one-carriage tests; sign without signature; a bare unregistered token without provenance.registry; producer_performed without a commitment; upstream_withheld with one; a multi-segment family without index; a traversal path in a bundle | Deliverable | Done. conformance/ carries 26 negative fixtures — one per new code, VER105 … VER1606 — and 4 positive ones under "schema": "1.1-draft", including all eight §3.5 lineage fixtures: exported, composed and dangling as valid/ records; duplicate, contradictory, self-parent, cycle and missing-digest as invalid/ver1601 … ver1605. The cycle fixture exercises detection on both edge types in one run. sign without signature, a bare unregistered token with and without a snapshot, producer_performed without a commitment, upstream_withheld with one, a multi-segment family without index, and a non-portable bundle path are each their own fixture. Two new corpus inputs arrive with them — conformance/lineage-peers/ and a corpus-local, zero-trust registry snapshot — and manifest.json gains the optional keys that reach them, so a third-party runner must implement both flags to reproduce the manifest. tests/test_conformance_fixtures.py fails CI if a registered code loses its fixture. One condition of this row is not a record fixture and cannot be: ADR-0008's byte-order and dtype-aware-encoder tests are producer-side encoder properties, which no Record can state. The corpus pins their observable consequence — a vector_b64 decoding to dim × dtype_size octets, ceil(dim/8) for binary (VER604, annex E24) — and the encoder itself is exercised in the reference pipeline's own suite (tests/test_recordio_units.py), outside this corpus |
| 12 | Profile-validator rules for the 1.1 additions, with stable VER**** codes that do not collide with the 1.0 registry, and VER104's defaults aligned to draft §7's three-quantity model | Deliverable | Done. packages/ver-validator/ validates --schema 1.1-draft and reports itself as vera-profile/1.1-draft. Twenty-six new codes — VER105, VER106, VER406–VER411, VER608, VER609, VER902–VER904, VER1006–VER1009, VER1205–VER1207, and the new stage-16 lineage band VER1601–VER1606 — each firing only when schema_version is 1.1-draft, reached by three new inputs: --registry, --lineage-peer and --profile. §7's three quantities become VER105 (error) and VER106 (warning) there; VER104 is suppressed on a 1.1-draft run and is untouched for 1.0.x, where its meaning and severity are unchanged. Nothing was renumbered, re-titled or re-graded (ADR-0003): the registry is now 80 codes — 65 error, 15 warning — plus the reserved VER1303, and the coverage gate — one fixture per registered code, or a named exemption (VER001, VER607, both unchanged) — is green in CI across the 1.0.1 and 1.1-draft entries alike |
| 13 | Revised VER-F lexicon published, implementing draft §14.1–§14.8 under the §14.1 wire strategy: stable NSID across 1.x, REQUIRED verVersion/cpnpVersion, closed identity- and security-critical structures, one namespaced ext map with MUST-ignore-unknown, constraint parity on every hash and dimension field, an open perceptual: [{alg, value}] array, a tombstone record, and the optional wire signature | Deliverable | Drafted — still BLOCKING. wire-profile/ carries the revised record lexicon (revision: 2, same NSID), the §14.6 retraction collection, and the §14.8 per-field openness statement; tests/test_record_wire_lexicon.py pins the §14.3 hash patterns literally equal to ver-record.schema.json's. Two things keep the row blocking. §14.1 item 5 requires the lexicon and the reference implementation to be resolved in the same revision, and only the lexicon half exists — services/verd/ still defaults the version fields, still emits the named phashDct64/pdq slots, and models a third privacy mode, public_vector, that this revision does not define. And nothing validates a wire record: no VERxxx rule and no conformance fixture reads one, so every §14 consumer MUST is stated and unenforced |
| 14 | At least two independent implementations have produced and consumed 1.1 Records interoperably, with the evidence published | Evidence | Not started — BLOCKING (VERSIONING.md §3.4) |
| 15 | Size limits (§7: record ≤ 10 MiB, decoded inline raw ≤ 6 MiB, decoded single vector ≤ 6 MiB) supported by a measured corpus | Evidence | Measured over this project's own corpus. docs/standards/VER-size-corpus.md and scripts/measure_record_sizes.py measure all five §7 quantities across 87 of the 92 conformance fixtures — excluding the unparseable ver101 and the four built to trip one quantity at minimum size (VER103/104/105/106) — plus the three published examples: N=90. Nothing approaches a budget (0.16% / 0.02% / 0.05% / 4.7% / 0.78% of (a)–(e) at the observed maximum), and a synthesized worst-realistic record, built from every distinct real preserved-metadata segment this repository holds and inline vectors at both dimensions this project ships, still lands at 0.61% / 0.10% / 0.10% of (a)/(b)/(c). Still BLOCKING: this is measurement evidence, not deployment evidence, so §7's numbers are proposals strengthened by it rather than ratified by it, and the deployment data that would settle them comes through row 17's review period |
| 16 | Recipe envelope schema published as its own artifact (ver-recipe.schema.json), and the named high-trust profile that promotes ADR-0005's content_hash warning to an error | Deliverable | Done. ver-recipe.schema.json encodes §3.4 — $id …/ver-recipe-1.1-draft.json, recipe_version const "1", canonicalization const "rfc8785-jcs", a REQUIRED open steps, additionalProperties: false over x-<reverse-dns-authority> extension keys. HIGH-TRUST-PROFILE.md names vera-profile-high-trust/1.1-draft and publishes its rule list: the base 1.1-draft profile with exactly one promotion, VER1606 warning → error, selected with --profile high-trust and applied to a report's findings rather than to the code registry (ADR-0003). tests/test_record_recipe_schema.py proves the schema compiles, that the worked envelope above validates against it, and that the envelope's JCS digest is the example's recipe_sha256. Both identifiers carry -draft and are replaced at ratification |
| 17 | External review period and a public governance process for the standards track, per VERSIONING.md §3.4 | Process | Half done — still BLOCKING. The public governance process exists: GOVERNANCE.md states who decides, how a change is proposed, how an objection is heard and how a decision is recorded (§3.4 condition 6), and it defines the mechanics of a review period so one is ready to open. No review period has opened (condition 5), and writing the document does not open one — GOVERNANCE.md §6 says so in those words |
Open votes
| # | Question | Gate |
|---|---|---|
| 18 | Does §11.1's per-kind preprocessing requirement move from VER405's warning into the schema, accepting that an incomplete descriptor becomes an unparseable Record rather than a diagnosed one? | Ratification vote |
| 19 | Does 1.1 add an explicit scrubbed-segment carriage, so a redacting Producer can preserve a raw segment with the sensitive value removed instead of omitting it (draft §5.2, errata E15)? A marker needs its own availability semantics and a rule for what the entry's sha256 covers | Ratification vote |
At ratification: assign the immutable $id, drop -draft from the filenames, freeze the artifact set into standards/ver/1.1.0/ with a RELEASE.md recording each file's SHA-256, and tag the commit ver/1.1.0 — by the publication checklist in VERSIONING.md §3.3, which is what creates the tag, and only after §3.4's publication bar is met.
