This file holds only the procedures that cannot be performed without credentials or permissions a contributor does not have: publishing a release, and changing branch protection.
CLAUDE.md is the authority for everything else — branch naming,
Conventional Commits, the CI contract, the action-pinning rules, where a test
belongs, and the standing prohibitions. That file is the authority and this one
does not restate it, because two copies of a rule are two rules.
No Developer Certificate of Origin or Signed-off-by trailer is required. This
document is scoped to credentialed procedures, and a sign-off clause would be
the one contributor-facing rule in a document that holds none.
A tag is a claim about four things: the tag itself, the package manifest version, the catalog plugin version, and the catalog's source ref. An operator installing from the marketplace resolves the last one, so a catalog that lags the tag installs the previous release under the new version's name.
-
Make the version locations agree, on the default branch. Three fields must name one version before the tag exists:
versioninpackage.json,plugins[0].versionin.omp-plugin/marketplace.json, andplugins[0].source.refin the same file, which carries thevprefix and must equal the tag. Land that through the usual pull request. -
Push the tag from the merge commit that carries those versions.
git tag v0.1.0 git push origin v0.1.0
A tag at the wrong commit is not recoverable under the tag ruleset — publish the next patch version instead.
-
The version gate checks all four names.
version-gatein.github/workflows/release.ymlstrips the tag'svand compares the result against the manifest version and the catalog plugin version, then compares the tag itself,vprefix included, against the catalog source ref. Each mismatch is reported as its own annotation and the job fails; nothing is published. -
The same gate a pull request passes runs against the tag.
release.ymlcallsci.ymlthroughworkflow_callrather than copying its jobs, so the tagged tree passes the identical checks.install-checkalso runs on a tag push — it is skipped on pull requests. So this is where the documented install command is verified against the exact ref an operator can install: the job builds the ref-qualified form of it,github:pashifika/omp-codebase-memory#<ref>, from the pushed tag. -
The publish job creates the GitHub release. It runs only after both the version gate and the reused checks succeed. It is the one job that elevates to
contents: write, and it runs:gh release create "$GITHUB_REF_NAME" --generate-notes --verify-tag--verify-tagrefuses to create a release for a tag that does not exist on the remote, so a release can only ever name a verified ref.
A failed gate leaves the tag in place with no release attached. Fix the mismatch, land it, and tag the next version; do not attempt to reuse the tag.
Protection is defined by the ruleset files under .github/rulesets/, and
CLAUDE.md states how a change to them is made. The credentialed
half is the last step: importing the edited file through the repository's rules
settings needs admin permission, and until that import runs the landed file and
the enforced rule disagree.