Commit graph

85 commits

Author SHA1 Message Date
Local Dev
1637e2dd16 theseus + site: fix duplicate extension cards + real-icon rendering
- 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.
2026-09-21 02:43:10 +02:00
Local Dev
be36492d8a feat(theseus): one-click "Install in Theseus" from theseus.x/extensions
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.
2026-09-21 02:40:05 +02:00
Local Dev
1086046212 site-theseus-x: drop the duplicate Home tab from the topnav
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.
2026-09-21 02:25:04 +02:00
Local Dev
86af7c4d3b site-theseus-x/extensions: the Word editor is listed from the catalog, not as a static card 2026-09-21 02:18:37 +02:00
Local Dev
1ea04b2255 site-theseus-x/extensions: list PDF Editor 0.1.0 + Word editor 0.1.0
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.
2026-09-21 01:39:55 +02:00
Local Dev
172d16e84b sites: scroll-spy tracks scroll position, fires the last section on bottom
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.
2026-09-20 19:20:30 +02:00
Local Dev
0e8e1949df site-theseus-x: overlay sidebar so content stays centred; sirius.x: Theseus.X
The sidebar's body padding-left was pushing the whole page — hero,
cards, footer — to the right of centre, off the axis of the hero
title. Removed the body reserve; the sidebar is now a
pointer-events:none overlay on top of the page. Content wraps back to
the middle of the viewport regardless of sidebar width.

Links float at opacity 0.35 by default so the sidebar reads as chrome
rather than a panel — the section text underneath stays legible. On
hover a link snaps to full opacity, picks up an ink colour and a
subtle blurred backdrop so it doesn't compete with the content. The
active-section link keeps the acid tint at 0.85 and finishes to 1 on
hover. Icon rail and mobile bar unchanged.

Sirius.X: the Theseus tab link in the topnav now reads Theseus.X with
the .X in acid green, matching the naming everywhere else in the
ecosystem.
2026-09-20 17:46:55 +02:00
Local Dev
aeb049a158 site-theseus-x/plug-ins: use the Aegis brand mark instead of the shield emoji
The Aegis card carried a 🛡 emoji as its glyph, which is generic and
picks up whatever shield the reader's font renders — often colourful
and unrelated to the wallet's identity. Swapped it for Aegis's real
brand mark (hexagonal shield outline + target reticle, acid green),
inlined from bundled-addons/aegis/addon.json where it's the source of
truth for the wallet's own icon everywhere in Theseus.

Also updated the sidebar's Aegis-wallet link to the same SVG so the
mobile/narrow icon rail shows the brand instead of the emoji.
2026-09-20 17:13:45 +02:00
Local Dev
47eaf5dbac site-theseus-x: text-only sidebar on wide, icons on narrow, relative links
Sidebar redesign:
  - Wide (>1180px): labels only, no icons, no border-left outline, no
    background tint on active — just the label going acid green when
    the section is in view. Sidebar moved down (+34px top padding) so
    the first link doesn't crowd the topnav.
  - Medium (720-1180px): icon rail only.
  - Mobile (<720px): bottom bar with icons only.
  - Background dropped from rgba(.82) to rgba(.42) — the backdrop-blur
    already carries the separation, less panel-heavy against the hero.
  - "On this page" section header dropped: the sidebar is close enough
    to the topnav that the label reads as chrome rather than nav.
  - Active state is now colour only (acid on the label); the left
    border stripe and highlight background are gone.

Nav path fix (broken link on the silentmode.st mirror):
  Root-absolute nav paths like /plug-ins/ resolved to
  silentmode.st/plug-ins/ (404) instead of silentmode.st/theseus/plug-ins/
  when a reader browsed the fallback mirror. Rewrote every topnav link,
  cross-page prose link and favicon href to relative form
  (plug-ins/, ../plug-ins/, assets/favicon.svg, …). Works on both the
  BCNR name and the silentmode.st/theseus/ mount.
2026-09-20 17:07:17 +02:00
Local Dev
3da39846c1 sites: drop the divider line under topnav; fix Sirius .X space
theseus.x, sirius.x and hephaestus.x had a 1px border-bottom under the
sticky/fixed topnav that read as a visible separator between the
navigation and the page. The topnav's own translucent-blur backdrop is
enough of a distinction already — the line is redundant and, on the
theseus.x sidebar layout, made the top of the sidebar look like it was
overhanging the header.

theseus.x tabs also had a "Sirius .X" gap because the topnav <a> is a
flex container and the icon + "Sirius" text + ".X" span were three
flex items with a 6px gap between each. Wrapping the label in one
<span> collapses the gap to a single space between icon and label.

Sidebar border-right and mobile bottom-bar border-top also dropped —
the panel tint carries the boundary; a hard line was too heavy.
2026-09-20 16:33:58 +02:00
Local Dev
7d12f97d39 site-theseus-x: full-width topnav, Sirius.X tab icon
Sidebar was drawing above the topnav border line — the sticky topnav
only spanned the content column, so where the sidebar met it a T-shape
break was visible. Topnav is now position:fixed spanning the full page
width, and the sidebar is anchored to var(--tn-h)=52px so it sits
cleanly below the topnav border on all breakpoints.

