Gated profile expansion and conformance matrix
gestaltdb.reasoning.profiles is the construct-by-construct conformance
matrix: every known construct has exactly one row naming its role
(entailment, validation, equality, deferred), its standing (supported,
validation-only, deferred), its implementing mechanism and its boundary
note. Directional Horn rewrites, open-world validation and class-conflict
detection are separate rows — never one blurred claim.
from gestaltdb.reasoning import check_construct, subset_constructs
assert check_construct("subproperty").mechanism == "ontology.compiler"
assert "subclass" in subset_constructs("gestaltdb-rl-core-v1")
check_construct("disjunctive-head") # raises: non-Horn, no case splitting
Named subsets
gestaltdb-rl-core-v1 (entailment), gestaltdb-validation-v1 and
gestaltdb-equality-v1 are the whole published claim: admission goes
only through the named subset, and anything without a supported row —
unknown names, deferred rows, subset mismatches — fails closed with the
documented mechanism or reason. Complete OWL RL becomes a target only
when every normative applicable rule is independently covered; until
then no full-RL claim is made.
Approval per extension
Extending a subset is an approval, not a flag: specify the semantics and
termination contract, implement with exact origins, add oracle/parity and
failure tests, measure cost, then change the matrix, the subsets and the
pinned matrix_digest together. The digest test makes silent widening
impossible — every new row arrives with its evidence.