Skip to content

v0.10.0 — one type scale, one icon set, Workers that answer each other#52

Merged
ojowwalker77 merged 4 commits into
mainfrom
teacode/our-current-ui-has-a-lot-of-stuff-like-transparency-and-shit-whi
Jul 22, 2026
Merged

v0.10.0 — one type scale, one icon set, Workers that answer each other#52
ojowwalker77 merged 4 commits into
mainfrom
teacode/our-current-ui-has-a-lot-of-stuff-like-transparency-and-shit-whi

Conversation

@ojowwalker77

Copy link
Copy Markdown
Owner

Minor release. Three strands, each removing a way the app could do the same thing two ways.

Clean UI blueprint

Type collapses to four sizes, ink to three greys, radius to nav/card/pill. The UI face moves from bundled Inter to system SF Pro on one inherited -0.15px tracking, with the tracking-* utilities remapped to that same value so no call site can drift off it.

Transparency is gone end to end: glass and vibrancy surfaces, the backdrop-filter call sites and their indirection vars, the transparency setting those left as a dead control, and the macOS window vibrancy material the renderer no longer paints under.

One icon system

UI glyphs bind to Heroicons instead of thirteen mixed react-icons sub-sets. The six files that imported icons directly now route through lib/icons.tsx — that bypass is how the sets drifted apart in the first place. react-icons stays for brand marks only, which Heroicons does not ship.

Heroicons declare no intrinsic size, so the adapter pins 24 the way the icons it replaces did, leaving size-* classes to win. Three glyphs have no Heroicons equivalent and take the nearest fit (brain → CpuChipIcon, text-wrap → ArrowUturnDownIcon, split-pane → ViewColumnsIcon/Bars2Icon); git branch, merge, pull-request, robot and worktree still come from the Central set.

The duplicate in-flight indicator is gone. working-header is now the only one and covers what the orb handled, reading plain "Working" when the turn's start time is not yet known. Drops the thinking-orbs dependency.

Project actions work again

runProjectScript was gutted to a hard error when the terminal was removed — "Run Dev Desktop" could not run. It now goes through the server-owned managed process the sidebar run button already used, so scripts run headlessly, survive reconnects, and stay stoppable. Both call sites share projectRunLauncher rather than duplicating the launch and optimistic update.

Worktree setup scripts are one-shot, so ProjectRunDevServerInput gains a flag that closes the shell when the command returns and lets the existing reaper clear it — otherwise a finished bun install would sit in the registry as a live process forever.

Workers answer each other

An inbox request used to create a Task on the receiving Worker and stop there: no session, no reply path, nothing telling the sender its answer arrived. Every cross-repository question needed a human to notice the Task and hand-carry the result back.

A delegation Task is now the channel, bound at both ends. inbox_send records the Thread that asked; the responder end is the Task's canonical Thread, which migration 063 already made unique per Task, so no second column stores a fact the schema has.

WorkerInboxReactor watches for delegation Tasks, spawns a Thread on the receiving Worker, and starts a turn carrying the request. Model comes from that Worker's default, falling back to the requester's; runtime mode is inherited rather than forced to approval-gated, since a session waiting on a click is what this exists to avoid. Command ids derive from the Task id, so a retry after a partial failure replays instead of spawning a duplicate Thread, and startup sweeps for requests that landed while the server was down.

inbox_reply routes a message to the Thread at the other end, so the requester resumes on its own. Either side may keep talking; close: true ends the channel and records the answer. A Thread not on the channel is refused, so a Worker cannot push into a conversation it is not part of.

Migration

064_TaskRequesterThread adds a nullable requester_thread_id to projection_tasks.

requesterThreadId is optional with a null default in the persisted task.created payload. Requiring it would fail to decode every event written before this change and take the server down on startup — the test suite caught exactly that.

Verification

bun fmt, bun lint (exit 0, 262 warnings — unchanged baseline), bun typecheck (8/8), server 1673 tests, web 1833 tests. All run after rebasing onto main at v0.9.10.

Note: the web suite is green run directly; under bun run test turbo's parallel scheduling times out three files (ChatMarkdown, Sidebar.import, MessagesTimeline) that pass in isolation. Pre-existing contention flake, not from this branch.

Not verified

Two real Workers exchanging a live request has not been watched end to end. Unit tests cover routing, side detection, idempotent selection and the prompts, but the reactor's dispatch path only runs against a real server.

An inbox request used to create a Task on the receiving Worker and stop
there: no session started, no reply path, and nothing told the sender its
answer had arrived. Every cross-repository question needed someone to
notice the Task and hand-carry the result back.

A delegation Task is now the channel, bound at both ends. inbox_send
records the Thread that asked; the responder end is the Task's canonical
Thread, which migration 063 already made unique per Task, so no second
column stores a fact the schema has.

WorkerInboxReactor watches for delegation Tasks, spawns a Thread on the
receiving Worker, and starts a turn carrying the request. The model comes
from that Worker's default and falls back to the requester's; the runtime
mode is inherited rather than forced to approval-gated, since a session
waiting on a click is what this exists to avoid. Command ids derive from
the Task id, so a retry after a partial failure replays instead of
spawning a duplicate Thread, and startup sweeps for requests that landed
while the server was down.

inbox_reply routes a message to the Thread at the other end, so the
requester resumes on its own. Either side may keep talking; close: true
ends the channel and records the answer. A Thread that is not on the
channel is refused, so a Worker cannot push into a conversation it is not
part of.

requesterThreadId is optional with a null default in the persisted
task.created payload. Requiring it would fail to decode every event
written before this change and take the server down on startup.
Collapse the type scale to four sizes, the ink hierarchy to three greys,
and the radius ladder to nav/card/pill. Move the UI face from bundled
Inter to system SF Pro with one inherited -0.15px tracking, remapping the
tracking utilities to the same value so no call site can drift off it.

Remove transparency end to end: the glass and vibrancy surfaces, the
backdrop-filter call sites and their indirection vars, the transparency
setting those left as a dead control, and the macOS window vibrancy
material the renderer no longer paints under.

Bind the UI glyphs to Heroicons instead of thirteen mixed react-icons
sub-sets, and route the six files that imported icons directly through
lib/icons.tsx — that bypass is how the sets drifted apart in the first
place. react-icons stays for brand marks only, which Heroicons does not
ship. Heroicons declares no intrinsic size, so the adapter pins 24 the way
the icons it replaces did, leaving size-* classes to win.

Drop the second in-flight indicator. working-header is now the only one
and covers what the orb handled, reading plain "Working" when the turn's
start time is not yet known.

Project scripts run again. runProjectScript was gutted to a hard error
when the terminal was removed; it now goes through the server-owned
managed process the sidebar run button already used, so scripts run
headlessly and survive reconnects. Both call sites share
projectRunLauncher rather than duplicating the launch and optimistic
update. Worktree setup scripts are one-shot, so ProjectRunDevServerInput
gains a flag that closes the shell when the command returns and lets the
existing reaper clear it.
@github-actions github-actions Bot added size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jul 22, 2026
@ojowwalker77
ojowwalker77 merged commit dc32661 into main Jul 22, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant