---
status: accepted
date: 2026-06-15
tags: [ufo, ufocategory, gufo, ontoclean, dolce, annotation-property, three-graph-quarantine, skos, dereferenceability, honesty, standards-alignment]
supersedes: []
depends-on: [ODR-0030, ODR-0029, ODR-0027, ODR-0011, ODR-0004, ADR-0044, ADR-0034]
implements: []
kind: architecture
scope: []
council: session-041
---

# `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](ODR-0030-foundational-ontology-choice.md) / 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](council/session-042-ontoclean-meta-property-markup.md) has since resolved it as conditional adoption** (mark up iff the canonical-check CI gate ships atomically; scoped ±R/±I; engineering → [ADR-0046](../../adr/ADR-0046-ontoclean-meta-property-markup.md)).

### 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](./council/session-043-transaction-phase-and-ufocategory-dereferenceability.md) (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:Concept`s 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](council/session-042-ontoclean-meta-property-markup.md): 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](../../adr/ADR-0046-ontoclean-meta-property-markup.md)**: 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:

| Q | Verdict | Tally |
|---|---|---|
| Q1 string vs resource | **REVISE** — converged: a quarantined category resource bears the gUFO alignment; predicate range (string+`sh:in` vs concept-IRI) is the residual; split the register axis | 4–2–0 FOR resource (→ converged; see session-041 §Post-positions convergence) |
| Q2 markup & graph placement | **REVISE** — `owl:AnnotationProperty`; relocate all tags+declaration to `opda-annotations.ttl`; 6th CI gate; `sh:in` tag-guard only | 5–1–0 (→ 6–0 on the landing) |
| Q3 web pages / IA | **AFFIRM/REVISE** — read-side projections; ship the Rule-7(b) DOLCE disclosure; "UFO-informed" verb | 5–0–1 |
| Q4 what else to mark up | **REVISE** — 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](council/session-042-ontoclean-meta-property-markup.md).** 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:definition`s, so the question reduced to "also per-*type*, for a machine" — answered "yes, iff a machine reads it." Engineering → [ADR-0046](../../adr/ADR-0046-ontoclean-meta-property-markup.md); 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](../../adr/ADR-0045-ufocategory-quarantine-restoration-gufo-scheme-sixth-gate.md) — 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](council/session-041-ufocategory-upper-ontology-representation.md) (full per-question dialectic, the verified breach finding, the post-positions convergence, tally + DA scorecard).
* **Binding prior:** [ODR-0030](ODR-0030-foundational-ontology-choice.md) (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](ODR-0029-inference-validation-boundary-and-entailment-regime-disposition.md) (entailment/validation boundary; the shallow regime), [ODR-0027](ODR-0027-classification-roles-inheritance-skos-doctrine.md) (classification-over-inheritance — `ufoCategory` is an annotation facet, not a subclass tree), [ODR-0011](ODR-0011-enumeration-vocabularies.md) §8a (the scheme-level UFO axis), [ODR-0004](ODR-0004-pdtf-ontology-foundation.md) §3a (three-graph separation + CI gates); [ADR-0044](../../adr/ADR-0044-ontology-as-web-pages-dereferenceable-entity-detail-pages.md) (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).
