# Local candidate check Use `releasekit.Check` to verify a candidate against the current local repository state: ```go result, err := releasekit.Check(ctx, releasekit.ReleaseRequest{ RepositoryDir: "/work/project", Product: "Example", Version: "v1.2.3", Validate: func(ctx context.Context, candidate releasekit.Candidate) error { return runProjectChecks(ctx, candidate.RepositoryDir) }, }) if err != nil { return err } fmt.Println(result.Version, result.Commit) ``` The repository must have a clean index and worktree on `main`, and the selected version must be stable `vMAJOR.MINOR.PATCH`. The committed `docs/releases/.md` note must have a first Markdown H1 containing the product name and exact version as complete title elements. No local tag with that version may already exist. The callback receives the captured repository, commit, and version. ReleaseKit calls it once. When omitted, ReleaseKit runs the offline Go test command. The check revalidates the branch, commit, and cleanliness after validation. A successful check is evidence about the local candidate only. It does not check whether a remote branch or tag is available and does not create a tag. The [`check` command](../cli.md) reads the product and optional validation commands from `releasekit.json`.