v1.0.0-rc.2
Pre-releaseSecond 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.levelandtextare 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) andmachine_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->@typealias was not round-trip safe. A plain-string term cannot carry@container, so a single@typecame back from RDF as a scalar and failed re-validation. The normative example now uses{ "@id": "@type", "@container": "@set" }. (#117)- The
$idMUST is now enforced. The dialect meta-schema is two-tier: the document-level resource carriesrequired: ["$id"], nested subschemas recurse into the base through$dynamicRefand so are not required to carry one. (#118) examples/defaultare load-bearing in the validation harness, anddocs/tooling.mdnow says so, including how the resultingGEN-INVALIDshould 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-sssomblocks. Now: conformance MUST NOT depend on other keys, a processor MAY read them as its own extension. - Dereferencing an
x-oold-rangetarget 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
typeunder 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 insidex-oold-context)- schema documents now require
$idto 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.