Skip to content

Console + machines papercuts: tooltips, required fields, unique names, detail footer - #220

Merged
deathbyknowledge merged 10 commits into
mainfrom
machines-papercuts
Jul 27, 2026
Merged

Console + machines papercuts: tooltips, required fields, unique names, detail footer#220
deathbyknowledge merged 10 commits into
mainfrom
machines-papercuts

Conversation

@jess-cat

Copy link
Copy Markdown
Collaborator

Console + machines papercuts: tooltips that don't get clipped, forms that don't lie about their state, and a consistent detail-page action footer.

Tooltips

  • Field/label help tooltips now render through the portaled Hint instead of the in-DOM InfoTip bubble, so they escape any overflow:hidden ancestor (this was clipping the LAST SEEN and connect-flow tooltips). InfoTip was rewritten internally to wrap Hint + the help IconButton, keeping its API and gsv-infotip spacing — so every consumer (TextInput, Toggle, Select, TextArea, Checkbox, Radio, Counter, Segmented, Slider) is fixed in one place.
  • Earlier papercuts along the way: (?) tooltip on LAST SEEN, browser target uses the Chrome icon (not a bookmark), copy glyph, status colors, tile tooltip.

Forms: placeholders aren't defaults, required means required

  • TextInput/TextArea now enforce requirement="required": an empty required field surfaces a REQUIRED error on blur (or via a new forceValidate prop). A caller-supplied status still wins, so existing hand-rolled validation is unaffected.
  • The connect-new-machine flow no longer seeds MACHINE NAME / DEVICE ID with derived defaults — they start empty with platform-contextual placeholders (Mac workstation / mac-workstation, Linux machine / linux-machine, …) and the user must type them. Genuine defaults (git ref: main, subdir: ., token expiry 30) are kept.

Uniqueness on create (all object types)

  • New shared isNameTaken(existing, candidate) helper (trim + case-insensitive). Wired into create flows so you can't create an object whose identity already exists — gateway stays authoritative, this is an inline pre-check:
    • Machines: duplicate device-id (and display label) blocked before token issuance.
    • Integrations: duplicate MCP server name.
    • Packages: duplicate import source (repo + ref + subdir).
    • Agents: duplicate name/username, via a new reservedNames prop on AgentEditor.

Detail-page action footer

  • The destructive action (FORGET / REMOVE / DISCONNECT / KILL) and the regular secondary/primary actions now all live in a bottom footer on every console detail page — destructive left-aligned, secondary + primary right-aligned. The top action bar is now just the icon + description.

Verification

  • tsc --noEmit clean; 277/277 unit tests pass (one unrelated pre-existing ChatTranscript.test.ts DOMPurify-mock failure, untouched here).
  • Verified in the /design catalog: InfoTip bubble portals to <body>; required TextInput shows REQUIRED on blur-while-empty and clears on type; detail-template footer renders destructive-left / actions-right.
  • Reviewed by three parallel passes; the one substantive finding (post-provision back-nav flagging the machine as a duplicate of itself) is fixed by scoping the check to pre-issuance.

jess-cat added 10 commits July 24, 2026 10:52
- Copy action: replace the bookmark-style double-rect SVG with a shared
  CopyGlyph line icon (MessageMeta, ChatTranscript, line-glyph story).
- Status labels: color-code by tone across surfaces that dropped it —
  console detail page header + section cards (via a shared StatusMeta),
  connect wizards, messenger identity links, chat reasoning panel,
  desktop HUD, shell status bar (powerTone), and the minimized chat pill.
- Tile: selected selector dot uses a purple `accent` tone (was orange),
  and a hover tooltip (DS Hint) explains the dot's meaning — caller text
  ("Select MAC" / object status) with a tone-word fallback.
Browser/extension targets rendered a bookmark glyph on every surface
except the step-1 platform tile, because `chrome` exists only as a
doticon and the glyph-based surfaces fell back to "bookmark".

Point them at the chrome doticon via Icon's existing "doticons/" routing
(no new asset). Fixes the machines list, detail header, and the machine
provision flow's action bar (step 2 DETAILS), preview row, and success
screen.
Add an optional labelInfo prop to ListRow that renders a portaled Hint
"?" after the row label, wired through ConsoleDetailRow/detailRow. Set
it on the machine detail's LAST SEEN row to explain the field means the
last connect/disconnect, not a live check. Uses the portaled Hint (not
InfoTip) so the bubble escapes the row's overflow:hidden clipping.
@jess-cat

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: d57869ca67

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@deathbyknowledge
deathbyknowledge merged commit 03cb59d into main Jul 27, 2026
7 checks passed
@deathbyknowledge
deathbyknowledge deleted the machines-papercuts branch July 27, 2026 14:31
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.

2 participants