一键导入
release
Release all kioku packages to Hackage following PVP
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Release all kioku packages to Hackage following PVP
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | release |
| description | Release all kioku packages to Hackage following PVP |
| argument-hint | [major|minor|patch] |
| disable-model-invocation | true |
| allowed-tools | Read, Bash, Edit, Glob, Grep, Write, AskUserQuestion |
Release every kioku package to Hackage under a single shared version.
All five packages share the same version number and are released together. A single annotated git tag v<version> marks each release, and one GitHub release is cut per tag.
The Haskell PVP version format is A.B.C.D:
A.B — major: breaking API changes (removed/renamed exports, changed types, changed semantics)C — minor: backwards-compatible API additions (new exports, new modules, new instances)D — patch: bug fixes, docs, internal-only changes, performance improvementsPublish in this order. Later packages depend on earlier ones, so an upstream failure blocks everything downstream.
kioku-api/ — wire types, identifiers, prelude. No internal deps.kioku-migrations/ — pg-migrate component + test-support library. No internal deps.kioku-core/ — memory/session/recall/distillation runtime. Library depends on kioku-api; its test-suite depends on kioku-migrations:test-support, which is why kioku-migrations must be on Hackage first.kioku-cli/ — library + kioku executable. Depends on kioku-api, kioku-core.kioku-migrate/ — kioku-migrate executable, the migration entry point. Depends on kioku-core, kioku-migrations.kioku-cli and kioku-migrate do not depend on each other; either may go last.
Everything in cabal.project is released. There are no example, benchmark, or test-only packages to exclude. If a new package is added to cabal.project, ask the user whether it is publishable before assuming.
$ARGUMENTS is optional:
major, minor, or patch — forces the bump level.Run this first, before touching versions. These gaps exist in the repo today and cabal check will reject or warn on upload. Fix any that are still outstanding; skip the ones already done.
a. LICENSE files. Every cabal declares license: BSD-3-Clause, but no LICENSE file exists. For each package directory, ensure a BSD-3-Clause LICENSE file is present (copyright 2026 Nadeem Bitar) and that the cabal file has:
license-file: LICENSE
b. Repository metadata. Each cabal should carry:
homepage: https://github.com/shinzui/kioku
bug-reports: https://github.com/shinzui/kioku/issues
source-repository head
type: git
location: https://github.com/shinzui/kioku.git
For the multi-package repo, add subdir: <pkg-dir> to the source-repository head stanza of each package.
c. Internal dependency bounds. Internal deps are currently declared without bounds (bare , kioku-api). Hackage requires upper bounds. Every internal dep must carry a PVP bound matching the release version — see step 4b for the full list of sites.
d. Changelogs. Only kioku-migrations/CHANGELOG.md exists (it has an Unreleased section). The other four packages need a CHANGELOG.md, plus extra-doc-files: CHANGELOG.md in their cabal file. A root CHANGELOG.md should also exist for the GitHub release notes.
Report what you fixed and confirm with the user before continuing.
v*: git tag --list 'v*' --sort=-v:refname | head -1.git log --oneline as the change set and default the release version to the current cabal version (0.1.0.0) rather than bumping — confirm this with the user.git log --oneline <last-tag>..HEAD. If there are no commits since the tag, tell the user there is nothing to release and stop.Present a summary:
git diff --stat <last-tag>..HEAD -- kioku-*/)Rules:
$ARGUMENTS is major, minor, or patch, use that bump level.feat!:, fix!:, or a BREAKING CHANGE: footer → majorfeat: → minorfix:, docs:, refactor:, chore:, test:, perf: → patchIncrement:
B, reset C and D to 0 (0.2.0.1 → 0.3.0.0)C, reset D to 0 (0.2.0.1 → 0.2.1.0)D (0.2.0.1 → 0.2.0.2)Present the proposed bump and the reasoning to the user, and get explicit confirmation before proceeding.
Set version: <new-version> in all five cabal files:
kioku-api/kioku-api.cabalkioku-migrations/kioku-migrations.cabalkioku-core/kioku-core.cabalkioku-cli/kioku-cli.cabalkioku-migrate/kioku-migrate.cabalSet every internal dep to ^>=<new-version>. All the sites, by file and stanza:
| File | Stanza | Internal deps to bound |
|---|---|---|
kioku-core.cabal | library | kioku-api |
kioku-core.cabal | test-suite kioku-test | kioku-api, kioku-core, kioku-migrations:test-support |
kioku-migrations.cabal | library test-support | kioku-migrations |
kioku-migrations.cabal | test-suite kioku-migrations-test | kioku-migrations, kioku-migrations:test-support |
kioku-cli.cabal | library | kioku-api, kioku-core |
kioku-cli.cabal | executable kioku | kioku-cli |
kioku-cli.cabal | test-suite kioku-cli-test | kioku-api, kioku-cli, kioku-core |
kioku-migrate.cabal | executable kioku-migrate | kioku-core, kioku-migrations |
Grep to confirm nothing was missed — no bare internal dep should remain:
grep -rnE '^\s*,\s*kioku-(api|core|cli|migrations|migrate)\s*$' kioku-*/*.cabal
For each package's CHANGELOG.md, add a section for the new version above previous entries, dated today in YYYY-MM-DD:
## <version> — <YYYY-MM-DD>
Unreleased section into the new version section. (kioku-migrations/CHANGELOG.md currently has a populated Unreleased section — do not lose it.)CHANGELOG.md with a combined summary for the release.Show the user all changes — version bumps, dependency bounds, changelog entries — for review before committing.
Run every gate. All four are mandatory.
nix fmt # treefmt: fourmolu, cabal-fmt, nixpkgs-fmt
cabal build all
cabal test all
nix flake check
Notes:
cabal test all needs a live Postgres. The test suites spin up ephemeral databases via kioku-migrations:test-support. The dev shell's process-compose provides Postgres; if the tests fail to connect, start it (process-compose up -d, or just create-database for a fresh dev DB) and re-run. Do not interpret a connection failure as a passing suite.nix flake check only sees git-tracked files. Any newly created file (LICENSE, new CHANGELOG.md) must be git add-ed before Nix evaluation will pick it up.checks / devShells / formatter only — there is no packages.default, so nix flake check is the gate, not nix build..cabal, CHANGELOG.md, and any new LICENSE files.chore(release): <new-version>. The body should summarize what's in the release and justify the chosen bump level.git tag -a v<version> -m "Release <version>"git push && git push --tagsThe commit and tag are created only after the user approves the changes from step 4.
For each package, in order — kioku-api → kioku-migrations → kioku-core → kioku-cli → kioku-migrate:
cd <pkg-dir>cabal check — verify no packaging issues.cabal sdist, then cabal upload --publish <tarball-path>.cabal haddock --haddock-for-hackage --haddock-hyperlink-source --haddock-quickjump, then cabal upload --publish --documentation <docs-tarball-path>.If an upload fails, stop. Do not upload any package that depends on the one that failed — a dependent published against an absent dependency is broken on Hackage and cannot be withdrawn.
After all uploads succeed, present a summary:
| Package | Version | Hackage URL |
|---|---|---|
| kioku-api | X.Y.Z.W | https://hackage.haskell.org/package/kioku-api-X.Y.Z.W |
| kioku-migrations | X.Y.Z.W | https://hackage.haskell.org/package/kioku-migrations-X.Y.Z.W |
| kioku-core | X.Y.Z.W | https://hackage.haskell.org/package/kioku-core-X.Y.Z.W |
| kioku-cli | X.Y.Z.W | https://hackage.haskell.org/package/kioku-cli-X.Y.Z.W |
| kioku-migrate | X.Y.Z.W | https://hackage.haskell.org/package/kioku-migrate-X.Y.Z.W |
After all Hackage uploads succeed (gh is authed against shinzui/kioku):
gh release create v<version> --title "v<version>" --notes "$(cat <<'EOF'
## Packages
| Package | Hackage |
|---------|---------|
| kioku-api | https://hackage.haskell.org/package/kioku-api-X.Y.Z.W |
| kioku-migrations | https://hackage.haskell.org/package/kioku-migrations-X.Y.Z.W |
| kioku-core | https://hackage.haskell.org/package/kioku-core-X.Y.Z.W |
| kioku-cli | https://hackage.haskell.org/package/kioku-cli-X.Y.Z.W |
| kioku-migrate | https://hackage.haskell.org/package/kioku-migrate-X.Y.Z.W |
## What's Changed
<the root CHANGELOG.md entries for this version>
EOF
)"
Report the GitHub release URL when done.
kioku-api → kioku-migrations → kioku-core → kioku-cli → kioku-migrate.cabal check, the test suites, or nix flake check.nix fmt before committing, and git add new files before nix flake check.