v6.4.9
v6.4.9 — unreleased
A Windows checkout rewrote the LICENSE and the release found out last. Every asset built,
every crate published, and only then did the publication gate compare the LICENSE inside the
Windows zip against the repository copy and refuse to publish. The bytes differed by 201 CR
characters and nothing else. Because the published crates pin that exact commit, the release
could not be re-cut from a fix — the assets had to be lifted out of the failed run's artifacts
and attached to the tag by hand.
Fixed
-
Line endings are pinned at the repository, not hoped for. GitHub's Windows runners check
out withcore.autocrlf=true.stage-distribution-legal.shcopiesLICENSEverbatim into
all 16 assets andverify-release-distribution.shcompares every extracted copy against the
repository file, so a rewritten checkout guarantees a failure that only the last job can see.
.gitattributesnow pins* text=auto eol=lf(no tracked file carried a CR byte, so this
changes no content —git add --renormalize .is a no-op), with the existing
THIRD_PARTY_LICENSES/*.txt binaryoverride still winning for the hash-named upstream texts. -
The packaging runner refuses a rewritten checkout.
stage-distribution-legal.shfails on
aLICENSEcontaining CR bytes, before it copies anything. The job that would have produced
the divergence is the job that stops, instead of five build jobs and a crates.io publication
succeeding first. -
Both gates are falsified in the suite.
test-release-distribution-license.shasserts
git check-attr eol -- LICENSEreportslf, proves that assertion can observe the
unspecifiedstate by running the same query against a scratch repository with no
.gitattributes, drives the staging script with a CRLF fixture and requires the CR refusal,
and then drives it with an LF fixture and requires the staged copy to appear. -
The Windows test build was broken under
-D warnings, and nothing could see it.
rust.yml'stestjob is the only one whose runner is selectable, and three of its run
steps never declared a shell, so onwindows-latestGitHub ran them through PowerShell and
cargo nextest run ... \died at parse time before a single test executed
(ParserError: D:\a\_temp\<id>.ps1:3). The advertised escape hatch for proving
cross-platform behaviour could not prove anything. Withshell: bashon all three, the
suite ran on Windows for the first time and immediately failed on three real defects:
read_project_idandReadSubject/read_regular_nofollowimported unconditionally into
test modules whose only callers are#[cfg(unix)], and anexpect(dead_code)on
ReadSubject::open_labelgatednot(unix)when a non-unix lib test build does use it,
making the expectation unfulfilled -- which-D warningsrejects exactly as hard as the
dead code it was written to tolerate. The gate is nowall(not(unix), not(test)).
A fourth followed in the integration suite:invoke_with_pathin
wave_e_coordination.rs, whose only caller is a#[cfg(unix)]test that puts a stubkill
on PATH. All four are the same shape -- an item declared unconditionally whose every caller
is unix-gated -- and all four were invisible to every unix machine and to every release
build, which builds the lib rather than the test targets.
Found, not fixed
- The shipped Windows binary cannot initialize a project or durably store a run. With the
suite finally able to run onwindows-latest, it did — and reported
384 tests run: 290 passed, 94 failed. Two stubs account for all of it:
wave_c_bootstrap.rspairs every descriptor-safe mutation with a#[cfg(not(unix))]twin
that returnsdescriptor-safe bootstrap mutation is unavailable on this platform(five of
them), soshepherd initfails and every hook test cascades from it; and
crates/core/src/run/atomic.rs:135opens the parent directory tosync_all()it, which
Windows refuses withAccess is denied. (os error 5)becausestd::fs::File::opendoes not
setFILE_FLAG_BACKUP_SEMANTICS. Filed as #321 — it is a decision (implement the Windows
primitives, or stop shipping the Windows asset), not a patch.
Notes
cargo binstall shepherd-cliandscripts/install-shepherd.shwere both exercised against
the published v6.4.8 release onaarch64-apple-darwinand resolve, download, verify, and
installshepherd-cli 6.4.8.