Skip to content

CL-6464: page actions, skills detail - #189

Merged
TheGreatAxios merged 4 commits into
mainfrom
cl-6464-pages
Aug 21, 2026
Merged

TheGreatAxios merged 4 commits into
mainfrom
cl-6464-pages

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Contributor

Two of CL-6464's surfaces. Item (a), the Insights cutover, is not in this PR — see "What is not here".

(e) Files: page actions belong in the top bar

The workbench lens ("New Workbench" / "All workbenches"), the scoped input, the sort control and the rows/grid toggle all floated in the page body while only Upload sat in the top nav. They now live in StageTopBar's action slot, which DESIGN.md → Pages & Routing names as the single home for a page's own controls: "if an action is primary enough to float, it belongs in the top nav."

The body toolbar they lived in was a <div className="page-toolbar"> — and page-toolbar is not defined in app.css, in any package stylesheet, or in react-ui. It was an unstyled div, which is most of why the row read as floating. It is gone rather than restyled.

The scoped input is now labelled as filtering ("Filter files" / "Filter by name"), not as a second "Search files" box. DESIGN.md → Search: "There is no page-local search input that duplicates palette scope; a page that needs scoped filtering builds it as a filter control, not a second 'search.'"

Rows already were the default view mode (useState<ViewMode>("rows")); a test now pins that so it cannot quietly flip to grid.

(d) Skills detail: a meaningless action, and a column nobody could read

The action. A SHARED chip beside a Make private button is the system's vocabulary for the system's own scope enum — a person could read both and still not know what the button would do. The page now states who can use the skill today ("Everyone in this workbench can use this skill." / "Only you can use this skill.") and the button says what will change ("Make it private to me" / "Share with everyone here"). The quick-peek panel on Plugins carried the same defect with different words; it now says the same thing, so one action never reads two ways.

The layout. Version history sat in a min-[1100px]:w-96 aside, which squeezed five columns into 384px and truncated every heading to a stub — "Versio…", "Updat…", "interch…". A table nobody can read teaches nothing, so history moved out of the side column onto the full width of the page, with explicit column widths and no wrapping on the short columns. The page is one column now: visibility, description, body, then history.

"Who". It was rendering a system identity. version.author is a raw git commit author name, and every commit the product writes is authored by interchange-hub (fixed in vendor/intx/hub-sessions/src/repo-store/store.ts:49) — a machine account, not a teammate. The column is now "Saved by", and skillVersionSavedBy resolves the hub's identity to the product's own name; a commit written by a real person keeps their name exactly as git recorded it.

Note the underlying gap: there is no per-principal attribution on skill commits at all. Showing a real human name for a Workbench save means threading the acting principal into the repo-store commit, which is a hub change, not a UI one. This PR stops the internal name from being mistaken for a person; it does not invent an attribution the platform never recorded.

What is not here

  • (a) Insights cutover — not started. Scoped out under a mid-flight timebox; it is the largest of the three and wants its own PR. Findings for whoever picks it up are in the handoff, not in this branch.
  • Items (b) icon sizing and (c) the search morph belong to a sibling lane; nothing here touches the top-bar magnifier wiring, command-palette-provider, or icon-size tokens.
  • Two §Search violations remain untouched on pages outside this brief: skills-page.tsx and plugins-page.tsx both put a LibrarySearchInput labelled "Search skills"/"Search plugins" inside the StageTopBar action slot — i.e. a second search input in the same 3rem row as the magnifier the bar always renders. Same one-line fix as Files got.

Checks

Scoped to apps/web (not the full root check): bunx tsc --noEmit clean, eslint clean on every touched file, and bun run build && bun test ./src ./test → 765 pass, 0 fail. The three tailwind-build tests require the build step first; they pass once it has run.

Not verified: no browser pass on the rendered pages, and no visual check of the Files top bar at narrow widths (the workbench lens is hidden lg:flex, so below lg the scope buttons are not reachable — deliberate, but unconfirmed against a real viewport).

https://linear.app/abklabs/issue/CL-6464

The workbench lens, the name filter, sort, and the rows/grid toggle
floated in an unstyled page-body toolbar (`page-toolbar` was never
defined in any stylesheet) while only Upload sat in the top bar. All of
them now live in `StageTopBar`'s action slot, which DESIGN.md names as
the single home for a page's own controls.

The scoped input is labelled as filtering rather than as a second
"Search files" box: the product has exactly one search surface and the
top bar already carries it.
"SHARED" beside "Make private" was system vocabulary — a person could
read both and still not know what the button would do. The page now says
plainly who can use the skill today, and the button says what will change
("Share with everyone here" / "Make it private to me"). The quick-peek
panel on Plugins says the same words, so the same action never reads two
ways.

Version history moves out of the narrow side column that squeezed every
heading down to a stub ("Versio…", "Updat…", "interch…") and onto the
full width of the page. "Who" becomes "Saved by", and a save made
through the product is attributed to the product rather than to the git
identity the hub commits under — an internal name a reader would
otherwise take for a teammate.
@TheGreatAxios
TheGreatAxios merged commit 962021a into main Aug 21, 2026
0 of 2 checks passed
@TheGreatAxios
TheGreatAxios deleted the cl-6464-pages branch August 25, 2026 15:29
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