diff --git a/packages/plugins-ui/src/plugin-card.tsx b/packages/plugins-ui/src/plugin-card.tsx
index 111e297bc..8fcfaffbf 100644
--- a/packages/plugins-ui/src/plugin-card.tsx
+++ b/packages/plugins-ui/src/plugin-card.tsx
@@ -52,9 +52,9 @@ export function PluginCard({
{pluginOutcome(plugin.descriptor.id, plugin.descriptor.displayName)}
-
- {caption}
-
+ {/* A dense directory row's status column is core information, not
+ * an overflow item to drop on narrow viewports (CL-6467). */}
+ {caption}
{plugin.status === "not_connected" ? (
// The same single Connect verb the MCP preset rows use — one
// idiom for "not connected yet" across the whole gallery, never
diff --git a/packages/plugins-ui/src/plugins-gallery.tsx b/packages/plugins-ui/src/plugins-gallery.tsx
index 6d4fa9ee0..cc20a439a 100644
--- a/packages/plugins-ui/src/plugins-gallery.tsx
+++ b/packages/plugins-ui/src/plugins-gallery.tsx
@@ -236,6 +236,14 @@ export function PluginsGallery({
{active === "plugins" ? (
<>
+
+
Plugins
+
+ A directory to scan, not tiles to admire — one dense row
+ per connector, grouped by what it does. Click a row's
+ name for the full page.
+
+
{
expect(container.textContent).toContain("Inherited");
});
+ test("the plugins tab renders the list heading and directory sub copy (CL-6467)", () => {
+ const { container } = renderGallery();
+
+ const heading = container.querySelector("h1");
+ expect(heading?.textContent).toBe("Plugins");
+ expect(container.textContent).toContain(
+ "A directory to scan, not tiles to admire — one dense row per connector, grouped by what it does. Click a row's name for the full page.",
+ );
+ });
+
+ test("a plugin row's status caption is never hidden — it is a core column, not overflow (CL-6467)", () => {
+ const { container } = renderGallery();
+
+ expect(container.textContent).toContain("Connected here");
+ const captions = [...container.querySelectorAll("span")].filter(
+ (span) => span.textContent === "Connected · Connected here",
+ );
+ expect(captions.length).toBeGreaterThan(0);
+ for (const caption of captions) {
+ expect(caption.className).not.toContain("hidden");
+ }
+ });
+
+ test("an empty plugin directory renders no group rows", () => {
+ const { container } = renderGallery([]);
+
+ expect(container.querySelector(".border.border-border")).toBeNull();
+ });
+
test("search narrows the plugin grid to matches only", () => {
const { container } = renderGallery(PLUGINS, "git");