Skip to content

v1.0.0-rc.2

Pre-release
Pre-release

Choose a tag to compare

@simontaurus simontaurus released this 15 Aug 07:34

Second release candidate for v1.0. Addresses the review of rc.1 and adds a referenceable rule catalogue.

Rule catalogue

Every normative statement now carries a stable, citable id (OOLD-RT-08f2), so a validator finding can point at the requirement it enforces rather than only at its own check name.

  • meta/oold-rules.json, generated from :rule[...] markers in the spec prose. level and text are extracted, never authored, so the catalogue cannot drift from the specification.
  • Anchored badges in the spec and a searchable rule catalogue page.
  • 66 rules across 7 areas, 41 machine-checkable. Each records applies_to (document / implementation / advisory) and machine_checkable.
  • Guarded by an accepted baseline, append-only enforcement against the last release, and a catalogue schema.

machine_checkable is deliberately not enforced: whether a given validator checks a rule is a fact about that implementation at a version, not about a spec release.

Review fixes from rc.1

  • type -> @type alias was not round-trip safe. A plain-string term cannot carry @container, so a single @type came back from RDF as a scalar and failed re-validation. The normative example now uses { "@id": "@type", "@container": "@set" }. (#117)
  • The $id MUST is now enforced. The dialect meta-schema is two-tier: the document-level resource carries required: ["$id"], nested subschemas recurse into the base through $dynamicRef and so are not required to carry one. (#118)
  • examples / default are load-bearing in the validation harness, and docs/tooling.md now says so, including how the resulting GEN-INVALID should be read. (#120)
  • Persistent identifiers. Versioning examples use an immutable ref, and a schema published for long-term reuse should be identified by a w3id.org / PURL redirect or a DOI resolving to its current hosting. (#115)

Normative wording

An audit found requirements stated without an RFC 2119 keyword, which the catalogue therefore could not see. 24 are now catalogued, and three needed a decision rather than a keyword:

  • The synonym processing contract said other keys are "preserved but not interpreted". That would have forbidden an implementation from reading extensions of its own, and collided with promotion, which deliberately drops the x-oold-sssom blocks. Now: conformance MUST NOT depend on other keys, a processor MAY read them as its own extension.
  • Dereferencing an x-oold-range target was a single MUST that did not say who it bound. Split: a document SHOULD that a published reference points at a conforming target, and an implementation MUST that a loader validates what it fetched rather than assuming the target still conforms.
  • Embedded objects need an explicit type under a type-scoped context or a frame that matches on @type, not only the former.

Keyword namespacing

x-sssom is renamed x-oold-sssom. The payload follows SSSOM, but the keyword name was OO-LD's own choice, so an unprefixed name claimed a global extension name the project does not own. @context is now the single exception to the x-oold- rule, and a genuinely forced one, since JSON-LD fixes that name.

Breaking changes since rc.1

  • x-sssom -> x-oold-sssom (schema-level and inside x-oold-context)
  • schema documents now require $id to validate against the dialect meta-schema
  • rule ids moved from sequential (OOLD-RT-001) to hex (OOLD-RT-08f2)

Feedback

Comments on this release candidate are welcome in #116.