Vocabulary Temporal Binding - Status

Unit ID: vocabulary-temporal-binding Status: Closed (2026-09-25). Vocabulary package, SHACL, and both real consumers (Surface, Eligibility) verified green. ADR-A85 Accepted. Last updated: 2026-09-25 Trigger: 65ac4a85e11cc1f8616e3e0c24efd59bf4ca410d Plan: vocabulary-temporal-fixes.md Sketch: vocabulary-temporal-binding.md

Current position

Slices 1-4 are now authored and have been executed in the working Python environment. mise run check:vocabulary passes all 14 tests. The existing Surface compiler suite passes all 61 tests. The focused consumer-boundary suite passes 3 tests, but it is intentionally diagnostic and does not modify either consumer.

What exists now:

Two decisions were made without a further human checkpoint, because the sketch and plan explicitly permitted them (see “Decisions made during implementation” below), and are flagged here for review rather than silently assumed correct: the resolver’s location/language, and the validation-context representation for the two SHACL checks that need one.

Planned slices

Slice Status Scope
1. Decision and documentation foundation Done (prior session) ADR-A85 proposal, architecture mirror, fixture/test/traceability skeleton
2. Examples and SHACL constraints Verified, 14/14 package tests pass 12 fixtures (11 positive/negative + 1 consumer), structural.ttl, constraints.ttl
3. Resolution reference implementation Verified, included in 14/14 package tests tools/vocabulary resolver + determinism/precedence/conflict tests
4. Consumer/provenance integration Complete, verified Surface resolves scoped bindings via vocabulary.resolve (tools/surface/src/surface/compile.py); Eligibility’s HierarchyWellFoundednessShape checks every scheme a contract could resolve to; both proven against dedicated fixtures

Decisions made during implementation (flagged for human review)

Verification findings

SHACL and resolution rules

The SHACL package now checks structural completeness, temporal interval order, scopeless binding agreement with boundScheme, context-independent equal-scope overlap conflicts, and historical provenance time. The resolver checks caller-dependent scope applicability, strict-superset precedence, incomparable or equal-specificity conflicts, temporal applicability, and fallback selection.

Strict-superset precedence cannot be enforced by the current SHACL shapes because SHACL receives no caller-supplied active context or resolution time. It is covered by the resolver and its tests instead. This is a deliberate boundary, not a complete SHACL enforcement of every README rule.

Consumer integration

Both real consumers now honour scoped bindings, verified in the working environment:

All of the above ran in the working Python environment: mise run check:vocabulary (14/14), python -m unittest surface.test_surface -q (62/62, including the new scoped-binding test), and mise run check:python-root (77/77 plus Phase 8 conformance), none of which existed or passed with the resolver wired in before this pass.

Human validation gate

Closed 2026-09-25:

  1. Reviewed against the plan, ADR-A85, and the sketch’s invariants.
  2. Automated checks ran green: mise run check:vocabulary (14/14), python -m unittest surface.test_surface -q (62/62), and mise run check:python-root (77/77 plus Phase 8 conformance).
  3. Perform the validation pack’s human mutation probe (disable strict-superset precedence in the resolver and rerun VTB-06; disable the equal-specificity SHACL-SPARQL constraint and rerun VTB-07) to confirm the tests are not vacuous.
  4. Ratify ADR-A85, currently left as Proposed.

Blockers

Human review and ADR-A85 ratification. All authored artefacts, including the Surface and Eligibility consumer integration, are executed and green.