BREAKING CHANGES:ci: CI generation is not stable for third-party consumption and no migration path is provided for it. The ci and media/nix entries below record what changed, for contributors. (#1803, #1807, #1808, #1813, #1825, #1831)
BREAKING CHANGES:ci: typescript is no longer a devDependency and npx tsc no longer resolves it — take the compiler from nix develop ./nix or a global install of the pinned version. packageCheckJob is a Job, not a function of a pin. (#1803)
BREAKING CHANGES:ci: jobs share one Nix shell, generated to nix/ itself, and ubuntu-intel32 is a new job. ./nix/dev no longer exists; the shell is nix develop ./nix, or ./dev.sh. (#1807, #1808, #1814)
BREAKING CHANGES:ci: denoNixJob, bunNixJob, wasmNixJob and basicNode are gone, and nodeNixJobs carries no default Node version. (#1807)
BREAKING CHANGES:ci: the ci-update, dev-update and update scripts are gone. Run gen for the first two, and lock-update for the third — it also refreshes every generated flake.lock and Cargo.lock. (#1813, #1825, #1831)
BREAKING CHANGES:media/nix: an _IndentedString is its parts, ['indented-string', ...(string | _Reference)[]], and a _Reference is written ${a.b}. NixJob's shellHook takes those parts untagged — the generator adds the tag. (#1808)
BREAKING CHANGES:ci: the apt-getMetaStep is gone, and no generated job asks the runner for a system package any more. (#1808)
BREAKING CHANGES: public types.ts declarations gained readonly on tuple and object members — bnf's Option, types/range_map's Entry, others. A value no longer fits a mutable-tuple slot, and mutating one fails type checking. (#1822)
BREAKING CHANGES:bnf: metadata is shared Meta<M, T> tuples — LL(1) inputs require them, CodePointMeta is removed, and MI/MO become one M. repeat moved to types/array with a fixed-length result; Repeat is gone. (#1817, #1828)
BREAKING CHANGES:emergent_testing: import the browser runner from browser/module.mjs and unknownValue from module.f.mjs. Drop startBrowserTestSources' importer argument, and dispatch catch for defaultReporter. (#1806, #1818, #1832)
BREAKING CHANGES:website: import the browser source scanner from website/browser-source/module.f.mjs. browser-prepare.mjs is gone, so the website script is node ./fjs/module.mjs r ./fjs/website/module.f.mjs. (#1824, #1827)
BREAKING CHANGES:effects/node: Dirent gains isDirectory — isFile === false does not mean directory, and a symbolic link is neither — so a runner implementing Readdir must return it. (#1827)
BREAKING CHANGES:nanvm: Any + Any returns Result, and Unpacked no longer implements Add. (#1811)
bnf: reusable JSON and DataJS grammars, LL(1) semantic transformers that build values while parsing, and RTTI-checked rule mappings that reject a declared input type the grammar does not match. (#1817, #1823, #1828)
nanvm: JavaScript-compatible addition and subtraction for VM values, a shared TypeError message for mixed number/bigint arithmetic, and decimal text for bigint string coercion. (#1709, #1810, #1811)
effects: Import, Module, import_, All, all, allOk and both moved to effects/common, and errorMessage to effects. effects/node re-exports all of them, so importing through it is unchanged. (#1812, #1815, #1818)
emergent_testing: LeafReporter — a leaf's start, result and test — splits out of Reporter, which is that plus summary. runEntries takes the smaller one and has no error channel; failures arrive as RunState.aborted. (#1802)
emergent_testing: fjs t survives what used to end it — a proof export that cannot be enumerated is one failed record and the run continues, and a thrown value whose toString throws is reported as Unknown thrown value. (#1830, #1832)
emergent_testing: the browser page renders a row for a test while it runs and settles that row when the test lands, so a blocking proof no longer blocks with nothing on screen. runBrowserProofs takes an optional start. (#1840)
emergent_testing: the browser page loads proof modules one at a time, so a suite larger than the engine's call-argument limit is no longer a shape the runner can build. reportOf folds a run's results into its report. (#1809, #1818)
types: AbstractRequiredMap describes a required-map API with an unrestricted string key set, and StateFold a fold with explicit initialization, state updates and finalization. (#1826)
website: the browser proof manifest generator refuses a module read that failed for anything but a missing path, rather than reading an oversized module as importing nothing. readFile's cap failure names the file. (#1842)