75 lines
2.8 KiB
Text
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 },
|
|
},
|
|
}
|