Two things got most of the work in this release: the HTTP client, and running a project that has dependencies.
scua main.scua now runs a project with dependencies and
no extra flags. Once scua vendor has written
deps/, SCUA finds your project by looking for
scua.toml beside your file and upward, stopping at the top
of your repository so a stray manifest somewhere above cannot capture
your script, then resolves imports from the lock. Every dependency file
is hashed against the record that shipped with it before anything runs,
so a file edited under deps/ stops the program and gets
named rather than running. That check takes about a millisecond and is
on by default. There is also --mod-override name=DIR for
testing a local copy of one dependency, which reports what it
replaced.
The HTTP client is much more complete.
http.request(url, opts) takes headers and any method.
Failures come back as Error({ kind, message }) with a kind
you can branch on, instead of a string you have to pattern match.
http.open stops at the response head and hands you a
stream, so a large body does not have to land in memory first. Requests
take a timeout_ms that bounds the whole exchange rather
than one stage of it. Response bodies are now bytes rather
than string, because the old string was never checked for
valid text, and json.decode accepts bytes so a response
decodes without a conversion step. bytes.find and
bytes.concat fill in the two primitives incremental framing
was missing.
Table keys no longer have to be identifiers. A header map, JSON with hyphens or dots, or data exported from another tool is one expression now instead of a run of assignments.
On the fixes side, a cluster node could stop ticking permanently when
two nodes connected to each other at the same instant and one connection
was collapsed as a duplicate. It looked like a mesh going quiet under
load for no visible reason. Separately, a wait_all or
map_all arm can now use a variable from the handler around
it, which is the most natural way to write one and previously read the
wrong value or stopped the run outright.
The package manager is still moving. Every verb works against directory registries, and this is the release where the toolchain reads the lock itself rather than leaning on the tool to arrange things first. There is no public registry yet. The changelog has the full accounting.