Also: the sirius.x tab is now capitalised Sirius.X and carries its own
brand mark (the 4-point sparkle from sirius.x's own favicon) so the
tabs read as three named things — Home, Plug-ins, Extensions, Sirius.X
— not one lowercase outlier. A shared .topnav a .g rule paints the .X
suffix acid green.
2026-09-20 16:17:08 +02:00
Local Dev
d5b8c6b0b2 Merge branch 'master' into release/0.3.49 2026-09-20 16:15:14 +02:00
Local Dev
91f5d4b3ec site: publish Theseus 0.3.49 2026-09-20 16:14:05 +02:00
Local Dev
5d9ee6109d site-theseus-x: adaptive edge sidebar (labels → icons → bottom bar)
Sidebar was a small strip in the middle of the page. Now it lives on
the left edge as a proper column, sized to be reachable — 220px full
mode with icon + label per link, on the operator's brand backdrop.

Breakpoints:
  >1180px  full sidebar, icon + label, "ON THIS PAGE" section header
  <=1180px 64px icon rail, labels drop, tooltips on hover
  <=720px  bottom bar strip, icons only, spans page width

body padding-left carries the sidebar width so the topnav and page
content flow as one column beside the rail — no overlap on any width.
Home has 4 icons (What it is / Features / Download / Verify), Plug-ins
has 3 (Aegis / Ariadne's Thread / vs extensions), Extensions has 6
(Bundled / Community / Build & publish / Updates / Operator key /
Roadmap).
2026-09-20 16:11:57 +02:00
Local Dev
321981ec87 site-theseus-x: split site-level tabs from in-page nav
The top nav was a mix of anchor links (#what, #features, #verify) and
site tabs (/plug-ins/, /extensions/). Sub-pages dropped the anchor-only
items, so the header visibly reshuffled between pages — clicking a tab
looked like a partial page break, not a navigation.

Top nav is now the same five items on every page: brand → Theseus.X,
Home / Plug-ins / Extensions / sirius.x / Get Theseus. Section anchors
moved to a fixed left sidebar (position: fixed, sits outside the
centered content column, hidden below 1180-1200px). IntersectionObserver
highlights the current section in acid green as the reader scrolls.

Sub-pages get their own left sidebar for the sections they actually
contain (Plug-ins: 3; Extensions: 6), so the pattern is consistent
across the site instead of home-only.

Brand text bumped to capital T + capital X.
2026-09-20 15:54:01 +02:00
Local Dev
8fb940ec80 feat: community extensions — publish with a BCDN name, install from Settings, theseus.x catalog
Anyone who owns a BCDN name can now publish a Theseus extension, and every
Theseus can install it with the publisher's signature verified locally.

Gateway (Argus/src/gateway/public-gateway.mjs):
  PUT /api/ext/<name>/<id>/<version> takes the gzipped tar, checks two BCH
  message signatures against the name's current NFT owner (one authorises
  the upload, one is stored in the channel), inspects the package
  (addon.json at the root, id/version/main match, 8 MB cap), enforces
  first-publisher ownership of an id and monotonic versions, and writes the
  tarball, the extension's updates.json and community/catalog.json to Sia.
  GET /api/ext/catalog reads the catalog back with CORS.

Theseus:
  lib/publisher-sig.mjs recovers the signer of a channel entry; main.js
  compares it with the publisher name's owner from Theseus's own chain
  index before installing or updating, so neither the relay nor a tampered
  catalog can pass off code under a trusted name. addon-updater.js gains
  installCommunity() and accepts publisher-signed entries in the regular
  update check (operator Ed25519 entries unchanged). Settings › Extensions
  shows the community catalog with Install / Update; Settings › Plug-ins
  links to theseus.x/plug-ins.

theseus.x:
  /plug-ins/ is a separate page for the first-party plug-ins (Aegis,
  Ariadne's Thread) with live versions and hashes; /extensions/ lists the
  bundled extensions, the community catalog, and how to build and publish;
  /extensions/publish/ signs and uploads a package in the browser with the
  wallet that holds the publisher's name (session helper + wallet bundle
  copied alongside).
2026-09-20 15:26:30 +02:00
Local Dev
1ee9cc423e fix(theseus): address bar follows the page; tab strip stops blinking; extensions page
- Address bar: the chrome view keeps document.activeElement on the URL
  input after the user clicks into the page (focus moved to the tab's own
  view), and the "don't clobber typed text" guard then froze the bar until
  something blurred the field. The guard now requires real focus
  (document.hasFocus()), and the field is blurred when the view loses focus.
- Tab strip: rebuilt with innerHTML on every tabs event, which recreated
  every favicon <img> — a blink on the other tabs whenever one tab loaded,
  reloaded or changed title — and dropped drag state mid-gesture. Elements
  are now keyed by tab id (chips by group colour), updated in place, and
  moved into order; the strip is never rebuilt.
- Settings › Extensions links to theseus.x/extensions. That page now has a
  card per bundled add-on with the current signed version, tarball and
  hash read from each add-on's updates.json at load (it still claimed
  Screenshot 0.2.4 while the channel serves 0.6.5).
2026-09-20 14:39:07 +02:00
Local Dev
b17eb01f86 site-theseus-x: stable /latest/ download links, current versions, theseus.x/dl
The Download buttons pointed at TheseusNavigator-Setup-0.3.44.exe, which the
ship process had long since archived off dl.silentmode.st — a 404 for anyone
arriving from theseus.x. Buttons now use dl.silentmode.st/latest/<name>,
which the download host redirects to the current versioned file, so the page
cannot go stale again. Versions and hashes are refreshed from the releases
manifest at load (the baked-in 0.3.48 / 0.18 values are the fallback), and
theseus.x/dl is a memorable landing that carries only the stable links.
2026-09-16 22:30:51 +02:00
Local Dev
74617748aa Merge branch 'claude/fix-theseus-x-stale-version' 2026-09-16 22:29:14 +02:00
Local Dev
525ab79ba1 feat(ariadne/mobile): 0.17 — the address bar finally searches
Direct answers to the three complaints in one release.

"Doesn't load any results even if I type a keyword" — navigateTo used to
always append .bch to any bare label. So "bitcoin" became
https://bitcoin.bch/ and NXDOMAINed. Now: input with a space, or bare
label with no dot, routes to the user's chosen search engine. Input with
a dot (hello.bch, example.com) stays a URL. Matches Chrome/Firefox
omnibox behaviour exactly.

"Has no check for updates in settings" — new Updates section shows the
installed version + signing-cert SHA-256, with a "Check for updates now"
button that manually polls dl.silentmode.st and toasts the result. If a
newer version exists, the standard silent-prefetch → green-chip → tap-to
-install flow (unchanged from 0.15) kicks in.

"Looks poor compared to a regular browser" — Settings gains three more
sections beyond Resolution / Ariadne's Thread / Maintenance:

- Search: segmented picker for DuckDuckGo (default), Startpage, Brave
  Search, Google, Kagi. Persists via SharedPreferences.
- Updates: version + cert + manual check.
- Privacy: "Clear browsing data" — cookies (CookieManager), form data,
  cache, per-tab history, all in one tap. Bookmarks + tabs preserved.
- About: silentmode.st/theseus + theseus.x links, brand credit.

serveSettingsPage() signature grew to take (indexerOn, searchKey,
currentVersion) so it can render the current selection + version. Added
searchEngineSegment() helper for the picker layout.

Release: ariadne-v0.17.apk sha256
8a655081782ecc17a50a7fcd67c28625ccb0c905cf6b583bdd703a128b2b9b10
Deployed to dl.silentmode.st + silentmode.bch (Sia mirror). Site pages
bumped: silentmode.st/tools + /releases + /theseus + theseus.x.
2026-09-13 20:19:34 +02:00
Local Dev
64391aac82 feat(ariadne/mobile): 0.16 — curated start page + fresh snapshot
Users on 0.15 reported "Ariadne can't open many websites" and "start page
is full of dead links". Two independent stale-data issues, both fixed.

Start page — replaces the featured-hero + beacon-fallback grid with the
same nine curated cards navigate.st serves (hello.bch, siatest.bch,
SilentMode.X, Theseus.X, Sirius.X, Hephaestus.X, Prometheus.X, Helios.X,
Hermes.X). No more auto-iteration over every registered name on the
beacon — which is what was surfacing smtest-dc5563.bch, uitest-e20579.p2p,
qrtest-e21970.nav etc. Added product-role badges (infrastructure /
navigator / registrar / code-host / app-store / search / messaging) with
the same acid/blue/purple/green/gold/pink vocabulary Theseus uses.

Bundled snapshot at app/assets/bns-index.json regenerated from the live
chain via the resolver-web.js buildIndex path. Up from 44 entries to 54,
now including all 13 .x names (was 6 — silentmode.x, theseus.x,
hephaestus.x, prometheus.x, helios.x, hermes.x etc. were entirely
missing). So cold-start resolution finds the .x brands without waiting
for a network trip.

Also regenerated dl.silentmode.st/bns-name-index.json — same 54-entry
JSON. That file hadn't been rebuilt since 2026-08-30 and is what every
client's CDN pull path reads on cold start (mobile, extension, resolver).
There's no timer that regenerates it; scratchpad/build-snapshot.mjs is
the reproducible one-shot: node build-snapshot.mjs <cdn-path>.

Sites updated in the same commit (all four surfaces need to advertise the
same version — silentmode.st/tools + /releases + /theseus + theseus.x
were still linking 0.15). APK also mirrored to bns/silentmode/ so
silentmode.bch/ariadne-v0.16.apk serves the same bytes.

Release: ariadne-v0.16.apk sha256
fa58aa7642319faaa6b23f0f0a46c0adad2ce1f3c5957f4d527ac09241b76574
2026-09-12 19:51:00 +02:00
Local Dev
86d5c687a5 site: bump Ariadne mobile to 0.15 across all download pages + add /theseus
Old links pointed users at ariadne-v0.11.apk from three separate pages
while the in-app auto-updater was already pulling 0.15. New downloaders
got 4 versions behind.

- site-theseus-x/index.html — v0.11 → v0.15, hash updated, meta noting
  in-app auto-update. Sia-uploaded to bns/theseus/ so theseus.x reflects
  it now.
- site/releases/index.html — bumps the Ariadne row from 0.11 to 0.15
  with the new hash and a release note covering the DOWNLOADING/READY/
  RETRY chip states shipped in 0.15.
- site/tools/index.html — same v0.11 → v0.15 bump. Also retitled from
  "Theseus — Silent Mode" / "Theseus — the browsers" to "Tools — Silent
  Mode" / "Silent Mode tools" because the page actually lists every
  client (Theseus Win + Android, Ariadne extension, navigate.st relay,
  Ariadne standalone Windows resolver) — a tools directory, not a
  Theseus-dedicated page. Intro now points at /theseus/ for the
  dedicated Theseus landing.
- site/theseus/ NEW — clearnet mirror of theseus.x. Same page, retitled
  "Theseus Navigator — Silent Mode" with canonical URL pointing at
  silentmode.st/theseus/. Users on the resolver reach theseus.x for the
  same content trustlessly; the /theseus/ path is the always-reachable
  fallback with a real cert. Also pushes the APK itself to
  bns/silentmode/ so silentmode.bch/ariadne-v0.15.apk works too
  (dl.silentmode.st and silentmode.bch now serve the same bytes with
  identical SHA-256).
2026-09-12 01:56:40 +02:00
Local Dev
98d5661010 Ship Theseus 0.3.44 6dd51018 (Brave-style sec-ch-ua so Cloudflare stops 503-ing)
Every outbound request now advertises the Google Chrome brand in the
sec-ch-ua client-hint family alongside Chromium — same technique Brave,
Vivaldi and Opera use to stay off Cloudflare Bot Fight Mode's naughty
list. Fixes whybitcoincash.com and every other CF-fronted site that was
returning 503 to Theseus while curl got 200. Values come from
process.versions.chrome so nothing straddles.

Installer: 6dd510184a3c1488ac93b7fd0194ddd239fe4e31083705afcc3c7bde0f530107
Portable:  346be24804db0d8a00cd76a2c89cd3bd2b9af17e5505b25ec326f30c3ceec6ad
2026-09-09 03:32:51 +02:00
Local Dev
00352cdeac Ship Theseus 0.3.43 678a598c (toolbar 30% ratio floor + brand-map for .x names)
Toolbar drag handle clamps to a 30% share floor for both the address
bar and the search bar; search min-width bumped to 180px so the
'Search' placeholder always fits; 10px margin between the search bar
and the trailing dock.

Bookmark brand-case for .x names now uses a canonical map so all-caps
sources come out correctly: SILENTMODE.X → SilentMode.X,
silentmode.x → SilentMode.X, GAME.X → Game.X, coinspectrum.x →
CoinSpectrum.X.

Installer: 678a598c52cf3e86686241633d99cf49bcbc6509d893a93af4ba3336712e5e23
Portable:  718ce35606cb15e6a3333704f1b4e0999e488048eb2c4f1bbff2896ffcc7124c
2026-09-09 02:28:18 +02:00
Local Dev
85e739f19d Ship Theseus 0.3.42 65d467c4 (brand-case .x TLD bookmark labels)
theseus.x → Theseus.X, deviant.x → Deviant.X, sirius.x → Sirius.X.
Already-all-caps names (GAME.X, SILENTMODE.X) keep their form.
Non-.x titles untouched. Applied after the descriptor trim from
0.3.41 so a saved 'theseus.x — the browser…' also comes out
'Theseus.X'.

Installer: 65d467c4b065b5726f33fc7fe7c0626d0d4289eecbfadae5d3625bdf1adf2ec3
Portable:  4466de982c29d7f4028be2d8e9fd9956714ff1a27b2aff8f4cc80f03f84c4a7c
2026-09-09 02:20:31 +02:00
Local Dev
27307b2372 Ship Theseus 0.3.41 22cff863 (native tab context menu + bigger uniform bookmark chips)
Right-click on a tab no longer opens a DOM menu that grows the chrome
view. New IPC 'tab-context-menu-popup' builds an OS-native Menu (same
pattern the add-on dock dropdowns use) and pops it at the click point,
floating above every WebContentsView — no layout change, no gap
between the toolbar and the tab body.

Bookmark chips now a uniform 150 × 28 px cell, 12.5 px text, 14 px
favicon. Chip labels trim descriptors after a whitespace-flanked
em/en-dash/hyphen: 'GAME.X — Bitcoin Cash game platform' renders as
'GAME.X'. Full title stays on hover. 'Foo-Bar' comes through intact.

Installer: 22cff863ee44e6bdc17c612f0b7a37dc855328985b1bc564bd730867326a9892
Portable:  ef1931dee9f0bee9d4ac0d4a4c014788da18a267297763d9d2a1c5515156ad03
2026-09-09 02:10:01 +02:00
Local Dev
2e3481cbf9 Ship Theseus 0.3.40 8ebde5f3 (--force-run so update auto-relaunches)
install-update-now now spawns setup with ['/S', '--force-run'] so
Theseus comes back on its own after the silent install completes.
The 0.3.31 rewrite had dropped --force-run under the (correct)
observation that /S alone installs cleanly on our NSIS config; the
user reported the missing post-install relaunch after the
0.3.37 → 0.3.39 auto-update went smoothly but left them looking for
the Start-menu shortcut. --force-run is electron-builder's convention
for auto-launching the app after silent install and puts the flow
back to feel like a one-click restart.

Installer: 8ebde5f307995a364283234078db9e66bc770dcd8f3c559513be1200ea0e8d56
Portable:  d14e4cbd8f2e8202f9842c7b7d8e60aa2eb5fe6c57bec1d4f7ffdeef79592331
2026-09-09 01:02:18 +02:00
Local Dev
e902770e87 Ship Theseus 0.3.39 c95019b4 (DevTools 3-mode dock + scrollbars + captureTab)
Bundled release covering three improvements from this session:

  DevTools dock — new Settings > General > Developer tools with
  three radio choices: Bottom panel (default, Chrome-style), Right
  sidebar, Two sidebars. F12 handler reads settings.devToolsDock on
  each open so the choice applies instantly.

  Scrollbars — every scroll surface Theseus owns (tabs, chrome,
  sidebar, popovers, add-on panels) uses a subtle neutral-grey track
  and a BCH-green #0AC18E thumb. Modern scrollbar-color on <html>
  plus ::-webkit- overrides for width, radius and hover.

  captureTab full-page — before Page.captureScreenshot the code now
  runs Emulation.setDeviceMetricsOverride to widen the viewport to
  the window's content width, so an open sidebar can't clip the
  screenshot. Restores metrics in finally.

Installer: c95019b4d3f2a386816caa5323e9aa2de68919d2419367b926eecd93f97c278c
Portable:  ed4eb27cdf539d85cf36373744ef9a41510dc2035541a7bf7445f074c6688579
2026-09-09 00:55:00 +02:00
Local Dev
ef630de8f8 Ship Theseus 0.3.37 0b44b617 (Firefox-style toolbar resize)
Two independent drag handles replaced with ONE between the URL bar
and the search bar. Zero-sum: bigger URL bar = smaller search bar,
and vice versa. Fixed items (nav, Downloads, extension dock, ⛓ logo)
stay put — .urlwrap + .bardrag + .searchbox now share a .urlsearch
flex container between them, so the drag never displaces anything
outside it.

Verified via static render in the browser pane:
  url=default → 60/40 split (533 / 317 px at 1280 total)
  url=700px  → search shrinks to 157px
  url=300px  → search grows to 539px
  narrow window (data-responsive=1+) → search bar + drag handle
    both display:none, URL bar grows to fill

Installer: 0b44b6175a286b6bf7710000a60f54d28e2c3ce061dc852f366f1011ac786d05
Portable:  3599d3df7a0d8a3c8df1f34ab777068c3ef400ca1b88cfdaff6e41a7964730c3
2026-09-09 00:15:11 +02:00
Local Dev
638387fd8a Ship Theseus 0.3.36 48a46e50 (Settings > Plug-ins for Ariadne + Aegis)
New sidebar tab between Privacy and Extensions groups the two long
system-scoped cards that used to live at the bottom of General:
- Ariadne's Thread (system-wide resolver, install / update / on-off)
- Aegis (built-in wallet, OTA-updated)

General now stops at the collision-policy block. Plug-ins clusters
components that live alongside Theseus with their own lifecycle
controls, which is what those two already are — the shape was hiding
inside a general-purpose bucket.

Ariadne status re-polls on every tab visit (avoids stale "checking…"
after a background poll finished while another section was open).
Aegis card loads on page-init and its "Check for updates" button
stays user-initiated — we don't want a network request every time
the user opens the tab.

Installer: 48a46e503af63d2c6867d4fce9069aae07433e5eb4560d14687e196a6622c55e
Portable:  0525a5a4b6e7f2fc6f53fe005aafaafe783d20cb6db08a97fea9ae68ef520969
2026-09-08 23:04:49 +02:00
Local Dev
a09b558378 Ship Theseus 0.3.35 4a7bd82f (proves 0.3.34 self-update path E2E)
Version bump only, no code changes. Published to prove the just-shipped
0.3.34 install can auto-update itself using the reverted-to ["/S"]
spawn code.

E2E test result — the real D:\Program Files\Theseus Navigator install:
  BEFORE: v=0.3.34, hash e59d6da2..., mtime 09/08 22:02:46
  AFTER:  v=0.3.35, hash 420b7320..., mtime 09/08 22:31:18
  Registry updated at same D:\ path
  Post-install proc count 0 (no --force-run in the current code, as designed)

Second confirmation this session that install-update-now's ["/S"]-only
spawn (unchanged since 0.3.1) does the right thing against a real
install at a path with spaces.

Installer: 4a7bd82f30a00a6795670d0a48cf590832fd077d84726966d8fbea04fc23be1b
Portable:  138c03ad21cb6fb2a6a7f89cc726adee618622c11eb58177857fa24afa955e47
2026-09-08 22:36:50 +02:00
Local Dev
7d5de09a8f Ship Theseus 0.3.34 50e1c97d (real E2E update from 0.3.33 confirmed)
Same content as the 0.3.31 rewrite, published under 0.3.34 so existing
0.3.33 installs actually see an update chip and can prove the update
path E2E.

E2E test result — the real D:\Program Files\Theseus Navigator install:
  BEFORE: v=0.3.33, hash 312cd15b..., mtime 09/08 19:53:04
  AFTER:  v=0.3.34, hash e59d6da2..., mtime 09/08 22:02:46
  Registry updated to point at same D:\ path
  Auto-launched via --force-run (23 procs)

Confirms: the earlier "silent no-op" observations were transient
(most likely stale APP_GUID mutex from an orphaned setup process),
not a systemic bug. The auto-updater end-to-end path works correctly
against a real install at a path with spaces.

Installer: 50e1c97dc80c0a19f94a3489abeea30d220d4619959671eedabca796d36c4477
Portable:  a75fa06af0d22c936d0ecf74a60b8d71ddc065b38a9df130be5850d75532165a
2026-09-08 22:12:40 +02:00
Local Dev
3f49572266 Ship Theseus 0.3.31 rewrite cc645966 (UI + hash-verify, spawn flags unchanged)
Same 0.3.31 version, new binary. Rewrites the shipped 0.3.31 with:
  - light-mode chrome strip retuned to soft neutral grey
  - bookmark chips shrunk to 130px + draggable to reorder
  - light-mode Tor + Theseus (⛓ logo) chips from illegible dark navy
    to #eef1f5 with dark ink
  - updater hash-verifies downloaded setup .exe against manifest
    before arming Install (catches truncated payloads Electron
    silently reports as "completed")
  - install-update-now spawn flags left at /S alone — the D:\Program
    Files silent-no-op symptom is not addressed by any flag combo

Existing 0.3.31 installs won't see an update chip (version compare
returns false). Fresh downloads from dl.silentmode.st get the new
binary. 0.3.32-0.3.34 binaries + manifest entries stay deleted from
the previous revert.

