Unit ID: vocabulary-temporal-binding
Status: Closed (2026-09-25). Executed, verified, and ratified (ADR-A85 Accepted). Follow-on hardening items identified during closure review are tracked under a new unit, temporal-binding-consumer-hardening (see its plan and status).
Trigger: 65ac4a85e11cc1f8616e3e0c24efd59bf4ca410d
Sketch: vocabulary-temporal-binding.md
Status record: vocabulary-temporal-binding.md
Validation pack: vocabulary-temporal-binding.md
Commit 65ac4a85e11cc1f8616e3e0c24efd59bf4ca410d adds voc:SchemeBinding,
voc:BindingScope, four binding properties, temporal validity, historical
voc:resolvedUnder provenance, and a prose resolution law. The source ontology
change is present, but the repository does not yet contain the conformance
package required by its standards.
This unit therefore covers architecture synchronisation, a proposed ADR, examples, SHACL and SHACL-SPARQL validation, a deterministic reference resolver, executable test cases, consumer boundary checks, traceability, and the validation pack. It is not a documentation-only sync.
Author ADR-A85
as Proposed for human review. It records the n-ary binding model, conjunctive
scope semantics, strict-superset precedence, conflict refusal, boundScheme
fallback, and non-retroactive resolvedUnder provenance. No OWL axiom may
silently choose between competing bindings.
docs/architecture/ontology-architecture.md to mirror the Vocabulary
README. Include the implementation table line count, purpose, design
decisions, DL encoding, disjointness, property axioms, worked pattern, and
open validation items.README.md, the solution design, data architecture, UX design,
deferred-scope document, .github/copilot-instructions.md, and
GENAI_CONTRIBUTION.md unchanged unless a concrete vocabulary-specific
contradiction is found and recorded first.Create ontology/vocabulary/examples/ with positive and negative fixtures for:
voc:resolvedUnder provenanceforContract and missing bindsSchemeboundSchemeFixtures must remain domain-neutral and declare only the minimum Foundation and SKOS terms needed for the check.
Populate the existing empty files under ontology/vocabulary/shapes/:
structural.ttl for reusable node shapes and cardinality/type constraintsconstraints.ttl for temporal sanity, fallback agreement, conflict, and
historical provenance constraintsrules.ttl only where a non-selecting validation rule is necessaryContext and resolution time must be represented explicitly in the validation profile. SHACL must report an ambiguity or contradiction, never select a winner. Add both conforming and non-conforming assertions to the test suite.
Add a small reference resolver in the repository’s established Python tooling boundary, subject to confirmation of the exact package location. Test:
boundSchemeresolvedUnder preservation without re-resolutionThe resolver is a conformance implementation of the Vocabulary law. It is not a fuzzy matcher, scope-membership engine, live-store adapter, or general runtime.
Add the narrowest useful cross-layer fixtures or contract tests, with the
consumer selected during human review. The check must demonstrate that a
consumer resolves the applicable binding before interpreting a concept-valued
property, preserves existing unscoped boundScheme behaviour, and retains a
historical resolvedUnder assertion. Do not expand this unit into a Surface or
Eligibility semantic redesign.
| Slice | Scope | Test level | Gate |
|---|---|---|---|
| 1 | ADR-A85, architecture mirror, fixture and traceability skeleton | L0, L2 | Human review of semantic parity and decision record |
| 2 | Examples plus structural and SHACL-SPARQL validation | L1, L3, L4 | Positive and negative fixtures produce expected reports |
| 3 | Reference resolver and deterministic test suite | L1, L2 | Precedence and conflict mutation probes fail as intended |
| 4 | Consumer/provenance checks and documentation close-out | L3, L4 | Cross-layer contract passes and validation pack is complete |
Each slice should touch no more than two implementation modules. Split a slice if the resolver, SHACL package, or consumer check exceeds that boundary. No implementation slice starts until this plan, ADR-A85, and the validation context are approved.
The single command is to be finalised with the resolver package location. The planned entry point is:
mise run check:vocabulary
The validation pack requires SHACL reports, resolver decision traces, a triple-order determinism result, a historical provenance fixture, traceability rows, and a human mutation probe that disables strict-superset precedence or the equal-specificity constraint and observes the expected test failure.
The root README, solution design specification, data architecture, UX design,
deferred-scope document, .github/copilot-instructions.md, and
GENAI_CONTRIBUTION.md were checked. They contain no Vocabulary-specific
mechanism inventory that this unit must synchronise. This remains an explicit
assumption for human review, not a claim that the files are permanently out of
scope.
All four slices executed and verified: mise run check:vocabulary (14/14),
python -m unittest surface.test_surface -q (62/62), mise run
check:python-root (77/77 plus Phase 8 conformance). ADR-A85 is Accepted. A
subsequent cross-reference of this work against
docs/architecture/rdf-sparql-patterns-guide.md
found the implementation internally consistent, with four follow-on hardening
items and one accepted non-issue, none of which block this unit’s closure.
Those items are scoped under the new temporal-binding-consumer-hardening
unit: plan,
status.