theseus/PENDING.md
Theseus Dev b4cea7b83f Theseus 0.3.130: startpage sidebar fills the panel, searchbar stops auto-growing, Store Claude Desktop detected
Startpage sidebar is now a real left column that starts at the Theseus
title's top edge and runs the full page height. The slot grid is 3
columns stretched to the full sidebar width, with enough rows to cover
the sidebar vertically (count derived from the main column's height on
each render, and re-derived on viewport resize). Empty cells sit as
semi-transparent dashed outlines in the exact position a filled tile
would occupy, so the grid reads as one uniform surface; any empty cell
doubles as the "add link" surface and clicking it opens the Add-link
modal with that cell pre-pinned, so new links land exactly where the
click did instead of being pushed to the end. The dedicated "+" button
is gone — the pin-location is the click target. A "Theseus v0.3.X —
What's new" link appears under the search tip, pointing at
silentmode.st/releases; version comes from a new getVersion exposed on
window.home over the existing app-version IPC.

Chrome toolbar: 0.3.128's "give the searchbox more room while typing"
rule is removed — focusing the search field was pulling the drag handle
with it, which made the URL / search ratio impossible to set by hand.
The URL bar now caps at 75% of the pair's shared budget via a hard CSS
max-width (so a wide urlBarWidthPx stored under the old 80% ceiling
clamps on load without the user having to re-drag), and the drag floor
matches at 25 % so the search field always keeps at least a quarter of
the pair.

