StatifierDatamodel (StatifierDatamodel v0.3.0)

Copy Markdown View Source

The datamodel document and what can be decided from it, with no dependency on the block editor, the compiler, or the UI.

A datamodel document is a host's typed description of the data universe an author writes conditions against: three scopes - global, local, event - each carrying entries with a name, an absolute dotted path, a type and a label, plus a types key of named record and shape declarations. This package is the reader of that document and the home of every question that can be answered from the document alone:

  • the path/type index over an admitted document, and its projection to the declared-path set;
  • the declared types, and the read check - identity, then a record read as a shape is admitted when the record's fields cover the shape's required set;
  • compatibility of a redefined declaration against the one it replaces;
  • required-field coverage of a map against a shape;
  • the projection of the index to per-path value kinds an expression editor consumes.

Every function is pure and total over an admitted document. What is not here, on purpose: the environment walk over a block document, which needs the block tree and stays in statifier_blocks; anything that renders, which is statifier_ui's; and any runtime enforcement, which no record in the family has asked for. Both of those packages depend on this one, and this one depends on nothing in the family.

The document shape and the index are re-homed here from statifier_blocks (its ADR-0006, accepted 2026-08-29), and ADR-0001 in this repository is the record of the re-homing: the same three scopes, the same closed scalar set plus date, the same declared-path projection, and the types key that the re-homing adds.

This module is the package's root and holds no functions. The document and its index are StatifierDatamodel.Index and StatifierDatamodel.Document; the document's declared types are StatifierDatamodel.Declarations and the type expressions over them, with the read check, are StatifierDatamodel.Types. What is decided across two declarations is StatifierDatamodel.Compatibility, and what is decided between a declaration and a map is StatifierDatamodel.Coverage.