Status: Accepted
Date: 2026-09-25 (proposed), 2026-09-25 (accepted, with the addendum below)
Related: ADR-A07b (Instrument’s per-instance fnd:Version/supersededBy
versioning contract — a distinct concern, see “Consequences”), ADR-A22 (MORK
governance/versioning via Foundation alignment — likewise instance-level, not
document-level)
Every owl:Ontology document under ontology/ carries an owl:versionIRI,
or does not, with no documented rule for when or how far that number moves.
The current inventory (full table in the
design sketch)
shows the cost of that absence: seven core layers’ spec and vocab files sit
at inconsistent, ungoverned numbers (0.0.1 through 0.1.1); two ontologies
(MORK’s Mork.ttl, SPC’s spc.ttl) carry no version identity at all; one
(applied/insurance/contract.ttl) carries two disagreeing version signals on
the same document; and every core layer’s owl:versionIRI base URI except
Persistence, MORK’s Executable.ttl, and applied/capacity’s already
disagrees with the namespace convention ontology-architecture.md §2
documents. Neither a human contributor nor an agentic coding assistant has
anything to check a proposed change against today.
Adopt Semantic Versioning 2.0.0 for every ontology
document under ontology/ that declares owl:Ontology.
owl:versionIRI per owl:Ontology document.
spec/<layer>.ttl and vocab/<layer>-vocab.ttl remain two independently
versioned documents, as they already are; a change to shapes/*.ttl or
projection/*.ttl is covered by whichever of a layer’s spec or vocab
version it motivates a bump of, rather than gaining independent version
identity of its own.owl:imports continues to pin an
exact owl:versionIRI. Bumping a layer obliges updating every importer’s
owl:imports statement (and README turtle-spec source) in the same
change. A dependency-range import mechanism is not adopted by this
decision; it remains an open question for a future ADR if the cascade cost
becomes a real source of friction.0.2.0, and every core-layer owl:versionIRI base URI is normalised to
match its own namespace convention (https://www.nebularis.org/neuro-semantic/lattice/<layer>/<version>).
applied/insurance/contract.ttl’s separate owl:versionInfo "3.5.1"
annotation is reconciled into the single owl:versionIRI signal; its
namespace family (outside lattice/) is left as a separate, applied-layer
question, not assumed to be a bug. The reset is recorded, in each affected
layer’s own document, as an administrative normalisation — not seven or
more MINOR releases that never happened.docs/architecture/ontology-versioning-policy.md,
cross-referenced from CONTRIBUTING.md and ontology-architecture.md §2,
written for both a human contributor and an agentic coding assistant to
apply mid-PR without further judgement calls beyond the one flagged
exception above.Major version zero keeps its ordinary SemVer meaning throughout: the
baseline reset is not a stability claim, and 1.0.0 remains reserved for
whichever future decision asserts a layer’s public API stable.
owl:imports in the same change; this is accepted friction, not a defect
this decision resolves.fnd:Version/
fnd:supersededBy pattern for versioning instances inside a populated
graph — those remain a distinct mechanism at a distinct layer of the
system, and both ADRs are cited above only to make that boundary explicit.0.2.0) and the applied-insurance namespace
question are the two open points this ADR states a recommendation for
rather than treating as beyond dispute; ratification is the point at which
either is confirmed or amended.Raised by the applied-ontology-readiness
unit. An applied ontology pins LATTICE by version IRI and relies on a version
IRI identifying one content. Accepted with the decision above on 2026-09-25.
owl:imports update takes the bump level of the imported change, since
its own consumers see that change through its import closure. Every bump,
PATCH included, runs the cascade checklist. This replaces the policy’s
statement that a PATCH never changes the version IRI, which contradicts its
own “PATCH still bumps the version” section.tools/ontology_version_check.py
fails for an in-scope document that declares owl:Ontology without an
owl:versionIRI, instead of skipping it.…/neuro-semantic/<layer>) differ from the version-IRI base
(…/neuro-semantic/lattice/<layer>/<version>). Changing them is MAJOR for
every layer and buys nothing until documents are served at their IRIs, which
ADR-A88 defers.tools/surface, stamp_content_version). Every content change changes
the version IRI, and a regeneration that changes nothing keeps it.
Generated documents that are ignored build output (**/execution/*) are
outside every check, since they exist only where they were built.Status: Accepted, human decision on 2026-09-26.
A consumer that knows the version it binds to must be able to fetch that version, with its shapes and projections, before LATTICE hosts its IRIs.
<name>-vX.Y.Z on the commit where it is in force, with the name derived
from its version IRI (the policy’s “Releasing a version”).docs/architecture/ontology-releases.md,
published on the GitHub Pages site, lists each released version with raw
links at its tag. tools/ontology_releases.py writes rows and never edits
one.shapes/
and projection/ directories declare no ontology, so each holds a
.version file with one semantic version shared by its files. A change to
any of them bumps that file, never the spec or vocab version IRI, so an
ontology’s identity moves only when its axioms or documentation do. Each
directory is released with its own tag. This replaces the policy’s
statement that a shapes change is covered by a spec or vocab bump.0.1.0. Earlier versions are not.Consequences: tags are immutable only by convention, and the version check is what keeps them correct, so a skipped check can make a tag misleading. The register moves to served IRIs, and this addendum is superseded, when LATTICE hosts its ontologies at their own IRIs.