Claude connector: bumped bundled-addons/claude-connector from 0.2.0 to
0.2.1. The clients.cjs Store-install detection and the panel-access
work shipped in 0.3.129's bundled 0.2.0, but seedBundledAddons only
overwrites the installed copy when the bundle is strictly newer, so
every user with an existing 0.2.0 kept the stale pre-fix copy from
%APPDATA%/Theseus/extensions/claude-connector/. The version bump
surfaces the Store-install detection ("Claude Desktop not installed on
this computer" was false on every Microsoft Store install) and the
add-on-panel approvals split in the connector panel, both of which
were already in-tree but gated behind the version check.
2026-10-29 14:46:29 +02:00

8.9 KiB
Raw Blame History

Pending — uncommitted Theseus changes

Working-tree state that hasn't been committed or shipped. Read this before touching the same files. Update when you land or add work.

Format: each group has a session: label so parallel sessions can see what belongs to whom and coordinate. Naming convention: YYYY-MM-DD:short-slug for date-bounded work, or parallel:<theme> for work owned by a session that isn't the current one.

Last updated: 2026-10-29.


Releases are no longer recorded here: the live version and hashes are in ../site/releases-manifest.json and https://dl.silentmode.st/releases-manifest.json, and each release commit is Theseus 0.3.x: ... in git history.

Staged for the next release (post-0.3.129)

Queue of asks for the next cut. Items marked LANDED are edited in the working tree waiting for a bump + build. Items marked TODO still need the code change.

  • TODO: Home — swap SilentMode.X out, Game.X in on the Silent Mode cards section (home.html:366-375 defaultState().sections.sm). Game.X should pick up its own description + favicon from the live site, so the entry is a stub ({ title: "Game.X", url: "https://game.x/", brand: "game" }) until game.x goes live. SilentMode.X moves to a short link somewhere else — the user suggested either under the search field, at the bottom of the home page, or in the quicklinks (sections.q). The canonical remote list at https://dl.silentmode.st/home-cards.json needs the same swap so existing profiles pick it up without a reset (local sections.sm isn't reseeded by migrateCards — the remote cache is the only way through to installed users). game.x isn't resolving yet (no s3 pointer on-chain, no manifest); wait until the service is up before baking its description/favicon.
  • LANDED: Searchbox no longer auto-grows on focus; URL/search ratio capped at 75/25. Reverts the 0.3.128 "give the searchbox more room while typing" rule — focusing the searchbox was pulling the drag handle with it and making the ratio hard to set by hand. Changes in chrome.html: dropped the .urlsearch:has(.searchbox:focus-within) .searchbox { flex: 2 1 480px } rule and its .14s transition on .searchbox; added max-width: 75% to .urlwrap so a stored urlBarWidthPx from the old 80 % ceiling clamps on load without the user having to redrag; bumped the drag MIN_SHARE 0.20 → 0.25 so new drags can't push the search bar below 25 % of the shared budget. 0.3.128's typing-wider effect stays off; the user owns the ratio again.
  • LANDED: Startpage sidebar runs the full page height alongside the hero; slots fill the whole sidebar panel; empty cells double as the "add link" surface. home.html:
    • Page layout restructured. Hero + homepage are now wrapped in a single .page grid (grid-template-columns: minmax(240, 280) 1fr) with the sidebar <aside> as a true left column and .main-col on the right holding the hero on top of the SM cards. The sidebar's top edge now aligns with the Theseus logo + search box instead of starting below them. Hero top padding dropped (page handles it); hero stays centered inside the main column.
    • Sidebar fills the panel vertically. .sidebar { align-self: stretch } makes the aside match the main column's height. .slots-list { grid-template-columns: repeat(3, 1fr); width: 100% } stretches cells to the sidebar's full width (icons stay 48 px, centered inside the wider cell; labels gain max-width: 100% so they center over the cell). A new minSlotsForFill() computes row count from .main-col height on each render; a ResizeObserver re-renders on viewport resize so new rows appear (or drop off) as the window changes.
    • Empty tiles top-aligned. .slot-empty switched to flex-direction: column; justify-content: flex-start so the dashed tile sits at the top of its 72×68 cell — same Y as a filled slot's .tile (which sits above its label). Before this the dashed box was centered in the cell while filled tiles were top-aligned, so the two read as misaligned.
    • Chromeless sidebar. .left-column renamed to .sidebar, .right-column renamed to .cards-wrap; the new .section.chromeless modifier removes background, inset border, and padding box on the sidebar so it blends with the page body. The SM cards area keeps its soft panel (the cards area is "the rest of the page", not the sidebar).
    • Dedicated .slot-add cell removed; dashed outline semi-transparent. .slot-empty::before has content: "" (no "+" glyph) and renders at .18 opacity on container hover, .35 on this-cell hover, strong acid only on drop-hot — so empty cells never compete visually with the real icons. Clicking any empty cell opens the Add-link modal with that cell's index pre-pinned (openModal(sec, i, pinSlot) carries the pin through editKey to the save handler), so the new link lands exactly where the user clicked.
    • layoutSlots() default minSlots still 18 (fallback for the first render before layout is measured); render() passes the dynamic value from minSlotsForFill() which uses it as a floor.
  • LANDED: Startpage shows running version + link to release notes. New line under the "Tip: hello.bch" hint on home.html: "Theseus v0.3.X — What's new ↗", linking to https://silentmode.st/releases. Version comes from window.home.getVersion() (added to home-preload.js; wired to the existing app-version IPC — no new backend). Visible on every startpage load so a user who just updated has a one-click path to the changelog without hunting for a chrome chip that only shows when a NEWER version is out.
  • LANDED: Claude connector detects Microsoft Store install of Claude Desktop. bundled-addons/claude-connector/addon.json bumped from 0.2.0 to 0.2.1 so Theseus's seedBundledAddons reseeds the stale copy sitting in %APPDATA%\Theseus\extensions\claude-connector\ on first boot of the next Theseus. The actual detection code (Store package path under %LOCALAPPDATA%\Packages\Claude_<pub>\LocalCache\ Roaming\Claude\ + fallback to AnthropicClaude / Programs\Claude / Program Files\Claude) is already in the tree in bundled-addons/claude-connector/lib/clients.cjs; it just wasn't reaching installed users because the addon version hadn't been bumped — seedBundledAddons skips the overwrite when user version >= bundle version. User-visible symptom: the connector panel showed Claude Desktop as "Not installed on this computer" on every box where Claude Desktop is the Store install (which is the default modern install).
  • LANDED: Claude connector reaches add-on sidebar panels (Aegis, Hermes, Pithos, and any other sidebar add-on). The tab-control hook now exposes each open panel as a tab with a negative id, kind: "panel", addon and panelId fields (main.js panelCtrlEntries / tabControlHook.list). The connector's use() branches to _usePanel, approves control under a synthetic theseus-panel://<addonId> origin (one approval covers every panel owned by that add-on), skips origin pinning (panels load from the add-on scheme and never change under us) and drives the panel's webContents with the same TabDriver as a web tab. navigate / activate_tab / close_tab refuse panels — the user owns panel visibility. The approval modal says "Let Claude control the Aegis panel?" when the origin is a panel origin. list_tabs returns closed panels too so a client can see what exists; webContents(-N) throws " is not open; ask the user to open the panel from the sidebar first" until the user docks it. Password-field refusal and the action log still apply. The connector panel.html now splits site approvals from panel approvals into their own sections, with the add-on's own title ("Aegis panel") above the mono origin string and a ✕ Remove button that goes through the existing remove-origin IPC.

session: parallel:collision-policy

Owner's focus: BCNR ↔ ICANN name collision handling. Not mine — leave for that session to land or bundle by explicit ask.

Live state

Shipped hashes live at ../site/releases-manifest.json and https://dl.silentmode.st/releases-manifest.json. On-chain pointer at releases.silentmode.bch. See GOTCHAS.md for the release gotchas.