theseus/PACKAGING-PROMPT.md
Local Dev 7898e78ff4 Initial commit — Silent Mode baseline (2026-07-29)
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
2026-07-29 13:54:34 +02:00

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 (bundled tor/tor.exe, routes web session + resolver WS + content fetch via SOCKS).
  • Resolution reuses ..\Argus\src\lib\resolver-web.js (import in main.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):
    1. main.js resolveHost() is still .bch-only (host.replace(/\.bch$/,"").split(".").pop()), and navigate() / serveBns() / subFolder() assume .bch. The engine is multi-TLD; the browser must catch up.
    2. serveBns() fetches s3 content with your Sia credentials (getAws() reads ..\Argus\sia-s3.json). A public build MUST NOT ship credentials (SECURITY.md Rule 0). Switch s3 to the public gateway.

Phase 1 — Multi-TLD + registry badge (browser catches up to engine)

  • resolveHost(host): stop stripping .bch/.pop(). Pass the full host to resolveName(host, { WebSocket: currentWS() }) — it already normalizes any <sub>.<label>.<tld> to the canonical key. Cache/serve by full host.
  • navigate(): replace host.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 — mirror resolver-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.bch all 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 in serveBns() with a plain fetch from the public gateway: https://navigate.st/bns/<name>/<path> (or the subdomain form). The gateway already serves s3/ip/h/u and injects no secrets. Remove the aws4fetch dependency and any read of sia-s3.json.
  • Net effect: a shipped Theseus contains no credentials. s3 sites 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. Bundle tor/, chrome.html, home.html, preload.js, and the resolver it imports (either vendor resolver-web.js into the app or include ../Argus path in files). Confirm tor.exe and 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 author to "Silent Mode". Normalize timestamps where feasible.
  • Compute SHA-256 of the installer. Publish the hash on-chain — a BNS record (e.g. a releases name) 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 the silentmode-st / dl vhost). 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.