The object store is git-like files, not SQLite (deviation from doc 02 section 9)
No C dependency, inspectable, and atomic via rename. SQLite is still an option when concurrent agents need it
2
Root hash = Merkle over (name, node hash). Node text is stored separately, keyed by its own hash
Renames rewrite caller text without changing any node hash
3
Typed holes are allowed in committed roots (severity hole)
Incremental generation: commit a skeleton, then fill it
4
Tolerant input, canonical storage. The parser accepts common spellings (multi-line if/else without do, for ... do, line-ending =/=>, layout-based blocks inside brackets, 'str'). The printer emits exactly one form
Text is only a projection. Accepting variants costs nothing at rest and removes most errors weaker models make (Haiku 53% to 83%)
5
A single-expression block is the expression itself
One meaning, one AST, one hash
6
Inside brackets, a line ending in do, then, else, =, or => opens a layout block (Haskell-style layout rule)
Allows multi-line lambdas without making newlines significant everywhere inside brackets
7
List elements are placeholder boundaries: [_ + 1, _ * 2] is a list of two lambdas
Found by the evaluation reference solutions
8
Fuzzing discards inputs that violate pre or a parameter’s where, and treats running out of fuel as a discard. Any other trap is a counterexample
Contracts define the input domain. Traps outside that domain are bugs
9
Str mirrors list methods (take drop reverse get first last is_empty)
The fuzzer found contract gaps in the author’s own suite programs: backoff(0) raised to a negative exponent, with_retry could overflow, and go had no bounds precondition. All three are now fixed with pre/where clauses.
calc.eval can overflow on large numbers. That’s intentional, kept as a fuzzing demo.
The agent token comparison (bench/agent/, 2026-10-03) doesn’t meet the exit criterion yet: SSPUR used 1.96x Python’s total tokens with the same 95/95 pass rate. Next steps: compact text output for q and apply, inline transactions, then a rerun.
A fresh 30-task set to confirm the tolerant-input gain on held-out data.
More P0 constructs: Secret, Pii, and Untrusted taint types; Guess[T]; decision tables; Id[T] arenas.
Phase 4: the Cranelift backend and the sys profile.