<feed xmlns='http://www.w3.org/2005/Atom'>
<title>euandre.org, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://euandre.org/git/euandre.org/atom?h=main</id>
<link rel='self' href='http://euandre.org/git/euandre.org/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/'/>
<updated>2026-09-12T21:43:22Z</updated>
<entry>
<title>Stop claiming music pages</title>
<updated>2026-09-12T21:43:22Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T21:43:22Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=e73249eb61410cb4dddb357572298eaedde68abb'/>
<id>urn:sha1:e73249eb61410cb4dddb357572298eaedde68abb</id>
<content type='text'>
Every .ly is in the untracked STUFF/, so no music page is built.
mkdeps.sh keeps its rules for when one is --- it is the README
that was describing machinery as though it were content.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
</content>
</entry>
<entry>
<title>Five languages, not six</title>
<updated>2026-09-12T17:30:09Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T17:30:09Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=6e46f156aac67a1c70c9f2b92d0aaed067da7ed4'/>
<id>urn:sha1:6e46f156aac67a1c70c9f2b92d0aaed067da7ed4</id>
<content type='text'>
German went with po/de.po in 6ca718a; what is left is English and
the four po4a writes from it --- Esperanto, Spanish, French and
Portuguese.  The count sits in the NAME line every page carries,
so it was wrong in eight places at once.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
</content>
</entry>
<entry>
<title>Compute each selector once, not seven times</title>
<updated>2026-09-12T17:15:16Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T17:15:16Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=8658a4c939b82c38ce8f2d3f890e771ff68cbe3d'/>
<id>urn:sha1:8658a4c939b82c38ce8f2d3f890e771ff68cbe3d</id>
<content type='text'>
mkdeps.sh asked the same questions over and over: "pages" is built
on four of the other selectors, the tagged list mkwb reads asks for
all seven again, and "collections" alone was computed nine times, a
find and a grep and a sort apiece.  It spawned 372 processes to
print 2450 lines.

Every answer is now computed once, up front, into a file named
after it, and read back from there.  The three hand-rolled caches
go with it: they were the same idea, done three times, and the
loop that fills them says the dependency order out loud.  Two
smaller things fell out on the way: collections ran dirname once
per collection where sed does it in one, and articles ran one find
per collection where find takes them all at once.

The order the loop fills them in is not decoration.  A pipeline's
stages run side by side, and only_masters and with_translations
are two stages of one selector that both read what po4a writes ---
so an answer computed where it is first needed can be read while
it is still half-written, which is a race that shows up as an
empty list and a deps.mk missing half the site.  Filled in order,
up front, nothing is ever read while it is being written.

372 processes to 109, 0.47s to 0.24s, byte-identical deps.mk over
a dozen runs.  The floor now is exec(2): the tools this reaches
for cost 1.1 to 2.5ms each to start, and a hundred of them is the
whole of the remaining runtime.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
</content>
</entry>
<entry>
<title>Carry a long-description</title>
<updated>2026-09-12T16:55:56Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T16:55:56Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=3e60abb35ed1388a1f8c47cab01dac7b3bd5e56d'/>
<id>urn:sha1:3e60abb35ed1388a1f8c47cab01dac7b3bd5e56d</id>
<content type='text'>
pristineg required one as of its 5fa9369: a catalogue reproduces both
files verbatim, and the reader who wants more than "Blog and personal
website (euandre.org)." had nowhere else to go.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
</content>
</entry>
<entry>
<title>Declare the site's language, and name the tools as the renames left them</title>
<updated>2026-09-12T12:28:31Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T12:28:31Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=0d4728b79d35050061184e4f5a2a21707e8fa632'/>
<id>urn:sha1:0d4728b79d35050061184e4f5a2a21707e8fa632</id>
<content type='text'>
lang is "html": what this builds is a tree of pages, and pkgs reads
that to pick mkwbpkg, which adds the gzip phase that puts a twin
beside every file that shrinks.

The documentation catches up too.  The rename sweep matched
"mkwb(1)" but not "*mkwb*(1)": with the section in the brackets after
the closing star, the name is not what the paren follows.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
</content>
</entry>
<entry>
<title>deps.mk: Regenerate, for the tool names the rename moved</title>
<updated>2026-09-12T12:11:05Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T12:11:05Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=6e1de68f492dbc554da914c6724fdde6a981f460'/>
<id>urn:sha1:6e1de68f492dbc554da914c6724fdde6a981f460</id>
<content type='text'>
The file is mkwbg(1)'s output, and it was still the old mkwb's: four
rules read a value back with "$(mkwb get ...)" inside a command
substitution, which the build could not find.

    sh: line 1: mkwb: command not found
    make: *** [deps.mk:2186: ...updatedat-check] Error 127

mkwbg already prints its own name; this is only the copy here
catching up.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
</content>
</entry>
<entry>
<title>meta.txt: Declare the imagemagick the favicon rules run</title>
<updated>2026-09-12T12:07:39Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T12:07:39Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=c4f81e32b2223e58d7cea3801ef0fdc2775693af'/>
<id>urn:sha1:c4f81e32b2223e58d7cea3801ef0fdc2775693af</id>
<content type='text'>
mkwbg(1) emits two rules that turn src/content/img/favicon.svg into
favicon.ico and favicon.png, and both call convert(1):

    sh: line 1: convert: command not found
    make: *** [deps.mk:2037: src/content/favicon.ico] Error 127

The rules are not new --- they were in the tree before the renames,
and a build sandbox has never had imagemagick.  What changed is that
the build now reaches them: it used to stop earlier, on the mkwb that
the rename had turned into mkwbg.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
</content>
</entry>
<entry>
<title>m</title>
<updated>2026-09-12T03:15:09Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-12T03:15:09Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=1749d83c37095f2c1b71ee6fc71b42fe223a3b29'/>
<id>urn:sha1:1749d83c37095f2c1b71ee6fc71b42fe223a3b29</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Drop gettext from meta.txt</title>
<updated>2026-09-11T17:21:27Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-11T17:21:27Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=25aa21832291403c318b4e9f768ac93a396279e4'/>
<id>urn:sha1:25aa21832291403c318b4e9f768ac93a396279e4</id>
<content type='text'>
Nothing here runs msgfmt, or any other gettext tool: this site has no
message catalogue of its own, and the wording tables it does translate
are committed.  The entry was asking for a package the build never
opens.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
</content>
</entry>
<entry>
<title>Say in meta.txt what the package actually asks for</title>
<updated>2026-09-11T16:52:18Z</updated>
<author>
<name>EuAndreh</name>
<email>eu@euandre.org</email>
</author>
<published>2026-09-11T16:52:18Z</published>
<link rel='alternate' type='text/html' href='http://euandre.org/git/euandre.org/commit/?id=082225ba29431f52ebea6f6e104bb137341234db'/>
<id>urn:sha1:082225ba29431f52ebea6f6e104bb137341234db</id>
<content type='text'>
Nothing reads this file here --- the site is not in pkgs' repos.txt,
so its package is hand-written rather than generated from this --- and
it had drifted from that package in both directions.

Out: lilypond, for which there is no source (mkdeps.sh says as much:
"There is no music yet"); ruby-asciidoctor, which nothing invokes;
and tar, which was listed twice, once as a sibling repository and
once as a system package.

In: eslaides, misct, mktorrent and mkwb, which the site is built
with, and ghostscript, gnupg and moreutils, which it runs.

It now mirrors the entry in pkgs exactly, so the two can be compared
by eye.

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
</content>
</entry>
</feed>
