From 32aa1e7cc302ae6e3e441e62d4a99e4c04ca26b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Fri, 7 Aug 2026 12:35:58 +0000 Subject: [PATCH] delete the combobox instead of giving it anchor semantics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit audit m7 ranked this medium because "every caller inherits the opaque click". there are no callers. nothing has imported Combobox since the initial commit, there is no barrel that re-exports it, and nothing anywhere sets `href` on a SelectOption — so the navigate, the separator that only appeared for href options, and the href field on both declarations of the type were all unreachable. writing anchor semantics into a component that is never rendered is building, not fixing. the Command primitives it used stay; AIHarnessesSection needs them. --- docs/navigation-audit.md | 6 +- src/apps/CLAUDE.md | 1 - src/workspaces/components/Combobox.tsx | 77 -------------------------- src/workspaces/types/globals.d.ts | 2 +- src/workspaces/types/index.ts | 2 +- 5 files changed, 5 insertions(+), 83 deletions(-) delete mode 100644 src/workspaces/components/Combobox.tsx diff --git a/docs/navigation-audit.md b/docs/navigation-audit.md index b13876ec..9720dd82 100644 --- a/docs/navigation-audit.md +++ b/docs/navigation-audit.md @@ -83,7 +83,7 @@ are good building blocks. The **Workspace/Panel framework** contains **zero** ro | ~~M4~~ | ~~`FileBrowser/.../useFileBrowserApp.ts:269`~~, `FileItem.tsx:516`, ~~`Breadcrumb.tsx:16`~~ | a folder | `/files?path=` | **Partly done — the rest is an owner decision, not a defect.** `currentPath` is `?path=` on `/files`, so back/forward and linking a folder work, and the crumbs are ``s. Two things the audit line did not know: `?view=` is *ephemeral* (wiped on mount by `useFileViewerPanels`), so `path` is the screen's first durable param, and four `setSearchParams({…})` calls replaced the whole query string — opening any file would have silently reset the folder. They go through a `setViewerParams` helper now that keeps `path`. Opt-in via the parsed `WorkspaceIdentity` (`screens/files`), because a dashboard can hold two browsers and one shared param would move both. **Folder *items* stay buttons:** ⌘/Ctrl/Shift-click is already bound to multi-select in `FileItem.tsx` and open is double-click, so anchor semantics collide with an existing gesture. | | ~~M5~~ | ~~`CodeEditor/FileTree.tsx:59`, `EditorTabs.tsx:33`~~ | open source file / active tab | `/code-editor?file=` | **Done, minus `open=`.** The active file is `?file=`; tree *file* rows and tabs are ``s. **The tab set stays local** — it is a working session, not an address: it grows without bound, each entry costs a read on load, and nobody links someone else to a tab bar. A `?file=` naming a file that is not open now *opens* it, which is what makes a pasted link work; a path that fails to read is remembered so a bad link errors once instead of once per render, and the address is left alone rather than rewritten. **Tree folder rows stay buttons** — unlike the M4 case this needs no owner call, because expanding a directory is disclosure, not navigation. Two things fixed in passing: the tab close control was a `role="button"` span *nested inside* the tab (invalid then, a nested interactive inside an anchor now) and is a sibling `