Skip to content

v2.0.3

Choose a tag to compare

@github-actions github-actions released this 11 Aug 23:14
· 91 commits to main since this release

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 aborting AlgDivOf, 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 3
    

    The literal /0 was 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 /0 anywhere in their text — which is why the
    guard had to go in the parser and not into a scan of the string.

  • 0^-1 quietly answered 0. 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 for 1/0, a wrong 0 for 0^-1. Both spellings now refuse
    in the same words, through TryAlgPowOf. A positive exponent still folds to
    zero as it always did, and a symbolic exponent whose sign is unknown is
    now left standing as 0 ^ x rather than guessed at.

  • The fuzz lists had no algebra in them. mills/halifax/test.shoddy and
    mills/sparky/test.shoddy between them carried a good spread of hostile
    regex shapes and not one ALG* 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 in src/, 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
    named artifacts/bin/sparky/release, but the project is Sparky.csproj and
    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-docs now 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 a sparky deployment per release so the repository
    home's Deployments sidebar lists it next to the Pages site.

Added

  • TryAlgDivOf(a, b) and TryAlgPowOf(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.