diff --git a/docs/consumers/guide.md b/docs/consumers/guide.md index 966a35b..0a92102 100644 --- a/docs/consumers/guide.md +++ b/docs/consumers/guide.md @@ -24,9 +24,10 @@ core-only, ConfigKit-only, and composed applications. ## Go compatibility All three modules declare a consumer minimum of Go 1.26.0. The root module also -selects ReleaseKit v0.4.2 as a Go tool, which makes that tool's module graph part -of the root consumer module requirements even though production packages do not -import ReleaseKit. The [release policy](../policy/release.md#consumer-minimum-and-release-toolchain) +selects ReleaseKit v0.8.0 (`go.maximumdirect.net/releasekit`) as a Go tool, which +makes that tool's module graph part of the root consumer module requirements +even though production packages do not import ReleaseKit. The +[release policy](../policy/release.md#consumer-minimum-and-release-toolchain) defines the support assumption. Maintainers use Go 1.26.8 for validation and publication; see the [release procedure](../release.md#release-toolchain). diff --git a/docs/oss/attribution.md b/docs/oss/attribution.md index 002f7d5..a13e56b 100644 --- a/docs/oss/attribution.md +++ b/docs/oss/attribution.md @@ -139,16 +139,16 @@ License and notices: [CC BY-SA 4.0](licenses/CC-BY-SA-4.0.txt) | ## ReleaseKit -Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.2` (selected Go tool; not a runtime import). +Selected module: `go.maximumdirect.net/releasekit` at `v0.8.0` (selected Go tool; not a runtime import). Copyright (C) 2026 Eric Rakestraw SPDX-License-Identifier: LGPL-3.0-or-later License and notices: [LGPL v3.0](../../LICENSE) | -[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/LICENSE). +[LICENSE](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/LICENSE). -[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8). +[Source](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f). ## Goldmark diff --git a/docs/policy/release.md b/docs/policy/release.md index cc7c03d..09c92df 100644 --- a/docs/policy/release.md +++ b/docs/policy/release.md @@ -25,7 +25,7 @@ additional release requirements. CommandKit independently versions three source-only Go modules: the root core, `integrations/ckconfig`, and `integrations/ckprompt`. Standard CLI behavior is exposed by consuming applications; CommandKit does not declare binary -deliverables or a cross-platform build matrix. ReleaseKit v0.4.2 is selected as +deliverables or a cross-platform build matrix. ReleaseKit v0.8.0 is selected as the maintainer publication tool. The [release procedure](../release.md) owns the selected-module workflow, release order, and repository-specific commands; the integration adds no application command family or runtime ReleaseKit diff --git a/docs/release.md b/docs/release.md index effbbdf..ab82598 100644 --- a/docs/release.md +++ b/docs/release.md @@ -15,17 +15,18 @@ release runs only the root module's default suite; it need not run suites for independently released integrations. Use branch `main`, remote `origin`, and expected effective push endpoint -`https://gitea.maximumdirect.net/eric/CommandKit.git`. The selected module profile -enforces the endpoint. The maintainer needs the selected +`ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git`. The selected +module profile enforces the endpoint. The maintainer needs the selected [release toolchain](#release-toolchain), Git push access, and a POSIX shell. This procedure follows the [release policy](policy/release.md); release-note footers follow the [OSS discoverability policy](policy/oss.md#discoverability). -ReleaseKit v0.4.2 owns candidate validation, publication guards, tag creation, -tag publication, and outcome reporting. Its pinned public contracts are the -[CLI reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/cli.md), -[profile reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/config.md), -and [publication guide](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/consumers/publish.md). +ReleaseKit v0.8.0 (`go.maximumdirect.net/releasekit`) owns candidate validation, +publication guards, tag creation, tag publication, and outcome reporting. +Its pinned public contracts are the +[CLI reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/cli.md), +[profile reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/config.md), +and [publication guide](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/consumers/publish.md). The repository selects one default module suite per invocation. The launcher bootstraps the native tool into ignored `.releasekit/` storage and delegates to its `publish` command. @@ -73,7 +74,7 @@ All three release profiles explicitly select the repository-root `COPYRIGHT`, `LICENSE`, and `docs/oss/attribution.md` through `validation.shared_files`. ReleaseKit requires these committed files to exist in the candidate even when no optional file checks are enabled. The list does not enable content checks -or expand Go validation scope; see the pinned [profile reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/b96262eb0ce9c8f2eb3e948a5841db2b799bc91b/docs/config.md). +or expand Go validation scope; see the pinned [profile reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/config.md). Each integration also distributes its own `COPYRIGHT`, `LICENSE`, and `docs/oss/attribution.md`. These module-local materials are separate from the @@ -121,14 +122,41 @@ proxy availability, or downstream installation. ## Completion and ambiguous publication -A successful push to the expected endpoint completes the source release. On an -ambiguous result, use the exact endpoint, full tag, and annotated tag object -reported by that invocation. Confirm endpoint resolution has not changed, then -query only that exact tag ref. Compare the remote annotated tag-object ID with -the reported object: an exact match confirms publication, a different object is -a conflict, successful output without the ref proves absence at that endpoint, +A successful push to the expected endpoint completes the source release. +ReleaseKit also attempts to save private publication evidence under the +repository's Git common directory, shared by linked worktrees. It reports the +saved record path or a recording warning separately from publication status; +a storage failure does not change publication status. Records can contain +credential-bearing endpoints. Retain them privately while recovery is needed +and remove them when their recovery value expires; retention is maintainer-owned. + +On an ambiguous result, use the recovery command printed for that invocation's +saved record. To discover records and explicitly select the matching attempt, +the bootstrapped executable can also be used from the repository root: + +```sh +./.releasekit/bin/releasekit publication-attempts --repo . +./.releasekit/bin/releasekit reconcile --record /absolute/path/to/attempt.json +``` + +Replace the example record path with the saved path for the intended attempt. +Discovery lists local evidence without querying remotes or selecting an attempt. +Reconciliation observes the recorded endpoint, full tag, and tag object without +rerunning candidate validation or changing tags. It distinguishes confirmed +publication, current absence, conflict, and an unresolved observation. Current +absence does not prove that a version was never published. The pinned +[CLI reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/cli.md#recover-a-saved-publication-attempt-or-discover-local-attempts) +owns recovery statuses and structured output; the +[publication guide](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/consumers/publish.md#retain-and-reconcile-publication-evidence) +describes record storage and recovery entry points. + +If no usable record was saved, use the exact endpoint, full tag, and annotated +tag object reported by that invocation. Query only that exact tag ref at the +captured endpoint. An exact tag-object match confirms publication, a different +object is a conflict, successful output without the ref shows current absence, and a failed query leaves the result unresolved. Do not infer the captured -endpoint's state from another remote or a rewritten URL. +endpoint's state from another remote or a rewritten URL. Resolve unknown +publication state before retrying. ReleaseKit may retain a local tag after a failed push. Remove an unpublished local tag only after proving absence at the captured endpoint and confirming diff --git a/go.mod b/go.mod index 23ad351..88f48fd 100644 --- a/go.mod +++ b/go.mod @@ -9,10 +9,10 @@ require ( ) require ( - gitea.maximumdirect.net/eric/ReleaseKit v0.4.2 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/yuin/goldmark/v2 v2.1.6 // indirect + go.maximumdirect.net/releasekit v0.8.0 // indirect golang.org/x/mod v0.40.0 // indirect ) -tool gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit +tool go.maximumdirect.net/releasekit/cmd/releasekit diff --git a/go.sum b/go.sum index 5d955cb..a818484 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -gitea.maximumdirect.net/eric/ReleaseKit v0.4.2 h1:P2eDQ29BgyYqHnaz5MV+vzOk7r3s8py2y9k8JISFtJ0= -gitea.maximumdirect.net/eric/ReleaseKit v0.4.2/go.mod h1:LVodqNQ3OIKv9NBq+fFeyMByd1lHY25YOmmpah/NaNI= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -10,6 +8,8 @@ github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/yuin/goldmark/v2 v2.1.6 h1:igy0q9JcqovoFXFx/XjtU8sHVhcUHavPj2sA3EoKJUE= github.com/yuin/goldmark/v2 v2.1.6/go.mod h1:G6M4/qOFtfn01/o14BU1UR2Lo5N3S9Qo7xCuz/sHjGQ= +go.maximumdirect.net/releasekit v0.8.0 h1:hSaHPbUI7tAhnolfbu7UMj2fvmm9FGBY+jhkygdbxR0= +go.maximumdirect.net/releasekit v0.8.0/go.mod h1:QE4BLrAhVJTzi+/YTcVl21K/qZp9ojRLg5kuoy3Zb44= go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4= go.yaml.in/yaml/v4 v4.0.0-rc.6/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= diff --git a/integrations/ckconfig/releasekit.json b/integrations/ckconfig/releasekit.json index c727dc3..6becb04 100644 --- a/integrations/ckconfig/releasekit.json +++ b/integrations/ckconfig/releasekit.json @@ -2,7 +2,7 @@ "product": "CommandKit ckconfig", "module_dir": "integrations/ckconfig", "remote": "origin", - "expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", + "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git", "validation": { "shared_files": [ "COPYRIGHT", diff --git a/integrations/ckprompt/releasekit.json b/integrations/ckprompt/releasekit.json index 6f43b14..3ddb654 100644 --- a/integrations/ckprompt/releasekit.json +++ b/integrations/ckprompt/releasekit.json @@ -2,7 +2,7 @@ "product": "CommandKit ckprompt", "module_dir": "integrations/ckprompt", "remote": "origin", - "expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", + "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git", "validation": { "shared_files": [ "COPYRIGHT", diff --git a/releasekit.json b/releasekit.json index 81e35eb..314e569 100644 --- a/releasekit.json +++ b/releasekit.json @@ -2,7 +2,7 @@ "product": "CommandKit", "module_dir": ".", "remote": "origin", - "expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", + "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git", "validation": { "shared_files": [ "COPYRIGHT", diff --git a/scripts/release b/scripts/release index 4b43e0a..6231fca 100755 --- a/scripts/release +++ b/scripts/release @@ -40,7 +40,7 @@ GOTOOLCHAIN=local \ go build \ -mod=readonly \ -o "$commandkit_root/.releasekit/bin/releasekit" \ - gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit + go.maximumdirect.net/releasekit/cmd/releasekit GOWORK=off GOTOOLCHAIN=local exec "$commandkit_root/.releasekit/bin/releasekit" publish \ --repo "$commandkit_root" \ diff --git a/scripts/release_test.go b/scripts/release_test.go index 413ffec..aed812a 100644 --- a/scripts/release_test.go +++ b/scripts/release_test.go @@ -17,7 +17,7 @@ import ( ) const ( - releasePackage = "gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit" + releasePackage = "go.maximumdirect.net/releasekit/cmd/releasekit" releaseVersion = "v1.2.3-rc.1+local" )