| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
| |
adoc(5) 8 makes a reference to an unset attribute an error (E4), so
three long-standing typos that asciidoctor passed through as literal
text now stop the build: "{empy}" for "{empty}", "{ssmpt}" for the
declared "{ssmtp}", and a declaration of "app-store-rolllout" that
nothing could reference.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The pages and the catalogues are the same either way --- maritacag
reads po4a's own configuration file and writes what po4a writes ---
so this is the toolchain swap alone: the po4a invocations become
maritacag, meta.txt drops the po4a external and declares maritacag as
an internal dependency.
See maritacag(7TODOs) for the fleetwide plan and what it was held to.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The page makes a definition list a term line --- ":: term" at the head
of the line, like every other block construct --- and a mid-line "::"
ordinary text. These pages were written in the trailing "term::"
form, which is AsciiDoc's and which the page replaced to remove a
footgun: prose reading "the a :: b thing" parsed as a definition.
The rendering does not change, except where it was wrong. The
trailing form folded an indented continuation into the term, so a
term's bold ran on over its own definition and, in a few pages, the
definition's first line came out after its second. Those read
correctly now.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The eight English section pages were missing, and with them the root
CHANGELOG.adoc and TODOs.adoc: what changed between two releases and
what is known to be left are not things a reader can work out from
the tree.
7README, 7CHANGELOG and 7TODOs are symlinks to the root documents, as
they are everywhere else. 0 links the rest, 7tutorial writes one page
start to finish, 7recipes has the tasks that come after that, and
7why says why the site is built this way.
3 is a reference page for a library, and a website has none; it says
so, and exists because a reader who knows where to look in one
repository should know where to look in all of them.
README.adoc gains the manpage title and NAME section the 7README
symlink needs to render, its prose unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
| |
Every other file of its kind here is a sentinel, and .sentinel is what
the suffix rules and the .gitignore already spell. One outlier called
.stamp meant two names for the one idea.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The numbers left with the code because they were inside the box that
scrolls. Pinning them there was tried first and taken out: nothing
uncovers them, but a scroll draws the two out of step for a frame and
the code is seen crossing them.
The answer is that only the code should scroll. That needs the cell
holding it to be allowed to be narrower than what it holds, and a
table is free to ignore being told so --- Firefox does, and the block
goes back to not containing its own lines. A row laid out as a flex
line is not free to ignore it: min-width there is honoured, the code
gets a box smaller than its content, and the numbers beside it are
not in that box at all. Nothing to pin, so nothing to fall behind.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Pinning them was wrong twice over. Nothing covers them: at rest the
cell's background reaches exactly to where the code begins --- painting
the cell shows it does --- but a scroll draws the two out of step for a
frame, and what is seen crossing the numbers is the code arriving
before they have moved. A background cannot fix a repaint.
Constraining the cell instead, so that only the code scrolls and the
numbers sit outside the box entirely, needs a max-width on a table
cell. That is a hint a browser may ignore, and Firefox ignores it:
the table grows back to its longest line and the block stops
containing them again, which was the bug this all started from.
So the box scrolls, numbers and all. They leave the view when the
code is scrolled far enough, which is the price of not lying about
where they are.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Pinning the first cell to the left edge moved it, and the code could
be seen sliding through a strip beside it. Both are the same thing:
the table that holds the numbers and the code was left to the
browser's default of separate borders, so its cells stand two pixels
apart. The first one's natural place is that two pixels in, which is
what it jumped from; the gap between them is what the code showed
through.
Collapsed, the numbers sit flush against the code, and the pinned cell
is raised so it is the code that passes under it rather than the other
way about.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A code block wider than the column ran straight past its own border:
the line it was too long for kept going to the edge of the page and
past it, over the margin and out of the block it was supposed to be
in.
"pre { overflow: auto }" was already there and could not help. The
line numbers sit in a table cell beside the code, and a table grows to
fit what it holds, so the pre was never narrower than its longest line
and so never had anything to scroll. The box scrolls instead, and the
numbers are pinned so they stay where they are while the code moves
under them.
Seen on en/pastebin/2021/06/22/curl-wget.html, whose cloc tables rule
off with eighty-odd dashes; it was there for any line past the
column's width.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
mkwb writes a reply inside what it answers now, so the indent is one
margin a level rather than nine rules counting depth, and each reply's
rail stacks with its parents' --- which is the thread view the flat
list could only approximate with a single rule.
On a narrow screen the margin goes and the rails carry it alone: at
depth 7 that is 273px of text on a 390px phone against 133px if the
desktop indent were kept, and against 350px and no nesting at all,
which is what was there before.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Below 40rem every message was pushed flush left, so a thread arrived
as a flat list and nothing said what answered what. It was pushed
there for a reason: this site's threads reach depth 8, and a rem a
level leaves about 220px for the words on a 390px phone.
A third of a rem a level costs 45px at the deepest and keeps every
depth apart, with a rail down the left of each reply carrying the
nesting that an offset that small cannot hold on its own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
mkwb grew a commentsdata action that reads every comment there is into
one corpus, and a comments -d that reads the corpus rather than the
sources. The pages wait on the corpus now; the corpus waits on the
sources and on src/global.json, which it is read from.
src/comments.data is built, so .gitignore takes it and clean removes
it. The rendered site is unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
mkwb now names each article's .sortdata among the prerequisites of
the language front page that sorts by it. Without them the page
could be built before the data existed, which is what broke the
guix build of this site.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
|
| | |
|
| | |
|
| |
|
|
|
|
| |
* src/content/b/: CGI server folder;
* src/content/git/: CGit, and later gistatic repository serving;
* src/content/live/: self-hosted live scaffolding.
|
| |
|
|
| |
* Makefile (install): Add the --delete flag to the rsync(1) call.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Since I can't get deterministic outputs out of mktorrent(1), change torrents
from $(captured-assets) to $(dynamic-contents).
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
parcial
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|