feat(validation): add published-history release-plan checks (P-035, P-036)#347
Merged
hdamker merged 1 commit intoJun 19, 2026
Merged
Conversation
…-036) Add two release-plan validation rules backed by a workflow-resolved published release-history snapshot, keeping the Python orchestrator offline (GitHub access stays in the workflow layer). - P-035 (repository-level): required tag for active release types, published-tag mismatch, tag regression, missing previous cycle, and "no new API content". Silent for an untouched target_release_type: none plan; reports a pre-existing condition on unrelated PRs with a dedicated-release-plan-PR suggestion. - P-036 (per-API): a published version's status is terminal, so an already-public API version cannot reappear with a non-public status. Fires regardless of release type. A resolver step writes a compact release-history JSON consumed via VALIDATION_RELEASE_HISTORY_PATH; the PR and pre-snapshot (/create-snapshot) paths both resolve it. Partial history runs tag-only checks and skips metadata-dependent conclusions rather than failing. Part of camaraproject#232.
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.
What type of PR is this?
enhancement/feature
What this PR does / why we need it:
Adds two release-plan validation rules that check
release-plan.yamlagainst therepository's published release history, so version/status/tag mistakes are caught at
PR time and before
/create-snapshotinstead of during release review.an active release type, a published tag whose API entries were changed without a
bump, a tag regression, a cycle opened with no previous cycle, and a release that
declares no new API content. It is silent for a parked
target_release_type: noneplan on a PR that does not touch
release-plan.yaml, and reports a pre-existingcondition on unrelated PRs with a suggestion to fix it in a dedicated release-plan
PR.
published in a public or maintenance release, that version cannot reappear with a
different status (e.g. an already-public
1.1.0declaredalpha). This is aninvariant, so it applies regardless of
target_release_type.Which issue(s) this PR fixes:
Part of #232. The issue tracks several rule families; content-drift and
maintenance-release rules remain follow-up work, so this PR does not close it.
Special notes for reviewers:
release-history JSON (
release_history_path/VALIDATION_RELEASE_HISTORY_PATH),resolved on both the PR and
/create-snapshotpaths, so the Python orchestrator makesno GitHub calls. It runs whenever
release-plan.yamlis present (not only when itchanged) — which is what lets the rules surface pre-existing conditions on unrelated
PRs — and partial history runs tag-only checks while skipping metadata-dependent
conclusions.
release_plan_check_only_safe: trueso theysurvive release-plan-only dependency-advance PRs.
duplicate / stale / regressing plans fail as expected, a parked
noneplan passes,and
/create-snapshotgates before snapshot creation on a P-036 condition.Changelog input
Additional documentation
This section can be blank.