Align module release documentation with implemented behavior

This commit is contained in:
2026-10-10 14:36:56 +00:00
parent 8112a001d2
commit 6b0b8ce6de
11 changed files with 96 additions and 48 deletions

View File

@@ -55,7 +55,10 @@ type ReleaseRequest struct {
} }
// ValidationSpec selects optional shared validation checks. Its zero value // ValidationSpec selects optional shared validation checks. Its zero value
// preserves the current validation behavior. // preserves the current validation behavior. File checks inspect the selected
// module and shared-file inputs. Independent nested modules form automatic
// input boundaries; vendored files remain included. Referenced destinations
// remain available for targeted inspection without expanding the input set.
type ValidationSpec struct { type ValidationSpec struct {
// SharedFiles adds repository-relative committed files to optional file // SharedFiles adds repository-relative committed files to optional file
// checks. Nil selects the optional root COPYRIGHT, LICENSE, and // checks. Nil selects the optional root COPYRIGHT, LICENSE, and
@@ -103,7 +106,8 @@ type ModuleDistributionValidationSpec struct {
// nested paths and symlink entries. It does not select Go's test workspace. // nested paths and symlink entries. It does not select Go's test workspace.
WorkspaceFiles bool WorkspaceFiles bool
// LocalReplacements rejects filesystem replacements in committed go.mod // LocalReplacements rejects filesystem replacements in committed go.mod
// declarations, including nested modules. It does not select Go's workspace. // declarations in the selected inputs, including vendor and explicit shared
// files. It does not select Go's workspace.
LocalReplacements bool LocalReplacements bool
} }
@@ -139,7 +143,7 @@ type GoValidationSpec struct {
// files after formatting. Its zero value disables that distribution check and // files after formatting. Its zero value disables that distribution check and
// does not change Go's workspace environment. // does not change Go's workspace environment.
// Validation.ModuleDistribution.LocalReplacements parses committed go.mod // Validation.ModuleDistribution.LocalReplacements parses committed go.mod
// declarations, including nested modules, and rejects filesystem replacements // declarations in the selected inputs and rejects filesystem replacements
// after workspace-file inspection. Its zero value disables that check. // after workspace-file inspection. Its zero value disables that check.
// Validation.FileSize checks each selected committed blob after module // Validation.FileSize checks each selected committed blob after module
// distribution checks. Its nil value disables size checks; an empty object // distribution checks. Its nil value disables size checks; an empty object

View File

@@ -47,11 +47,13 @@ mode with cgo disabled. This check produces no artifacts and does not execute
target binaries. Compilation failures use the `package-compile` identity and target binaries. Compilation failures use the `package-compile` identity and
show the selected target. When `validation.go_format` is true, `check` examines show the selected target. When `validation.go_format` is true, `check` examines
regular committed Go files with the Go formatter after tests, vet, and package regular committed Go files with the Go formatter after tests, vet, and package
compilation. It includes vendor and nested-module source, ignores the worktree compilation. It uses the selected module and shared-file inputs, including
vendored source, and ignores the worktree
and symlink blobs, and reports unformatted paths as `go-format` without and symlink blobs, and reports unformatted paths as `go-format` without
modifying files. When `validation.module_distribution.workspace_files` is true, modifying files. When `validation.module_distribution.workspace_files` is true,
`check` reports committed `go.work` and `go.work.sum` blobs, including nested `check` reports committed `go.work` and `go.work.sum` blobs in those inputs,
and symlink entries, as `workspace-files`. This inspection is independent of including symlink entries, as `workspace-files`. Automatic file inputs stop at
independent nested modules. This inspection is independent of
`GOWORK` and ignores uncommitted files. Any artifact build selected by the `GOWORK` and ignores uncommitted files. Any artifact build selected by the
separate `build` setting runs after shared validation and configured checks. separate `build` setting runs after shared validation and configured checks.
When `validation.markdown` is a non-null object, `check` checks committed local When `validation.markdown` is a non-null object, `check` checks committed local
@@ -107,7 +109,8 @@ go.work.sum paths as `workspace-files`. Formatting failures are reported as
When `validation.module_distribution.local_replacements` is true, the command When `validation.module_distribution.local_replacements` is true, the command
parses committed `go.mod` declarations in the selected module after parses committed `go.mod` declarations in the selected module after
workspace-file inspection. Vendored contents remain in scope, while workspace-file inspection. Vendored contents remain in scope, while
independently released nested modules are excluded. Filesystem replacements use automatic inputs stop at independently released nested modules. Explicit shared
files join the file-check inputs without expanding Go scope. Filesystem replacements use
the `local-replacements` identity and include the declaration path, source line, the `local-replacements` identity and include the declaration path, source line,
and target; versioned replacements are permitted. Committed module symlinks are and target; versioned replacements are permitted. Committed module symlinks are
resolved within the candidate, regardless of `GOWORK`. resolved within the candidate, regardless of `GOWORK`.

View File

@@ -44,7 +44,10 @@ shared files. An explicit list replaces those defaults. Each explicit file must
exist in the candidate, even when no file checks are enabled. Paths are literal, exist in the candidate, even when no file checks are enabled. Paths are literal,
repository-relative files with no glob semantics and may select a file outside repository-relative files with no glob semantics and may select a file outside
the chosen module. ReleaseKit deduplicates them with module inputs by path. This the chosen module. ReleaseKit deduplicates them with module inputs by path. This
field does not enable any checks. field does not enable any checks or expand Go test, vet, or package-compilation
scope. Automatic file inputs stop at independent nested-module boundaries;
vendored files remain included. Reference inspection can read destinations
elsewhere in the captured repository without adding them to those inputs.
`validation.go.race` enables the race detector for the single standard Go test `validation.go.race` enables the race detector for the single standard Go test
suite. `validation.go.full_vet` runs a separate native `go vet` pass after that suite. `validation.go.full_vet` runs a separate native `go vet` pass after that
suite succeeds; ReleaseKit disables test-time vet for that suite to avoid suite succeeds; ReleaseKit disables test-time vet for that suite to avoid
@@ -57,7 +60,8 @@ executable, or create an artifact manifest. Omitted or empty `compile_targets`
selects no package-compilation pass. When `full_vet` is omitted or false, the selects no package-compilation pass. When `full_vet` is omitted or false, the
test command keeps its existing vet behavior. These settings are independent. test command keeps its existing vet behavior. These settings are independent.
`validation.go_format` checks regular committed Go blobs with the Go formatter `validation.go_format` checks regular committed Go blobs with the Go formatter
used to build ReleaseKit. It includes vendor and nested-module source, ignores used to build ReleaseKit. It uses the selected file inputs, including vendor and
explicit shared files, and ignores
symlink blobs and the worktree, and reports every selected path whose bytes symlink blobs and the worktree, and reports every selected path whose bytes
change under formatting. It never writes formatted bytes back. Omitted or false change under formatting. It never writes formatted bytes back. Omitted or false
disables the check. It runs after tests, selected full vet, and selected package disables the check. It runs after tests, selected full vet, and selected package
@@ -92,7 +96,8 @@ of `GOWORK`; it does not select or change the workspace used by Go commands,
and vendored contents remain in scope. Omitted or false disables it. When and vendored contents remain in scope. Omitted or false disables it. When
`validation.module_distribution.local_replacements` is true, it parses the `validation.module_distribution.local_replacements` is true, it parses the
selected module's committed `go.mod` declarations. Vendored contents remain in selected module's committed `go.mod` declarations. Vendored contents remain in
scope, while independently released nested modules are excluded. It reports scope; an explicit shared-file selection can include an individual declaration
from another module. It reports
`replace` directives whose replacement has no version. These filesystem `replace` directives whose replacement has no version. These filesystem
replacements include relative and absolute paths; versioned module replacements replacements include relative and absolute paths; versioned module replacements
are permitted. Committed `go.mod` symlinks are resolved within the candidate, are permitted. Committed `go.mod` symlinks are resolved within the candidate,

View File

@@ -33,10 +33,11 @@ example, both `integrations/core/v2` and `integrations/core` can declare
`<module>/docs/releases/<version>.md`. `<module>/docs/releases/<version>.md`.
The repository must have a clean index and worktree on `main`, and the selected The repository must have a clean index and worktree on `main`, and the selected
version must be stable `vMAJOR.MINOR.PATCH`. The committed version must be stable `vMAJOR.MINOR.PATCH`. The module-local committed
`docs/releases/<version>.md` note must have a first Markdown H1 containing the `<module>/docs/releases/<version>.md` note must have a first Markdown H1 containing the
product name and exact version as complete title elements. No local tag with product name and exact version as complete title elements. No local tag with
that version may already exist. the derived complete tag may already exist. Different modules may use the same
semantic version with distinct notes and tags.
ReleaseKit runs one `go test -mod=readonly -count=1 ./...` suite from the ReleaseKit runs one `go test -mod=readonly -count=1 ./...` suite from the
selected module directory with the available compatible local Go toolchain. selected module directory with the available compatible local Go toolchain.
@@ -49,20 +50,22 @@ complete target pair after tests and vet. Package compilation uses
failures use the `package-compile` identity and include the target. The zero failures use the `package-compile` identity and include the target. The zero
values retain the ordinary native test behavior and select no compilation. values retain the ordinary native test behavior and select no compilation.
Set `Validation.GoFormat` to check committed regular Go files using the Go Set `Validation.GoFormat` to check committed regular Go files using the Go
formatter built into ReleaseKit. It includes vendor and nested-module source, formatter built into ReleaseKit. It uses the selected file inputs, including
vendor and explicit shared files, and
ignores symlink blobs and worktree changes, and reports unformatted paths as ignores symlink blobs and worktree changes, and reports unformatted paths as
`go-format` without rewriting files. Its zero value disables the check; it runs `go-format` without rewriting files. Its zero value disables the check; it runs
after tests, selected vet, and package compilation, before `AdditionalChecks`. after tests, selected vet, and package compilation, before `AdditionalChecks`.
Set `Validation.ModuleDistribution.WorkspaceFiles` to reject committed Set `Validation.ModuleDistribution.WorkspaceFiles` to reject committed
`go.work` and `go.work.sum` files in the selected module inputs, including `go.work` and `go.work.sum` files in the selected module inputs, including
nested and symlink entries. It examines the captured candidate even when symlink entries. It examines the captured candidate even when
`GOWORK=off`, ignores uncommitted files, and does not change Go test workspace `GOWORK=off`, ignores uncommitted files, and does not change Go test workspace
selection; vendored contents remain in scope. The zero value disables the check; selection; vendored contents remain in scope. The zero value disables the check;
failures use `workspace-files`. failures use `workspace-files`.
Set `Validation.ModuleDistribution.LocalReplacements` independently to parse Set `Validation.ModuleDistribution.LocalReplacements` independently to parse
the selected module's committed `go.mod` declarations. Vendored contents remain the selected module's committed `go.mod` declarations. Vendored contents remain
in scope, while independently released nested modules are excluded. It reports in scope; automatic inputs stop at independently released nested modules. An
explicit shared-file selection can include another module's declaration. It reports
filesystem `replace` directives with their source path, line, and target as filesystem `replace` directives with their source path, line, and target as
`local-replacements`; versioned replacements are `local-replacements`; versioned replacements are
permitted. Committed module symlinks are resolved within the candidate. Parse permitted. Committed module symlinks are resolved within the candidate. Parse
@@ -103,6 +106,12 @@ Explicit files replace those defaults, must exist even when file checks are
disabled, and may be in another module. Combined inputs are deduplicated by disabled, and may be in another module. Combined inputs are deduplicated by
repository-relative path. repository-relative path.
Automatic file inputs stop at independent nested-module boundaries, including
fixture modules. Vendored files remain included. Shared selection affects file
inputs only; Go validation retains the selected module's scope. Reference reads
can inspect destinations elsewhere in the captured repository without adding
those destinations to the input set.
It does not download a different toolchain automatically. If race prerequisites It does not download a different toolchain automatically. If race prerequisites
are unavailable, the `go-test` check fails rather than being skipped; a selected are unavailable, the `go-test` check fails rather than being skipped; a selected
full-vet failure is reported as `go-vet`. The suite uses the Go host target, full-vet failure is reported as `go-vet`. The suite uses the Go host target,
@@ -123,10 +132,11 @@ commands from `releasekit.json`.
## Publishing the source tag ## Publishing the source tag
`releasekit.Publish` uses the same request and validation order: the standard `releasekit.Publish` uses the same request and validation order: the standard
suite runs first, followed by `AdditionalChecks` when supplied. It then performs suite runs first, followed by `AdditionalChecks` when supplied. It surrounds
authoritative remote checks, annotated-tag creation, and an exact tag push. The validation with authoritative remote guards before annotated-tag creation and
an exact tag push. The
selected remote must publish `main` at the captured commit and must not already selected remote must publish `main` at the captured commit and must not already
contain the selected version tag. A successful result includes the endpoint and contain the selected complete tag. A successful result includes the endpoint and
tag object ID. Publication states distinguish an unattempted push, a tag that tag object ID. Publication states distinguish an unattempted push, a tag that
was created locally but not pushed, a successful push, a guard conflict, and an was created locally but not pushed, a successful push, a guard conflict, and an
unresolved push error. See the [publication guide](publish.md) for the complete unresolved push error. See the [publication guide](publish.md) for the complete

View File

@@ -14,7 +14,7 @@ result, err := releasekit.Publish(ctx, releasekit.ReleaseRequest{
Go: releasekit.GoValidationSpec{Race: true, FullVet: true}, Go: releasekit.GoValidationSpec{Race: true, FullVet: true},
}, },
AdditionalChecks: func(ctx context.Context, candidate releasekit.Candidate) error { AdditionalChecks: func(ctx context.Context, candidate releasekit.Candidate) error {
return runProjectChecks(ctx, candidate.RepositoryDir) return runProjectChecks(ctx, candidate.ModuleDir)
}, },
}) })
if err != nil { if err != nil {
@@ -63,21 +63,23 @@ does not execute target binaries. A failure is reported as `package-compile`
with the selected target and prevents tag creation. with the selected target and prevents tag creation.
Set `Validation.GoFormat` to check committed regular Go source using the Go Set `Validation.GoFormat` to check committed regular Go source using the Go
formatter built into ReleaseKit. It includes vendor and nested modules, ignores formatter built into ReleaseKit. It uses the selected file inputs, including
vendor and explicit shared files, and ignores
worktree changes and symlink blobs, and reports unformatted paths as worktree changes and symlink blobs, and reports unformatted paths as
`go-format` without changing files. The default is disabled. The check follows `go-format` without changing files. The default is disabled. The check follows
tests, selected vet, and package compilation, and a failure stops publication tests, selected vet, and package compilation, and a failure stops publication
before product checks or tag creation. before product checks or tag creation.
Set `Validation.ModuleDistribution.WorkspaceFiles` to reject committed Set `Validation.ModuleDistribution.WorkspaceFiles` to reject committed
`go.work` and `go.work.sum` blobs, including nested paths and symlink entries. `go.work` and `go.work.sum` blobs in the selected inputs, including symlink entries.
The rule reads the captured candidate regardless of `GOWORK`; uncommitted files The rule reads the captured candidate regardless of `GOWORK`; uncommitted files
are ignored, and Go workspace selection and vendor behavior are unchanged. Its are ignored, and Go workspace selection and vendor behavior are unchanged. Its
zero value disables the check. Findings use `workspace-files` and stop zero value disables the check. Findings use `workspace-files` and stop
publication before product checks or tag creation. publication before product checks or tag creation.
Set `Validation.ModuleDistribution.LocalReplacements` independently to parse Set `Validation.ModuleDistribution.LocalReplacements` independently to parse
selected module's committed `go.mod` declarations. Vendored contents remain in selected module's committed `go.mod` declarations. Vendored contents remain in
scope, while independently released nested modules are excluded. Filesystem scope; automatic inputs stop at independently released nested modules. Explicit
shared files can include another module's declaration. Filesystem
`replace` directives are reported with their source path, line, and target as `replace` directives are reported with their source path, line, and target as
`local-replacements`; versioned replacements are `local-replacements`; versioned replacements are
permitted. Committed module symlinks are resolved within the candidate, and permitted. Committed module symlinks are resolved within the candidate, and

View File

@@ -22,10 +22,12 @@ declared module stored at `integrations/core` derives the same tag. ReleaseKit
removes a final physical `/v2` directory from the tag prefix only when the removes a final physical `/v2` directory from the tag prefix only when the
module declaration has that `/v2` suffix. A module-local note stays at module declaration has that `/v2` suffix. A module-local note stays at
`<module>/docs/releases/<version>.md`, including a physical `/v2` directory. `<module>/docs/releases/<version>.md`, including a physical `/v2` directory.
Shared license files remain at the repository root. Use the complete derived The default shared validation convention uses repository-root `COPYRIGHT`,
tag as the immutable source ref in note links, with paths rooted at the `LICENSE`, and `docs/oss/attribution.md` when present. Consumers own their license
repository; license footer links target the root `COPYRIGHT`, `LICENSE`, and layout and release-note links. Use the complete derived tag as the immutable
`docs/oss/attribution.md` files. The client first reads source ref and the actual repository-relative file paths in those links.
Shared-file selection controls validation inputs; delivery preserves the
committed note and its footer links. The client first reads
`/api/v1/repos/{owner}/{repo}/tags/{tag}` and requires the hosted tag's commit `/api/v1/repos/{owner}/{repo}/tags/{tag}` and requires the hosted tag's commit
SHA to equal the captured source commit. It then reads SHA to equal the captured source commit. It then reads
`/api/v1/repos/{owner}/{repo}/releases/tags/{tag}`. A matching existing page `/api/v1/repos/{owner}/{repo}/releases/tags/{tag}`. A matching existing page

View File

@@ -54,8 +54,10 @@ file.
The operation-local owner snapshots the inherited environment and selected The operation-local owner snapshots the inherited environment and selected
settings file. It reuses the resolved tool across validation and its following settings file. It reuses the resolved tool across validation and its following
build callback while those inputs match, and rediscovers after a consumer build callback while those inputs match. Subsequent Go acquisition rediscovers
callback changes either input. It does not cache settings across operations. settings when a consumer callback changes either input. An unavailable snapshot
disables reuse while discovery follows the Go tool's accepted configuration.
Ownership is operation-local.
Configuration discovery parses JSON from stdout. Stderr is captured separately Configuration discovery parses JSON from stdout. Stderr is captured separately
and included in command-failure diagnostics, so a successful query can emit and included in command-failure diagnostics, so a successful query can emit

View File

@@ -21,7 +21,8 @@ selected target where applicable, and underlying causes. Its
request carries the captured repository directory and commit, output writer, request carries the captured repository directory and commit, output writer,
and internal settings. When selected, the Go-format check loads the candidate and internal settings. When selected, the Go-format check loads the candidate
tree once, reads regular Go blobs from the captured commit, and compares them tree once, reads regular Go blobs from the captured commit, and compares them
with go/format output. It includes vendor and nested-module files, skips with go/format output. It uses the selected inputs, including vendor and explicit
shared files, and skips
symlink blobs, reports all unformatted paths, and stops with a contextual cause symlink blobs, reports all unformatted paths, and stops with a contextual cause
on parse or inspection errors. It runs before product checks and build callbacks. on parse or inspection errors. It runs before product checks and build callbacks.
`Request.ReadCandidateTree` lets selected file checks request candidate `Request.ReadCandidateTree` lets selected file checks request candidate
@@ -30,7 +31,7 @@ contents; the Go-only path does not enumerate the tree.
## Selected validation inputs ## Selected validation inputs
`CandidateTree` keeps the full committed repository lookup separate from the `CandidateTree` keeps the full committed repository lookup separate from the
ordered file input set. The selected module's committed regular-file inputs ordered file input set. The selected module's committed inputs
exclude independently released nested modules, while vendored contents stay exclude independently released nested modules, while vendored contents stay
in scope. Selection indexes boundary directories once and checks each entry's in scope. Selection indexes boundary directories once and checks each entry's
ancestors, so unrelated boundaries are not scanned for each file. The ancestors, so unrelated boundaries are not scanned for each file. The
@@ -48,8 +49,8 @@ The workspace-file check uses that same candidate inventory and reports blob
entries named go.work or go.work.sum, including nested paths and symlink blobs. entries named go.work or go.work.sum, including nested paths and symlink blobs.
It does not read workspace contents or depend on the workspace selected for Go It does not read workspace contents or depend on the workspace selected for Go
commands. commands.
The local-replacement check parses every committed go.mod blob with The local-replacement check parses selected go.mod blobs with
`golang.org/x/mod/modfile`, including nested modules and vendor declarations. `golang.org/x/mod/modfile`, including vendor and explicitly shared declarations.
It follows committed symlink declarations through the captured tree and fails It follows committed symlink declarations through the captured tree and fails
with an inspection cause when their selected contents are unavailable. A with an inspection cause when their selected contents are unavailable. A
replacement with no parsed version is reported with its go.mod path, line, replacement with no parsed version is reported with its go.mod path, line,
@@ -167,7 +168,8 @@ directories, missing paths, checkout boundaries, submodule paths, and symlink
cycles; the caller selects which observations fail validation or are reported cycles; the caller selects which observations fail validation or are reported
as out of scope. as out of scope.
Resolution walks committed components and symlink targets in order. Active The shared Git path resolver walks committed components and symlink targets
in order using the tree's indexed metadata and lazy symlink reader. Active
symlink expansion detects cycles, and traversal honors cancellation. Absolute symlink expansion detects cycles, and traversal honors cancellation. Absolute
destinations and symlink targets within the repository directory map back to destinations and symlink targets within the repository directory map back to
candidate-relative paths; existence still comes from committed entries. candidate-relative paths; existence still comes from committed entries.

View File

@@ -2,6 +2,10 @@
Status: complete; all 15 stages implemented and locally verified. Status: complete; all 15 stages implemented and locally verified.
The subsequent [remediation review](remediation.md) records post-implementation
findings, corrections, and their verification. The baseline and stage accounts
below retain the implementation sequence.
## Objective and authority ## Objective and authority
Implement the complete target in the [module-release roadmap](module-releases.md), Implement the complete target in the [module-release roadmap](module-releases.md),

View File

@@ -1,6 +1,7 @@
# Roadmap: release individual Go modules # Roadmap: release individual Go modules
Status: planned feature; scope and ownership decisions resolved. Status: implemented; post-implementation findings and corrections are recorded
in the [remediation review](remediation.md). Release version remains unselected.
## Purpose ## Purpose
@@ -10,14 +11,16 @@ ReleaseKit's API and CLI. CommandKit's core and optional integrations provide th
consumer case. Each invocation should require only module selection, product consumer case. Each invocation should require only module selection, product
settings, and a semantic version, with ReleaseKit owning the common mechanics. settings, and a semantic version, with ReleaseKit owning the common mechanics.
This roadmap defines the target state and its scope and ownership decisions. This roadmap records the feature's target and resolved scope and ownership
The [implementation plan](implementation.md) owns the ordered work from the decisions. The [implementation plan](implementation.md) records the completed
current baseline. This roadmap does not select a ReleaseKit release version. stages; [remediation](remediation.md) records review corrections. Current behavior
belongs in the [consumer guides](../consumers/), [CLI](../cli.md),
[configuration](../config.md), and facade GoDoc.
## Current baseline ## Historical starting baseline
The baseline is ReleaseKit v0.3.0 plus accepted ADR 0005; module selection is Work started from ReleaseKit v0.3.0 plus accepted ADR 0005. At that starting
not implemented. point, module selection was unimplemented and the following baseline applied.
- `ReleaseRequest` selects a repository, product, and version. `Candidate` and - `ReleaseRequest` selects a repository, product, and version. `Candidate` and
`PublicationResult` expose the version without a distinct module or tag name. `PublicationResult` expose the version without a distinct module or tag name.
@@ -33,9 +36,9 @@ not implemented.
consumer Woodpecker template selects `refs/tags/v*` and bootstraps ReleaseKit consumer Woodpecker template selects `refs/tags/v*` and bootstraps ReleaseKit
from repository-root module files. from repository-root module files.
The existing candidate capture, declarative validation, exact-object publication, Candidate capture, declarative validation, exact-object publication, and outcome
and outcome reporting provide the foundation. Scope and identity need to be reporting provided the foundation for carrying scope and identity through all
carried through those paths together. operations.
## Targeted end state ## Targeted end state

View File

@@ -1,7 +1,7 @@
# Remediation: module release implementation review # Remediation: module release implementation review
Status: open findings from review of `90559fe`, compared with planning baseline Status: complete; all eleven findings addressed and verified. The review examined
`dbfae9e`. `90559fe`, compared with planning baseline `dbfae9e`.
## Scope and evidence ## Scope and evidence
@@ -20,7 +20,7 @@ bare repository. No ReleaseKit source or real release refs were changed.
Each issue describes required work and verification. Preserve the selected Each issue describes required work and verification. Preserve the selected
scope, existing error causes, publication/delivery outcomes, facade boundaries, scope, existing error causes, publication/delivery outcomes, facade boundaries,
and clean API cutover. These corrections add no release, live-service, or human and clean API cutover. These corrections add no release, live-service, or human
review gates. Add focused completion markers as issues are resolved. review gates. Each completion record describes the correction and verification.
## Issue 1: Resolve the actual Git repository root before release identity (P1) ## Issue 1: Resolve the actual Git repository root before release identity (P1)
@@ -366,7 +366,18 @@ or new validation policies.
## Issue 11: Reconcile documentation with implemented scope and status (P3) ## Issue 11: Reconcile documentation with implemented scope and status (P3)
Status: open. Category: incomplete documentation adoption and misleading contracts. Status: complete. Category: incomplete documentation adoption and misleading contracts.
**Completion:** Facade GoDoc and canonical API, CLI, configuration, Gitea, and
internal guidance describe selected inputs, full-tag uniqueness, module-local
notes, shared-file scope, committed references, and lazy Go reuse consistently.
The feature roadmap identifies its historical baseline and completed stages,
with this review recording the corrections. Consumer-owned license layouts and
note links are distinguished from optional validation defaults. ReleaseKit's
root release policy and procedure retain their existing requirements. Reviewed
root/nested examples, verified local links/fragments across 37 Markdown documents,
checked example JSON/shell syntax and whitespace, and passed the final complete
offline suite and compiled API/dependency checks.
**Evidence:** **Evidence:**