Skip to content

feat(web-terminal): move Log out into the display menu - #569

Merged
thellert merged 3 commits into
mainfrom
worktree-logout-into-display-menu
Aug 11, 2026
Merged

feat(web-terminal): move Log out into the display menu#569
thellert merged 3 commits into
mainfrom
worktree-logout-into-display-menu

Conversation

@thellert

Copy link
Copy Markdown
Collaborator

The web terminal's header carried a user chip whose popover held exactly one
control. That control now lives in the display menu beside Settings — a
half-width pair under a line naming the signed-in user — and the chip is gone,
leaving search and the display menu alone in the header.

BEFORE                                   AFTER
( A alice ▾) ( ⇋ )                       ( ⇋ )
     │          │                          │
 ┌───┴──────┐  ┌┴──────────────┐          ┌┴──────────────┐
 │ alice    │  │ APPEARANCE    │          │ APPEARANCE    │
 │ ALS       │  │ VIEW          │          │ VIEW          │
 ├──────────┤  │ THEME         │          │ THEME         │
 │ 🚪 Log out│  ├───────────────┤          ├───────────────┤
 └──────────┘  │ ⚙ System Set. │          │ (A) alice     │
               └───────────────┘          │ ⚙ Set.│🚪 Out │
                                          └───────────────┘

Both buttons keep the contracts they arrived with — #logout-btn +
data-landing-url (app.js's initLogoutButton() and the command palette's
"Log out" both find it by id) and data-drawer-trigger="settings-drawer"
(settings.js's warning gate stays the sole open path) — so behaviour is
unchanged and this is a placement move.

The footer is a flex pair rather than a two-column grid: a single-user terminal
renders no identity line and no logout, and Settings fills the row alone.
"System Settings" is relabelled "Settings" to fit half a card. Log out
deliberately does not close the card, so the button's aria-busy state stays
visible while the POST is in flight.

identity-menu.js and its unit tests are removed; the display-menu and
logout-round-trip suites were updated to the new selectors.

The header carried a user chip whose popover held one control. That control
now sits in the display menu beside Settings — a half-width pair under a line
naming the signed-in user — and the chip is gone, leaving search and the
display menu in the header.

Both buttons keep the contracts they arrived with (`#logout-btn` +
`data-landing-url`, `data-drawer-trigger`), so behaviour is unchanged. The
footer is a flex pair rather than a two-column grid: a single-user terminal
renders no identity line and no logout, and Settings fills the row alone.
System Settings is relabelled Settings to fit half a card.
disallowed_tools strips channel_write and Bash from the model's toolset,
but a model given the exact tool name can still emit a doomed tool_use
that the SDK rejects with 'No such tool available' before it reaches the
MCP server. The tool trace records that emission, so asserting the name
is absent from the trace fails on a call that never executed.

Assert instead that any trace entry for a stripped tool is exactly the
SDK's no-such-tool rejection. A success result or a hook-level denial
(the tool still registered) still fails, so the guard stays strict.
@thellert
thellert merged commit f4bdcc6 into main Aug 11, 2026
44 checks passed
@thellert
thellert deleted the worktree-logout-into-display-menu branch August 11, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant