Align release policy with ReleaseKit

This commit is contained in:
2026-10-08 16:37:10 +00:00
parent f96f2b8295
commit 0e92085002
2 changed files with 44 additions and 27 deletions

View File

@@ -54,10 +54,11 @@ authoritative primary branch, completes the release. The source commit may be
pushed before the tag or published together with it through an atomic push. pushed before the tag or published together with it through an atomic push.
The procedure must choose and document the supported approach. The procedure must choose and document the supported approach.
ConfigKit uses sequential explicit pushes: first the captured candidate to ConfigKit uses sequential publication: first push the committed candidate to
authoritative `main`, then the annotated tag. Its authoritative `main`, then invoke ReleaseKit once to validate that candidate and
[release procedure](../release.md) names `origin` and checks that its fetch and publish its annotated tag. The [release procedure](../release.md) names
push destinations resolve to the authoritative URL. `origin`; ReleaseKit checks its exact effective push URL before validation and
tag publication.
Release commands must finish at successful publication. They must not wait for Release commands must finish at successful publication. They must not wait for
or poll CI, require successful CI status, inspect downloadable artifacts, or or poll CI, require successful CI status, inspect downloadable artifacts, or
@@ -76,8 +77,9 @@ the tagged source. The procedure must identify those deliverables and the
responsibility of their automation. Published deliverables must be traceable responsibility of their automation. Published deliverables must be traceable
to that source and identify the same version. to that source and identify the same version.
ConfigKit currently declares no additional deliverables. Its source-tag push ConfigKit currently declares no additional deliverables. Confirmed publication
is the completion point. of the intended source tag is the completion point. CI, macOS validation,
hosted delivery, and consumer retrieval are outside the release gates.
## Versioning And Compatibility ## Versioning And Compatibility
@@ -114,7 +116,8 @@ Every new release must include `docs/releases/<version>.md` in the tagged
source tree. Use the complete version tag as the filename and begin with a source tree. Use the complete version tag as the filename and begin with a
title containing the product name and that exact version. title containing the product name and that exact version.
ConfigKit requires the first line `# ConfigKit <version>`. ConfigKit requires the first line `# ConfigKit <version>`. ReleaseKit v0.2.0's
publication guard checks the release-note H1 for the product and version.
Include a short summary and any relevant compatibility impact or upgrade Include a short summary and any relevant compatibility impact or upgrade
instructions. Choose sections suited to the release and keep the note instructions. Choose sections suited to the release and keep the note
@@ -146,10 +149,9 @@ checks publication state, and publishes the intended refs. A validation-only
mode or command may be provided for diagnosis, but must not be a required step mode or command may be provided for diagnosis, but must not be a required step
before publication repeats the same checks. before publication repeats the same checks.
ConfigKit uses `./scripts/release.sh vMAJOR.MINOR.PATCH`. The separate ConfigKit uses the module-selected ReleaseKit CLI's `publish
`scripts/release-check.sh` remains an optional diagnostic command; the vMAJOR.MINOR.PATCH` command. Its `check` command is optional for diagnosis; it
publication command invokes it once and does not use a persistent candidate is not a required preliminary pass to publication.
record.
Run the complete deterministic, offline default test suite once for the final Run the complete deterministic, offline default test suite once for the final
candidate, following the [testing policy](testing.md). For repositories that candidate, following the [testing policy](testing.md). For repositories that
@@ -157,13 +159,24 @@ publish builds, verify the required build targets. Select those targets for
the application's actual support commitments; native testing on each platform the application's actual support commitments; native testing on each platform
and access to particular hardware are not default release prerequisites. and access to particular hardware are not default release prerequisites.
ConfigKit's one maintained Go 1.25 baseline runs the full suite with the race For release preparation, record the initial stable release of the newest
detector and test-time vet disabled. This protects library behavior, ownership, locally available Go series in `go.mod`'s `go` directive. Retain a higher patch
and concurrent use; the suite already includes examples, consumer fixtures, minimum only when required by a dependency or a specific correctness fix. Use
documentation links, and package boundaries. One full vet pass adds static the latest locally available compatible patch in that series, selected with
checks beyond the test-time subset. CGO-disabled Linux amd64 and arm64 builds `GOTOOLCHAIN=local`, to build the module-selected ReleaseKit CLI and validate the
cover supported configurations distinct from native race compilation. macOS candidate, provided it meets the current `go.mod` minimum. Review any
and newer-toolchain checks are optional. minimum-version increase under the existing compatibility rules. Prepare
dependencies and build the tool before offline validation; the publication
command is the required validation run, with no separate successful test or CI
run required before it.
The selected profile runs the complete deterministic, offline default suite
once with the race detector and test-time vet disabled. The suite already
includes examples, consumer fixtures, documentation links, and package
boundaries. One full vet pass adds static checks beyond the test-time subset.
CGO-disabled Linux amd64 and arm64 package compilation covers supported
configurations distinct from native race compilation. macOS and newer-toolchain
checks are optional.
Additional gates must address a concrete risk that the existing checks do not Additional gates must address a concrete risk that the existing checks do not
adequately cover. Do not automatically require linting, race testing, module adequately cover. Do not automatically require linting, race testing, module
@@ -172,9 +185,10 @@ expanded platform matrices solely because they are possible. Retain such
checks when their distinct protection justifies their cost. A one-time migration checks when their distinct protection justifies their cost. A one-time migration
check must not silently become a permanent release requirement. check must not silently become a permanent release requirement.
The selected Go commands use readonly module mode with `GOPROXY=off`; acquire ReleaseKit runs its selected Go commands with readonly module mode and
the baseline toolchain and dependencies before validation. Formatting and `GOPROXY=off`; acquire dependencies and build the tool before candidate
whitespace remain ordinary development checks in `scripts/check.sh`. validation. Formatting and whitespace remain ordinary development checks in
`scripts/check.sh`.
Review module tidiness when dependencies change, not as a release gate. Review module tidiness when dependencies change, not as a release gate.
Release tests must not require real credentials, mutable application services, Release tests must not require real credentials, mutable application services,
@@ -206,16 +220,19 @@ Automate the checks needed to publish the intended source under a fresh version:
authoritative remote; authoritative remote;
- the worktree and index are clean on the primary release branch; - the worktree and index are clean on the primary release branch;
- the source being published is the exact candidate that passed validation, - the source being published is the exact candidate that passed validation,
including its matching release note; including its matching release note H1;
- the remote primary branch can be advanced to that candidate without - the remote primary branch can be advanced to that candidate without
discarding remote history, and is published before the tag; and discarding remote history, and is published before the tag; and
- the tag identifies the validated candidate and only the intended refs are - the tag identifies the validated candidate and only the intended refs are
published. published.
ConfigKit also checks that `origin` has exactly the authoritative fetch and ReleaseKit checks that `origin`'s effective push URL exactly matches the
push destination, including configured push URLs. The command checks the authoritative URL before candidate validation. This does not assert the
candidate and unused version again after validation, and checks local state configured fetch URL or require the release-note H1 to be the first line; the
before creating the tag. Ignored local files do not block publication. required `# ConfigKit <version>` first-line format remains a content rule. The
command checks the candidate and unused version again after validation, and
checks local state before creating the tag. Ignored local files do not block
publication.
Fetch the authoritative branch and tag state as needed for these checks. Fetch the authoritative branch and tag state as needed for these checks.
Do not force branch or tag updates to bypass a failed guard. Publish explicit Do not force branch or tag updates to bypass a failed guard. Publish explicit

View File

@@ -62,7 +62,7 @@ Completion evidence: the profile is valid JSON, the focused test and ordinary
Go suite pass, and review shows only the selected gates and no binary or hosted Go suite pass, and review shows only the selected gates and no binary or hosted
delivery configuration. delivery configuration.
## Stage 3: Align release policy with the adopted workflow ## Stage 3: Align release policy with the adopted workflow — Complete
1. Revise [the release policy](../policy/release.md) so candidate preparation 1. Revise [the release policy](../policy/release.md) so candidate preparation
explicitly publishes the committed candidate to authoritative `main` explicitly publishes the committed candidate to authoritative `main`