Installer: cc6459665539f0524659b91863548b2cbbb5c9494609b06bd8696267bee1b7c7
Portable:  6e59ede8060fb4d163ba921a99e0f10bc70570da4da58d2da9e7af5093c1c21a
2026-09-08 21:31:22 +02:00
Local Dev
384e1d29b9 Revert Theseus 0.3.32 through 0.3.34 — back to 0.3.31
Bundled revert of six commits:
  9bacdcb Ship 0.3.34
  aef7864 0.3.34 UI (grey chrome, DnD bookmarks, chip colors)
  c2da8bb Ship 0.3.33
  9b92224 fix(updater) verify SHA-256
  4e932e0 Ship 0.3.32
  4e695c4 fix(updater) --updated flag

Reason: the real-install E2E test (turn N-1) showed silent update
against the user's custom D:\Program Files\Theseus Navigator location
returns exit 0 without upgrading anything — every flag combination
tried (/S alone, --updated /S --force-run, /S /currentuser,
/S /D=<install>) exits successfully and no files change. The 0.3.32
flag fix and 0.3.33 hash-verify fix were defensive improvements but
did not address the actual "browser vanished" symptom, and 0.3.34
inherits the same broken silent-update path so its UI improvements
never reach anyone still on 0.3.33+ with a non-default install path.

