Skip to main content
← Back to list
01Issue
BugShippedSwamp CLI
Assigneeskeeb

#192 swamp-club extension card no longer exposes @ns/slug as contiguous text

Opened by keeb · 4/30/2026· Shipped 4/30/2026

Summary

The extension listing card in swamp-club's islands/ExtensionRegistry.tsx (introduced by the faceted-rail redesign in PR #479, commit c0a6ef8) splits the canonical @collective/extension-name identifier across three separate DOM elements:

<div>{ns}</div>            -> "@testuser_xxx"
<h3>{displayName}</h3>     -> "Hello Ext"
<div>/{slug} · v{...}</div>-> "/hello-ext · v..."

The <a> href still uses the canonical form (/extensions/@ns/slug), but the card's text content no longer contains @ns/slug as a contiguous substring — displayName is interleaved between the namespace and the slug.

Impact

  • swamp-uat club test tests/club/flows/extensions.spec.ts:108 ("extensions listing shows published extensions") fails 100% on main. The page-object locator a[href*='/extensions/'].filter({ hasText: '@ns/slug' }) no longer matches because hasText matches text content, not href.
  • Any consumer (test, screen reader, copy-paste) that expects to read the canonical extension identifier off the card sees fragmented text.

Expected fix

Re-expose the canonical @ns/slug identifier as contiguous text on the card. Options at a high level (any one is sufficient):

  • Render the namespace and slug together in a single text node (e.g. one element containing @{ns}/{slug}) alongside the styled displayName/version row, OR
  • Set aria-label="@{ns}/{slug}" on the <a> (improves accessibility too, but page-object selectors filter on visible text — confirm whether hasText reads aria-label before relying on this), OR
  • Add a visually-hidden <span class="sr-only">@{ns}/{slug}</span> inside the link.

Option 1 is the most robust and matches what the previous design exposed. Whichever approach is chosen, swamp-uat's ExtensionsPage.extensionCard(name) locator should resolve again without UAT changes.

Repro

  1. Publish two extensions to a fresh swamp-club instance (one personal-collective, one named-collective).
  2. Visit /extensions.
  3. Inspect the rendered card — observe that @collective/name does not appear as a single contiguous text run.

Full UAT failure context: swamp-uat run 25187607057 (https://github.com/systeminit/swamp-uat/actions/runs/25187607057).

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 3 MOREPR_MERGEDCOMPLETE

Shipped

4/30/2026, 9:31:52 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
keeb assigned keeb4/30/2026, 8:55:43 PM

Sign in to post a ripple.