The specification · Introduction
Reading the specification
spec/README.md gives a reading order. The files
are layered rather than alphabetical, each assuming the vocabulary the previous
one introduced.
The reading order
- Start with
grammar.md, which owns theS-*rules. It is the statement gate and the expression productions, decidable from syntax alone. EveryF-*rule in the next file is keyed to a production in this one. - Read
judgments.mdnext; it owns theF-*judgments: J1 expression evaluation and J2 the per-file verdict; J3 the identity-taint fixpoint and J4 properties and observables. Its preamble states the objective the whole mechanism serves. - Then comes
values.md, which ownsF-Val-*, the value domain. It says what a fold produces: the closed union of cases a folded value can be, and the envelope shapes that stand in for things the build has not resolved yet. - The fourth file,
divergence.md, ownsF-Direction,F-Div-*andF-Exc-*. One subset has two consumers with unequal information, the shape classifier and the folder. This file states the direction in which they may disagree, enumerates every known divergence, and gives the two tolerated exceptions with a reason each. - Last is
hosts.md, which ownsF-Host-*, the host interface. Seven things a host supplies, and the rule by which each is admitted.
Each of those five ends with a non-normative Rationale section, where the reasoning lives; the rule text above it is deliberately terse.
Two further files are not rule files.
inventory.md is the coverage ledger.
A decision point is anywhere the mechanism chooses between admitting and
rejecting, between evaluation modes, or between representations. There is one
row per decision point, derived from a complete read of chant core’s fold path,
and the last column names the S-* or F-* rule that governs the row, or
GAP with an out-of-scope reason.
prior-art.md is a survey
rather than a rule. Graceful fallback from static evaluation to execution is
well established. What the sweep found no precedent for is the combination of
per-file granularity with shared object identity across the boundary, which is
what forces J3.
The process rules
spec/README.md also carries rules about the document set rather than about
the mechanism. No fixture cites them; CI structure enforces them.
Every normative rule carries a stable identifier. Each identifier is exercised by at least one fixture, and each fixture cites a real identifier, checked in both directions in CI. Rejections are located, by node and rule, with the wording unconstrained, because message stability is not normative.
spec/README.md is published as
the specification index, and it is the shortest
route to the rest.