Known issues

    A completeness claim that conceals deferred work or defects is a provenance lie. This is the dated register of every known caveat in the schema-derived ontology, each cross-referenced to the ODR that governs it. The important distinction throughout: none of these is a defect in OPDA's own materialised graph. They are consumer-side traps, by-design outcomes, a report-side miscount, and one item already resolved by a rename.

    The register (dated 2026-06-14)

    IssueGoverning recordStatusDetail
    EPC-certificate inference cross-trip ODR-0028 R3 / ODR-0029 R4 Consumer-side A naive full-RDFS/OWL consumer mis-infers EPCCertificate ⊑ Property (because currentEnergyRating has rdfs:domain Property). OPDA's own Safe-Group closure excludes domain/range rules and does NOT produce this (ODR-0025 §R7); the round-trip exemplars validate against the Safe-Group closure. The model is correct — this is a trap a naive consumer sets for itself.
    Thin overlay profiles session-034 / ODR-0010 By design 16 of 31 profiles bind 0 per-leaf shapes. Most overlay leaves are A/B/C/D/E/F treatments carried by dct:subject + dct:source, not per-leaf sh:path — profiles bind Category-G only. 224 bound / 1095 GAPped across 28 forms; the GAP register is the deliberate, honest record of this.
    oc1 / llc1 held thin ODR-0008 / session-034 Q2 By design (re-open trigger) Authority-register extracts (Official Copy / Local Land Charges), not human-filled forms. Held thin until a named consumer issues a worked SPARQL query against a register leaf — at which point the binding is re-opened.
    SHACL-Core vacuous sh:xone ODR-0017 Open (documented caveat) The committed non-conformant exemplar reads conforms: true under plain SHACL-Core. Correct validation requires pyshacl with advanced=True (see Consume the ontology). Documented, not silent.
    Ruleset is not OWL 2 RL ODR-0029 R5 Resolved (rename) config/opda-rdfs-plus.rules is a sound but RL-incomplete fragment (7 of the RL rules; omits domain/range/equality/functional/equivalence) — not an OWL 2 RL reasoner. Resolved by an honest rename + header; the rule logic is frozen.
    Category-C binning report miscount ODR-0028 Report-only A report-side over-count in descriptive-category-binning.json; the emitted TTL is already correct G-grade. The miscount is in the audit report, not in any emitted artefact.
    ODR-0004 namespace prose drift ODR-0004 Open (prose cleanup) The ODR-0004 prose still cites the old w3id.org/opda/# namespace; the emitted TTL correctly uses opda.org.uk/pdtf/ (the as-built namespace — see the prefix map). Prose-only cleanup.

    Why the EPC cross-trip is not a model defect

    This is the issue most likely to be misread, so it is worth stating plainly. If you load the OPDA ontology into a generic reasoner running full RDFS or OWL — one that applies rdfs:domain entailment — and you assert an opda:EPCCertificate that carries currentEnergyRating, that reasoner will infer the certificate is an opda:Property, because currentEnergyRating is declared with rdfs:domain opda:Property. That inference is wrong: an EPC certificate is a document about a property, not the property itself.

    OPDA does not make that inference. The Safe-Group closure adopted in ODR-0025 (§R7) deliberately excludes domain and range rules. The seven frozen rules cover subclass, subproperty, inverse, symmetric and transitive entailment — the relations whose closure the author actually wants — and nothing that would manufacture a spurious class membership from a property's declared domain. The round-trip exemplars are validated against this closure, and they pass. So the cross-trip is a consumer-side trap (and a modelling smell worth knowing about), not a defect in OPDA's graph, and it does not block draft → accepted. The provenance for this ruling is on the Decision provenance page.

    Why thin profiles are by design

    "A form IS its SHACL overlay" (ODR-0010). But a PDTF form is mostly questions whose answers are A/B/C/D/E/F treatments — carried by dct:subject and a JSON-pointer dct:source — not Category-G substantive attributes that bind as per-leaf sh:path shapes. A profile that binds only its Category-G leaves and GAP-registers the rest is therefore the ratified outcome, not an omission (session-034). A "thin" profile that binds zero per-leaf shapes (oc1, llc1, tf, and others) is correct: the leaves it would otherwise bind are register extracts or free-text, and the GAP register records exactly which leaves are unbound and why. The live profile counts and the bound/thin split are on the overview and the bake-off's custom-layer rendering.

    Why the ruleset is not an OWL 2 RL reasoner

    An earlier framing risked implying that config/opda-rdfs-plus.rules was an OWL 2 RL profile reasoner. It is not, and ODR-0029 R5 resolved this by renaming the artefact and giving it an honest header. The ruleset is a sound but RL-incomplete fragment: it implements seven of the OWL-RL rules and deliberately omits domain/range, equality (owl:sameAs), functional-property and equivalence reasoning. Soundness means everything it derives is valid; RL-incompleteness means it does not derive everything OWL 2 RL would — which is the point, because the omitted rules are exactly the ones that would produce the EPC cross-trip and spurious owl:sameAs collapses. The rule logic is now frozen.

    Related: Decision provenance (the governing records), Consume the ontology (the advanced=True validation recipe), and the Tool bake-off (the custom layer that emits the GAP register).

    Comments

    Loading comments…