Added
-
Three more templates, so the catalogue is a catalogue:
wave(one clean
sine across the year),pulse(a heartbeat trace, a spike every few weeks)
andinvader(a space invader, centred). Each is 51 columns, which keeps
every lit day clear of the two partial weeks at the ends of a year, and each
is drawn in{0, 2, 4}— the only three shades no reader has to squint at. -
Two gates on template art, which matter now that
#57 invites contributions.
every_template_reads_clearlymeasures the closest pair of shades in every
template and fails anything that is not clear: a picture using2and3
looks two-toned in the.artfile, because the digits differ, and reads as
one flat colour on github.com.no_template_overhangs_the_yearfails a
template that loses a lit day off either end of any year. Both were checked
against art planted to break them.
Changed
-
mossaic-art --helpis grouped rather than a list of thirty flags. The
options now sit under what to draw, where it goes, tracking, making
the commits and output, with the usage and seven examples first. The
colour-theory paragraph that lived inside--backgroundmoved to
docs/ART.md, where there is room to say it properly. Shorter
overall (93 lines against 113) and no flag was dropped. -
Counts read as English. Every user-facing count said
1 template(s),
6 cell(s),59 day(s)— twenty-nine of them, on the first lines a new
user reads and in the markdown the GitHub Action posts. They now agree with
their number, verb included: 1 day is short, 2 days are short. -
The description says what mossaic is. It never mentioned the terminal.
Fixed
-
The one shipped template no longer warns on every single year. Drawing
--template dragonprintednote: 6 cell(s) fell outside 2027 and were droppedfor 2025 through 2029 — and all six were blank margin, so nothing
was lost.Canvas::placecounted every cell that fell outside the year,
lit or not. It now counts only the cells that would have been drawn, so the
note appears when a shade is genuinely lost and stays quiet otherwise.Found by running the flagship path and reading what it printed.
-
A missing
--filein a script names the file, not the terminal. The
chart claims the terminal before it reads the calendar, so
mossaic --file typo.jsonin CI reportedneeds an interactive terminal—
true, and no help at all in finding the typo. With a terminal the behaviour
is unchanged: the error is shown in the chart withrto retry, which is
better than exiting. -
--fontno longer tells its readers to editsrc/art.rs. It printed a
note meant for contributors to everyone who ran it. -
The two guidance messages line their columns up.
could not detect a GitHub userput one of its three suggestions two columns out, and the
--demoline — the one that needs no account at all — came last. The
missing-file message tried to align against an interpolated path, which
cannot be done, and repeated back a path the reader had just typed. -
brew install vyncint/tap/mossaic. The formula is generated by the
release itself from the checksums the archives produced, so it cannot
describe an archive that was never built, and a hand-edit in the tap is
overwritten by the next release rather than quietly kept.Verified by installing it:
brew audit --strictis clean,brew test
passes, and the three binaries plus a copy of the art templates land where
the formula says.
Fixed
-
A release's archives are never replaced once published. The upload
clobbered, so re-running the artifact build for an existing tag rebuilt and
overwrote them — and Rust builds are not bit-for-bit reproducible, so the
replacements had different checksums. Every checksum anyone had recorded
became wrong, including the Homebrew formula's and including one somebody
had written down to verify a download with.Found by re-running the workflow: the formula job reported "tap updated"
where nothing should have changed, and the diff was four checksums.A re-run now fills in what is missing and leaves what is there alone, which
is the case the workflow was built for. Replacing a genuinely corrupt asset
means deleting it first, and that friction is deliberate. -
The Intel-Mac binary is cross-compiled from Apple silicon rather than
built on amacos-13runner. Xcode's toolchain and SDK are universal, so an
arm64 Mac produces an x86-64 binary with nothing butrustup target add—
no sysroot, no linker configuration.The Intel runners are being wound down and it shows: on the v0.6.2 release
this leg sat queued for forty-five minutes while every other target finished
inside ninety seconds. A target nobody can schedule is a target that
silently stops shipping.The job now asks
filewhat it actually built, and fails if the answer is
not the architecture the target names — a cross-build that quietly produced
the host's architecture would pass every other check here and fail on the
first machine that downloaded it. -
The README briefly promised Homebrew before the tap existed, and said
so for an hour or two until it did. An install command that does not work
is worse than one that is not offered; every route the README lists is now
one that has been run. -
The Windows binary is built. The 0.6.2 release shipped Linux and macOS
archives and no.zip: the build step had noshell: bash, and Windows
runners default to PowerShell, where"$TARGET"expands to the empty string
andcargo build --targetis handed nothing. Every step isbashnow. -
Building the artifacts is re-runnable, in
binaries.ymlrather than
insiderelease.yml. Publishing to crates.io happens once and cannot be
repeated; building an archive can fail for reasons that have nothing to do
with the release, and when it does the fix must not be "cut another
version". It fires on a published release, and by hand for any tag whose
artifacts need rebuilding.