v2.0.3
Typing "1/0" ALGSIMPLIFY at a halifax or sparky prompt used to end the
session — not the line, the session, taking the stack, the dictionary, the
registers and the tape with it, including anything defined but not yet
SAVEd. It refuses now, and the next line still answers. Nothing else in the
language changed.
Alongside it, the CI reds that a release run never sees, and the sparky
download finally pointed at from the places people actually start.
Fixed
-
A division by zero inside a typed expression aborted the mill.
AlgRead
was documented as total and was total for syntax only: the parser's/
branch called the abortingAlgDivOf, so any expression whose divisor came
out zero killed the process. It now refuses through a guarded twin,
TryAlgDivOf, and all five seedalg words —ALGSIMPLIFY,ALGEXPAND,
ALGFACTOR,ALGSOLVE,ALGDESOLVE— inherit the refusal without a line
of their own changing:> "1/0" ALGSIMPLIFY ?: ALGSIMPLIFY: DIVISION BY ZERO AT TOKEN 3The literal
/0was the least of it. The builders fold the divisor while
the parse is still running, so"1/(1-1)","x/(y-y)"and"sin(1/0)"all
reached the same abort with no/0anywhere in their text — which is why the
guard had to go in the parser and not into a scan of the string. -
0^-1quietly answered0. A zero base to a negative exponent is a
division by zero written another way, and the machine had two answers for one
question: abort for1/0, a wrong0for0^-1. Both spellings now refuse
in the same words, throughTryAlgPowOf. A positive exponent still folds to
zero as it always did, and a symbolic exponent whose sign is unknown is
now left standing as0 ^ xrather than guessed at. -
The fuzz lists had no algebra in them.
mills/halifax/test.shoddyand
mills/sparky/test.shoddybetween them carried a good spread of hostile
regex shapes and not oneALG*line, which is how a whole seed's text
boundary reached a release without ever being fed a bad string. Both lists
now include the zero-denominator shapes, and sparky's note recording the
omission as a known defect is gone with the defect. -
A weave could be read while it was being rewritten. The mill gate
serializes writers, but another project's compiler can hold the previous
weave open as a metadata reference while the winner rewrites it —CS0009
on the Linux runners, where both projects of a solution build abreast. The
weave now lands beside its target and renames into place, so a reader sees
the old file complete or the new one complete and never a truncated one. -
The host-blindness check refused the compiler's own comment.
MillGate
named a host lane insrc/, which is exactly what the check exists to
forbid; the comment now describes the shape without naming it. -
The MCP lane asserted a path MSBuild does not write. Its closure checks
namedartifacts/bin/sparky/release, but the project isSparky.csprojand
the artifacts layout capitalises the directory. A Linux runner does not
forgive that the way a Windows workstation does. The step had never executed
before — every earlier run died upstream of it — so its first run was its
first test. The publish paths were already explicit, which is why the
release shipped while this stayed red. -
The sitemap had silently lost eleven pages — sparky, halifax and tally
among the mills, and eight machines, several missing for months.
verify-docsnow rebuilds the whole expectation from the tree in both
directions, so a page without an entry and an entry without a page each name
themselves. Being ungated is how it rotted.
Changed
- The sparky download is offered where people start. The release page
carried it and nothing pointed at it. The README's install section, the docs
home and the setup page now each offer it beside the.vsix, and the
release workflow records asparkydeployment per release so the repository
home's Deployments sidebar lists it next to the Pages site.
Added
TryAlgDivOf(a, b)andTryAlgPowOf(b, e)in
alg.shoddy —
Result-answering twins of the two builders that can refuse. The aborting
forms are defined over them and keep their messages exactly, so existing
callers are untouched and there is one set of rules rather than a builder and
a validator that can drift apart.