types.clj drove inference through ~14 module-level atoms; the infer walk was non-reentrant and depended on hidden set-*! install order. Thread one immutable env (mk-env) through infer instead: it snapshots the installed config (rtenv/vtypes/record-shapes/protocol-methods/map-shapes?) and carries the per-run flags and accumulator/guard cells (diags/calls/checking-set/diag-memo). A fresh env per run makes the pass re-entrant — isolated-diag-count's probe now runs under a sub-env with its own diags cell instead of save/restoring a shared atom. Only state whose lifecycle spans separate API calls stays module-level: a config-box the set-*! API writes, the escapes/user-sig sweep registries, and a bridge holding the last checking run's diags for take-diags!. record-type-from- entry/field-type-from-tag now take the shapes map directly rather than reading a global. jolt-ogib.10. Behavior pinned by the new infer gate (23 cases) plus selfhost + buildsmoke. Re-minted seed. |
||
|---|---|---|
| .. | ||
| chez | ||