feat(release): add immutable SemVer publication lane - #25
Merged
Conversation
Separate release intent from deployment identity by testing the final release commit before any source or artifact publication. Keep the lane disarmed until the registry, environment, baseline tag, and repository protections are reviewed.
Isolate mutable Hermes contract execution from the one artifact build, and finalize release receipts only from verified PyPI bytes. Dedicated App credentials and immutable-release checks keep source promotion narrow. Idempotent remote-ref validation lets an ambiguous successful push resume instead of stranding the release.
Keep one repository task interface for local development, CI, and release receipts so the validation boundary cannot drift between environments.
Carry the current upstream Hermes context-engine contract forward while preserving the Just-only CI interface.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Begins the compatible plugin-kit rollout by turning reviewed conventional commits into one tested, immutable release identity. This PR delivers the release boundary only; consumer SemVer migrations and fleet qualification/promotion remain follow-on work. It can merge without Hermes upstream changes, and publication stays disarmed until the external registry and repository controls are configured.
Session-settled decisions carried from planning: published SemVer releases are the promotion boundary, and conventional commits determine release intent.
Design
files.pythonhosted.orgURLs.Activation boundary
The workflow is intentionally inert unless
SEMANTIC_RELEASE_ENABLED=true. Before enabling it, operators must configure and validate:v0.7.0baseline tag;pypienvironment;source-promotionenvironment with the dedicated App credentials;This PR does not create those controls, publish a package, push a tag, or create a release.
Validation
just test: 153 passed, 12 expected runtime-contract skips.just test-release: 35 release intent, artifact identity, task-runner, and workflow contracts passed.just test-contract: 11 passed against upstream Hermes1169fb50a4cdfbac62463d0e8bd9766fedcd4189.just test-context-engine-contract: passed against the exact deployed upstream Hermes revisionf80f453ae0679347e38abc917c7f94f717bf96c5.just build check-dist: wheel and sdist built; both passed Twine metadata validation.just --fmt --check,actionlint,yamllint,uv lock --check,py_compile, andgit diff --check: passed.Post-Deploy Monitoring & Validation
SEMANTIC_RELEASE_ENABLEDis nottrue.39bcf15to restore the Makefile boundary. Jonathan owns that rollback decision during the first main-branch workflow cycle.