← the Atlas

kolu Release Runbook

reference · seedling ·implemented ·

Cut a release with `/release X.Y.Z` — tag master, promote the Unreleased changelog entry, GitHub release. The changelog is a website content collection the agent appends to per PR; kolu.dev renders it Unreleased-and-all.

Model — tag-on-master, rolling:

The changelog is website content

website/src/content/changelog/
  unreleased.mdx     ← agent appends here, every user-facing PR
  1-0-0.mdx          ← stamped { version: "1.0.0", date: 2026-06-08 } at release
---
version: Unreleased
---
### Added
- Compose surfaces as siblings — one canvas, no surface-app seams. ([#1201](https://github.com/juspay/kolu/pull/1201))
### Fixed
- Dock pings stop pulsing once you switch to the row. ([#1198](https://github.com/juspay/kolu/pull/1198))
### Heads-up
- `KOLU_STATE_DIR` moved under `$XDG_CONFIG_HOME/kolu`; existing sessions auto-migrate.

Keeping it filled — two checkpoints, no CI gate

kolu.dev renders it — Unreleased included

Cutting a release

Run /release X.Y.Z (the /release skill). It does the what below and asks (via AskUserQuestion) where a call is yours; everything is read-only until the explicit go/no-go.

Phases 1–3 are read-only; nothing is written before the go/no-go.

  1. Settle the version (editorial — .0 milestone, normal bump otherwise; valid semver X.Y.Z) and date.
  2. Preflight — on master, clean, synced, CI green on HEAD (the base the release commit builds on). Refuse otherwise.
  3. Confirm — show the exact notes + version bump + tag, then go/no-go. No leaves the tree untouched.
  4. Apply — promote unreleased.mdx<version>.mdx ({ version, date }), consolidating any duplicate ### headings merge=union left behind into one section per heading + fresh empty Unreleased; set packages/server/package.json version (the single source — Nix + runtime both read it; nothing else to bump); commit (release X.Y.Z) + push master. No tag yet.
  5. Wait for CI to go green on the pushed release commit — never tag a commit CI hasn’t passed.
  6. Tag & publish — annotated tag vX.Y.Z on the green commit, push, gh release create.
  7. Verify — tag on master, release live, kolu.dev/changelog updated; pin is nix run github:juspay/kolu/vX.Y.Z.

Wiring


Status: implemented. Surface + rail stamp + /release skill landed in #1208 . First run done: /release 1.0.0 cut v1.0.0 on 2026-06-08 (tag v1.0.0, GitHub release, kolu.dev/changelog).