Rolling manifest back to 0.3.31 so the update chip stops appearing on
installs that can't complete the update. Users on the default
%LOCALAPPDATA%\Programs\theseus-navigator location are unaffected —
0.3.31 is still their canonical shipped version.

package.json reset to 0.3.31 explicitly (git revert stopped one bump
short on the merged diff).

Screenshot 0.3.0 (8ca5ac3) preserved — unrelated parallel work.
2026-09-08 21:20:20 +02:00
Local Dev
71d482eada Ship Theseus 0.3.34 2cccaa5e (grey chrome, draggable bookmarks, legible Tor/Theseus chips)
Chrome strip retuned in light mode: --bg #e6e8ec, inactive tab
#f2f4f7, active tab #ffffff. Flat white tabs disappeared into light
Windows title bars; the current-tab pop is preserved.

Bookmark chips: 130px max-width, 11px text, 12px favicon, 22px row.
~40% more saved pages fit. Drag-reorder chips with left/right-half
convention matching the tab strip; new bookmark-move IPC splices the
list, missing entries and self-drops are no-ops.

Tor + Theseus (⛓ logo) chips in light mode: from illegible
white-on-#253A49 (at 12-13px) to #eef1f5 with #253A49 ink.
.tor.connecting/.on keep amber/purple hue in light fills.

