crucible 0.0.2
The gate that runs against a published artifact rather than a build of this
tree, and the defect it found the first time it ran.
Added
scripts/smoke.sh— the release gate that could not run before there was a
release. It takes the published tarball, checks it against the published
checksum, and runs it in a sandbox holding the binary, the dynamic loader and
the libraries the binary itself names: no shell, no toolchain, no certificate
bundle, no source tree, and a home directory a moment old. What that proves is
not that the libraries it needs are there, which binding them guarantees, but
the half no other gate can see — that nothing else on the build machine was
holding it up. It reports the glibc floor, refuses a run whose--version
disagrees withCargo.toml, and requires that a machine with no key be told
which variable it wants rather than left with a blank screen. Wired into
RELEASING.mdon both sides of the tag.
Fixed
- A run whose output is redirected no longer writes the terminal title.
crucible > logandcrucible | teewere both getting the OSC sequence that
names a tab — once on the way in and once when the guard handed the title
back — and neither is a title once something other than a terminal has read
it; they are twenty-two bytes in the middle of somebody's file. Setting one
now goes through the only constructor there is, and it asks standard output
whether it is a terminal before writing anything, so a caller cannot aim a
title at a pipe.scripts/smoke.shfails a release whose redirected run
writes any escape sequence at all, which is how this was found: in the
published 0.0.1 artifact rather than in the source.
Documented
- The released binary needs glibc 2.34 or newer and nothing else from the
system — no certificate store, no runtime. Measured from the binary rather
than assumed, ignoring weak symbols, which is the difference between a floor
and a version number that retires distributions this runs on perfectly well.
Internal
- The report that a session has stopped being recorded is now gated from the
binary's own tests. A log that fails every write cannot be built from outside
the runner — every public way in ends at a real file — so the case where the
last turn is still queued when input ends had no test, and deleting the code
that reports it would have gone unnoticed.crucible-runnergains aproof
feature that only the binary's[dev-dependencies]turns on, so the seam is
absent from a release build; acompile_error!behind the feature is what
proved that rather than cargo's documented behaviour being taken on trust.