ISO Week 20 of 2026: v0.1.9, v0.1.8, v0.1.7
Auto-generated mirror of spec releases that landed in ISO week 20 of 2026 (2026-05-11 to 2026-05-17): v0.1.9, v0.1.8, v0.1.7. See the canonical changelog for the full record.
This page mirrors spec releases that landed in ISO week 20 of 2026 (2026-05-11 to 2026-05-17), consolidated from the canonical changelog. The changelog is the source of truth; this page is the periodic public surface that surfaces what shipped without requiring a reader to scan the full changelog.
Per ADR-0008: /updates/ is auto-generated from changelog releases; human-curated long-form lives at blog.llmo.org (planned).
[0.1.9] - 2026-05-12
v0.1.9 lands two normative changes accepted on the same day under editor authorship privilege during the pre-announcement Goldilocks period (see ADR-0012): LIP-4 introduces a Key Transparency registry as a Strict-tier requirement (rule X7) with a 14-day grace period from this release date before enforcement begins; LIP-5 adds a normative category discriminator to the disavowal claim type’s disavowed[] items and binds rule S6 to a closed two-value enum, closing the documentation-versus-enforcement gap deferred since v0.1.5.
Both LIPs transitioned Draft → Final on 2026-05-12 with the LIP-1 §10 14-day governance window observed informally and the LIP-4 §5 X7 grace period revised from 90 days to 14 days. Per ADR-0012, full window observance resumes for substantive normative changes after the v0.1 public announcement.
Added
- LIP-4 Final introduces a Key Transparency (KT) registry: a public, append-only log of
(domain, kid, jwk_thumbprint, doc_url, doc_id, observed_at)records, each a compact JWS signed by the publisher’s private key with the public JWK inline in the protected header per RFC 7515 §4.1.3. SHA-384 thumbprints per RFC 7638 throughout for ~128-bit post-quantum collision resistance under Grover. Rule X7 (KT registry inclusion required for Strict tier) added to spec §5.3. The registry is hash-committed via periodic signed snapshots so the historical record of registered keys survives any future signature-algorithm break. Reference implementation runs athttps://llmo.org/kt/v1/. - LIP-5 Final adds a normative
categoryfield to entries indisavowal.disavowed[]arrays. The field is a closed enum:self_statement(publisher disavows own past content) orimpersonation_defense(publisher disavows third party falsely representing affiliation).statement_disavowal.disavowed[].items.requirednow contains["what", "detail", "category"]. Spec §3.5 documents the per-value semantic. - Implementer-facing endpoint spec at
/spec/v0.1/kt-registry-endpoints/documenting every endpoint of the KT registry API:POST /kt/v1/entries,GET /kt/v1/entries,GET /kt/v1/entries/{id},GET /kt/v1/log.jsonl,GET /kt/v1/snapshot/latest,GET /kt/v1/snapshot/{id}. Plus D1 schema, KV namespace, federation considerations. - Test vector suite for LIP-4 entries at
/spec/v0.1/test-vectors/kt/: 3 positive (one per supported algorithm) and 10 negative (one per defined registry error code). Generator atscripts/test-vectors/generate-kt-vectors.mjs.
Changed
- §3.5
disavowalclaim type documents the newcategorydiscriminator with definitions forself_statementandimpersonation_defense. Worked example updated to include the field on both entries. - §5.2 rule S6 updated with the binding rule text. Documents whose disavowal entries are missing the field or carry an out-of-enum value MUST NOT be evaluated at Standard tier or higher; the document evaluates at Minimal tier with note
s6_disavowal_out_of_scope. - §5.4 deferral note for S6 informational-only status (in force v0.1.5 through v0.1.8) closed. Reference validators bind S6 to tier outcome starting with v0.1.9; CLI gains the same binding in
llmo@0.1.13. static/spec/v0.1/schema.jsonin-place patch:statement_disavowal.disavowed[]items addcategorytorequiredand enum-restrict the value. Schema$idunchanged (in-place v0.1.x patch convention per ADR-0006).
Migration
- Documents conforming to v0.1.0 through v0.1.8 that include a
disavowalclaim withoutcategoryfields on eachdisavowed[]entry fail M3 schema validation against the v0.1.9 schema. Affected publishers add the field with the appropriate enum value. Pre-launch the only such document is the steward’s own at llmo.org, updated in the same release window. - Strict-tier consumers begin enforcing X7 starting 2026-05-26 (14 days after this release). During the grace period the
kt_uninloggednote is surfaced advisorily but does not downgrade tier. - Documents with no disavowal claim and a registered signing key are unaffected.
[0.1.8] - 2026-05-11
v0.1.8 (in progress, additive) introduces six new core claim types (contact_points, categories, locations, hours, attributes, operational_status), five new top-level optional fields (revocation_registry, dns_corroboration, publication_history, delegates_to, delegated_from), provenance_markers on the claim envelope, and structured verification forms on entity.external_ids plus a new irs_ein well-known key. Every conforming v0.1 document validates unchanged. Schema $id and llmo_version are unchanged.
Added
- Five new top-level optional fields in
static/spec/v0.1/schema.jsonand documented in §3.1:revocation_registry(URL pointer to/.well-known/llmo-revocations.json; registry wire format deferred),dns_corroboration({txt_record, hash_alg}for out-of-band integrity corroboration; hash algorithm valuessha-256,sha-384,sha-512),publication_history(URL pointer to a third-party append-only log; interchange format deferred),delegates_toanddelegated_from(arrays of domain strings establishing the delegation graph; asserted but not yet evaluated as a trust primitive). - Six new core claim types in §3.5 and the schema’s
claim.typeoneOfcore branch:contact_points(typed contact addresses with verification metadata; schema enforces requiredverification_proofandverified_atwhenverification_statusisverifiedviaif/then),categories(schema.org Organization subtype URIs plus NAICS codes),locations(postal address, WGS84 coordinates, service area withoneOfof radius / polygon / bounding_box / named_places, business_type enum, per-locationpublisher_id),hours(regular weekly schedule keyed by day-of-week, calendar exceptions, named alternate sub-schedules;24:00permitted as a close time only;is_overnightflag for periods spanning midnight),attributes(open map drawing canonical names from the controlled vocabulary at/glossary/#attributes),operational_status(open / opening_soon / temporarily_closed / permanently_closed; schema enforces requiredeffective_datewhen status is notopen). - Optional
provenance_markersfield on the claim envelope (§3.4): array of advisory string markers recording how the builder agent derived each claim. Inside the signed payload. Consumers MAY use as confidence or freshness signal; MUST NOT treat as authoritative. See ADR-0007. Distinct from themedia_provenancescope onpointerclaims, which is C2PA-attested media origin. entity.nameaccepts an array of{name, locale, primary}entries for internationalized names alongside the v0.1 single-string form. Schema enforces exactly oneprimary: trueviacontainswithminContains: 1, maxContains: 1. Locale is RFC 5646.entity.external_idsper documented well-known key accepts a structured{value, verification_method, verification_proof, verified_at}object alongside the v0.1 plain-string form. Verification method enum:domain_proof,signed_attestation,registry_lookup,none. Proof and timestamp required when method is notnone(schema-enforced viaif/then). Custom keys viaadditionalPropertiesalso accept the structured form.- New
entity.external_idswell-known key:irs_ein(U.S. Internal Revenue Service Employer Identification Number) with pattern^[0-9]{2}-[0-9]{7}$. Existing well-known keyswikidata,duns,lei,didgain the structured form with per-key value patterns preserved. - Four new
canonical_urlswell-known keys:appointment,menu,reservations,order.additionalPropertiesremains open. product_factsper-product entries extended withkind(enumproductorservice, defaultproduct),price(oneOfof{amount, currency}with ISO 4217 alphabetic currency code, or symbolic valuefree/varies/call_for_quote),description(max 2048 chars),category(schema.org type URI).identitystatement extended withprice_rangeinteger 1 to 4 mapping to $, $$, $$$, $$$$. Spec text adds SHOULD-level soft cap of approximately 500 characters ondescriptionfor LLM consumption efficiency; schema hard cap of 2048 unchanged.- New §3.8 documenting six reserved top-level namespaces (
posts,reviews,qa,media_pointers,advertising_extensions,consumer_metadata). Reservation lives in spec prose only; schema top level remainsadditionalProperties: truewith no enforcement. Publishers MUST NOT populate these keys in v0.1.8. - Wire-format compatibility note in §3.8: v0.1.8 is purely additive over v0.1; every conforming v0.1 document validates against the v0.1.8 schema unchanged. Schema
$idremainshttps://llmo.org/spec/v0.1/schema.jsonper the in-place patch convention documented in ADR-0006.llmo_versionremainsconst: "0.1"for the lifetime of the v0.1 minor version.
Changed
- Schema-first encoding of three conditional constraints that earlier versions would have punted to validator code:
contact_pointsentryif {verification_status: verified} then required: [verification_proof, verified_at];operational_statusif {status: not open} then required: [effective_date];entity.namearray formcontains {primary: true}withminContains: 1, maxContains: 1. Schema is the source of truth; CLI and validator.js inherit these checks via schema validation rather than reimplementing. - Eight new entries in the schema’s
$defsmap:locale_name,structured_external_id,day_schedule, plus the six newstatement_*types for the new core claim types. Eight new branches inclaim.allOfmapping each new claim type to its statement schema.
Migration notes
- Publishers: nothing required. Populate the new optional fields when convenient. The Claude builder skill / GH action (see ADR-0007) will populate them automatically on the publisher’s behalf, including
provenance_markers(the agent’s per-claim audit trail), location entries, hours, attributes, and the structuredexternal_idsverification form. - Validators and consumers: updating the schema reference is a no-op since the canonical URL is unchanged. The new conditional-required constraints (verified contact points; non-open operational status; entity.name array primary count) fire automatically through schema validation. Reserved-namespace keys are ignored at the schema level (top-level
additionalProperties: trueremains); future patch versions may give them meaning. - CLI vendored schema sync: the CLI’s vendored copy of
schema.jsonshould be refreshed in a paired PR in theopenllmo/clirepo after v0.1.8 lands. This is downstream work tracked separately. - Cryptographic layer: untouched. ES256, ES384, EdDSA; JCS (RFC 8785); JWS (RFC 7515); JWKS at
/.well-known/llmo-keys.jsonare all unchanged.
[0.1.7] - 2026-05-11
v0.1.7 bundles the comprehensive test-vector expansion from PR #74 and removes the in-spec changelog mirror that was creating drift. Every conformance rule v0.1 defines now has at least one exercising vector; the validator and CLI harnesses (scripts/test-vectors/verify-vectors.mjs and scripts/test-vectors/verify-schema.mjs) report 31/31 passing against the canonical schema. Four drift findings between reference implementations and spec text were surfaced and filed to BACKLOG. ES384 and EdDSA gain their first strict-tier vectors, closing the gap with §4.2’s algorithm registry. Appendix B of /spec/v0.1/ becomes a pointer to this changelog, eliminating the duplicate-source drift risk.
Added
- Strict-tier test vectors for ES384 (
signed-strict-es384.jsonand key/payload counterparts) and EdDSA (signed-strict-eddsa.jsonand key/payload counterparts) under/spec/v0.1/test-vectors/. The §4.2 algorithm registry permits ES256, ES384, and EdDSA; the test vector set previously covered only ES256. The new vectors complete coverage.content/spec/v0.1/test-vectors.mdgains entries describing them. - Comprehensive test-vector expansion under
/spec/v0.1/test-vectors/covering every conformance rule v0.1 defines. New negative vectors for S1, S2, S4 (three failure modes), S5, S6, X1 (alg, kid, malformed protected header, b64:false, crit non-empty), X4, X5 (corrupted document signature), and X6 (corrupted per-claim signature); schema and minimal-tier negatives for malformedclaim.type, malformedfoundedfield, badllmo_version, and over-365-day windows; warning vectors for W1 and W2; edge-case vectors at 365-day and 366-day window boundaries, namespaced extension claim types, the impersonation-defense disavowal scope, and spokesperson verification URLs.content/spec/v0.1/test-vectors.mdgains a coverage matrix table mapping each rule to its enforcing implementations and exercising vectors, organized vector-file subsections (positive, negative-by-rule, warning, edge), and a Drift findings section documenting where validator.js and CLI behavior diverge from spec text. Two harnesses landed atscripts/test-vectors/:verify-vectors.mjsruns CLI verify against every vector and asserts expected tier and rule outcomes (31/31 passing);verify-schema.mjsvalidates each vector against the canonical/spec/v0.1/schema.json(31/31 passing). The expansion surfaced four drift findings, each filed as a separate BACKLOG item: §5.2 S6 unimplemented in both reference implementations, §4.3.1 b64/crit rejection unimplemented in both, CLI does not enforce S4 or X4, and the CLI vendored schema lags canonical.
Changed
- Appendix B of the v0.1 specification document replaced with a pointer to this changelog. The standalone changelog at
/spec/changelog/is the single source of truth for version history; the in-spec mirror was removed to eliminate drift.