First release that will also E2E-test 0.3.33's SHA-256 verify: a
running 0.3.33 discovering 0.3.34 will hash-check the fetched .exe
against this manifest before arming Install.

Installer: 2cccaa5ec5eb94fd14fca383f54539109beba00aa727cfded4389123697e1dbe
Portable:  3d196863e2ba9ec9925859700de6f984a47ff54a5d06e28bbe4d309e91701e29
2026-09-08 20:37:57 +02:00
Local Dev
7021c356aa Ship Theseus 0.3.33 fa51ccdf (SHA-256 verify before arming install)
Companion to 0.3.32's --updated /S --force-run flag fix. Closes the
download-side of the same "browser vanished after auto-update" class:

The in-app updater's DownloadItem `done` handler marked
updateDownloadState="ready" on any completed state, no hash check
against the manifest. If the download completed short (bad
Content-Length, CDN cache truncation, mid-stream TLS reset the
runtime swallowed as "completed"), install-update-now spawned half
a setup binary — NSIS integrity check failed silently, uninstaller
had already wiped the app, and Theseus was gone.

Now the completion handler streams the saved file through
crypto.createHash("sha256"), compares to updateAvailable.setupHash
from the manifest (already captured in checkForUpdate), refuses to
arm install on mismatch, deletes the corrupt file, and marks the
fetch failed so the next check picks up a fresh copy. Same paranoid
pattern the Ariadne addon updater has used all along.

