Release Checklist
Usepnpm (Node 22+) from the repo root. Keep the working tree clean before
tagging or publishing anything.
This page is the maintainer source of truth for Fased Agent releases. Follow it
in order. Do not create a tag or GitHub release until the commit is the exact
installable snapshot users should receive.
Current public release model
Today the public release model is:- repo-backed install
- annotated Git tag + GitHub release for user-installable snapshots
- optional macOS Sparkle/appcast if a signed desktop build is being shipped
Version vs tag vs release vs appcast
package.jsonversion = the repo/application versionCHANGELOG.md= curated human release history- Git tag = the source snapshot for a release
- GitHub release = the published release page and attached artifacts
appcast.xml= the macOS Sparkle update feed only
main contains a user-facing
installer/runtime/docs fix that should become the current public snapshot.
The early v0.1.1, v0.1.2, and v0.1.3 releases happened during initial
public-repo setup and installer hotfixing. Going forward, cut one release per
deliberate public snapshot.
Remote and author check
Before a release, confirm you are pushing to the correct repository and with the intended maintainer identity:fcode-ai.
Preflight
- Version
- bump
package.jsonversion - bump
src/brand.tsFASED_PRODUCT_VERSION - confirm no other release-version string needs changing:
pnpm-lock.yaml only to change the root package version unless the
package manager changed it as part of a real dependency/install update.
- Build
-
pnpm build -
pnpm ui:build - run the smallest honest validation set for the scope
- Docs
- update user/operator docs if behavior changed
- confirm install, update, wallet, Fased Network, mining, or bond docs still match reality
Changelog and release notes
- update
CHANGELOG.md - keep it curated and human-readable
- use current Fased naming in new entries
- preserve older historical names in older entries instead of rewriting history
- draft the GitHub release body from release-notes-template.md
- commits and PR merges do not generate release notes automatically
- changelog and GitHub release text are still maintainer-written surfaces
Git flow
- merge approved work into
main - make sure the worktree is clean
- commit the version/changelog/docs updates
- push
main - create an annotated tag on the pushed release commit
- push the branch and tag
GitHub release
- create the GitHub release for
vX.Y.Z - attach real artifacts only
- paste the curated release notes into the release body
- do not claim package-manager install paths that are not actually supportable yet
Hotfix and mistake policy
- If a tag was created but no GitHub release exists yet, create the GitHub release for that tag.
- If a GitHub release is already public, do not move or rewrite its tag.
- If the released commit is missing an installer/runtime fix, make a new commit and cut the next patch version.
- If only docs/README changed after a release, normally leave
mainahead of the latest release and wait for the next real release. - Never force-push
mainor retag a published release unless the repository is still private, nobody has pulled it, and maintainers explicitly agree.
v0.1.2 is public and the installer still has a prelaunch blocker,
fix it on main, bump to v0.1.3, tag v0.1.3, and create the v0.1.3
release. Do not move v0.1.2.
Package publication status
package.json version is still the application/repo version, even before npm
publication. Keep it in sync with release tags.
Do not run npm publish, pnpm publish, or set npm dist-tags until package
publication is deliberately enabled. When that happens, update this page with:
- package name
- registry
- required npm account/org
latest,beta, anddevdist-tag policy- package smoke-test command after install
Post-public repository hardening
- enable
mainbranch protection once the repository is public or the organization plan supports private-repo protection - block force pushes and branch deletion
- add required status checks after CI is stable for the public repo
- keep emergency admin bypass limited to maintainers who cut releases
Optional: macOS app + appcast
If you are shipping a signed macOS desktop build:- build and sign the app bundle
- zip the app for distribution
- generate
appcast.xml - make sure the feed URL is the real raw repo path:
https://raw.githubusercontent.com/fased-ai/fased/main/appcast.xml
- publish the release assets that the appcast points to
What does not happen automatically
These are separate maintainer actions:- bumping
package.jsondoes not create a GitHub release - merging PRs does not rewrite
CHANGELOG.md - tagging does not generate appcast artifacts by itself
- appcast only matters for the macOS Sparkle path