RFC 4266 defines a bare gopher://host/ (no item-type prefix in the URL)
as defaulting to type '1' -- a menu -- so every RFC-following client,
Lagrange included, parses whatever the empty selector returns as
tab-delimited menu lines rather than displaying it as text. Handing back
the homepage's own rendered prose there has no tabs in it, so it parses
as zero valid entries and renders blank.
Only the truly empty selector gets the synthetic menu; its one item
points at the homepage under "/", a distinguishable non-empty selector
that still resolves to real content exactly as before. This still isn't
directory browsing -- there's still no listing of the content tree, just
the one link needed to make the root itself navigable.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Reuses md2txt's existing nex and text renderers (both already ship
unmodified) -- rendered unwrapped gemtext still works for Gemini/Spartan
clients that wrap themselves, but Nex and Gopher clients don't, so those
two get the classic 80-column pre-wrap instead.
Neither protocol has a redirect status of its own, so Site.resolve_flat()
follows the /foo.md -> /foo canonical bounce and the WML-card-only ->
parent redirect server-side and hands back real content directly, rather
than leaving the two new listeners to invent a redirect convention that
doesn't exist on the wire.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>