The comment said a release of an existing plugin leaves the catalogue
byte-identical "because entries carry no version and npm resolves latest",
so the dispatch existed only to surface a *new* plugin promptly.
The generator now records the resolved version in the codex manifest, so a
release does change the catalogue's bytes. That was the point of pinning:
without a version, codex compared byte-identical documents, concluded the
catalogue had not moved, and left the installed plugin on whatever it first
resolved.
Comment only — the step already behaved correctly for both cases. Worth
fixing because the old wording invites the reader to skip wiring up
marketplace_dispatch_url unless they are adding a plugin, which is how one
consumer ended up without it.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MgsFmepr9FxbFkax5Y2h6z
Three defects, all of which surfaced flattening the first repository.
The two reusable workflows described the same layout differently: CI left
codex_plugin_root and cursor_plugin_root empty while release defaulted both to
a scaffold path. A repository that stopped shipping a nested plugin therefore
passed CI and failed release, on a directory it had never had. Both now default
to the repository itself, with cursor validation off unless asked for.
claude_marketplace_file defaulted to a manifest that a plugin repository no
longer carries, because the marketplace is generated centrally from the package
registry rather than committed to each repo.
The installation notes documented the flow this replaces — a per-release
installer URL, or a marketplace add against the repo at a tag. With a central
marketplace the instructions no longer mention the version at all: the manifest
names the package and npm resolves the newest.
Adds a dispatch step so a newly published plugin reaches the marketplace
promptly. Gitea's registry_package event cannot serve here — it only fires for
packages linked to the repository, and these are published from GitHub — so the
generator is called over Gitea's API instead. The step never fails the release:
the package is already published, and the generator's schedule catches up.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MgsFmepr9FxbFkax5Y2h6z