let pole_type  = [| 'Yang, 'Yin, 'Spiral |] in
let level_type = [| 'Axiom, 'Tension, 'Practice, 'Project, 'Moment |] in
let edge_type  = [|
  'Contains,
  'TensionWith,
  'ManifestsIn,
  'ValidatedBy,
  'FlowsTo,
  'CyclesIn,
  'SpiralsWith,
  'LimitedBy,
  'Complements,
|] in

{
  Pole             = pole_type,
  AbstractionLevel = level_type,
  EdgeType         = edge_type,

  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 = [],
  },

  Edge = {
    from   | String,
    to     | String,
    kind   | edge_type,
    weight | Number | default = 1,
    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 },
    edges | Array { from | String, to | String, kind | edge_type, weight | Number, note | String },
  },
}
