Status: Accepted
Date: 2026-09-25 (proposed), 2026-09-25 (accepted)
Related: ADR-A01 (layer dependency order), ADR-A17 (unified projection
authoring), ADR-A24, ADR-A89, ADR-A90
Unit: applied-ontology-readiness
Every Eligibility backend reads a candidate from an elg:Question
(elg:candidateRangeSet, elg:candidateValue). An applied ontology keeps its
facts on its own properties: an employee’s job family, a patient’s diagnosis
and weight, a loan’s credit score. To evaluate a condition today it must copy
each fact into a question first. The copy duplicates state, detaches the
decision from the fact it was based on, and has to be kept in step by code
outside the graph.
The mork-eligibility-compiler sketch identified this gap and deferred an
“executable projection contract” layer pending an ADR. Surface already reads
domain data through declared paths (srf:PathStep, an indexed step list
chosen because it canonicalises and hashes directly), but Surface does not
import Eligibility and sits outside the ADR-A01 chain.
| Option | Summary | Cost |
|---|---|---|
| A. Eligibility binding | Eligibility declares an evidence binding: condition, subject class, and an indexed step list to the candidate | Eligibility MINOR. The step-list pattern exists twice until lifted to Foundation |
| B. Foundation path steps first | Lift the step-list pattern to Foundation, then use it from Eligibility and Surface | Foundation MINOR, cascading to every layer. Surface migrates srf:PathStep |
| C. Surface binding | A Surface contract kind binds conditions to domain paths and lowers into the Eligibility IR | Surface must reference Eligibility terms, against its current import set |
| D. Materialised questions | A Surface projection writes questions from domain data. No new terms | Works today. Keeps the duplication this ADR exists to remove |
Option A, with D remaining available.
elg:EvidenceBinding, relating one condition to the
subject class whose instances it evaluates and to an ordered list of
elg:EvidenceStep (property, direction, index), shaped like
srf:PathStep so a later lift to Foundation needs no data change.skos:Concept for concept conditions and a
qnt:Quantity for interval conditions. A literal terminal value is read on
a value space the binding names.elg:aboutSubject. elg:subjectRoleOccupancy keeps its meaning for
party subjects.applied-ontology-readiness AOR-9)elg:aboutSubject (item 3)
therefore has no producer yet and is not declared.sh:targetClass selects them.exe:permittedUnder and
exe:deniedUnder, since exe:impliesDecision on a subject would not say
which condition decided it. A bound interval rule reads one terminal form: a
literal where the binding names elg:readOnSpace, else a qnt:Quantity.