Relationships
#1855 paths.base manifest with nested model path breaks registry metadata
Opened by funsaized · 8/26/2026· Shipped 8/27/2026
Description
A valid extension manifest using paths.base: manifest with a nested model entry publishes successfully, but the archive places the source at models/models/project.ts and registry metadata extraction looks for models/project.ts. The published extension is pullable, but contentTypes and contentMetadata.models remain empty, so swamp.club does not display its model methods.
Reproduction
Use this repository layout:
manifest.yaml
models/project.ts
README.md
LICENSEWith this manifest entry:
paths:
base: manifest
models:
- models/project.tsThen run:
swamp extension quality manifest.yaml --json
swamp extension push manifest.yaml --dry-run --json
swamp extension push manifest.yaml --yes --json
swamp extension info @funsaized/npm --jsonActual behavior
- Push and dry-run accept the manifest.
- Pull extracts the source as
.swamp/pulled-extensions/@funsaized/npm/models/models/project.ts. - Local quality analysis fails with
Module not found .../extension/models/project.ts. - The published
@funsaized/npm@2026.08.26.1reports emptycontentTypes,contentNames, andcontentMetadata.models. - Its swamp.club page consequently omits the Models and method sections.
Expected behavior
Either nested paths accepted with paths.base: manifest should be indexed at their actual archive location, or manifest validation/dry-run should reject this layout with an actionable error requiring a flat typed entry. Local quality, server scoring, pull layout, and registry metadata extraction should agree.
Workaround
Move the model beside the manifest and publish it as models: [project.ts], which produces the canonical archive path models/project.ts and allows local quality scoring to pass.
Environment
- swamp
20260825.172854.0-sha.c1c7834b - Linux x86_64
- Published reproduction: https://swamp-club.com/extensions/@funsaized/npm
Shipped
Click a lifecycle step above to view its details.
funsaized commented 8/26/2026, 9:10:12 PM
Follow-up after publishing the flat-layout workaround:
- Published
@funsaized/npm@2026.08.26.2withpaths.base: manifestandmodels: [project.ts]. - Push succeeded with
modelCount: 1andbundleCount: 1. - Pull confirms the canonical source path
.swamp/pulled-extensions/@funsaized/npm/models/project.ts(no doubledmodels/modelspath). - Local quality passes at 100%, and all 19 extension tests pass.
- Despite that,
swamp extension info @funsaized/npm --jsonstill returns emptycontentTypes,contentNames, andcontentMetadata.models; the public page still omits Models/methods.
This disproves the nested archive path as the sole cause. The server-side metadata extractor is still failing or discarding this valid model even at the canonical path. Please inspect indexing diagnostics for extension id 38c69034-64d1-4d28-9620-853da076a79f, version 2026.08.26.2.
funsaized commented 8/26/2026, 9:12:05 PM
Confirmed root cause from the official publishing tutorial and local dry-run diagnostics:
The model used const VERSION = "2026.08.26.2" with model.version: VERSION. This is valid at runtime (swamp model type describe loads all methods), passes fmt/quality/tests/push, and pulls successfully, but the static publishing metadata extractor cannot resolve the identifier.
Before replacing it, dry-run logged:
Models (1):
"project.ts" ("project.ts")After changing only model.version and upgrades[].toVersion to literal CalVer strings, dry-run logs:
Models (1):
"@funsaized/npm/project" ("project.ts")
Global Arguments:
...The registry therefore published the model bundle but omitted contentTypes/contentMetadata because metadata extraction silently failed on a non-literal version. Suggested fix: validation/dry-run should reject non-literal model.version, or the extractor should resolve top-level string constants. At minimum, push should not succeed while displaying the source filename as the model type.
stack72 commented 8/27/2026, 12:32:12 AM
Thanks @funsaized for reporting this! The fix has been merged and a release is on its way. We appreciate your contribution to swamp.
Sign in to post a ripple.