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

#283 materialiseExtensions misclassifies pulled rows when manifest name collides with a pulled extension

Opened by stack72 · 5/7/2026· Shipped 5/7/2026

Summary

Filed as follow-up from swamp-club#273 adversarial review (second pass, medium finding #1).

When extensions/manifest.yaml declares a name that matches an already-pulled extension (e.g. name: @hivemq/terraform-harvester and that extension is also pulled from the registry), materialiseExtensions in extension_repository.ts classifies the pulled rows as local because the manifest-identity check runs for ALL rows, not just local ones.

Impact

Wrong origin and extensionRoot for pulled rows of the colliding extension. Source locations computed from the wrong root. Affects any downstream code that branches on origin or uses extensionRoot for path computations.

Steps to reproduce

  1. Create a repo with extensions/manifest.yaml declaring name: @hivemq/terraform-harvester
  2. Pull @hivemq/terraform-harvester from the registry (leftover from before local development started)
  3. loadAll() classifies the pulled rows as local with extensionRoot = repoRoot instead of the pulled-extensions subdirectory

Suggested fix

Guard the manifest-identity origin override to skip rows whose source_path is under the pulled-extensions prefix. E.g. check !row.source_path.includes(/.swamp/pulled-extensions/) before overriding origin to local.

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 2 MOREREVIEW+ 3 MOREPR_MERGEDSHIPPED

Shipped

5/7/2026, 8:04:29 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack725/7/2026, 6:21:31 PM

Sign in to post a ripple.