Skip to content

Releasing

How to cut an Agent Workboard release. A release is a git tag plus a GitHub release; tagging also publishes a container image to GHCR through .github/workflows/publish-image.yml. There is no npm package publish.

Replace X.Y.Z below with the version being released.

Preflight

  • [ ] main is the intended release head.
  • [ ] The worktree is clean.
  • [ ] package.json has the version you are about to tag.
  • [ ] README.md, CONTRIBUTING.md, SECURITY.md, docs/architecture.md, and docs/roadmap.md describe current behavior, especially the local-first boundary.
  • [ ] No local operator data is tracked: .workboard-data/, uploads, screenshots.
bash
git checkout main
git pull --ff-only origin main
git status --short --branch
node -p "require('./package.json').version"
git status --ignored --short .workboard-data

Verification Gate

Run from a clean checkout. Requires the sqlite3 command on PATH for the SQLite persistence tests.

bash
npm ci
npm test
npm run build
npm run test:e2e

If Playwright cannot create test-results/ in a restricted environment, rerun in a normal shell and note the reason in the release notes. Remove generated test-results/ before tagging.

bash
git status --short
git diff --check

Docker Smoke

The supported one-command local run path is Docker Compose.

bash
docker compose up -d --build agent-workboard
bash
curl http://127.0.0.1:8088/api/health

Expected:

json
{ "ok": true, "service": "agent-workboard" }
bash
docker compose down

Release Notes

Write the release body against the actual commit range. Cover:

  • Highlights, described in terms of what an operator or agent can now do.
  • Verification actually run (npm test, npm run build, npm run test:e2e, Docker smoke).
  • Breaking changes to the HTTP API, MCP tool schemas, stored data shape, or environment variables.
  • Known limitations. At minimum, restate that the board is local-first and unauthenticated by default, that operators own their own backups of .workboard-data/, and that there is no hosted, RBAC, SSO, or audit-export model.

Screenshots are optional. If you attach them, capture from http://127.0.0.1:8088 after the Docker smoke passes, and store them outside the repository unless the release deliberately adds media assets.

Tag And Publish

Only tag after the verification gate and Docker smoke pass and the notes are written.

bash
git checkout main
git pull --ff-only origin main
git tag -a vX.Y.Z -m "Agent Workboard vX.Y.Z"
git push origin vX.Y.Z
bash
gh release create vX.Y.Z --title "Agent Workboard vX.Y.Z" --notes-file release-notes-vX.Y.Z.md --draft

Before publishing the draft:

  • [ ] Release notes reflect the final commit range.
  • [ ] The local-first, unauthenticated boundary is stated in the body.
  • [ ] Known limitations are visible.
  • [ ] No generated local data or screenshots were committed.

Publishing the release triggers the GHCR image build. Confirm the workflow succeeds and that ghcr.io/ventus-software-solutions/agent-workboard:X.Y.Z and :latest resolve.

If A Tag Is Wrong

Do not silently retag or force-push a published tag; downstream clones and the published image digest already reference it. Cut a corrective patch release instead, and note what changed.

After The Release

  • [ ] Open follow-up issues for anything deferred as a release blocker.
  • [ ] Update docs/roadmap.md if the release changed the near-term picture.