Docs
Developer Preview Release Checklist
Use this checklist before sharing a public Developer Preview build.
1. Local state
- Worktree is clean.
- Version and build number are final.
CHANGELOG.mdhas dated release notes.- Public docs are current.
docs/known-limitations.mdreflects the current Developer Preview boundary.
2. Quality gates
Run:
sh scripts/ci-local.sh --mode pre-push
sh scripts/ci-local.sh --mode full
The full gate should pass before publishing a public artifact.
2a. Storage release criteria
Run the automated Storage release gate:
sh scripts/verify-storage-release.sh
This proves the release-blocking invariants that can be checked locally:
- reclaim dry-run manifests validate exact byte totals and paths
- cleanup bundles only stage paths whose default action is Finder Trash
- risky, protected, tracked, modified, or untracked source-like files are not auto-staged
- scan cancel responds within the one-second release budget
- dangerous storage payloads are surfaced through performance-budget diagnostics
- FileManager Trash works on a disposable local fixture
The Storage release remains blocked until these manual checks are also recorded:
- 2-4 hour soak with scan, History, and MCP enabled
- clean-machine validation with and without Full Disk Access
- reclaim dry-run reviewed against visible paths, bytes, blockers, consequences, and undo path
- Trash operation verified only on disposable fixtures
- full home scan does not freeze the UI
- no risky file is auto-staged during manual cleanup review
3. Release environment
Required:
AETOWER_SIGN_IDENTITYAETOWER_NOTARIZE=1AETOWER_NOTARY_PROFILEAETOWER_APPCAST_URLAETOWER_SPARKLE_PUBLIC_ED_KEYAETOWER_BUNDLE_IDAETOWER_VERSIONAETOWER_BUILD_NUMBER
Recommended:
AETOWER_STAPLE=1AETOWER_DOWNLOAD_URL_PREFIX
Run:
sh scripts/release-preflight.sh
4. Package
Run:
sh scripts/release-public-preview.sh
Expected artifacts:
dist/Aetower.appdist/Aetower.zipdist/Aetower.dmgdist/Aetower.pkgdist/appcast/appcast.xmldist/homebrew/Casks/aetower.rbdist/source/Aetower-<version>-<build>-source.tar.gzdist/source/Aetower-source.tar.gzdist/THIRD-PARTY-NOTICES.mddist/cloudflare-site/(website only)dist/releases-payload/dist/releases-payload/homebrew/Casks/aetower.rbdist/releases-payload/releases/Aetower.dmgdist/releases-payload/releases/Aetower-<version>-<build>.dmgdist/releases-payload/releases/Aetower.pkgdist/releases-payload/releases/Aetower-<version>-<build>.pkgdist/releases-payload/releases/Aetower-<version>-<build>-source.tar.gzdist/releases-payload/releases/Aetower-source.tar.gz
The release command runs the Sparkle distribution matrix automatically. To run it again:
sh scripts/verify-sparkle-distribution-matrix.sh --require-dmg --require-pkg
Validate the generated cask from the Homebrew tap repository before publishing. See Homebrew Release. The cask must link the bundled CLI and, with Aetower.app running, pass:
command -v aetower
aetower top
aetower storage
aetower repos
For a public release, publish the real tap only after the release ZIP URL is public:
sh scripts/release-public-preview.sh --prepare-only --publish-cloudflare --publish-homebrew-tap
brew tap aeptus/aetower
brew install --cask aetower
5. Verify artifact
Run:
sh scripts/verify-public-preview.sh --package --gatekeeper --operator --storage-release
On a clean Mac or clean user account:
- open the DMG, drag
Aetower.appto Applications, and launch it - run the PKG installer on a clean account or clean Mac when validating managed installation
- verify Gatekeeper accepts the app
- verify Settings -> Setup opens cleanly
- verify Settings -> Updates is configured
- verify MCP discovery smoke for the supported local agents
- verify no duplicate Aetower engines are started
- leave the app idle for at least 30 minutes and check Diagnostics
- verify the app bundle contains
Contents/Resources/LICENSE.md - review
dist/THIRD-PARTY-NOTICES.mdand confirm no unexpected copyleft or unknown-license dependency entered the release graph
6. Verify update flow
Install version N-1, publish version N, then use Check for Updates.
Confirm:
- Sparkle discovers version N
- download succeeds
- EdDSA verification succeeds
- install succeeds
- relaunch opens version N
See Public Preview Validation for the complete runbook, including the two-hour soak command.
7. Publish
Publish through the orchestrator:
sh scripts/release-public-preview.sh --prepare-only --publish-cloudflare
This deploys the prepared Cloudflare Pages payload and verifies that:
- the public appcast contains the expected version and build number
- the immutable Sparkle archive resolves
- the direct DMG resolves
- the direct ZIP resolves
- the Homebrew cask resolves
- the corresponding source archive resolves
- the signed PKG resolves
- third-party notices resolve
Keep old appcast archives available so Sparkle can generate and serve deltas.
Aetower is a free early-alpha download for macOS 14+ (Apple silicon).
Download for macOS