Reference
Specification
The language is defined by numbered clauses, each with a program that exercises it, and each filed at a stability level that says whether it may change.
How a clause works
A clause is a paragraph with a tag: [T-REF-VALUE],
[E-SPAWN-ORDER], [L-LIB-BITS]. Every one has a program
under spec/conformance/ tagged with it, and the test suite fails if
a clause has no program, if a program has no clause, or if a clause is filed
under a stability heading that disagrees with its own level.
Stability
| Level | Means |
|---|---|
| Stable | It will not change under you. |
| Provisional | It works and it may still move. |
| Experimental | Expect it to change. |
Three budgets the specification sets itself, and misses
§19.2 of the specification states a budget for its own size and for the
size of the reference interpreter, and records what each one is today. None of
the three is met, and the site had never shown any of them — the page led
with 71 labelled the cap, when 50 is the
cap and 71 is 42% past it. This is the table as
spec/core.md records it:
| Budget | §19.2 target | Today |
|---|---|---|
| Core constructs | ≤ 30 | 37 |
| Reference interpreter | ≤ 5,000 lines | 9046 |
| Specification | ≤ 50 pages | ~71 pages |
The specification's own note on them is the useful part: the specification's is the binding one — a new clause is paid for out of prose. A language that cannot be read is not specified by having been written down, and 37 core constructs against a budget of 30 is the number that decides whether the next feature gets one.
Why there is also a law for most of them
A conformance program records what a clause says the output is. Where the clause and the implementation were written together — which, for a young language, is most of them — both can be wrong together, and the program agrees with them.
So the behavioural clauses in scope also have a law: one of
205 relations checked against
arithmetic, not against a recorded string. rev puts the last
element first. a / b * b + a % b == a. A released slot is dead
through every reference to it. A clause in scope with no law fails the gate by
name.
How many laws there are is a count, taken from scripts/fuzz_laws.py as this page is written. Whether they hold needs a run, and the last recorded one checked 205 of them with none broken, on 15 October 2026 — a green run of that gate checks every law it defines, so the gap between the two figures is laws added since. The page used to show only the run's figure, which is how it said 197 while the file defined 205.
The page budget
The specification is capped at seventy pages and the test suite enforces it. When a clause was added recently and the file went one line over, the clause was made shorter rather than the cap raised. A specification nobody finishes reading is one nobody checks the implementation against.