Skip to main content
← Back to list
01Issue
BugClosedSwamp CLITeam
AssigneesNone

Relationships

#1195 Re-publish of an existing extension succeeds but latestVersion/pull never advances to it

Opened by webframp · 7/16/2026

swamp extension push reports a clean success and creates the new version, but latestVersion (as seen by swamp extension info and resolved by swamp extension pull) never advances to it — for re-publishes of an existing package. A brand-new package publishes and resolves correctly.

Repro

Four extensions in webframp/swamp-extensions were each bumped from an existing published version to 2026.07.16.1 and pushed via CI (swamp extension push manifest.yaml --yes):

  • @webframp/agentcore-bootstrap: 2026.06.23.12026.07.16.1
  • @webframp/reddit/moderation: 2026.06.23.12026.07.16.1
  • @webframp/postgres-datastore: 2026.06.30.12026.07.16.1
  • @webframp/gitlab-datastore: 2026.06.30.12026.07.16.1

Each push's CI log shows a clean success, e.g. for reddit:

[INF] extension·push: Pushed "@webframp/reddit/moderation"@"2026.07.16.1"
[INF] extension·push: Extension ID: "0a4a89b9-4ec3-4264-b49e-067443910ba3"
[INF] extension·push: Archive size: "19.3KB"
Published successfully

But afterward, for all four:

$ swamp extension info @webframp/reddit/moderation --json | grep latestVersion
"latestVersion": "2026.06.23.1"

$ swamp extension pull @webframp/reddit/moderation --json
{"name": "@webframp/reddit/moderation", "version": "2026.06.23.1", ...}

Both info and pull still resolve the pre-bump version. This isn't a display-only glitch — pull (which resolves the actual bundle a user's swamp model create/method run would use) is affected too.

A fifth extension, @webframp/aws/iam, was published for the first time ever (no prior version existed) in the same batch, at the same time, via the same CI mechanism, and resolves correctly via both info and pull immediately. So this looks specific to the "advance latest pointer for an existing package" path, not the publish pipeline generally.

Contributing factor worth knowing about

Each of these four also had 2-3 duplicate publish attempts for the exact same version string fail afterward with "Version X already exists for extension Y" — caused by my own CI-triggering pattern (rebasing sibling PRs onto a moving main, each rebase re-triggering CI/publish detection that spuriously re-diffed already-merged sibling extensions' manifests too — a variant of the change-detection fragility already reported in #1185/similar). I don't know if those duplicate/rejected attempts are what left the "latest" pointer stuck, or if it would have gotten stuck on the first, sole attempt regardless. Mentioning in case it's a useful clue, but the core symptom (successful push, stuck latest pointer, functional for a re-publish but not a first-time publish) seems like the real bug independent of the duplicate-attempt noise.

Environment

  • swamp 20260716.194319.0-sha.df9fc306
  • Repo: webframp/swamp-extensions
  • Observed 2026-07-16, ~21:20-22:05 UTC
02Bog Flow
OPENTRIAGEDIN PROGRESSCLOSED

Closed

7/16/2026, 11:14:54 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

webframp commented 7/16/2026, 10:11:52 PM

Additional data point: retried agentcore-bootstrap with a completely fresh, never-before-used version (2026.07.16.2, no prior duplicate attempts at that string) via a clean, isolated PR (#231). The publish job succeeded cleanly and in isolation — no concurrent/duplicate attempts this time, confirmed via the run's job list (Detect changed extensions: success, Publish agentcore-bootstrap: success, nothing else touched).

swamp extension pull @webframp/agentcore-bootstrap still resolves 2026.06.23.1 afterward.

This rules out concurrent/duplicate publish attempts as the cause — the "latest pointer doesn't advance" behavior reproduces even on a single, clean, successful push to an existing package. Retrying with yet another version bump isn't going to fix this from our side; it looks like a genuine bug in whatever step promotes a newly-pushed version to "latest" for a pre-existing package.

webframp commented 7/16/2026, 10:14:00 PM

Found the pattern across the full batch (12 extensions total, published in the same session):

Advanced correctly (all had a genuine bundle-content diff from the prior version):

Stuck at the old version (all had a byte-identical or near-identical bundle vs. the prior version):

  • @webframp/reddit/moderation, @webframp/postgres-datastore, @webframp/gitlab-datastore — the only file that changed (deno.json) isn't in additionalFiles, so the published bundle is genuinely unchanged.
  • @webframp/agentcore-bootstrap — the only bundled change was to a nested additionalFile (worker/deno.json), not the top-level model file.

Hypothesis: the "advance latest" step may be gated on a content-hash comparison of the bundle (or maybe just the primary model/report file, not additionalFiles as a whole), and when it detects no effective change, it silently skips promoting the new version to latest — while still accepting the push and reporting success. If that's the mechanism: it's at least surprising/undocumented behavior for a genuine no-op re-publish (reddit/postgres/gitlab-datastore), and looks like an outright bug for agentcore-bootstrap, where a real file (worker/deno.json) did change but apparently wasn't part of whatever gets hashed/compared.

Either way, swamp extension push reporting "Published successfully" when the version won't actually become resolvable is misleading regardless of whether skipping the promotion itself is intentional.

stack72 commented 7/16/2026, 11:14:41 PM

The issue here is that the versions were published to a non stable channel and the api call was to the stable channel so this is not an issue AFAICT

webframp commented 7/16/2026, 11:14:54 PM

Correction: this was my mistake, not a swamp bug — closing.

The repo's publish.yml computes channel as stable only if the triggering commit is reachable from origin/main; otherwise beta. My rebase-then-push cycle on the feature branches fired CI (and therefore publish.yml via workflow_run) on each intermediate push, while the commit was still only on the feature branch — so those runs correctly published to beta. By the time the real squash-merge to main happened and tried to publish the same version string to stable, it hit "already exists" (the beta publish had already claimed that version number) and failed, leaving the version live on beta only.

swamp extension pull @webframp/ --channel beta confirms all four versions are there and correct. Nothing wrong with swamp's promotion/channel logic — I just hadn't checked the non-default channel before filing this. Sorry for the noise.

Sign in to post a ripple.