Commit graph

18 commits

Author SHA1 Message Date
randogoth
603f29b0f0 feat: gate a run of blocks to chosen output formats 2026-10-09 16:40:21 +03:00
randogoth
bb7a5111a1 docs: condense the README, fold the audit summary in, and tighten the declaration 2026-10-06 11:04:09 +03:00
randogoth
19e7cfaca3 docs: drop the predecessor comparisons from comments and tests 2026-10-06 11:04:09 +03:00
randogoth
36faa4fb93 build: package the server as an OCI container image 2026-10-06 11:04:06 +03:00
randogoth
088e860cad fix: a hard break between links is still only links
The gemtext renderer prints a bare => line for a paragraph holding nothing but
links, which is what lets a generator emit a navigable menu. is_only_links
tolerated soft breaks but not hard ones, so a generator had to choose: soft
breaks and a clean gemtext menu, or hard breaks and a menu that does not run
together on the formats that lay a paragraph out inline.

That was a false choice. A hard break between links is still a run of nothing
but links, and the inline formats already turn it into <br/>. Without this,
asking for the break made gemtext read the paragraph as prose and print its
flattened text alongside the => lines, listing every entry twice.

Found serving a real capsule: six area links rendered as one run-on line in a
browser and on a handset while gemtext looked perfect.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 09:41:26 +03:00
randogoth
dffa42c304 build: package with Nix and publish a static release artifact
packages.default builds natively and runs the suite: 357 tests pass in the
sandbox, including the 60 socket integration tests, which settles the open
question of whether they can bind in a Nix build. The sandbox's private
network namespace has loopback up and the tests take port 0, so there is
nothing to collide with.

packages.static is the published artifact, fully static against musl, so a
consumer needs neither autoPatchelfHook nor a matching glibc. There is no C
dependency anywhere in the tree, not even a TLS library, so unlike bunshin's
sqlite there is nothing to cross-provide. 2.3 MB stripped.

nixpkgs is pinned to unstable and deliberately not followed from a consumer:
every crate here declares rust-version 1.97 and nixos-25.11 ships 1.91.1, so
bucur's nixpkgs could not build this. It does not need to, since it fetches
the release asset.

wml is built in. It is opt-in upstream, and the bundled itsybitsy.toml names
it, so a default build refuses to boot the config shipped beside it.

apps.release-static publishes to Forgejo tagged by short rev, following
bunshin's. Note the asymmetry that bit bunshin: assets upload to
/releases/<id>/assets but download from /releases/download/<tag>/<name>.

THIRD_PARTY_NOTICES.md covers the static link closure, 73 crates across five
license families, plus the two vendored FIGlet fonts, which carry their terms
in the FIGfont comment header and which no crate scan can see. They are behind
the non-default figlet feature and so are not in this binary, but they are
redistributed with the source.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 08:46:19 +03:00
randogoth
eebb33fde1 docs: record the adversarial audit
138 checks, three defects found and fixed, load figures and the outstanding
items (unbounded render cache, ignored listener width, untested TLS leg).
2026-10-06 08:46:04 +03:00
randogoth
49a63503d0 fix: bound document nesting and escape generated urls 2026-10-04 22:30:44 +03:00
randogoth
c29364d8e0 feat: serve gemini behind a tls terminator 2026-10-04 22:04:52 +03:00
randogoth
dc2114a4d2 feat: serve gopher with dot-stuffing and a synthetic root menu 2026-10-04 21:20:43 +03:00
randogoth
1de4674b09 feat: render wml decks with paginated card sub-documents 2026-10-04 21:05:05 +03:00
randogoth
36b868e094 feat: add figlet banners and hyphenation behind features 2026-10-04 20:53:25 +03:00
randogoth
9e1cfed284 feat: render fixed-width text for nex 2026-10-04 20:27:29 +03:00
randogoth
2f38b8b929 feat: serve rendered pages over http, spartan and nex 2026-10-04 19:55:30 +03:00
randogoth
46f12b10da refactor: express custom directives with standard markdown constructs 2026-10-04 19:40:59 +03:00
randogoth
e5583bbd89 feat: parse markdown and custom directives into one representation 2026-10-04 19:21:48 +03:00
randogoth
3031b8acdd feat: resolve request paths within contained site roots 2026-10-04 19:08:38 +03:00
randogoth
6a3a198975 feat: add workspace skeleton and server configuration validation 2026-10-04 19:01:35 +03:00