The Sirius.X / Theseus.X / Ariadne.X / Hephaestus.X links in the family
topnavs and body copy were written as full https URLs — href="https://sirius.x/".
In Theseus's own browser (where the current page is served over the bns://
scheme) that absolute URL triggers the gateway-fallback path on top of the
current host, producing URLs like bns://theseus.x/bns/sirius.x/ that then
accumulate segments as the user clicks around.
Switched 56 cross-family link hrefs to protocol-relative (href="//sirius.x/"
etc.). Protocol-relative URLs inherit the scheme of the current page, so:
- In Theseus on bns://theseus.x/ the link resolves to bns://sirius.x/ —
direct BCNR, no gateway rewrite, no URL accumulation.
- On the silentmode.st ICANN mirror it resolves to https://sirius.x/ —
unchanged from the previous behaviour.
Only the four sibling .X hosts were swapped; silentmode.st, dl.silentmode.st,
code.silentmode.st, navigate.st, and every forge or API URL still carry
their explicit scheme.
Updates releases-manifest.json, releases/index.html, theseus/index.html
and site-theseus-x/index.html for the 0.3.78 release — the one with
the Ariadne plug-in toggle fix for 0.2.0 Just-me installs, the
Settings Middle East crash fix, covenant-held name resolution and
Pithos 0.3.16.
Two bugs the user hit while browsing the dev docs:
1. ariadne.x/dev/ used root-style hrefs ("thread", "dev", "assets/…") that
assumed the <base> tag workaround was active. On a client that walks
relative URLs against the page URL (BCNR direct hosts, Theseus in
gateway mode), every click appended one more segment — "/dev/plug-ins",
"/dev/plug-ins/extensions", etc. — because "plug-ins" resolved against
"/dev/" instead of the site root. Switched the dev page to proper "../"
relative paths (../thread/, ../assets/favicon.svg, ../#download) so it
resolves correctly regardless of host or base-tag presence. Same fix
on ariadne.x/thread/ (brand href="" went nowhere; the Product column
pointed every link at the current directory).
2. Theseus sub-pages had drifted apart. The home topnav was already
trimmed to Plug-ins · Extensions · Developers · Sirius.X · Get Theseus,
but plug-ins/, extensions/, brand/, and whitepaper/ still carried the
old "Brand" link in their topnav, had no "Developers" entry at all,
and lacked the mobile hamburger. Standardised all four to the home
pattern and dropped Brand + Whitepaper from the topnav on each page.
Both pages still exist and are reachable from the footer; neither is
on the top-level nav path.
Also added a Developers link + hamburger to ariadne.x/thread/ so the
Ariadne family matches the Theseus family on every page.
A developer / agent landing page on both .X sites so an LLM or a human
porting the resolver has everything in one place and does not need the
public gateway to understand how to talk to BNS.
ariadne.x/dev/ is the canonical page. Covers:
- Why: resolve names directly from the chain, with no operator in the
middle.
- BNS1 in one page: beacons, cash-token certificates, OP_RETURN payloads,
REG/UPD/REL, chipnet network constants, the six indexer rules
(including the 2026-10-04 one-message rule).
- The record-type table — u, h, a, ip, p, s3, tls, c, bl.
- A minimum viable resolver in under 100 lines of Node.js that pulls the
beacon's history, parses the OP_RETURNs, and prints a name's records.
- Pointers to every production implementation (Argus JS, Ariadne Kotlin,
the Windows Thread, the gateway) and every spec document on the forge.
- Public endpoints with a trust note: convenience, not consensus.
- Three paths for embedding Ariadne's Thread in your own app: chain-install
the Windows service, import the resolver library directly, or call the
local HTTP API; platform coverage table; MPL-2.0 licence note.
theseus.x/dev/ is a shorter page that cross-links to ariadne.x/dev/ for
the resolver work and covers Theseus-specific topics inline — the
extension publishing path (register a .x name on sirius.x, PUT signed
tarball to /api/ext, Theseus verifies the signature against the
on-chain owner before anything runs) and the first-party plug-in
surface.
Both pages are wired into the home-page topnav, mobile dropdown, and
footer Product column.
- site/releases: 0.3.77 block above 0.3.76 with the Translator engine
radio, CF Bot Fight error page and Pithos 0.3.13 bundle, SHAs
ab4135a9… (installer) + a01ad6b8… (portable).
- site/theseus and site-theseus-x: bump the download card to 0.3.77 and
the fallback hashes to match. The theseus-x page already fetches the
live manifest; the fallback stays in sync for offline reads and the
Sia mirror.
- site/releases-manifest.json: 0.3.77 entry prepended for the main
manifest; the dl copy was scp'd and dl-latest.sh regenerated the
/latest/ redirects on the VPS.
Setup 9e5c4b6b…b7e9, portable b223eb14…5c49. Pithos opens at
pithos.sia/<user>/<drive>/<folder>, music keeps playing in background
tabs, a widened left panel no longer squeezes the page; bundles Pithos
0.3.10 and Aegis 0.31.0.
A parallel ship pass raced this one on the same version string: the
other session built 0.3.75 from 4bfef3a (Aegis 0.29.0) and scp'd its
binaries over mine. The first reconcile pass accepted the on-disk
hashes under the "both built from the same HEAD" assumption, but they
are different builds — mine includes d2ddee5 (Aegis 0.30.0) and the
master tip, theirs stops at 4bfef3a. The peer stood down, I re-scp'd
my binaries, and this commit pulls the manifest + the releases page +
theseus.x back to those hashes. The release notes already named
Aegis 0.30.0, which matches what the binaries actually bundle now.
Mobile phones were giving the topnav 130 px — three or four wrapped rows —
before the hero even started drawing. On a 375 x 812 viewport that cost
~16% of the first screen to redundant navigation, and the "Get Theseus" /
"Get for Android" CTAs duplicated download buttons that sit in the hero
one scroll away.
The new pattern:
- Desktop (>720 px) is unchanged. Theseus.X drops Brand + Whitepaper from
the topnav (they live in the deep footer), so the row is now brand +
Plug-ins + Extensions + Sirius.X + Get Theseus. Ariadne.X keeps the same
set it had.
- Mobile (<=720 px) collapses to a single ~58 px row: brand on the left,
a native <details><summary> hamburger on the right, nothing else. The
dropdown panel is right-anchored, pure HTML+CSS, no JS, keyboard-usable
via the summary's built-in semantics.
- Theseus dropdown: Plug-ins, Extensions, Sirius.X.
- Ariadne dropdown: Ariadne's Thread, Theseus.X, Sirius.X.
The hero + its primary CTA now fit above the fold on an iPhone 13 class
viewport, which is where this content needs to land first.
Manifest, releases page, download pages and theseus.x fallback text all point at
0.3.61 with the new hashes. Silentmode.st serves static; silentmode.bch mirror
follows via the 5-min Sia sync.
- New /brand/ directory: compass-mark favicon and logo variants (colour +
monochrome currentColor), 512x512 avatar with rounded corners, 1200x630
banner for OpenGraph/Twitter cards, and a brand book page mirroring the
Sirius.X and Ariadne.X pattern — logo & wordmark, avatar & favicon,
social banner, colour palette, typography, usage & licence.
- Footer replaces the single-line attribution with the deep, four-column
family footer (brand column plus Product, Download, Pantheon), an alpha
badge bar, and the acid-green accent used elsewhere on the site. Brand
and Sirius.X + Ariadne.X + Hephaestus.X cross-links live here now.
- Ariadne's Thread plug-in card on /plug-ins/ swaps the spool emoji for
the actual brand-book thread mark (thread.svg, calm variant, 26px
beside the h3). Same asset the resolver page carries, copied into
local /assets/ so the icon works offline and doesn't cross-origin.
- /extensions/ picks up a Brand link in the topnav to match the sibling
pages' navigation set.
Manifest and download pages point at the new build. Silentmode.st serves
static; silentmode.bch mirror follows via the 5-min Sia sync; theseus.x's
fallback text and hashes match the 0.3.60 binaries so the page reads correctly
before the client-side manifest fetch overwrites them.
The public repos carried no license, so nobody could legally copy or build
on the code, and the whitepaper's "free software" had nothing behind it.
Theseus and its companions take the Mozilla Public License 2.0, the
file-level copyleft Firefox and Brave use, which is compatible with every
component they bundle. The resolver and gateway libraries take Apache-2.0
so that other implementations of the registry can reuse them without
copyleft in the way. The protocol documents and the whitepaper are CC BY 4.0.
A third-party notices file lists what the browser ships and fetches, with
the source offer the GPL sing-box binary the VPN add-on downloads requires;
the matching source archive is now published beside the binaries. The
names and marks are reserved in TRADEMARKS.md, separate from the code
license, so a fork must ship under its own name. Settings › General says
the license and links the three files; the whitepaper says the same.
Every card that has a signed update channel now carries the two
buttons a reader actually needs — "Install in Theseus" (a
theseus://extensions/install/<id> deep link that main.js already
intercepts via will-navigate, popping the native install-consent
dialog and verifying the operator signature before any bytes hit
addons/) and "Download tarball" (direct .tar.gz link for sideloaders
and archivists). A one-line update hint below the buttons points at
the signed updates.json and notes SHA-256 verification, so the whole
install-and-then-update path fits inside the card.
Applies to Screenshot and PDF Editor. Notepad and Translate ship
inside every Theseus build and have no separate channel yet — those
carry a plain "Ships with Theseus — appears under Settings ›
Extensions on first launch" note in the same slot so the layout
stays consistent across bundled entries.
The download hrefs default to the current versioned tarball on the
navigate.st gateway and get rewritten to the newest entry from the
signed updates.json when the fetch succeeds (new data-live="download"
setter on the manifest-fill script) so the button never points at a
stale version.
Cloning the forge repo on Windows and running the suite there turned up two
things a checkout inside the monorepo could never show, because this working
copy has core.autocrlf=false.
Git on Windows defaults to autocrlf=true, so a fresh clone gets CRLF. For
most files that is cosmetic. For shell scripts it is not: install.sh copied
from such a clone onto a server fails with `bash: \r: command not found`,
which tells the person almost nothing about what is wrong. And a
CRLF-rewritten .patch file is no longer the bytes `patch` was given.
.gitattributes now pins eol=lf for the scripts, the container inputs and the
source, and marks *.patch as binary so nothing rewrites it at all.
tools/refresh-patches.sh --check also compares with --strip-trailing-cr, so
a clone made before this landed reports honestly instead of claiming the
patch record has drifted when it has not. A check that cries wolf is a check
somebody switches off.
- Settings > Extensions: the Community list showed an entry even for
extensions already listed above under Installed, so docx-editor
appeared twice as soon as it landed in the gateway catalog. The
render now filters out any catalog item whose id is installed —
the Installed list handles updates via the poll + "Check for
updates" button, so the Community list only needs to surface
things you don't have. Empty-state copy branches on whether the
catalog is empty vs "everything is installed".
- theseus.x/extensions catalog renderer accepts data:image/... icons
in addition to emoji, so an extension whose manifest.icon is an
SVG data URI (pdf-editor, docx-editor) renders as an <img> instead
of the raw URI text.
- Static PDF Editor entry on that page now uses the same inline SVG
badge the browser dock renders.
The extensions page could only hand out tarballs; installing meant going
to Settings › Extensions › Community and finding the entry again. Pages
now get window.bcnr.installExtension(id) and Theseus intercepts
theseus://extensions/install/<id> links (page clicks, target=_blank and
the address bar). The page only names a catalog id: Theseus fetches the
catalog and package itself, asks in a native dialog the page cannot draw
over, verifies the publisher signature against the name's current owner
and activates the add-on — the same path a Settings install takes. One
prompt at a time; an already-installed version says so instead of
offering a no-op update.
The site shows the button inside Theseus (feature-detected on the
bridge), a "update Theseus" hint on older builds and a download hint in
other browsers.
The topnav had both the Theseus.X brand mark and a "Home" link that
went to the same place — clicking either landed on the same page. The
brand mark is universally understood as the home affordance, so the
Home tab was just chrome noise between the mark and Plug-ins. Removed
across the home, Plug-ins and Extensions pages so the tab strip reads
as three distinct destinations instead of two-plus-a-repeat.
Two first-party extensions shipped without ever appearing on the
catalog page. Added:
📄 PDF Editor — bundled, full-tab PDF reader/annotator (highlight,
mark up, reorder/rotate/drop pages, fill forms, save a new copy;
annotations written as real PDF content). Opens from the toolbar
menu and from the "Open PDF in editor" right-click on any link.
📝 Word editor — .docx open/edit/save in a full Theseus tab.
Ribbon-style formatting, tables, lists, images and links;
headers, footers, footnotes, page setup and the document's own
styles are preserved through a round-trip. Listed as a community
extension (Settings › Extensions › Community); channel path
mirrors the addon.json updateURL (extensions/community/docx-editor).
Both cards carry data-ext hooks so the manifest-fill script picks up
version + tarball + sha256 from a signed updates.json when the
channel is published — for now the baked-in 0.1.0 is the fallback.
The IntersectionObserver-based spy only fired when a section entered a
narrow band 40–45% down the viewport. Short sections at the tail of a
page — Operator key and Roadmap on theseus.x/extensions, whatever came
last on the other pages — never made it into that band because the
page runs out of scroll before their top crosses 40%, so their sidebar
links stayed dim no matter how far the reader scrolled.
Rewrote the spy across every page with a sidebar (theseus.x home /
plug-ins / extensions and sirius.x home / tld / theseus / docs / admin
/ brand): it listens to window scroll, picks the last section whose
top has crossed 35% of the viewport, and — when the window is scrolled
to within 4px of the bottom — snaps to the final section regardless of
where its top is. Every link in the rail can now activate.
theseus.x/extensions also had the spy IIFE bundled with the manifest
loader in one <script> block near the middle of the page, so at run
time the parser hadn't yet reached the last three sections and only
Bundled/Community/Build were ever registered. Moved the spy to its own
<script> just before </body> so it sees every section that ships.