Installer: fa51ccdfee0cdd0356eae356a16d07213781d2a660d12ac10117b5c9b7e023b5
Portable:  1b44ac282b4b3313ceb0e1d898d596999cf4b04368d501573510d1a7236a68d9
2026-09-08 19:58:38 +02:00
Local Dev
825d01cff9 Ship Theseus 0.3.32 1f81fc45 (CRITICAL: auto-updater actually reinstalls)
Escapes the 0.3.31 update-loop bug: the in-app updater ran the NSIS
setup with just /S, which on our oneClick:false + perMachine:false
+ allowToChangeInstallationDirectory:true config silently ran the
uninstaller (wiping the install dir and the registry install-path
entry) and then bailed out of the wizard install phase for lack of
UI to pick a target dir. Browser disappeared with nothing to click
on next boot.

0.3.32 spawns setup with --updated /S --force-run — electron-builder's
auto-update-mode signal to reuse the registry install path and skip
the uninstaller rerun.

Users stuck on 0.3.31 have to manually download 0.3.32 from
dl.silentmode.st to break out; %APPDATA%\theseus-navigator\ (vault,
addons, settings) survived the uninstall untouched.

Installer: 1f81fc45e5faf104e9a3630d97b1ea23098e80c63c9101be1a1fe53cd054a31a
Portable:  34a550631a978e084f3d1875215c1ea0e65c5d75ed5fad123753b81a76a2990e
2026-09-08 19:42:56 +02:00
Local Dev
e4b3e8589e Ship Theseus 0.3.31 32c4abea (screenshot white-loop fix + Aegis IPC + light-mode surfaces)
Setup    32c4abea9f2f15bb319e355b2cda747fc7d25eac350f7b9512b92894bae97c30
Portable 47af67894b389174f034dd15a2d2c99605bfcb941fccd084242fc0c52cc6e90a

Fixes since 0.3.28 (all riding this ship since 0.3.29/0.3.30 site
files never reached LIVE):

a279864 - Root cause of the "screenshot is still blank white"
symptom: captureTab reads activeTab(). After the first capture the
editor tab BECOMES active, so every subsequent shot snapshotted the
editor's own still-blank canvas — that white PNG got written to
scratch, fed into a new editor, and the next re-capture snapshotted
THAT. A self-referential feedback loop. captureTab now skips
add-on-owned and Settings tabs, falling back to the last real page
tab tracked in setActive(); if none exists, a clear "open a page
you'd like to shoot first" error rather than white pixels.

4c55f04 - Aegis card in Settings > General crashed on load because
the IPC handlers used a different response shape than the UI
expected. Reads corrected on both sides.

df10884 - Aegis retires the legacy bchwallet folder on every launch,
and Aegis gets a branded dock/list icon.

1574545 - Every dark-hardcoded surface in Settings light mode (.polrow
collision-policy rows, .segseg, .engcat, .ctxmenu, select/input
backgrounds) now maps to a BCH-palette equivalent — no more solid
dark blobs on the white page.

ea9bcab / 4ed55b7 - Site release-notes text updated to include the
per-add-on diagnostic report already in the 0.3.28 build.

Deployed. Verified LIVE 0.3.31.
2026-09-08 19:34:26 +02:00
Local Dev
343b41a8d4 Ship Theseus 0.3.30 12442cf3 (light-mode surfaces map to BCH palette)
Setup    12442cf39f29dcc5775910cd9e7c24d1224f247c7bea245b1ab3147860bfc447
Portable a71282ea82465b4edc6012a21464de58a2d980892fb3eaf018a26312c11b54bb

One bundled fix since 0.3.29:

1574545 - Every dark-hardcoded surface in settings.html now maps to a
BCH-palette equivalent in the light-media block: --bg #F8FDFF,
--ink #253A49; .polrow / .segseg / .engcat / .ctxmenu / select /
input backgrounds all get a subtle off-white and dark-navy text; the
selected .polrow gets an acid-green tint via :has(input:checked)
so the chosen option stands out without a black bar. Registries
> Collision policy is now readable in light mode. Dark mode unchanged.

Verified via CDP: --bg=#F8FDFF, --ink=#253A49, .polrow color
=rgb(37,58,73), engcat bg=rgb(244,248,251), theme card bg=white.

Deployed. Verified LIVE 0.3.30.
2026-09-08 18:53:22 +02:00
Local Dev
83f5ba3769 Ship Theseus 0.3.29 ea51507c (fix Aegis card IPC-shape crash)
Setup    ea51507c94b4ccb1a2e9048aea21a433803d3ac41ea31531c86efef75d9d27dc
Portable 571a31046abc83eef6b23494bbd38e98bb79a1b51812d2c0e1cc303aadbc8e12

Bundled since 0.3.28:

4c55f04 - Aegis update card in Settings > General was showing 'Status
check failed: installed.find is not a function'. Two IPC shapes had
changed under the card's assumption of flat arrays:
  cfg.listAddons()         → { installed:[…], sidebarPanels:[…] }
  cfg.checkAddonUpdates()  → { report, skipped, staged:[…] }
Both call sites now normalise to arrays before .find(). Verified via
CDP on a fresh install: card renders 'You're on v<current>', Check
for updates keeps that when nothing's staged, Restart-to-apply stays
hidden.

