Snapshot of the decentralized-web stack at the point of the resolver+Theseus rebuild deploy. Includes: - Argus (BNS engine + resolver daemon + Sia gateway) - AriadneResolver (Windows Inno installer bundle + Android APK sources + Firefox extension) - TheseusNavigator (Electron browser) - site/ (silentmode.st content, deployed to Sia at bns/silentmode/) - design docs, roadmap, protocol spec Secrets excluded via .gitignore: Argus/sia-s3.json, Argus/wallets.json, Argus/ca/*.key,*.crt. Build outputs, node_modules, and bundled runtimes also excluded. Shipped hashes on dl.silentmode.st at this commit: AriadneResolver-Setup-0.1.0.exe 5bcb216eef31ea28ed767e4134ab74bd5ac69dfbd365fd249e9e6938e55c986a TheseusNavigator-Setup-0.0.1.exe 7c735e88bad2da3347145adba3016c8f626a18b8422289c8c6ba471972e2952b TheseusNavigator-0.0.1-portable.exe 008fd84445babeabb401b2bca40ea9466b24b0e6d6c85104da7640c5c5c84521 ariadne-v0.2.apk 635c8f04d44ef855a8390b9eeddb8cd2d50622e81cc4e5004e8daffc1bb0425c
5.5 KiB
Theseus Navigator — packaging session brief
Goal of this session: turn Theseus from "runs via npm start" into a
downloadable, secret-free Windows installer hosted at dl.silentmode.st,
with its SHA-256 published on-chain. Do it in the three phases below, in order.
Working dir: D:\Dev\SilentMode\TheseusNavigator. Prefix shell commands with
rtk. Windows + PowerShell primary; Bash tool available.
Read first: ..\README.md (hub), ..\BUILD-ROADMAP.md (this is Stage 5),
..\SECURITY.md (Rules 0/2/3 govern this session), ..\_coordination\INTERFACES.md
(the resolver contract), and this file. Theseus already works for .bch; the
engine (..\Argus\src\lib\resolver-web.js) is already multi-TLD and zero-dep.
Current state (verified 2026-07-25)
- Theseus runs (
npm start): Electron, tabs, back/fwd/reload/home, address bar, DuckDuckGo search box, home page, Tor toggle (bundledtor/tor.exe, routes web session + resolver WS + content fetch via SOCKS). - Resolution reuses
..\Argus\src\lib\resolver-web.js(import inmain.js). bns://custom protocol serves content; provenance strip shows chain/Sia/server.- NOT packaged: no
electron-builder, no installer. - Two blockers for a public build (must fix):
main.jsresolveHost()is still.bch-only (host.replace(/\.bch$/,"").split(".").pop()), andnavigate()/serveBns()/subFolder()assume.bch. The engine is multi-TLD; the browser must catch up.serveBns()fetchess3content with your Sia credentials (getAws()reads..\Argus\sia-s3.json). A public build MUST NOT ship credentials (SECURITY.md Rule 0). Switchs3to the public gateway.
Phase 1 — Multi-TLD + registry badge (browser catches up to engine)
resolveHost(host): stop stripping.bch/.pop(). Pass the full host toresolveName(host, { WebSocket: currentWS() })— it already normalizes any<sub>.<label>.<tld>to the canonical key. Cache/serve by full host.navigate(): replacehost.endsWith(".bch")checks with "is this a BNS name?" = has a dot and the rightmost label is a known BNS TLD (bch,p2p,deviant,bit, …) — everything else is normal web. Keep a small TLD allowlist constant.serveBns()+subFolder(): generalize off.bch(drop tld + label to get the subfolder — mirrorresolver-web.js/the gateway).- Registry badge (trusted chrome — the security invariant): in the toolbar
provenance strip (chrome, NOT page content), show the registry / TLD the
name resolved under (e.g. "BitcoinCash · .bch"). This is where the future
multi-registry
.bit(BCH vs Namecoin) switch will surface. Unspoofable because it's painted by the browser, not the page. - Verify:
hello.bch,demo.p2p,coinspectrum.deviant.bchall load in tabs; badge shows the right TLD; normal web (wikipedia.org) still works.
Phase 2 — Secret-free content (SECURITY.md Rule 0)
- Replace the
getAws()signed-S3 path inserveBns()with a plain fetch from the public gateway:https://navigate.st/bns/<name>/<path>(or the subdomain form). The gateway already servess3/ip/h/uand injects no secrets. Remove theaws4fetchdependency and any read ofsia-s3.json. - Net effect: a shipped Theseus contains no credentials.
s3sites render by asking the public relay for the bytes; resolution stays local/trustless. - Grep the repo + built output for
sia-s3,accessKey,secretKey,C:\\Users\\, the OS username — must be clean before packaging.
Phase 3 — Package, scrub, publish
- Add
electron-builder; target Windows NSIS installer + a portable .exe. Bundletor/,chrome.html,home.html,preload.js, and the resolver it imports (either vendorresolver-web.jsinto the app or include../Arguspath infiles). Confirmtor.exeand geoip files are packaged. - Unsigned by choice (SECURITY.md Rule 2). Document the SmartScreen warning.
- Scrub fingerprints (Rule 3): build in a neutral path or strip absolute
paths/source maps; no real name/email/username in metadata; set the app
authorto "Silent Mode". Normalize timestamps where feasible. - Compute SHA-256 of the installer. Publish the hash on-chain — a BNS
record (e.g. a
releasesname) or note the mechanism in..\SECURITY.md. - Deploy the installer to
dl.silentmode.st(nginx already serves/opt/silent-mode/dl/on the VPS via thesilentmode-st/dlvhost). Update the download page (..\site\index.html) — swap the "packaging in progress" chip for a real link + the SHA-256 + "unsigned, verify the hash" note. - Verify end to end: download the installer on a clean path, install, launch,
load
hello.bch+ a Sia site + normal web, confirm no secrets in the install dir, confirm the published hash matches.
Guardrails
- Do NOT touch
D:\Dev\NameCoin(live/canonical) or register/spend on-chain beyond (optionally) one release-hash record. Reads are fine. - Do NOT ship
sia-s3.json,ca/root-ca.key,wallets.json, any keystore/ password. Follow the SECURITY.md pre-release checklist. - Elevated installs, code-signing, and AMO steps are the user's to run — don't attempt them; hand off exact commands.
Definition of done
A downloadable dl.silentmode.st Windows installer that: contains no
secrets, resolves .bch/.p2p/etc. with a trusted-chrome registry badge,
renders Sia sites via the public gateway, browses the normal web, and whose
SHA-256 is published on-chain and shown on the download page.