opda:ufoCategory and the upper-ontology layer: representation, markup, and quarantine

    Context and Problem Statement

    ADR-0044 Phase 5c (2026-06-15) promoted the UFO meta-category from documentary skos:scopeNote free-text to a structured opda:ufoCategory facet — declared an owl:DatatypeProperty (rdfs:range xsd:string), dereferencing at /pdtf/ufoCategory, asserted on 39/40 classes and 47 schemes. The operator asked four questions: should the value be a string literal or a resource (IRI); how should it be marked up (predicate typing + graph placement); how should the web pages / documentation present ufoCategory and the broader upper-ontology layer; and what other upper-ontology / modelling-framework metadata should be marked up?

    The pre-flight scope check (session-041) surfaced a tension the questions did not name. Phase 5c shipped one day after ODR-0030 / session-040, whose Rule 1 ruled that opda:ufoCategory tags “remain annotation-graph-only … the ODR-0029 quarantine is load-bearing — retention lapses if it is breached,” whose Rule 7(b) required a three-part DOLCE-lineage disclosure on the predicate, and whose Devil’s Advocate (Cagle) holds a live re-open trigger (i): “the ufoCategory layer is ever made reasoned-over.” Three corpus facts were verified at file:line by the Queen and three panellists:

    1. The quarantine is breached in the shipped bytes. All ~87 opda:ufoCategory triples — and the predicate declaration (opda-classes.ttl:90) — sit in the non-annotation (reasoned-union) graphs (opda-classes/agent/claim/property/descriptive/governance/transaction.ttl + opda-vocabularies.ttl); opda-annotations.ttl carries zero.
    2. The three-graph CI gate is blind to this class of breach. three_graph_test.py’s five checks forbid sh: in annotations, owl:imports/advisory predicates in shapes, and verify sh:targetClass resolution — none forbids an inert predicate in the classes graph. The breach ships green; Knublauch’s session-040 standing condition is, for this predicate, unenforced.
    3. The Rule 7(b) DOLCE disclosure never shipped on the predicate (opda:ufoCategory’s scopeNote, opda-classes.ttl:96, carries only “promotes … to a structured, queryable facet”). Per-class fragments exist; the consolidated predicate-level disclosure does not.

    A secondary defect: the predicate does double duty over two incompatible value-spaces — the 9-term UFO endurant/perdurant axis on classes (Substance Kind, Relator, Role, …) and a different scheme axis (35× "Quale-in-Region", "Substance Kind label", "Phase label", …) already ruled register-deference by ODR-0030 Rule 2, where ungoverned strings have already drifted from ODR-0011 §8a’s own spec ("Substance Kind label" vs SubstanceKindLabel).

    Decision Drivers

    • The ODR-0030 quarantine is load-bearing and currently breached. Restoring it is the precondition for any other change; failing to restore it lapses ODR-0030’s retention by its own terms and fires Cagle’s Option-D revert.
    • Inertness should be intrinsic, not contingent. ODR-0029’s shallow RDFS-Plus regime happens to entail nothing from a domain-less string property today, but Rule 1 / trigger (i) speak to placement in a graph that drives inference or SHACL, not to whether inference fires today.
    • A category is an entity with identity, not a label (the formal-ontology reading) — and only a node OPDA controls can carry OPDA’s own definition, the DOLCE disclosure, and the OntoClean profile.
    • Reuse before mint (the pragmatic reading) — gUFO already publishes the category IRIs; OPDA must not duplicate them, only align to them.
    • Dereferenceability / ontology-as-web-pages (ADR-0044) and the honesty doctrine (“UFO-informed”, not “UFO-grounded with guarantees” — ODR-0030 Rule 7).
    • Scope discipline — the artefact ships the decisions its modelling methodology produced, not the methodology itself.

    Considered Options

    • Option A (chosen) — Enrich by reference and disclosure under a restored quarantine. Make the value a locally-minted SKOS concept (opda:UFOCategoryScheme) skos:closeMatch-aligned to the gUFO IRI; split the predicate off the register-deference scheme axis; retype owl:AnnotationProperty, relocate every tag + the declaration to opda-annotations.ttl, and add a sixth three-graph CI gate; present read-side web pages; ship the Rule 7(b) disclosure; triage further markup narrowly.
    • Option B — Keep the bare xsd:string (governed string + SHACL sh:in). Cagle’s floor. Rejected as the standing decision: a definition-less, typo-prone literal discards the category’s identity, its OntoClean signature, and the disclosure surface, and the typo-drift has already occurred — but recorded as held-as-live dissent (Cagle), withdrawal-conditioned on a second consumer needing inter-category skos:broader/mapping edges.
    • Option C — Direct gufo: IRI reference (no local mint). Allemang’s reuse position. Rejected as the standing decision: a foreign gufo: IRI cannot bear OPDA’s own skos:definition / DOLCE disclosure / OntoClean profile, and a direct binding risks re-importing gUFO’s OWL axioms (which the gUFO authors show are not faithfully OWL-2-DL-expressible — ODR-0030 Rule 3) — but recorded as held-as-live dissent (Allemang). The skos:closeMatch edge preserves the reuse he seeks while keeping OPDA’s node as the annotation carrier.
    • Option D — Full enrichment as framed (mint + gUFO alignment + mark up all upper-ontology metadata, in place). Rejected: it leaves the quarantine breached and materialises the methodology (OntoClean meta-properties, the Relator-founds edge, UFO-L correlativity) the artefact should only use — the entrenchment session-040 warned against.

    Decision Outcome

    Chosen option: “Option A — enrich by reference and disclosure under a restored quarantine”, because it is the only option that satisfies the binding ODR-0030 quarantine (Rule 1) and gives the categories the identity, definitions, alignment, and dereferenceable web presence the operator asked for — without minting duplicates of published gUFO terms or moving any UFO-shaped triple into a graph that drives inference or SHACL.

    The session-041 council (Queen Allemang, DA Cagle + Guizzardi, Guarino, Baker, Gandon; agent-fan-out with live SendMessage cross-talk) reached this on a constructive split. The verdict’s spine is that the quarantine restoration (Rule 2 below) is the precondition for every other disposition — the council adopts enrichment only bundled with, and downstream of, the fix Cagle demanded, which is what keeps his session-040 Option-D revert dormant. In continued cross-talk the apparent Q1 split (mint-as-value / direct-gUFO-reference / string) resolved into one artefact graph: all six accept that a quarantined category resource bears the gUFO alignment (a real category-level fact that no string-plus-facet reconstructs), leaving only the predicate range — a governed xsd:string + sh:in label (the DA + OntoClean-authority convergence) or value-promotion to the concept IRI — as a quarantine-equivalent residual for the operator. The alignment edge never reaching the reasoner is the absolute, co-signed red line.

    Consequences

    • Good, because it converts ODR-0030’s promise of quarantine into an enforced quarantine: owl:AnnotationProperty makes inertness intrinsic (OWL 2 §10.1 — no model-theoretic consequence) and the sixth CI gate closes the silent blind spot, so Knublauch’s standing condition holds for real rather than on paper.
    • Good, because the categories gain a governance surface (definitions carrying the OntoClean signature + the DOLCE lineage), dereferenceable /pdtf pages (ADR-0044), and closeMatch alignment to gUFO — without OPDA minting duplicates of published terms or claiming an identity it cannot warrant.
    • Good, because splitting the predicate retires the double-duty defect: the register-deference scheme axis (ODR-0030 Rule 2) stops masquerading as UFO categorial work, and the typo-drift that ungoverned strings already produced is closed.
    • Bad (accepted), because it is net-new minting (a scheme + nine closeMatch edges) on a layer session-040 called “optional, droppable” — Cagle’s held-as-live dissent (Option B) is preserved with its re-open trigger, and the work is justified only while the quarantine + CI gate hold.
    • Neutral, because the highest-value enrichment Guarino identified — structured OntoClean meta-property markup — was a clean 3–3 split routed onward; session-042 has since resolved it as conditional adoption (mark up iff the canonical-check CI gate ships atomically; scoped ±R/±I; engineering → ADR-0046).

    Confirmation

    • Quarantine restored + CI-enforced: after re-emission, ASK { GRAPH opda:classes { ?s opda:ufoCategory ?o } } (and the per-module class graphs) returns false; the declaration and all opda:ufoCategory tags resolve only in opda-annotations.ttl. A sixth check is added to three_graph_test.py to enforce it; the existing byte-identity and three-graph gates stay green.
    • Predicate typing: opda:ufoCategory a owl:AnnotationProperty (no rdfs:range xsd:string once the value is an IRI); no opda:ufoCategory triple appears in the SHACL instance-validation union.
    • Disclosure shipped: the Rule 7(b) three-part DOLCE disclosure is present on the predicate scopeNote; upper-ontology surfaces read “UFO-informed, not UFO-grounded”; badges read “classified-under”, never “is-a”. The /pdtf/ufoCategory term page itself was an execution gap (the site-model generator extracted every resource kind except owl:AnnotationProperty, so the minted URI 404’d against this criterion) — realised per Council session-043 (2026-06-15; Q4 6–0–0, Q5 5–0–1): the generator surfaces owl:AnnotationProperty under a distinct entryKind: 'annotation' (never folded into the reasoned 'property' arm), and the page leads with an inert badge (“documentary; no logical consequence; never reasoned over”, OWL 2 §10.1) + the disclosure as its spine, the closeMatch→gUFO shown as a mapping that never reaches the reasoner. Dereference + disclose is the honest discharge of R7b (Gandon); inertness and dereferenceability are orthogonal.
    • The decision is proposed; the operator ratifies adoption (and the two open calls in §Rules R7). The council shapes the proposal, not its adoption.

    Rules

    Dispositions routed from session-041 (all status: proposed). R2 is the precondition for R1, R4, R5.

    1. A quarantined category resource for the gUFO alignment; the predicate range is a residual; split the register axis (Q1 — converged in continued cross-talk, session-041 §Post-positions convergence). A governed opda:UFOCategoryScheme of skos:Concepts is the home for the gUFO alignment: each category concept bears skos:exactMatch/closeMatch to its gUFO IRI (gufo:Kind, gufo:Relator, gufo:Role, gufo:RoleMixin, gufo:Event, …), a skos:definition (its OntoClean signature), and the DOLCE lineage (R4). All six voices accept this resource exists — the gUFO mapping is a real category-level fact “that no string-plus-facet reconstructs” (Guarino); it is the IAO/BFO Rule 4/5 referenced-not-imported mechanism applied one layer down. The one residual (operator-decidable, R7b) is the range of opda:ufoCategory itself: either a governed xsd:string + sh:in label, the concept reached as a mapping anchor (the DA + OntoClean-authority convergence — predicate consumers stay simple), or the concept IRI as the value (value-promotion). Both are quarantine-equivalent and queryable. Never a direct gufo: reference as the value, and never an object-level rdf:type. The register-deference scheme axis (35× "Quale-in-Region" etc., ODR-0030 Rule 2) is split off to a documentary string or a distinct predicate and stops presenting as “UFO doing categorial work.”
    2. Restore the quarantine, atomically — the precondition (Q2, 5–1–0 → 6–0 on the landing; “relocate AND gate, atomically”, co-signed by the DA + Guarino). (a) Retype opda:ufoCategory as owl:AnnotationProperty (inert by OWL 2 §10.1/§5.5 — not owl:DatatypeProperty, not owl:ObjectProperty; an annotation property takes a string or an IRI value and carries no model-theoretic consequence either way). (b) Relocate the declaration and all ~87 per-term tags from the reasoned-union files into opda-annotations.ttl. (c) Add a sixth check to three_graph_test.py: ASK { GRAPH opda:classes { ?s opda:ufoCategory ?o } } → FALSE (generalised to the advisory-predicate family). (a)–(c) ship together — relocating without the gate just moves the breach; gating without relocating fails today. Absolute red line: the category resource’s exactMatch→gUFO edges (R1) live behind this gate, referenced-not-imported on the prov:Entity precedent, never reasoned over — an exactMatch-to-gUFO edge in a graph the ODR-0029 regime closes over (rdfs:subClassOf) is the Q2 No.
    3. Govern the value-space without re-breaching (Q2c). A SHACL sh:in/scheme-membership constraint is permitted only as a tag-level editorial guard on the predicate’s own value and must not enter the main instance-validation SHACL union, nor key any constraint on tagged instances’ object-level structure (else it re-fires trigger (i) into SHACL). Once the value is a scheme concept, scheme membership is the governance.
    4. Web pages as read-side projections + ship the disclosure (Q3, 5–0–1 FOR). Keep /pdtf/ufoCategory, the per-category pages, and per-term badges as read-side SPARQL projections over the annotation graph that render whether the value is a string or a concept (so they cannot entrench). Ship the ODR-0030 Rule 7(b) three-part DOLCE disclosure (the categories are UFO’s; UFO’s quality categories descend from DOLCE’s Quality/Quale/Region — Masolo et al., WonderWeb D18, 2003; the majority of tagged properties fall under that DOLCE-derived apparatus) on the predicate scopeNote and the term page. Lead every upper-ontology surface with “UFO-informed, not UFO-grounded”; badges read “classified-under”, never “is-a”; /ontology/foundational-ontology stays the long-form hub.
    5. Markup triage for the rest (Q4, 4–2–0 per-candidate). Mark up: the IAO crosswalk (ODR-0030 Rule 4, already adopt-now; referenced-not-imported, annotation-graph) and the bounded nine-to-nine gUFO closeMatch edges (from R1; never a per-class explosion). Keep as-is: the gUFO rdf:type markers (ADR-0034; audit confirmed clean — the lone opda-descriptive.ttl gufo: is a scopeNote string literal, not a triple). Decline as inert markup: the Relator-founds-RoleMixin edge (already realised as class topology — opda:numberOfSellers on the Proprietorship Relator) and UFO-L Hohfeldian correlativity (prose now; object-level SHACL reserved for when conveyancing use-cases demand — its own ODR; do not dress a biconditional axiom as an inert annotation).
    6. This record enforces — does not amend — ODR-0030 Rule 1 and Rule 7(b). Both were found breached in the committed corpus; R2 and R4 realise them. ODR-0030’s text stands.
    7. Two open operator calls + one (now-resolved) split. (a) OntoClean meta-property markup (Q4) — RESOLVED by session-042: conditional adoption. The held 3–3 converged onto one condition. Mark up the OntoClean meta-properties (±R/±I floor, + ±D where a Relator decision turned on it, never ±U — unity has adjudicated nothing in this corpus) as a SKOS-backed owl:AnnotationProperty vocabulary, on the subsumption lattice the check ranges over + its contrast set (not blanket-every-class, not only the contested leaves) — if and only if the canonical OntoClean check (find every −R type that is nonetheless rdfs:subClassOf something; IC-incompatible subsumption) ships atomically as a TBox-only CI meta-shape (the R3 tag-guard pattern, never instance-keyed). Engineering routed to ADR-0046: the tags and the consuming gate ship in the same commit or neither. If the operator declines the gate → REJECT-for-now (the per-category skos:definition signatures already shipped by ADR-0045 + the ODRs are the record). Envelope unchanged (owl:AnnotationProperty, annotation-graph-only, sh:in-governed, never reasoned / instance-SHACL-keyed). (b) exactMatch vs closeMatch per category may be tightened to skos:exactMatch where the identity genuinely holds; default is closeMatch.
    8. Anti-patterns (do NOT). Leave any opda:ufoCategory triple in a reasoned/SHACL graph; type it owl:DatatypeProperty/owl:ObjectProperty; reference a gufo: IRI directly as the value or as an rdf:type; mint SKOS concepts for the register-deference scheme axis; put a ufoCategory sh:in shape in the instance-validation union; ship category web pages that require minted IRIs to render or that read as a grounded/axiomatised UFO commitment; or materialise OntoClean/Relator-founds/UFO-L methodology as standing graph content absent a named queryable consumer + the Rule-4 quarantine.

    Vote and Dissent

    Council session-041 (Full Council; agent-fan-out with live SendMessage cross-talk). Per-question tally:

    QVerdictTally
    Q1 string vs resourceREVISE — converged: a quarantined category resource bears the gUFO alignment; predicate range (string+sh:in vs concept-IRI) is the residual; split the register axis4–2–0 FOR resource (→ converged; see session-041 §Post-positions convergence)
    Q2 markup & graph placementREVISE — owl:AnnotationProperty; relocate all tags+declaration to opda-annotations.ttl; 6th CI gate; sh:in tag-guard only5–1–0 (→ 6–0 on the landing)
    Q3 web pages / IAAFFIRM/REVISE — read-side projections; ship the Rule-7(b) DOLCE disclosure; “UFO-informed” verb5–0–1
    Q4 what else to mark upREVISE — per-candidate triage (IAO + bounded gUFO yes; gUFO types as-is; Relator-founds/UFO-L declined)4–2–0

    Held-as-live dissent (Cagle, DA — carried + sharpened from session-040). OntoClean is separable from UFO; the foundation vocabulary is droppable; the layer is optional, not harmful — and trigger (i) has fired in the committed corpus. Re-open trigger: if enrichment ships (mint, gUFO edges, pages) without first re-imposing the annotation-graph quarantine + the CI gate (Rule 2), the retention has lapsed by ODR-0030’s own terms and Cagle reverts to the Option D push (retire the UFO vocabulary; keep OntoClean-as-judgement + SHACL + SKOS). The verdict is constructed to keep this trigger dormant. Q1 (Cagle) — WITHDREW to the shared position (§Post-positions convergence): conceded the gUFO alignment must live as a quarantined resource; holds only that opda:ufoCategory’s range stays a governed xsd:string + sh:in. Non-negotiable: no exactMatch→gUFO edge reaches the reasoner.

    Q1 (Allemang, Queen) — substantially accommodated. Preferred direct gufo: IRI reference over local minting (reuse-before-mint); the convergence accommodates it — the category resource’s skos:exactMatch/closeMatch edge preserves the gUFO link, and the residual option of keeping opda:ufoCategory’s range a string avoids minting a concept as the value.

    Q4 — OntoClean meta-property markup (was a held 3–3) — RESOLVED by session-042. The Reduced Council (Queen Kendall; DA Baker — WITHDRAWN on the gate condition; Guarino FOR; Allemang FOR-iff-gated) converged on conditional adoption: mark up iff the canonical-check CI gate ships atomically with the (scoped ±R/±I, never ±U) tags. Decisive finding: the per-category OntoClean signature already ships in ADR-0045’s UFOCategoryScheme skos:definitions, so the question reduced to “also per-type, for a machine” — answered “yes, iff a machine reads it.” Engineering → ADR-0046; if the gate is declined, REJECT-for-now with the re-open trigger: a named consumer needs the per-type vector as queryable data.

    Amendments

    • 2026-06-15 — RATIFIED proposed → accepted (operator). The operator ratifies adoption of R1–R6. Basis: the engineering realisation is shipped and green — opda:ufoCategory is owl:AnnotationProperty, the tags are relocated to opda-annotations.ttl, the opda:UFOCategoryScheme + DOLCE disclosure are emitted, and the sixth three-graph CI gate (now seven checks) guards the quarantine (ADR-0045); session-044 separately re-confirmed the binding prior ODR-0030 sound/unchanged. R7 open calls (the gufo: direct-reference vs local-mint residual, and the predicate-range string-vs-concept choice) are recorded as still-open operator residuals, not blockers. Q4 / ADR-0046 (OntoClean per-type markup) is NOT carried by this ratification — it remains a separate conditional operator decision (ship the atomic CI gate, against DA Baker’s live REJECT-if-ungated dissent) and stays proposed.
    • Engineering realisation: ADR-0045 — the emitter relocation + retype, the sixth three-graph CI gate, the opda:UFOCategoryScheme emission, the DOLCE disclosure, and the byte-identity re-pin that realise this ODR (and correct ADR-0044 Phase 5c).
    • Council transcript: session-041 — Representing opda:ufoCategory and the upper-ontology layer (full per-question dialectic, the verified breach finding, the post-positions convergence, tally + DA scorecard).
    • Binding prior: ODR-0030 (UFO-as-lens scoped to the Relator spine; Rule 1 quarantine; Rule 2 register-deference relabel; Rule 7 honesty + DOLCE disclosure) — this record enforces its Rule 1 + Rule 7(b).
    • Depends on / scoped by: ODR-0029 (entailment/validation boundary; the shallow regime), ODR-0027 (classification-over-inheritance — ufoCategory is an annotation facet, not a subclass tree), ODR-0011 §8a (the scheme-level UFO axis), ODR-0004 §3a (three-graph separation + CI gates); ADR-0044 (ontology as web pages; this ODR + ADR-0045 correct its Phase 5c), ADR-0034 (the gated gUFO typing pass).
    • External citations: OWL 2 Web Ontology Language Structural Specification (W3C Rec, 2012) §5.5/§10 (annotation properties carry no logical consequence); SHACL Core (W3C Rec, 2017) §4.6.1 (sh:in); SKOS Reference (W3C Rec, 2009) §10 (mapping properties) + SKOS Primer (W3C Note, 2009) §1.3; Guarino & Welty, “An Overview of OntoClean,” Handbook on Ontologies 2nd ed. (2009); Masolo, Borgo, Gangemi, Guarino & Oltramari, WonderWeb Deliverable D18 — DOLCE (2003); Almeida, Guizzardi, Sales & Fonseca, gUFO: A Gentle Foundational Ontology for OWL; Baker et al., “Key Choices in the Design of SKOS,” J. Web Semantics 20 (2013); Allemang, Hendler & Gandon, Semantic Web for the Working Ontologist 3rd ed. (2020).

    ← Back to ODR Corpus  |  Download Markdown source

    This record's status, scope and dated amendments identify its current authority. Historical decisions retain their recorded context; later corrections remain auditable in Git history.

    Comments

    Loading comments…