ontoref-code/ontology/schemas/core.ncl
2026-07-10 01:44:59 +01:00

75 lines
2.8 KiB
Text

let pole_type = [| 'Yang, 'Yin, 'Spiral |] in
let level_type = [| 'Axiom, 'Tension, 'Practice, 'Project, 'Moment |] in
let axis_type = [| 'Substance, 'Act, 'Seam, 'Unspecified |] in
# Edge kinds — reconciled to the vocabulary actually used in core.ncl (G-2,
# 2026-07-09). The prior enum listed four kinds never used (ValidatedBy, FlowsTo,
# CyclesIn, LimitedBy) and omitted four in active use (Contradicts, DependsOn,
# Implies, Resolves); the edge records were bare (uncontracted) so the divergence
# stayed dormant. This enum is now the single source of the edge vocabulary,
# mirrored by Rust EdgeType and by defaults/edge-inverses.ncl.
let edge_type = [|
'Complements,
'Contains,
'Contradicts,
'DependsOn,
'Implies,
'ManifestsIn,
'Resolves,
'SpiralsWith,
'TensionWith,
|] in
# Edge weight is a qualitative salience, not a metric — the data has always used
# symbolic values ('High/'Medium/'Low); the schema (and Rust) previously typed it
# as Number, a dormant lie now corrected (G-2).
let weight_type = [| 'High, 'Medium, 'Low |] in
# Warrant — the evidence on whose authority a node exists (Z39.19 warrant, typed).
# Additive with a default so every existing node validates unchanged
# (formalization-vs-adoption); it is an AUDIT surface (see `validate ontology`),
# never a required field — a required warrant would be ceremony-capture (adr-029).
# The evidence itself lives in reflection (emergence.log, interviews); the node
# CITES it, it does not duplicate it (ontology-vs-reflection).
let warrant_kind = [| 'Adr, 'Emergence, 'Interview, 'Session, 'External |] in
let warrant_ref = {
kind | warrant_kind,
ref | String,
note | String | default = "",
} in
{
Pole = pole_type,
AbstractionLevel = level_type,
Axis = axis_type,
EdgeType = edge_type,
Weight = weight_type,
WarrantKind = warrant_kind,
WarrantRef = warrant_ref,
Node = {
id | String,
name | String,
pole | pole_type,
level | level_type,
description | String,
invariant | Bool | default = false,
artifact_paths | Array String | default = [],
adrs | Array String | default = [],
axis | axis_type | default = 'Unspecified,
warrant | Array warrant_ref | default = [],
},
Edge = {
from | String,
to | String,
kind | edge_type,
weight | weight_type | default = 'Medium,
note | String | default = "",
},
CoreConfig = {
nodes | Array { id | String, name | String, pole | pole_type, level | level_type, description | String, invariant | Bool, artifact_paths | Array String, adrs | Array String, axis | axis_type, warrant | Array warrant_ref },
edges | Array { from | String, to | String, kind | edge_type, weight | weight_type, note | String },
},
}