v1.6.0
V1 type checker release (#55).
Highlights
- Soundness: structural and coinductive recursive subtyping (#47 is fixed). Value/error correlation now requires proof on every return path. Metatables keep nil alternatives. Loop refinements follow the bound iterator, not the name
ipairs. Callee field-write guarantees are tracked, and narrowing is deterministic. - Strict mode:
Options.Strict, whereanyis not accepted as evidence. - Typed host APIs: the
TypeValueOfreturn transform typesjson.decode(str, T)-style APIs (#54). Supporting checker changes for typed contracts. - False positives: zero known false positives on a 123-target application lint corpus, in both gradual and strict mode, with no non-convergence.
- Type metadata: metadata survives rewrite, substitution, resolution and serialization. The type encoding is v14; v13 manifests still decode.
- Performance: about 2x faster than v1.5.x on the fixture corpus, with 1.27x less lint CPU from the final round. Exponential finality walks and quadratic condition normalization are removed.
- CI: the benchmark job fails when benchmarks fail. Fuzzers run in isolation, race fixtures are sharded, and fixture time budgets come from measurement.
Compatibility
- Serialized type manifests are written as v14. Readers of v1.6.0 accept v13 and v14; older readers cannot read v14.
- Body-less
(T?, string?)declarations no longer imply value/error correlation. Declare an explicitErrorReturneffect for host APIs.