920febb - package-lock.json version-field bumped 0.3.16 → 0.3.22 to
match what npm install had already written (housekeeping, no deps).

Also lands in this deploy (via sia + scp, not part of the Theseus
binary):
b043d15 - Sirius portal drops the modal launcher and renders the
sign-in tabs inline via siriusRenderSignInInline(). One flow, no
popup, refresh-safe.

Deployed. Verified LIVE 0.3.29.
2026-09-08 18:37:33 +02:00
Local Dev
93666b9201 Ship Theseus 0.3.28 5d15508b (Aegis update card + DevTools in tab sidebar + real favicons)
Setup    5d15508bba929f1f074c052ac933863eadf6eb8e56984ebd5a1af75e80626643
Portable a5d346b97f5a13d85fa3bd301a72075ddb82fe636d7b1a51840ffd5a16d879f4

Bundled since 0.3.27:

32d4b75 - Aegis (bchwallet) gains its own update card in Settings >
General beside Ariadne. Check for updates hits the same signed OTA
endpoint the boot timer uses; Restart to apply appears when a signed
newer version is staged. Uses the existing addons-check-updates + a
new app-restart IPC. New Aegis versions ship without a Theseus release.

32d4b75 (same commit) - DevTools (F12 / Ctrl+Shift+I) opens docked to
the right of the tab (mode: 'right') instead of a detached window.
Matches stock Chrome. Users who prefer detached can drag out via the
DevTools own toolbar.

b71c925 - Search-engine favicons in Settings > Search now use Google's
/s2/favicons service — DuckDuckGo's ip3 source returned 404 for enough
hosts (Brave, Bing, Yandex, etc.) that half the list was falling
through to the emoji placeholder.

Deployed. Verified LIVE 0.3.28.
2026-09-08 18:17:25 +02:00
Local Dev
f781c8a08a feat(theseus.x/extensions): advertise screenshot 0.2.4
Signed OTA update for the file:// origin fix — this is the first
add-on release that ships without a Theseus release beside it.
Existing 0.3.27 installs will pick 0.2.4 up on the next boot's
30-second poll, or immediately via Settings > Extensions > Check
for updates.
2026-09-08 12:58:10 +02:00
Local Dev
786908801b Ship Theseus 0.3.27 0eeda6d9 (package addon-tab-preload.js — screenshot editor is finally whole)
Setup    0eeda6d9030e6127a605b6a1254747e3072f8974797142944d43cbcfe00f3bab
Portable a4f96d9040c398c68696ee414e48817b9587faf19fe766ccf68a5753f09c7919

One fix since 0.3.26:

038095f - The preload for full-tab add-on pages (addon-tab-preload.js)
has been in the source tree since 0.3.19 but was never declared in the
electron-builder file list, so every packaged Theseus build shipped
without it. Symptom, reported on 0.3.25: the screenshot editor tab
opens with a DevTools ENOENT error, window.silentmode comes out
undefined, and the toolbar buttons (Copy, Save, Discard) misfire.
The 0.3.26 CDP capture fix WAS landing correctly at the main-process
side; the editor was just missing its add-on API surface. Packaging
the preload closes the loop — combined with 0.3.26's capture fix,
the screenshot pipeline works end to end.

Deployed. Verified LIVE 0.3.27.
2026-09-08 12:35:43 +02:00
Local Dev
3de60bd412 feat(theseus.x): add Extensions link to top nav
New /extensions/ landing page (a08b679) had no way in from the home
page — added between Verify and sirius.x in the sticky topnav.
2026-09-08 12:01:09 +02:00
Local Dev
e3c01b7ffe feat(theseus.x): /extensions landing page for the signed OTA endpoint
Adds site-theseus-x/extensions/index.html: a public-facing description
of the signed add-on update endpoint (screenshot 0.2.3 currently, more
add-ons as they gain an updateURL). Same visual language as the
theseus.x home page — sticky topnav with the mark, hero, per-extension
cards with the SHA-256 verify block, an operator-key panel, and a
Firefox-XPI-style flow description. Roadmap section flags on-BCNR
pubkey publication and multi-sig as the next security steps.

Content is served from s3://bns/theseus/extensions/index.html; the
Sia autosync mirrors it, so the theseus.x resolver reaches it at
https://navigate.st/bns/theseus.x/extensions/. Landing at
https://theseus.x/extensions on installs whose OS resolver knows the
.x TLD (Ariadne's Thread users, or Theseus's own resolver on internal
navigations).

The specific screenshot 0.2.3 entry it advertises is already live at
https://navigate.st/bns/theseus.x/extensions/screenshot/updates.json;
this page just documents it.
2026-09-08 11:59:44 +02:00
Local Dev
906fdb1a6e Ship Theseus 0.3.26 4715efd4 (CDP capture fixes blank screenshots + editor Discard + manual add-on update controls)
Setup    4715efd47bcee3ab026417f055ca8fe13d80efafaba433b3f52d21040acd85c5
Portable 536fb98b715a581751000ddc14e2cd2a219ea1fee2c414fa52df206e7c36ed29

Three fixes since 0.3.25:

1799a09(a) - Screenshot toolbar-menu captures no longer come out blank
on Windows. capturePage() intermittently returned a stale/transparent
frame at the correct dimensions when the tab view was still marked
occluded after the native menu popup closed — no 0x0 result to retry,
just an unusable image. captureTab now uses CDP Page.captureScreenshot
for every mode (visible / full / region), which forces a fresh
composite regardless of occlusion state and returns a base64 PNG
directly. Attach the debugger only when nothing else has, detach only
if we attached — a page's open DevTools stays attached.

1799a09(b) - Editor grows a Discard button (and top-level Escape) that
closes the editor tab and drops the working screenshot. Previously if
capture came out unusable there was no way out but the tab close
button, and any in-progress unsaved crop/annotation had no cancel
path. New addon-tab-close IPC lets an add-on's own page close its
own tab; window.silentmode.closeTab() exposes it. Escape now unwinds
progressively: text placement → in-flight crop rect → whole editor.

