Skip to main content
← Back to list
01Issue
BugOpenSwamp ClubPublic
AssigneesNone

Relationships

#4129 Over-limit contentMetadata publishes a blank extension page; archive fallback extracts nothing

Opened by keeb · 10/29/2026

Summary

An extension whose contentMetadata exceeds any registry listing limit publishes "successfully" but gets a blank extension page: no models, methods, or arguments are listed. The one signal is a warnings.registry line in the push summary that is easy to miss, and the archive fallback that is supposed to rescue the listing extracts nothing for perfectly valid model files.

What happened

@keeb/ashby 2026.10.29.1 (a full Ashby ATS API wrapper, generated from Ashby's OpenAPI spec) had 57 model files. swamp extension push manifest.yaml -y reported status: pushed, with only:

warnings.registry: contentMetadata was rejected (contentMetadata.models exceeds limit of 50); the registry listing was extracted from the archive instead

swamp extension info @keeb/ashby --json then shows contentMetadata.models: []. The page lists nothing, although the extension loads and runs fine once pulled.

Why the page is blank rather than partially listed

  1. validateContentMetadata (swamp-club lib/domain/extension/extension-content.ts) throws on the first limit breach: MAX_MODELS = 50, MAX_METHODS_PER_MODEL = 50, MAX_ARGS_PER_METHOD = 30, MAX_GLOBAL_ARGS_PER_MODEL = 30. One over-limit model or method discards the whole listing.
  2. The archive fallback (lib/app/extract-extension-content.ts) is weaker than the CLI extractor (src/domain/extensions/extension_content_extractor.ts):
    • it reads a model's type only from ModelType.create("..."), not type: "...", which is what the CLI and every current extension use;
    • it reads only the first literal methods: { ... } block, so methods merged in by spread (methods: { ...methods }) count as zero;
    • a model with no recognised type and zero methods is dropped entirely. So the fallback produced models: [] for 57 valid models.

Expected

A listing over a limit should never produce a blank page silently. Any of these would fix it:

  • CLI pre-check (best): swamp extension push and swamp extension quality know the limits, so they should fail or prominently warn before publishing, naming the limit and the offending model/method, with a remediation (see the related feature request on splitting by domain).
  • Registry degrade, not discard: list the first N models and methods (or drop only the offending entries) and flag the truncation, rather than rejecting everything.
  • Fallback parity: the archive fallback should understand type: "..." and the same forms the CLI extractor does, so the fallback actually falls back.
  • At minimum, make the warnings.registry line stand out in the human-readable push summary. It currently reads like a footnote on a successful push.

Environment

  • swamp CLI 20260206.200442.0
  • Extension: @keeb/ashby 2026.10.29.1 (57 models). Since replaced by seven @keeb/ashby/<domain> extensions, all of which list correctly.
02Bog Flow
◉OPEN○TRIAGED○IN PROGRESS○SHIPPED

Open

10/29/2026, 6:16:39 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

system commented 10/29/2026, 6:16:39 PM

Classified automatically when this issue was filed.

  • Source: Swamp Club

If you feel this classification is incorrect, add a ripple to tell us so.

keeb commented 10/29/2026, 6:16:46 PM

Related: #4130 (CLI pre-check for listing limits, suggest per-domain split) and #4131 (skill/docs: limits, static-extraction rules, splitting by domain).

Sign in to post a ripple.