Deferred work register from the 2026-05-18 implementation push
Context and Problem Statement
The 2026-05-18 implementation push shipped:
- ADRs 0002 + 0003: full migration of 158 pages to bare-slug URLs + idiomatic Astro (build-time chrome composition, typed
src/lib/site.ts,src/components/library,public/ui/site.jsdeleted). - ADR-0001 Wave 1 vocabulary alignment: sidebar restructured into “OPDA’s rules” / “Operating Model” / “Quality & security” groups; PageMeta categories updated on 9 pages.
- ADR-0001 Wave 2 page scaffolding: four new stub pages at
/governance/{data-quality,data-security,accreditation-directory,overlay-attachments}with intros, section headings, and “content pending” callouts. - ADR-0004: full spec of the Accreditation Directory artefact.
What was not done — and explicitly belongs to someone else (a WG, a future session, a contributor with the right access) — needs to be collected somewhere so it doesn’t drift out of sight.
Things that aren’t named in writing rot. The Wave 1 “DAMA Wheel cross-reference per page” item is exactly the kind of thing that would be forgotten in six months unless somebody can point at it. The handover note from 2026-05-18 already proved this pattern works (the 14→30 chain break was a known item from a prior handover, not a surprise).
Decision Drivers
- Visibility of remaining work. The next contributor should see the whole picture without archaeology.
- Named ownership. Each item needs a WG / individual / EC responsibility so accountability is not diffuse.
- Triggering conditions. Explicit so items that aren’t ready don’t waste review cycles.
- One source of truth. Beats the equivalent information being spread across multiple ADRs, handovers, and project boards.
Considered Options
- A — No register; track items in handovers and ADR open-question sections. Minimal new artefact. Risk: items drift across documents and rot when handovers don’t propagate.
- B — Living register as an ADR (chosen). Single document, ADR-numbered for permanence, with named ownership and explicit triggering conditions. Items leave when promoted / completed / abandoned / superseded.
- C — External project tracker. GitHub Projects or Linear. Higher fidelity (states, assignees, due dates) but lives outside the published artefact set. Adds tool dependency.
Decision Outcome
Chosen option: B — Living register as an ADR, because it sits beside the other ADRs (one place to look), is plain markdown (no tool lock-in), and the discipline of ADR review cycles forces periodic re-evaluation. The register itself follows.
The register is explicitly a living document — items leave when they ship, get superseded, or get formally abandoned. It is not an immutable record of intent (that’s what the other ADRs are for); it is the to-do list with named ownership. The MADR status: accepted refers to the meta-decision (to maintain a register); the register contents mutate.
A. Wave 2 content authoring (substantive — months of WG work)
| # | Item | Owner | Triggering condition / dependency | Notes |
|---|---|---|---|---|
| A1 | /governance/data-quality content | C&R WG | Workstream kickoff (per ADR-0001 §“Vote and Dissent” newly-resolved #3 — runs in parallel with A2 and A3) | Stub has section headings for the 6 DQ dimensions, measurement protocols, AL mapping, reporting. WG fleshes out each section. |
| A2 | /governance/data-security content | C&R WG | Workstream kickoff (parallel with A1, A3) | Stub has 5 controls (KYC/KYB, key mgmt, signature verification, revocation, audit logging) + policy / checklist / audit framing. |
| A3 | /governance/accreditation-directory content | C&R WG | Workstream kickoff (parallel with A1, A2); depends on ADR-0004 Phase 1 (skeleton schema) | Stub describes the how-it-works flow, scoring, evidence tiers; first publish target is end of quarter following all four Wave 2 ADRs ratified. |
| A4 | /governance/overlay-attachments content | Technical WG (with C&R WG input on retention + consent) | Workstream kickoff (parallel with A1–A3) | Stub lists 11 v3 overlay attachment types; sections for file formats / signing / retention / consent. |
| A5 | C&R WG recruitment to support parallel A1–A3 | Engagement WG | Before A1/A2/A3 kickoff (per ADR-0001 §“Vote and Dissent” newly-resolved #3 pre-condition) | Target firms with mature internal DQ / Security functions — see docs/recruitment/cr-wg-candidate-firms.md. |
B. Wave 1 leftover tagging (mechanical, but per-page work)
| # | Item | Owner | Triggering condition / dependency | Notes |
|---|---|---|---|---|
| B1 | DAMA Wheel cross-reference per page | Whoever picks up the Wave 1 leftovers | Opportunistic | For each existing page, tag the DAMA KA(s) it serves. KAs out of scope (DW/BI, Storage & Ops, Document & Content) explicitly disclaimed once each. ~24+ pages. |
| B2 | Per-KA template applied per page | Same | Opportunistic | Consistent rubric: Purpose · Activities · Deliverables · Roles · Metrics · Maturity. Apply incrementally; not all pages need every section filled. |
C. Accreditation Directory build pipeline (ADR-0004 Phase 4)
| # | Item | Owner | Triggering condition / dependency | Notes |
|---|---|---|---|---|
| C1 | scripts/build-accreditation-directory.mjs | Technical WG | Member firms ready to submit first VCs (downstream of A1–A4 shipping capability bundles) | Build-time aggregator: reads all current-quarter VCs from source/04-governance-bodies/accreditation/credentials/, validates signatures against Trust Registry, emits src/data/accreditation/current.json for the Directory page render. |
| C2 | Member-firm VC submission tooling | Technical WG + Engagement WG | After C1 ships | Firms need a clear way to mint and submit their quarterly VCs. CLI helper? Web form? Out of scope for the script itself. |
| C3 | First quarterly publish | C&R WG + Technical WG | After A1–A4 + C1 + C2 | End-of-quarter milestone for the first time the Directory has real data. |
| C4 | OPDA-listed audit-partner list | Engagement WG | Before any firm claims an evidence-tier score 5–6 | Initial list likely Big 4 + property-data specialists. Scaffold lives at docs/recruitment/opda-listed-audit-partners.md. |
D. Wave 3 watching briefs (per ADR-0001 §“Wave 3”)
| # | Item | Owner | Triggering condition / dependency | Notes |
|---|---|---|---|---|
| D1 | GARP for OPDA institutional records | TBD | Opportunistic | Apply Generally Accepted Recordkeeping Principles to OPDA’s source/ tree. Mostly a published handling policy + retention defaults per subtree. |
| D2 | Storage & Ops — retention/disposal guidance | TBD | Trust Registry to production OR consumer-trust narrative needs it | Member-firm guidance: how long does a verified claim represented by the PDTF schema or SPDTF live in a firm’s database after a transaction completes? UK GDPR alignment. |
| D3 | AI/ML governance over data represented by the PDTF schema or SPDTF | TBD | First member firm publishes a model trained on those data OR ICO/EU AI Act guidance solidifies | Bias/fairness considerations specific to property data (historical red-lining patterns). Data-use governance, not platform engineering. |
| D4 | Data-product discipline for OPDA’s meta-analytics | TBD | Opportunistic | Apply data-product discipline (lineage, release plan, versioning) to Accreditation Directory, Standards Report, Consumer Survey. Extend provenance-map.yaml toward a lineage dictionary as new reports are produced. |
| D5 | Annual Wave 3 review (AGM-adjacent EC meeting) | EC | Every AGM-adjacent EC meeting | ~15-min agenda item walking D1–D4 (and successors): trigger fired? rotted? watching brief continues? |
E. Pre-deploy + ops
| # | Item | Owner | Triggering condition / dependency | Notes |
|---|---|---|---|---|
| E1 | Visual smoke test in browser | Henrik (next session) | Before push to production | Theme toggle, sidebar collapse, tree-folder toggle, mobile menu, Mermaid diagrams across sections, data tables on /modelling/data-dictionary + /modelling/business-glossary. |
| E2 | External materials audit | Engagement WG | Before announcing the URL change | OPDA-controlled materials pointing to old /pages/NN-…html URLs will hard-break. Scan briefings PDFs in source/02-policy-and-positioning/briefings-to-government/, openpropdata.org.uk content, propdata.org.uk content, DPMSG decks, member-firm comms, regulator submissions. Checklist at docs/external-materials-audit-checklist.md. |
| E3 | DCAM attribution note in governance.md | Technical WG | When time allows | Per ADR-0001 §“Vote and Dissent” newly-resolved #2 (permissive): one-paragraph note in source/03-standards/trust-framework/docs/governance.md defining the “name freely, no verbatim” boundary so future contributors don’t re-litigate. |
F. Open items in other ADRs
Tracked here so the register is comprehensive; details live in the originating ADRs.
| # | Item | Originating ADR | Notes |
|---|---|---|---|
| F1 | OPDA-listed audit partners | ADR-0004 Q1 | Same as C4 above; cross-listed. |
| F2 | Conformance Scheme integration with Directory | ADR-0004 Q2 | The existing /governance/conformance-scheme page needs updating to reference the Directory and explain the AL × Capability relationship. Own ADR when work begins. |
| F3 | Member-firm portal (deferred tier of the Directory) | ADR-0004 Q3 | Private detailed view for firms + OPDA. Triggers on first member-firm request. Requirements stub at docs/specs/member-firm-portal-requirements.md. |
| F4 | Quarterly publishing automation | ADR-0004 Q4 | Cron / GitHub Action to refresh the Directory; tooling decision deferred. |
| F5 | Ex-member handling in the Directory | ADR-0004 Q5 | ”Former member, last data YYYY-Qn” vs immediate drop-out. Membership ADR territory — draft scoping at docs/adr/_drafts/membership-lifecycle.md. |
| F6 | Re-anchor forward-looking standards references (claims, VCs, API specs) off legacy propdata.org.uk anchors | ADR-0051 Thread 4 | Partially done: withdrawn versioned draft-scheme references were corrected. SPDTF is the first collaboratively authored scheme draft; the existing PDTF schema and its derived ontology are attributed inputs, not an endorsed predecessor scheme. Remaining: the schema $id namespace (trust.propdata.org.uk/schemas/… — the real committed identifiers in source/03-standards/schemas/) and the JSON-LD context-publishing host await a concrete OPDA-authored target plus the pending Smart Data Guidebook draft chapters and Open Banking Open Finance standards/architecture. Perseus (Open Energy) is open source and reachable. Do not invent alignment before the canon is available. |
| F7 | Transition-bridging tooling + funding ask | ADR-0052 Item 6 | Keep the recommendation for current→new schema bridging tooling and implementation tooling for industry (endorsed in the stakeholder review). The funding / resource requirement must be surfaced to the stakeholder for a decision against existing project funding, which may have scope to cover it. Surfaced on /strategy/project-roadmap §Risks. |
G. Ontology implementation programme — surfaced by validation discipline
Per docs/plan/ontology-implementation.md §9.3 + §9.4, every ADR in the ontology programme passes a structural validation gate before moving proposed → accepted. Validation may surface (a) genuine ratified-rules ambiguity needing Council amendment, or (b) named follow-ups that are not blockers but must be explicitly queued. Items below are queued from validation reports under docs/adr/validation/.
| # | Item | Owner | Triggering condition / dependency | Status | Notes |
|---|---|---|---|---|---|
| G1 | Council Author-only session — reconcile term-sourcing precedence between ODR-0004 §7a and ADR-0007 §“Term-sourcing five-line precedence” | OPDA Author (per ODR-0001 §“Self-amendment process”) | Before any emitter branches on tier == 3 semantics (currently no caller does; safe to defer one cycle) | Open (queued 2026-05-27 from ADR-0008 validation) | ODR-0004 §7a lists tier 3 as “Other regulatory authorities (contextual, not authoritative)”; ADR-0007 pseudocode places “business glossary” at tier 3 and regulator at tier 5. ADR-0008 implementation follows ADR-0007. Engineering does not silently reconcile — Author-only amendment needed to either reorder ODR-0004 §7a or amend ADR-0007 pseudocode. CLOSED 2026-05-31 (Author-only reconciliation): already consistent. ADR-0007 §“Term-sourcing five-line precedence” (lines 130–167) now formalises ODR-0004 §7a verbatim — slot 3 = Other regulatory authorities (contextual → skos:scopeNote/skos:closeMatch), slot 4 = business glossary, slot 5 = schema-leaf; the resolver takes the primary dct:source from the first match of slots {1,2,4,5} and collects slot 3 separately. The stale glossary-at-3 / regulator-at-5 ordering this row described no longer exists, and no emitter treats tier-3 as primary. Recorded in ODR-0004 §7a. |
| G2 | Prefix-filter heuristic refinement in serialiser/canonical.py | ADR-0009 worker | ADR-0009 implementation start (Phase 1, gated on ADR-0008 acceptance) | Closed 2026-05-27 (commit c5629e7) | Resolved via option (a): Literal lexical values are now scanned for IRI-shaped strings that match bound namespaces (serialiser/canonical.py:143-148). Two regression tests added (test_literal_iri_lexical_value_retains_prefix, test_non_iri_literals_do_not_pollute_prefix_set). Verified independently by ADR-0009 validator. |
| G3 | check_derived_provenance git-blame implementation + regression test (ODR-0004 §3a clause #5) | ADR-0009 worker | ADR-0009 implementation start | Closed 2026-05-27 (commit c5629e7) | Implemented at tools/opda-gen/src/opda_gen/ci/three_graph_test.py:138-229 via git log --format=%ae walk over source/03-standards/ontology/derived/; env-var allowlist (OPDA_SERVICE_ACCOUNTS) parameterises the service-account list. Four regression tests (missing-dir, clean-history, non-service-commit, env-var-allowlist) using tmp git-repo fixture. Verified independently. |
| G4 | Split CI workflow comment block by activation ADR | ADR-0009 or ADR-0014 worker (cosmetic) | Opportunistic | Closed 2026-05-27 (commit c5629e7) | .github/workflows/ontology-byte-identity.yml:31-52 now carries two distinct activation markers — one for ADR-0009-activated steps (regenerate / byte-identity diff / ci-three-graph) and one for the ADR-0014-activated validate-exemplar step. |
| G5 | Mirror Section G to /governance/deferred-work Astro page | Technical WG / next contributor touching the mirror | Before next quarterly publish OR when next Section G item lands | Closed 2026-05-27 | Astro mirror at src/pages/governance/deferred-work.astro now carries the full G1–G11 table with Status + Linked-artefact columns matching the other Section A–F tables. |
| G6 | Cosmetic ADR-0009 template amendment — document pinning convention | Author / opportunistic | Opportunistic | Closed 2026-05-27 | ADR-0009 §“foundation.ttl” prose preamble now documents the sentinel pinning convention: angle-bracket placeholders are illustrative, not live-substitution directives; sentinel-pinned to satisfy byte-identity CI per ODR-0004 §6a. |
| G7 | Prefix-filter edge cases for embedded URLs in rdfs:comment / dct:description | ADR-0010 worker | When first rdfs:comment containing a URL is emitted as a Literal | Closed 2026-05-27 (ADR-0010 implementation) | Closed by ADR-0010 worker because ADR-0010 schemes carry gov.uk URLs inside skos:scopeNote @en Literals — the same surface G7 names. Two regression tests added to tests/test_serialiser.py: (i) test_literal_url_inside_scope_note_does_not_bind_new_prefix (Literal containing a gov.uk URL inside a sentence MUST NOT bind gov.uk); (ii) test_literal_url_lexical_value_does_not_bind_unbound_namespace (Literal lexical value IS exactly a gov.uk URL MUST NOT bind gov.uk). Confirms the existing scan is contractually conservative-safe. |
| G8 | ADR-0010 scope expansion — additional SKOS schemes beyond the named first batch | ADR-0013 worker | When a downstream module ADR (ADR-0011+) cites a scheme not in the ADR-0010 §“Scheme catalogue” 16-row table | Closed 2026-05-28 (ADR-0013 implementation) | ADR-0013 worker added 7 new SKOS schemes required by BASPI5 overlay coverage: YesNoScheme, YesNoNotApplicableScheme, YesNoNotKnownScheme, YesNoNotRequiredScheme, PropertyTypeScheme, OffMainsDrainageSystemTypeScheme, OwnerTypeScheme. Total scheme count: 23 (was 16). Each new scheme follows ADR-0010’s per-scheme metadata MUST-haves (UFO category + steward + dct:source + scope-note). Further scheme expansions remain opportunistic per the original closure criterion. |
| G9 | Populate data-dictionary enums for MilestoneKind / AssuranceLevel / EvidenceMethod / AddressVariant | ADR-0013 worker | Opportunistic (next dictionary refresh cycle) | Closed 2026-05-28 (ADR-0013 implementation) | All four schemes now emit real per-member data without the PLACEHOLDER: warning. MilestoneKindScheme cites ODR-0007 §Q2 (transaction-lifecycle pattern) as the per-member dct:source. AssuranceLevelScheme cites eIDAS Article 8 verbatim per ODR-0011 §4a regulator-citation discipline + adds PDTF-Standard member citing ODR-0009 §Q3. EvidenceMethodScheme cites OIDC4IDA verbatim. AddressVariantScheme cites ODR-0015 §Q1 (the ratifying Council anchor for the variant-set). Future data-dictionary refresh can supplement these citations without removing the now-stable per-member structure. |
| G10 | TransactionStatusScheme per-member dct:source URI fabrication audit | ADR-0013 worker | Opportunistic, MUST land before ADR-0014 BASPI5 round-trip (because BASPI5 needs full dct:source traceability) | Closed 2026-05-28 (ADR-0013 implementation) | Resolved via validator option (a)+(b) hybrid: per-member dct:source now cites the ratifying Council anchor <https://w3id.org/opda/odr/ODR-0011#section-8a-ufo-meta-category>; per-member prov:wasDerivedFrom links each canonical label to the underlying data-dictionary enum value it sources from (Listed ← #status.For%20sale; Offered ← #status.Under%20offer; Accepted ← #status.Sold%20subject%20to%20contract; Exchanged ← #status.Contracts%20exchanged; Completed ← #status.Completed exact). The Member dataclass in vocabularies.py gained an optional derived_from: URIRef | None field. Verified by independent SPARQL: grep -c "data-dictionary#status.Listed|...Offered|...Accepted|...Exchanged" opda-vocabularies.ttl → 0 (fabricated URIs eliminated). |
| G11 | Full Q5a binding-table emission (~44 leaves) into opda-property.ttl + opda-descriptive.ttl | ADR-0013 worker (bundled with overlay profile emission) | Closure tightened per ADR-0011 validator: BEFORE ADR-0014 MVP gate — every leaf BASPI5 round-trip discovers as missing MUST emit, no silent omissions | Closed 2026-05-28 (ADR-0013 implementation) | 17 additional Property/LegalEstate DatatypeProperties emitted in opda-property.ttl: propertyType, ownershipType, heatingType, centralHeatingFuelType, offMainsDrainageSystemType, areBoundariesUniform, isLocatedOverCommercialPremises, isSharedOwnership, isGroundRentPayable, sellerContributesToServiceCharge, hasSprayFoamInstalled, isSupplyMetered, isInsured, hasBeenFlooded, hasSmartHomeSystems, hasValidGuaranteesOrWarranties, soldWithVacantPossession, riskIndicator. Two additional Agent-domain DatatypeProperties in opda-agent.ttl: ownerType, hasOthersAged17OrOver. Each carries rdfs:domain (per ODR-0008 §Q5a placement) + rdfs:range xsd:string + rdfs:label @en + rdfs:comment @en + dct:source <ODR-0008#section-Q5a>. Bound to schemes via sh:in in profiles/baspi5.ttl per ODR-0010 §Rule 2 (build-step replacement, not entailment). Per-question (not single-predicate) pattern adopted per worker brief recommendation. Further yesNo-flavoured predicates land as downstream overlay demand surfaces. Update 2026-05-30: riskIndicator has since been removed from opda-property.ttl and re-homed onto opda:RiskAssessment (ODR-0008d Category-E model — it bins to Category E, the search/environmental result, not a flat Property attribute); the remaining 16 stand. This §Q5a-vs-ODR-0008d reconciliation supersedes part of this closed item and is flagged for WG ratification (per the §G1 principle that engineering does not silently reconcile ratified-rules disagreements); it is the first reconciliation-register entry in ADR-0031. Ratified 2026-05-31 (Council session-028 Q8 / ODR-0024 R1): the 6 G11∩candidate-G overlap leaves STAND and the riskIndicator re-home is confirmed — the WG-ratification flag is cleared. |
| G12 | Canonical serialiser blank-node deduplication for multi-target shared blank nodes | ADR-0013 worker (bundled) | Cosmetic; opportunistic | Closed 2026-05-28 (ADR-0013 implementation) | Resolution went beyond the cosmetic scope and fixed a latent byte-identity bug surfaced by the BASPI5 profile emission: serialiser/canonical.py previously sorted multi-object lists by str(o), which for BNodes returns rdflib’s non-deterministic internal label (e.g. Nf3a2...). Profile shapes carrying multiple sh:property blank-node references therefore reordered between runs, breaking byte-identity. Fix: introduced _object_sort_key(obj, blanks) helper that returns the deterministic skolem hex (_:b<hex>) for BNodes and str(obj) for everything else; both the triple-sort and the multi-object-list sort now use it. Regression test test_multi_object_blank_node_list_byte_identical_across_runs in tests/test_serialiser.py exercises 5 fresh Graph() constructions producing byte-identical output. The original cosmetic dedup (named skolemised URIs for shared blanks) is now a future opportunistic improvement — no longer load-bearing. |
| G13 | Housekeeping — confirm G1 status closure in ADR-0005 §G | Author / 2026-05-27 | Now | Closed 2026-05-27 (this commit) | G1 was already closed in commit 5bd0c41 per 2026-05-27 amendment. ADR-0012 validator (commit ae1560f) noted the status column reads “Closed 2026-05-27” so the validator’s G13 concern was a stale-read artefact. No further action needed. |
| G14 | Cat 4 SHACL shape activation trigger — declare opda:hasSpecialCategoryData predicate OR route Council S012 Q3 ratification | Council Author-only session (per programme plan §9.4) + ADR-0014 worker engineering closure | Before MVP gate (ADR-0014) demonstrates Cat 4 firing on a real PII case | Closed 2026-05-28 (ADR-0014 implementation; Council route preserved) | ADR-0014 worker declared opda:hasSpecialCategoryData as owl:DatatypeProperty in opda-classes.ttl with rdfs:range xsd:boolean + full A9 metadata. dct:source cites ODR-0012 §Q5 (the Cat 4 shape’s ratifying clause); skos:scopeNote preserves the Council S012 Q3 route — Council may rename or refine the canonical predicate name, and the Cat 4 shape + this declaration update in lockstep. Engineering closure is the minimum that lets the Cat 4 shape have a real TBox-level target; semantic refinement (e.g. conditional firing only when the value is true) remains a downstream shape-design Q for Council. Foundation owl:versionIRI bumped 0.4.0 → 1.0.0 as the class-graph extension. Verified by tests/test_g14_special_category_predicate.py (5 regression tests). |
| G15 | Cosmetic ADR-0007 amendment — document __version__ vs owl:versionIRI decoupling rule | Author / opportunistic | Opportunistic | Closed 2026-05-27 (this commit) | ADR-0012 worker bumped opda_gen.__version__ 0.3.0 → 0.4.0 (substrate addition: shapes + annotations files) but left foundation owl:versionIRI at <https://w3id.org/opda/0.3.0/> (class-graph unchanged). Rule documented in this commit’s amendment to ADR-0007 §“A9 per-kind discipline output” prose: __version__ tracks the generator package’s emitter capabilities; owl:versionIRI tracks each emitted graph’s content version, bumping only when the graph’s triples change. The two are intentionally decoupled. |
| G16 | ADR-0013 implementation report DatatypeProperty count: 19 → 20 (worker under-counted by 1) | ADR-0014 worker (bundled, cosmetic) | Opportunistic | Closed 2026-05-28 (ADR-0014 implementation) | ADR-0013 implementation report § “G11 — 20 new DatatypeProperties” updated; counts 18 property + 2 agent = 20 (was 17+2=19; the property module emits 18 by direct enumeration). |
| G17 | Stale “five foundation classes” doc-comments in foundation.py + opda-classes.ttl header | ADR-0014 worker (bundled, cosmetic) | Opportunistic | Closed 2026-05-28 (ADR-0014 implementation) | tools/opda-gen/src/opda_gen/emitters/foundation.py updated: docstrings + extra_lines for opda-classes.ttl + opda-annotations.ttl now name the six foundation classes (DiagnosticExemplar, GeneratorRun, RoleMixin, Role, Relator, ValidationContext) plus the ADR-0014-added foundation DatatypeProperty (opda:hasSpecialCategoryData per G14). Emitted TTL generator-comment headers regenerated. |
| G18 | Declare opda:role as DatatypeProperty in opda-agent.ttl for DASH editor ergonomics | ADR-0014 worker (bundled) | Before MVP gate (DASH form rendering ergonomics) | Closed 2026-05-28 (ADR-0014 implementation) | opda:role declared in opda-agent.ttl as owl:DatatypeProperty with rdfs:domain opda:RoleMixin + rdfs:range xsd:string + full A9 metadata. dct:source cites ODR-0006 §Q2. Per-overlay profiles constrain via sh:in over the RoleScheme members (BASPI5 profile already uses this pattern at Baspi5_SellerShape / Baspi5_BuyerShape). The typed encoding (a opda:Seller) remains canonical per ODR-0006 §Q2; the predicate is the notation surface BASPI5 and other JSON-based overlays consume. Verified by tests/test_g18_role_predicate.py (4 regression tests). |
| G19 | Fix 4 BASPI5 profile anchor URL mismatches (A1.8.7, A7.5.1, B1.2, A1) | ADR-0014 worker (bundled) | Before MVP gate (form-question IRI resolution) | Closed 2026-05-28 (ADR-0014 implementation) | Four BASPI5 anchors realigned in tools/opda-gen/src/opda_gen/emitters/profiles.py against actual baspi5Ref values in source/03-standards/schemas/src/schemas/v3/overlays/baspi5.json: A1 → A1.1 (Property shape’s primary anchor — no A1-only baspi5Ref exists); A1.8.7 → A1.8.4.1 (sprayFoamInsulation.hasSprayFoamInstalled); A7.5.1 → B4.6.2 (waterAndDrainage.water.mainsWater.waterMeter.isSupplyMetered); B1.2 → B1.1 (namesOfLegalOwners — no participants[].name baspi5Ref). All four now exact-match a baspi5Ref. Verified by test_baspi5_form_question_anchors_exact_match_baspi5_schema in tests/baspi5_round_trip/test_traceability.py + assertions in tests/test_profiles.py::test_baspi5_emits_known_question_anchors. |
| G20 | ADR-0013 implementation report anchor count: 36 → 28 (worker over-counted) | ADR-0014 worker (bundled, cosmetic) | Opportunistic | Closed 2026-05-28 (ADR-0014 implementation) | ADR-0013 implementation report § “BASPI5 form-question IRIs” + § “§Confirmation #6” counts updated 36 → 28 distinct anchors (validator’s count is canonical; worker over-counted because anchor-with-duplicate emissions were counted per emission rather than per distinct). |
| G21 | Cat 4 SHACL shape over-firing — SPARQL constraint refactor | Parent coordinator (engineering bug fix) | During ADR-0014 verification (before validator gate) | Closed 2026-05-27 (commit df5a165) | ADR-0014 worker discovered the Cat 4 SpecialCategoryPIIWithoutLawfulBasisShape (emitted by ADR-0012) fired sh:Violation on 7 of 15 exemplars — any exemplar with a Person instance. The ADR-0012 SHACL template used sh:property + sh:hasValue true + sh:not [sh:minCount 1] which forced every Person to carry opda:hasSpecialCategoryData=true. Engineering bug (the ODR-0013 §Q1 Cat 4 intent — “PII without lawful basis is a Violation” — was correct; the SHACL implementation was wrong). Fixed by switching to SHACL-AF sh:sparql constraint firing only on the conditional intersection ($this opda:hasSpecialCategoryData true . FILTER NOT EXISTS { $this dpv:hasLegalBasis ?b }). Regenerated all 23 TTLs (no change beyond opda-agent-shapes.ttl) + all 15 expected-report.ttl files (7 now conform cleanly; 8 unchanged; 3 of the 7 now surface legitimate Cat 2 prov:wasDerivedFrom MinCount violations on claim evidence exemplars previously masked). Verified by ADR-0014 validator at commit 28dd92a. |
| G22 | Category-G monetary walk — the ~17 monetary leaves (amount, rent, *Price, ground rent, deposits, service charges, fees) emitted as distinct per-economic-kind properties over a value-structured opda:MonetaryAmount (magnitude + ISO-4217 currency), each on its own bearer | — | — | Closed 2026-05-31 (executed; ODR-0024 R3) | DONE: minted opda:MonetaryAmount (by-value: opda:amount decimal + opda:currency → seeded-extensible ISO-4217 opda:CurrencyScheme GBP/EUR/USD; node shape both-required, currency sh:in scheme, GBP-default via overlay) + 16 per-bearer monetary object properties (LegalEstate / Property / Valuation / Transaction) + opda:amount — reuse the value type, NEVER the bearer (Guizzardi, session-028 Q3). opda:price left a single-currency fixtures interim (not migrated). Coverage 179 → 196/239; all 6 CI gates green; 264 tests. Discharges the ODR-0008d item-3 deferral. |
| G23 | Category-G R5-surfaced follow-on — 40 enum/attribute leaves (constructionType, ofstedRating, transportType, priceQualifier, typeOfConnection, marketingTenure, + substantive yes/no Property/estate facts hasLift/isHMO/loftInsulated/…) the structural C-vs-G categoriser rule surfaced | — | — | Closed 2026-05-31 (executed; ODR-0024 R5–R6) | DONE: 40 leaves minted as flat datatype properties on their bearers (Property / LegalEstate / NearbyFacility). The 5 R6 SKOS schemes + the existing TenureKindScheme wired to their 6 consuming enum properties via base value shapes (sh:targetSubjectsOf + sh:in, no overlay needed); ownerType re-ranged → OwnerTypeScheme with sh:in wired the same way — closes the pre-existing Proprietor-overlay sh:in gap. Coverage 196 → 236/239; all 6 CI gates green; 265 tests. Only the 3 held opda:Room leaves (§G24) remain uncovered. |
| G24 | opda:Room/opda:Building modelling — emit the roomDimensions.rooms[] model (3 leaves: length, width, roomName) | Next descriptive-walk contributor (emitter change via ADR-0030) | EXECUTED via ADR-0033 (session-030) | Closed 2026-05-31 (emitted; 239/239) | DECISION (session-030, Full/8): NEITHER opda:Room (8–0) nor opda:Building (7–1) is a class — no data-realisable IC; Building’s +O IC genuine but latent. Model the repeating group as an anonymous by-value opda:RoomDimension structure (no IC/key — the §G22 opda:MonetaryAmount pattern) on opda:Property via opda:hasRoomDimension: opda:length/opda:width (xsd:decimal, metres-by-comment, no UnitOfLengthScheme), opda:roomName (xsd:string, non-rigid, never a key) + a keyless SHACL shape. DONE 2026-05-31 (ADR-0033): emitted opda:RoomDimension + opda:length/opda:width + opda:roomName + opda:hasRoomDimension + a keyless shape via the ADR-0030 generator → the curated Category-G walk is complete at 239/239 (0 uncovered); all 6 CI gates green; 266 pytest pass; byte-deterministic. Held dissents (re-open on an identity fact): thin Building bearer; UnitOfLengthScheme; Building/Room promotion. |
| G25 | Gated gUFO rdf:type typing pass — assert gufo:Quality / gufo:Mode on the uncontested Property descriptive leaves (EPC/council-tax/built-form Quale-in-Region), in the annotation graph (never the shapes graph — ODR-0010 §Q7a CI-test-3), omitting straddlers (priceQualifier, marketingTenure) + re-sorters (ownershipType) pending a rigid adjudication rule | Next descriptive-walk contributor (emitter change via ADR-0030) | When the UFO insight is worth materialising, OR as conjunct (i) of the ODR-0023 R2 re-open trigger | Closed 2026-05-31 (EXECUTED — ADR-0034; queued from Council session-029 Q5, 6–0–0) | Preserves the Quality/Mode distinction (real-as-typing per Guizzardi/Guarino) without minting the rejected ODR-0008a/b/c namespaces. Running it both materialises the insight AND builds the typed leaf-set that is conjunct (i) of the R2 re-open trigger (the other conjunct being a named query/validator that bites). NOT SHACL (no validator exists). Mechanism minority hold (Allemang: skos:scopeNote prose until a biting query) resolved at execution → gated rdf:type gufo:Quality-now, annotation-graph-isolated + removable. |
Lifecycle — how items leave this register
- Promoted to its own ADR. Item gets a dedicated ADR (typical for substantive workstreams). The register entry is updated to point at the new ADR and marked “promoted”. Two reviews later it can be removed.
- Completed. Item ships. Entry marked “completed YYYY-MM-DD”, remains for one review cycle as evidence, then removed.
- Abandoned. Item is explicitly declared out of scope (new ADR or annual review). Entry marked “abandoned YYYY-MM-DD, rationale: …”, remains permanently as a “considered and rejected” record.
- Superseded. Item is replaced by a different approach. Entry marked “superseded by [link]”, remains permanently.
Items that don’t progress for 12 months get flagged at the annual review (D5) for a “still relevant?” check.
Consequences
- Good, because known state of remaining work — the next contributor sees the whole picture without archaeology.
- Good, because named ownership — accountability is not diffuse. Each item has a WG / individual / EC responsibility.
- Good, because triggering conditions are explicit, so items that aren’t ready don’t waste review cycles.
- Good, because one source of truth for “what’s left” — beats the equivalent information being spread across multiple ADRs, handovers, and project boards.
- Bad, because the register can rot — if the annual review (D5) doesn’t actually walk this register, items become outdated. Mitigation: the review owner reads this ADR top to bottom each year.
- Bad, because comprehensive lists invite overcommitment — reading the register might create pressure to do all of it. Trigger conditions exist for a reason; respect them.
- Bad, because some items belong in tickets, not ADRs — the register is for items with architectural / governance weight. Pure implementation tickets (e.g. “fix typo on page X”) belong in a tracker, not here. If the register fills with trivia, prune.
- Neutral, because the register is mutable by design. Items can be added, edited, removed; rationale changes are part of the normal annual review. No “this ADR is wrong” problem.
Confirmation
- Annual Wave 3 EC review (item D5) walks this register top to bottom — the AGM-adjacent EC meeting agenda template includes the review item.
- “Last review:” date maintained at the top of the register section as it gets revisited; updated on each pass to confirm the register has been re-walked.
- Inter-review checks: items promoted to ADRs leave a
promotedmark with a link; items completed are dated and pruned after one cycle. Auditable by diffing this file against the prior release.
More Information
Open questions
- Where does pre-deploy item E1 (visual smoke test) actually live operationally? Right now it’s just a register entry. Could become a
scripts/smoke-test.mjsPlaywright script or stay as a manual checklist in this ADR. - Does B1 + B2 (DAMA Wheel + per-KA template) need its own ADR? Currently a Wave 1 leftover; might warrant a dedicated ADR if anyone is going to systematically apply it. For now, opportunistic / informal.
- Should F1–F5 entries be duplicated here or just linked? Duplicating risks drift; linking risks the register feeling incomplete. Current compromise: lightweight cross-reference table with the originating ADR for detail.
- Promotion threshold. When does an A/B/C/D item warrant its own ADR vs. staying in this register? Loose rule: if the item has its own sub-decisions to make, promote. If it’s just “do this thing”, leave it.
References
- ADR-0001 — Wave 1/2/3 commitments.
- ADR-0002 — folder + URL migration.
- ADR-0003 — idiomatic Astro refactor.
- ADR-0004 — Accreditation Directory spec.
HANDOVER-2026-05-18-governance.md— earlier-session record showing the value of named ownership for deferred items (e.g. the 14→30 chain break).docs/recruitment/cr-wg-candidate-firms.md— operationalises item A5.docs/recruitment/opda-listed-audit-partners.md— operationalises items C4 / F1.docs/external-materials-audit-checklist.md— operationalises item E2.docs/specs/member-firm-portal-requirements.md— operationalises item F3.docs/adr/_drafts/membership-lifecycle.md— scoping for item F5 future ADR.
Amendments
- 2026-05-18 — Created as living register for the 2026-05-18 implementation push.
- 2026-05-25 — Refactored to canonical MADR 4.x format. Bullet-list metadata moved to YAML frontmatter; status changed from “Living register” to
acceptedwith the living-document nature recorded in the introduction and lifecycle subsection. Filename gained theADR-prefix per theruflo-adradr-createskill. Substance unchanged. - 2026-05-27 — Added Section G (Ontology implementation programme). Five follow-ups (G1–G5) surfaced by the ADR-0008 validation report; queued as the named-acceptance condition for ADR-0008 moving
proposed → accepted. Per programme plan §9.4, item G1 routes to a Council Author-only session (engineering does not silently reconcile ratified-rules disagreements). - 2026-05-27 — Section G update from ADR-0009 validation. Marked G2, G3, G4 closed (all resolved by ADR-0009 worker commit
c5629e7and independently verified by the ADR-0009 validation report). Added G6 (cosmetic ADR-0009 template amendment to document pinning convention) and G7 (prefix-filter edge-case regression test deferred to first URL-bearing rdfs:comment emission, expected at ADR-0011). Status column added to the Section G table. - 2026-05-27 — Section G update from ADR-0010 implementation + validation. Marked G7 closed (ADR-0010 worker added two regression tests for gov.uk URLs in skos:scopeNote Literals, commit
75337ec). Added G8 (ADR-0010 scope expansion beyond the 16 named first-batch schemes) and G9 (data-dictionary enum population for MilestoneKind / AssuranceLevel / EvidenceMethod / AddressVariant). Added G10 (TransactionStatus per-member dct:source URI fabrication audit; surfaced by ADR-0010 validator at commit55f09ad; engineering choice, not Council route; MUST land before ADR-0014 BASPI5 round-trip). - 2026-05-27 — Section G update from G1/G5/G6 closures + ADR-0011 validation. Marked G1 closed (ADR-0007 §“Term-sourcing five-line precedence” pseudocode + prose amended to match ODR-0004 §7a; code change in lockstep at ADR-0012 worker brief; commit
5bd0c41). Marked G5 closed (Astro mirror atsrc/pages/governance/deferred-work.astrocarries the full G1–G11 table). Marked G6 closed (ADR-0009 §“foundation.ttl” prose preamble documents the sentinel pinning convention; commit5bd0c41). Added G11 (Q5a binding-table completion; per ADR-0011 validator’s recommendation, closure tightened to MUST land before ADR-0014 MVP gate; bundled with ADR-0013 worker brief). Per the user’s “no deferrals” mandate, G8 / G9 / G10 / G11 are all bundled into the ADR-0013 worker brief for inline closure before the ADR-0014 MVP gate. - 2026-05-27 — Section G update from ADR-0012 validation. Added G12 (canonical serialiser blank-node dedup — cosmetic; bundled with ADR-0013 worker). Added G13 (housekeeping — closed immediately; G1 already closed at commit
5bd0c41). Added G14 (Cat 4 SHACL shape activation trigger — Council-routed for S012 Q3 ratification; the only G-item with a genuine## Rulesambiguity per programme plan §9.4). Added G15 (cosmetic ADR-0007 amendment documenting__version__vsowl:versionIRIdecoupling rule — closed in this commit). - 2026-05-27 — Section G update from ADR-0013 validation. G8/G9/G10/G11/G12 all VERIFIED closed by validator (commit
6acdbca). Added G16 (DP count report fix), G17 (stale foundation doc-comment), G18 (declare opda:role DatatypeProperty), G19 (4 BASPI5 anchor URL mismatches), G20 (anchor count report fix). All five bundled into the ADR-0014 worker brief for inline closure before MVP gate. - 2026-05-27 — Section G update from ADR-0010 implementation. Marked G7 closed by the ADR-0010 worker (two regression tests added in
tests/test_serialiser.py; gov.uk URLs inskos:scopeNote @enLiterals correctly do not bind agov.ukprefix). Added G8 (ADR-0010 scope expansion — admit additional schemes case-by-case per downstream demand) and G9 (data-dictionary enums for MilestoneKind / AssuranceLevel / EvidenceMethod / AddressVariant — currently emitted withPLACEHOLDER:scope-note warnings per the ADR-0010 brief’s option (a) routing). - 2026-05-27 — Section G update from ADR-0011 implementation. Added G11 (full Q5a binding-table emission, ~44 descriptive-attribute leaves deferred per-leaf to downstream-consumer trigger). ADR-0011 emits 6 of ~50 Q5a leaves (the minimum needed for the 15 diagnostic exemplars + core opda-property.ttl identity predicates); the remaining ~44 leaves land per downstream BASPI5/TA6/NTS/LPE1 overlay demand. Engineering choice per-leaf, not Council route.
- 2026-05-28 — Section G update from ADR-0014 implementation (MVP gate). G14 / G16 / G17 / G18 / G19 / G20 ALL marked closed by the ADR-0014 worker. G14 closed engineering-side:
opda:hasSpecialCategoryDatadeclared as foundationowl:DatatypePropertywithxsd:booleanrange; Council S012 Q3 route preserved viaskos:scopeNote(Council may rename or refine the canonical predicate name and ADR-0012 shape updates in lockstep). G18 closed:opda:roledeclared in opda-agent.ttl asowl:DatatypePropertywithrdfs:domain opda:RoleMixin+rdfs:range xsd:string; typed encoding (a opda:Seller) remains canonical. G19 closed: 4 BASPI5 anchors realigned (A1→A1.1, A1.8.7→A1.8.4.1, A7.5.1→B4.6.2, B1.2→B1.1) against actualbaspi5Refvalues. G16, G17, G20 cosmetic doc/comment fixes applied. Foundationowl:versionIRIbumped 0.4.0 → 1.0.0 (G14 class-graph extension + MVP-gate release marker per ODR-0003 §Programme retirement criterion). Generator package__version__bumped 0.5.0 → 1.0.0 (the MVP-gate release). - 2026-05-27 — G21 added + closed during ADR-0014 verification. Cat 4 SHACL shape over-firing surfaced during MVP gate testing — the ADR-0012 template used
sh:property+sh:hasValue true+sh:not [sh:minCount 1]which forced every Person to carryopda:hasSpecialCategoryData=true, firingsh:Violationon 7 of 15 exemplars. Engineering bug (intent per ODR-0013 §Q1 Cat 4 was correct; SHACL implementation was wrong). Fixed by switching to SHACL-AFsh:sparqlconditional constraint at commitdf5a165. Verified by ADR-0014 validator at commit28dd92a. - 2026-05-28 — PROGRAMME RETIRED. ADR-0014 validation PASS (commit
28dd92a) closes ODR-0003 §“Programme retirement criterion” — both (i) MVP round-trip cleared and (ii) every linked ODRaccepted(17/17) now hold. All 7 ontology-programme ADRs (ADR-0008 through ADR-0014) accepted; all 7 have green validation reports atdocs/adr/validation/. The OPDA ontology implementation programme retires at this commit. Subsequent ontology work lands as fresh ADRs without revisiting this programme’s sequencing. - 2026-05-30 — G11
riskIndicatorre-homed (descriptive-layer follow-on). Applying a WG recommendation (reuseYesNoNotKnownSchemefor the RiskAssessment risk indicator) surfacedopda:riskIndicatordeclared in bothopda-property.ttl(the G11 §Q5a flat-Property emission) andopda-descriptive.ttl(the ODR-0008d Category-E RiskAssessment Quale) — conflictingrdfs:domain. Resolved by removing the G11 Property declaration;riskIndicatornow lives solely onopda:RiskAssessment(it bins to Category E, not G). Defensible (ODR-0008d is the newer, council-ratified, more-specific model; the categoriser agrees), but it supersedes part of the closed G11 item — flagged for WG ratification, not treated as silent engineering reconciliation (§G1 principle). The broader G11∩candidate-G overlap is the subject of the curated Category-G walk plan, ADR-0031. - 2026-05-31 — Section G update from the curated Category-G walk + Council session-028. The ADR-0031 walk executed (185/188 candidate-G emitted-or-collapsed) and was reviewed by Council session-028 (full panel; 2 DA blockers + revises), ratified as ODR-0024 (modelling rules) + ADR-0032 (engineering), and remediated (honest coverage 179/239). Marked the G11 reconciliation ratified (session-028 Q8). Added G22 (the monetary walk →
opda:MonetaryAmount), G23 (the ~38 R5-surfaced enum/attribute leaves + the 5 unwired SKOS schemes), and G24 (opda:Room, re-confirmed held). The full leftover (60 uncovered of 239) is named byci-category-g-coverage. - 2026-05-31 — G25 added from Council session-029 (ODR-0023 R2 reconvened). R2 adjudicated the UFO-axis sub-module split (ODR-0008a/b/c) NOT load-bearing (0–6–0) — the walk typed leaves by bearer Kind (
rdfs:domain), not UFO meta-category, so the presupposed UFO-typed partition was never built. No spawn; ODR-0008 stays monolithic (no emission, no re-pin). Added G25 — the deferred gated gUFOrdf:typetyping pass that both preserves the Quality/Mode insight and serves as conjunct (i) of R2’s sharpened re-open trigger. ODR-0008c struck from the UFO axis (it isrdfs:domain opda:LegalEstate); Kendall’s attachment-class four-way re-routed to its encumbrance-cardinality trigger. - 2026-05-31 — G22 monetary walk EXECUTED + closed. Minted
opda:MonetaryAmount(a by-value value structure:opda:amountxsd:decimal magnitude +opda:currency→ the seeded-extensible ISO-4217opda:CurrencyScheme, GBP/EUR/USD) and 16 per-economic-kind object properties (eachrdfs:range opda:MonetaryAmounton its own bearer —opda:LegalEstate/opda:Property/opda:Valuation/opda:Transaction) +opda:amount, via the ADR-0030 generator (ODR-0024 R3 / Council session-028 Q3 / ODR-0008d item-3).opda:priceleft a single-currency fixtures interim (not migrated). Coverage 179 → 196/239 (ci-category-g-coverage); all 6 CI gates green; 47 SKOS schemes; 264 tests pass. G22 closed; the remaining 43 uncovered are §G23 (R5 enum/attribute leaves) + §G24 (opda:Room). - 2026-05-31 — G23 R5-surfaced follow-on EXECUTED + closed. Minted the 40 R5-surfaced enum + Yes/No Property/estate attributes as flat datatype properties (on
opda:Property/opda:LegalEstate/opda:NearbyFacility), via the ADR-0030 generator (ODR-0024 R5–R6). Wired the 5 R6 SKOS schemes + the existingTenureKindSchemeto their 6 consuming enum properties (constructionType/priceQualifier/typeOfConnection/transportType/ofstedRating/marketingTenure) via base value shapes (sh:targetSubjectsOf+sh:in); re-rangedownerType→OwnerTypeSchemeand wired itssh:inthe same way — closing the pre-existing Proprietor-overlay gap (no overlay needed). Coverage 196 → 236/239 (ci-category-g-coverage); all 6 CI gates green; 265 tests. G23 closed; only the 3 heldopda:Roomleaves (§G24, held-as-live) remain — the curated Category-G walk is now complete bar the held Room promotion. - 2026-05-31 — G25 gated gUFO typing pass EXECUTED + closed (ADR-0034). Asserted
rdf:type gufo:Quality(+dct:sourceODR-0008 §Q5a) on the 5 uncontested Quale-in-Region Property leaves (currentEnergyRating,councilTaxBand,builtForm,centralHeatingFuelType,heatingType) inopda-descriptive-annotations.ttl— the annotation graph, never the shapes graph (ODR-0010 §Q7a) — via the ADR-0012/ADR-0030 emitter. Omitted the straddlers (priceQualifier,marketingTenure) + re-sorter (ownershipType) + Substance-Kind label (tenureKind), per session-029 Q5. Preserves the UFO Quality insight without minting ODR-0008a/b/c, and builds conjunct (i) of the ODR-0023 R2 re-open trigger. Allemang’s prose-until-a-biting-query minority recorded (annotation-graph-isolated, removable). Byte-identity re-pinnedopda-descriptive-annotations.ttlonly; all 6 CI gates green; coverage unchanged 239/239; 267 tests. - 2026-05-31 — CI gate reconciliation: BASPI5 G19 vs G3 (recorded per §G1, not silently reconciled). Two pre-existing red workflows were greened. (1) The BASPI5 emitter cited a fabricated form-question anchor
A1.1.5.uprn(to disambiguatepropertyPack.uprnfromaddress.postcode, which sharebaspi5Ref A1.1.5); this violated G19 (ADR-0014 — every anchor MUST be a realbaspi5Ref). Fixed: the UPRN shape’sdct:sourcenow cites the real refA1.1.5; the two shapes are distinguished bysh:path, not a fabricated ref. (2) That surfaced a latent conflict with G3 (ODR-0022 §2 — onesh:pathper form-question leaf), which then flagged the sharedA1.1.5as “doubly-bound”. Reconciled in favour of G19 (don’t invent refs): G3 now treats a ref baspi5.json itself assigns to >1 schema leaf as legitimate multi-entity coverage, not over-binding (ci/descriptive_roundtrip_test.py_SCHEMA_SANCTIONED_SHARED_REFS; locking test added). (3) Separately, the byte-identity workflow’s full pytest run hitFileNotFoundErroron the gitignoreddata-dictionary-canonical.json(ODR-0024 R12 — local-only); the 8 corpus-loadingtest_leaf_categoriser.pytests nowskipifthe dictionary is absent (the 15 literal-input tests still run in CI;opda-gen emit+ all CLI gates are dict-independent). All three active workflows green on HEAD. - 2026-05-31 — Governance-surface emission defects logged (Council session-033). The A2 council (ODR-0012 lawful-basis/consent/purpose class vocab) surfaced and the Queen verified three emission defects in the accepted, emitted ODR-0012/0018 governance surface — to be cleared by a generator fix (an ADR-0012/0018 emitter change; independent of any new class vocab; all byte-identity-affecting → regenerate + re-pin + tests). D1 (namespace bug):
opda:SpecialCategoryPIIWithoutLawfulBasisShapebindsPREFIX dpv: <…/dpv/pd#>but queriesdpv:hasLegalBasis, which is coredpv:(…/dpv#) — the lone lawful-basis Violation gate checks a non-existent predicate and would miss a real legal-basis triple; fix the binding. D2 (predicate overload):opda:lawfulBasiscarriesdpv-pd:DateOfBirth/EmailAddress(PD-categories) inopda-agent-annotations.ttlbut lawful bases (dpv:PublicTask/Consent/LegitimateInterest) in claim/property annotations; split the predicate (PD-category vs lawful-basis). D3 (highest value):opda:isPIIBearing trueis asserted on zero classes (the token occurs only insidePIIWithoutDPVCoAnnotationRule’s own comment + WHERE clause), so the rule fires on the empty set — the Phase-1 PII-co-annotation floor is currently UNENFORCED; emitopda:isPIIBearing trueon the PII-bearing Kinds (Person/Address/Organisation/evidence subclasses) so enforcement actually fires. RESOLVED 2026-05-31 (this commit; generator fix, no version bump — completes the existing 1.0.0 PII-floor design). D1:SpecialCategoryPIIWithoutLawfulBasisShape’ssh:selectnow bindsPREFIX dpv: <https://w3id.org/dpv#>(core), sodpv:hasLegalBasisresolves to the real predicate (emitters/shapes.py; only the prefix line changed). D2: the two mis-slotted_add_dpv_variant_refinementcalls inbuild_agent_annotations()are replaced — DateOfBirth now attaches via property-leveldpv-pd:hasPersonalDataCategoryonopda:dateOfBirth(the predicate IS declared onopda:Person); EmailAddress attaches class-level onopda:Personbecause no email predicate is declared on Person (the prioropda:hasEmailwas a fiction — per-spec fallback, recorded here). Acceptance: everyopda:lawfulBasisobject across the corpus is now ahttps://w3id.org/dpv#…term, none indpv-pd. D3:opda:isPIIBearingis declared as a foundationowl:DatatypeProperty(rdfs:range xsd:boolean,emitters/foundation.py) and emittedtruein_add_dpv_baseline()on exactly the six class-level-baseline Kinds — Person, Property, Address, RegisteredTitle, Claim, EPCCertificate (this corrects the log line’s “Person/Address/Organisation/evidence subclasses”: the floor tracks the class-leveldpv-pd:hasPersonalDataCategorybaseline set, soopda:Organisationis correctly unmarked per ODR-0006 §Q6, and the evidence subclasses carry onlyopda:lawfulBasisvariant refinements, not a class-level baseline). The rule’s target set is now non-empty and equals the baseline set; a regression guard lockscount(isPIIBearing true) == count(class-level dpv-pd:hasPersonalDataCategory baseline). All 6 CI gates green; 274 pytest pass; byte-identity re-pinned. - 2026-08-22 — Chair-authority terminology correction. Register entries now distinguish the existing PDTF schema and schema-derived ontology from SPDTF, the first collaboratively authored scheme draft. Earlier rebrand/version-successor wording is withdrawn; the programme transition is schema to scheme. Technical source identifiers and historical evidence remain unchanged.
Comments
Loading comments…
Sign in to post a comment