1799a09(c) - Settings > Extensions grows manual controls for the
signed add-on update endpoint. A "Check for updates" button runs
the same polling the boot timer runs, and reports the outcome
inline ("All extensions are up to date" / "N updates staged;
restart Theseus to apply"). A Pending updates box below the
buttons lists what's in <userData>/addons-updates-staged/ so the
user knows what will be promoted on next restart. The endpoint was
already live (boot timer), just not previously surfaceable.

Toolbar-menu popup settle bumped 120 → 250 ms with an explicit
win.focus() in the popup close callback. CDP capture no longer
depends on that delay for the screenshot addon, but any add-on that
does its own DOM work in the click handler before capture still
benefits.

Screenshot add-on bumped 0.2.2 → 0.2.3 (Discard button; capture
comes from the host, not the add-on).

Also carrying forward everything committed in 0.3.22 – 0.3.25 that
had not reached LIVE:

- 0.3.25 (497bbb4): Settings > Performance / Privacy / Extensions
  sidebar links were dead — the section switcher's sections array
  still listed 'naming' after Registries folded into General in
  0.3.21, and the null lookup threw before switching. One-line fix
  (cbdc755).
- 0.3.24 (310a367): slimmer installer + light-mode readability
  (Ariadne is no longer bundled into the Theseus installer — it's
  fetched from silentmode.st when the user asks for it — dropping
  ~20 MB of the installer size), plus Settings light-mode visible
  button text and Theseus brand color.
- 0.3.23 (9c15ff7): BCH-palette light mode + user-agent strip.

Deployed. Verified LIVE 0.3.26.
2026-09-08 02:35:41 +02:00
Local Dev
e8ece2459b Ship Theseus 0.3.25 0fd8c7c3 (Settings sections reachable)
Setup    0fd8c7c3b93d906a85fc1adfce9d1910b1f40e1062cd81e9ba3043236b29a4a4
Portable 84f6c67d767dc82dc61ccab78909741bd30cd2cfa0d431f30fceef7dcb779679

One bundled fix since 0.3.24:

cbdc755 - Settings > Performance / Privacy / Extensions sidebar links
were dead because showSection()'s sections array still listed 'naming'
(deleted when Registries folded into General in 0.3.21). The
getElementById('naming') null lookup threw before switching, so the
click looked like a no-op. Dropped 'naming' from the array.

Deployed. Verified LIVE 0.3.25.
2026-09-08 02:27:13 +02:00
Local Dev
474626fbe0 Ship Theseus 0.3.24 f24d16a4 (slimmer installer + light-mode readability)
Setup    f24d16a43021cea1b7317ae5e0aa24fe7c9b1264332dfba92b82d1a2057deb67
Portable d5e64ab5e9e038b658692eb9c615f0189c2547f91d96d50044fb0f7dbc39a0d3

Bundled since 0.3.23:

a730b56 - Ariadne 0.1.1 fetched from silentmode.st on demand instead of
bundled with Theseus. Installer size drops ~24 MB; Ariadne can update
independently.

3e780eb - Light-mode fix: .btn text (Check for updates, Add engine
button) and .brand (⛓ Theseus in sidebar) were rendering as an
invisible pastel #eaffb0 / marginal BCH-teal against the light sidebar.
Route through var(--acid) with a light-media override for .brand.

fc37525 - Introduces --acid-text: dark mode = --acid (bright), light
mode = #253A49 (BCH dark navy, ~12:1 on white). Every text role in
settings.html now uses --acid-text — .brand, .side a.active, .btn,
.engcat hover, inline <b style> in the Ariadne + Update status
renders. Fills / borders / tints stay --acid for BCH-green identity.

Deployed. Verified LIVE 0.3.24.
2026-09-08 01:54:33 +02:00
Local Dev
33954fbbb1 Ship Theseus 0.3.23 9dfd5a6c (BCH-palette light mode + UA strip)
Setup    9dfd5a6ceb36b7d34216cfae3bff58c612c641cefbc9cd784182fdb1797d0e95
Portable 222628d481d4f46b2ebfd0bbd104cbafb27c125bfc7fc64cb216c04f871c72d4

Two bundled changes since 0.3.22:

7893635 - Light-mode --acid → #0AC18E (Bitcoin Cash primary from
whybitcoincash.com's palette). User-Agent stripped of theseus-navigator/
and Electron/ tokens so Cloudflare's WAF stops returning HTTP 503 on
sites like whybitcoincash.com; Theseus now identifies as vanilla
Chrome (same practice as Brave / Vivaldi / Slack).

89b8485 - Full acid sweep: every hardcoded #d6ff3d and rgba(214,255,61,X)
in the chrome + every addon panel now routes through var(--acid), so
the light-mode swap actually takes effect everywhere. Theseus button
(.logo) + update chip (.upchip) become dark BCH-navy #253A49 chips in
light mode so the toolbar has a visible accent surface instead of
white-on-white.

Deployed. Verified LIVE 0.3.23.
2026-09-08 01:22:20 +02:00
Local Dev
926d49fd42 Ship Theseus 0.3.22 fc779af1 (light-mode acid → BCH-teal + Check-for-updates button)
Setup    fc779af12d55224e3d5eafdde3feabfc616b56b2737f953e7ecb32ef90461cea
Portable 046526f2e73c2026d3243ca9e4639374631cc66924b247feb92f224c9520af4b

Two bundled changes since 0.3.21:

a0c96fe - Light-mode --acid swaps from #3a5c00 (olive) to #088A66, a
darker variant of Bitcoin Cash's #0AC18E primary. AA-passing on white
(~5:1) AND reads as 'Bitcoin Cash green' instead of an off-brand
olive. Applied across chrome / settings / error / home / approval /
messages / bchwallet / siawallet / screenshot editor. Dark mode's
#d6ff3d is unchanged.

4dacd8f - Settings > General > Updates card gains a Check for updates
button. Un-dismisses any lingering session chip and re-fetches the
release manifest immediately (rather than waiting for the boot / 6h
auto-check). Renders 'You're on the latest (v0.3.22)' or 'vX.Y.Z is
available — the update chip will offer it'.

Deployed. Verified LIVE 0.3.22.
2026-09-08 00:55:54 +02:00