Commit graph

22 commits

Author SHA1 Message Date
randogoth
c08b03db7b feat: declare a Mews page's feed, keep its prolog, and lift link-only list items
All checks were successful
CI / check (push) Successful in 26s
CI / release (push) Successful in 1m1s
2026-10-11 16:18:05 +03:00
randogoth
3e659df9dd Serve the Mews Profile stylesheet from an embedded copy
mews_profile pins both the stylesheet's name and its content, so a site
never actually chooses either; leaving the file itself to be placed in
every content root by hand just gave operators a way to get it stale or
missing. The byte-for-byte copy from mews.page/spec 5.1 now ships in the
binary and resolves `mews-0.1.css` at any depth, matching how a page's
relative link to it resolves, across every protocol that can hit it.
2026-10-11 10:14:49 +03:00
randogoth
c9bde15f5c feat: let a site render its xhtmlmp/html output as a Mews Profile page
All checks were successful
CI / check (push) Successful in 48s
CI / release (push) Successful in 6m48s
A new mews_profile site setting switches the XHTML-MP 1.2 doctype, the
conformance marker, the viewport tag and the default stylesheet link, and
drops raw HTML passthrough and off-site or data: images that the profile's
permitted-element list cannot vouch for.
2026-10-11 09:07:54 +03:00
randogoth
1b47145522 build: wire a Forgejo Actions workflow for checks and the static-binary release
check runs devbox run check on push, PR and dispatch; release reuses the
existing nix run .#release-static app to ship packages.static as a Forgejo
release tagged by short commit hash, gated on check passing first.
2026-10-11 09:07:54 +03:00
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