一键导入
release
Release all packages to Hackage following PVP
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Release all packages to Hackage following PVP
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create, implement, discuss, or update execution plans (ExecPlans) — self-contained design documents that guide a coding agent or novice through delivering a working feature or system change. Use when planning significant work, implementing from a plan, or recording design decisions. TRIGGER when: user wants to plan a feature, follow a plan, or manage ExecPlan documents.
Create and manage master plans that decompose large initiatives into multiple coordinated ExecPlans with dependencies and integration points. TRIGGER when: user wants to plan a large initiative, coordinate multiple exec-plans, or track multi-plan progress.
| name | release |
| description | Release all packages to Hackage following PVP |
| argument-hint | [major|minor|patch] |
| disable-model-invocation | true |
| allowed-tools | Read, Bash, Edit, Glob, Grep, Write, AskUserQuestion |
Release all packages from this multi-package repository to Hackage using a single shared version.
All packages share the same version number and are released together. A single git tag v<version> marks each release.
The packages MUST be published in this order due to inter-package dependencies:
The following packages are NOT released to Hackage:
Note:
shibuya-pgmq-adapter,shibuya-pgmq-example, andshibuya-pgmq-adapter-benchwere split out into theshinzui/shibuya-pgmq-adapterrepository as of 2026-04 (commit 5a66aa1). They release on their own cadence from that repo.
$ARGUMENTS is optional:
major, minor, or patch — specifies the bump level.cabal file (they all share the same version).v* to identify the last release point.git log --oneline <last-tag>..HEAD to list commits since the last release.Present a summary showing:
The Haskell PVP version format is A.B.C.D:
A.B is the major version — bump for breaking API changes (removed/renamed exports, changed types, changed semantics)C is the minor version — bump for backwards-compatible API additions (new exports, new modules, new type class instances)D is the patch version — bump for bug fixes, documentation, internal-only changes, performance improvementsRules:
$ARGUMENTS is major, minor, or patch, use that bump level.Increment the version:
B, reset C and D to 0 (e.g., 0.2.0.1 → 0.3.0.0)C, reset D to 0 (e.g., 0.2.0.1 → 0.2.1.0)D (e.g., 0.2.0.1 → 0.2.0.2)shibuya-core/shibuya-core.cabalshibuya-metrics/shibuya-metrics.cabalshibuya-core cabal version may already have been bumped mid-cycle (e.g. so an external consumer can declare the new lower bound). In that case only shibuya-metrics's cabal version still needs bumping at release time, but verify both are at the target version before committing.shibuya-core dependency bound in shibuya-metrics/shibuya-metrics.cabal (both the library and test-suite sections, if a test-suite exists).shibuya-core ^>=A.B.C.D matching the new version.CHANGELOG.md, add a new section for the new version above any previous entries. Use today's date in YYYY-MM-DD format.CHANGELOG.md, create one with a header and the new version section.CHANGELOG.md (create it if it does not exist).Show the user ALL changes (version bumps, dependency bounds, changelog entries) for review before committing.
nix fmt to ensure code is properly formatted.cabal build all to verify cabal build succeeds.cabal test shibuya-core-test to confirm tests pass before publishing.nix flake check to verify treefmt and pre-commit checks pass.
checks / devShells / formatter (no packages.default), so nix flake check is the appropriate gate; nix build will fail with "does not provide attribute packages..default".git add-ed before nix evaluation will see them, since nix uses the git tree.Skip this step for patch (bug-fix) releases. For minor and major releases, run the benchmark suite and compare against the previous release to catch performance/allocation regressions before publishing. This guards the ~4x-vs-streamly overhead and per-message allocation budget that EP-30/EP-31 established.
The benchmark package is shibuya-core-bench (not released to Hackage; uses tasty-bench, which supports CSV baselines and --fail-if-slower). See shibuya-core-bench/README.md for full details.
Procedure:
Capture a baseline from the previous release tag. Use a detached git worktree so the working tree (with the pending version/changelog edits) stays untouched:
git worktree add /tmp/shibuya-bench-baseline <last-tag>
cabal bench shibuya-core-bench \
--project-dir /tmp/shibuya-bench-baseline \
--benchmark-options="--csv /tmp/shibuya-baseline.csv --stdev 5 --timeout 120"
(If --project-dir is not usable in this setup, cd /tmp/shibuya-bench-baseline and run cabal bench there instead. Prefer a worktree over git stash/checkout so uncommitted release edits are never disturbed.)
Run the current tree against that baseline with a failure threshold. tasty-bench fails the run if any benchmark is slower than the threshold percent:
cabal bench shibuya-core-bench \
--benchmark-options="--baseline /tmp/shibuya-baseline.csv --fail-if-slower 10 --stdev 5 --timeout 120"
Interpret the results:
allocated column — an allocation increase (even if time is within noise) is a regression per EP-30/EP-31 and must be explained.--fail-if-slower 10 gate is deliberately tight. With --stdev 5 the measurement noise floor is roughly ±5%, so a single borderline result (just over 10%) may still be noise. Re-run with a tighter --stdev (e.g. 3) and/or larger --timeout before concluding. Machine load matters — close other apps.Clean up the worktree when done:
git worktree remove /tmp/shibuya-bench-baseline
If there is no previous release tag (first release), note that no baseline comparison is possible and just record the current numbers for future comparison.
.cabal and CHANGELOG.md files.chore(release): <new-version> (project-wide convention — see global CLAUDE.md). The body should summarize what's in the release and why this is the chosen bump.git tag -a v<version> -m "Release <version>"git push && git push --tagsFor EACH package, in dependency order (shibuya-core → shibuya-metrics):
cd <pkg-dir>cabal check to verify no packaging issues.cabal test <pkg> to ensure tests pass (skip for packages without test suites).cabal sdist and then cabal upload --publish <tarball-path> to publish the source distribution.cabal haddock --haddock-for-hackage --haddock-hyperlink-source --haddock-quickjump and then cabal upload --publish --documentation <docs-tarball-path> to publish documentation.The Hackage URLs follow the pattern: https://hackage.haskell.org/package/<pkg>-<version>
After all packages are published, present a summary:
| Package | Version | Hackage URL |
|---|---|---|
| shibuya-core | X.Y.Z.W | https://hackage.haskell.org/package/shibuya-core-X.Y.Z.W |
| shibuya-metrics | X.Y.Z.W | https://hackage.haskell.org/package/shibuya-metrics-X.Y.Z.W |
After all Hackage uploads succeed, create a GitHub release for the tag:
gh release create v<version> --title "v<version>" --notes "$(cat <<'EOF'
## Packages
| Package | Hackage |
|---------|---------|
| shibuya-core | https://hackage.haskell.org/package/shibuya-core-X.Y.Z.W |
| shibuya-metrics | https://hackage.haskell.org/package/shibuya-metrics-X.Y.Z.W |
## What's Changed
<changelog entries for this version from the root CHANGELOG.md>
EOF
)"
CHANGELOG.md entries for the release notes body.cabal check, tests, or nix flake check.minor and major releases, never skip the benchmark regression check (step 5). If a genuine regression is found, stop and get the user's decision before releasing. It is only skipped for patch (bug-fix) releases.nix flake check), stop and report the error rather than continuing.nix fmt before committing to ensure proper formatting.