Release Process
This document defines the public release process for OpenPhone-owned project releases.
Versioning
OpenPhone uses semantic versioning for public project releases:
MAJOR.MINOR.PATCHBefore 1.0.0, releases are developer previews. Compatibility is not
guaranteed, and device images may require a clean wipe.
The first public target is:
0.0.1Release Types
Source Release
A source release includes:
- Git tag.
- GitHub release notes.
- Source archive generated by GitHub.
- Changelog entry.
- Known issues.
Device Preview Release
A device preview release may additionally include:
- OTA ZIP.
- SHA-256 checksum.
- Supported device/codename.
- Required base firmware or security patch level.
- Flashing and wipe instructions.
- Validation checklist and result summary.
Source Of Truth
Each release has three tracked public records:
docs/releases/CHANGELOG.mdfor the cumulative project history.- A versioned release-notes file under
docs/releases/, such asdocs/releases/0.0.1.md, for the human-readable release page body. - The GitHub Release at
https://github.com/secondly-com/OpenPhone/releases, which is the public distribution page for source archives, OTA artifacts,SHA256SUMS, andARTIFACTS.md.
Release evidence that contains private device details, screenshots,
trajectories, audit exports, local paths, tokens, or signing material must stay
out of tracked docs. Use ignored .worktree/ paths or private GitHub Actions
artifacts for raw evidence, then summarize safe conclusions in release notes.
v0.0.1 Checklist
Repository:
README.mdexplains the project state honestly.docs/README.mdis the documentation index.docs/BUILD.mdexplains Linux build requirements.docs/TESTING.mdexplains repo, device, and eval validation.docs/devices/MATRIX.mdanddocs/devices/tegu.mddescribe Pixel 9a status.docs/releases/CHANGELOG.mdhas a0.0.1section.LICENSEand the files underdocs/legal/are present.
Validation:
./scripts/check.shpasses.git diff --checkpasses../scripts/verify-tegu-device.shoutput is captured for any Pixel 9a OTA artifact that is being published.- No API keys, private SSH keys, device secrets, or generated build artifacts are committed.
Device artifact, when published:
- OTA ZIP is produced on a Linux Android build host.
- OTA SHA-256 is recorded.
- Private release-signing keys are prepared outside the repository with
scripts/prepare-release-signing.sh. - Release target-files and OTA signing is run with
scripts/sign-release-ota.shin the private build environment. scripts/generate-release-manifest.sh <version> <artifact-dir>has producedSHA256SUMSandARTIFACTS.mdfor the release artifact directory.scripts/generate-ota-feed.shhas produced an updater feed JSON when the release is intended for OTA discovery.scripts/validate-ota-feed.shpasses against the feed and staged artifact directory.scripts/validate-release-artifacts.sh <artifact-dir>passes against the staged release directory.scripts/validate-trajectory-export.sh <trajectory.zip>passes for every assistant trajectory export used as release validation evidence.scripts/validate-audit-evidence-export.sh <audit.json>passes for every framework audit export used as release validation evidence.- Pixel 9a boot and service checks are recorded.
- Assistant package diagnostics are recorded, including package version and privileged component declarations.
- Accessibility/UI-tree builds record whether
OpenPhoneAccessibilityServiceis visible to PackageManager and enabled in secure settings. - Known wipe/upgrade behavior is documented.
- Any ADB authorization/onboarding caveats after a clean data wipe are documented in the release notes.
Release Signing Preparation
Create a private signing workspace outside the repository:
scripts/prepare-release-signing.sh \
--keys-dir "$HOME/.openphone/signing/openphone-release"If a synced Android tree is available, pass it to print the exact
development/tools/make_key commands:
scripts/prepare-release-signing.sh \
--keys-dir "$HOME/.openphone/signing/openphone-release" \
--android-dir .worktree/androidThe helper creates a private key-map.txt, README, and .gitignore. It does
not put private keys inside the repository. Use the generated key map with
Android releasetools (sign_target_files_apks and ota_from_target_files) in
the private build environment.
Sign a target-files archive and generate a signed OTA:
scripts/sign-release-ota.sh \
--android-dir .worktree/android \
--keys-dir "$HOME/.openphone/signing/openphone-release" \
--target-files .worktree/android/out/target/product/tegu/obj/PACKAGING/target_files_intermediates/openphone_tegu-target_files.zip \
--output-dir .worktree/releases/signed \
--name openphone_tegu-v0.0.1Use --dry-run first to inspect the exact releasetools commands. The signing
script refuses to use a key directory inside the OpenPhone repository.
GitHub Release Notes Template
Stage only the files intended for publication into a clean release directory, then generate the artifact manifest before drafting release notes:
mkdir -p .worktree/releases/v0.0.1-preview
cp .worktree/artifacts/tegu/openphone_tegu-<build>-ota.zip \
.worktree/releases/v0.0.1-preview/
scripts/generate-release-manifest.sh 0.0.1-preview .worktree/releases/v0.0.1-preview
scripts/validate-release-artifacts.sh .worktree/releases/v0.0.1-preview
scripts/prepare-github-release.sh \
0.0.1-preview .worktree/releases/v0.0.1-preview docs/releases/0.0.1.mdAttach the generated OTA ZIP, SHA256SUMS, and ARTIFACTS.md to the GitHub
release when publishing device preview artifacts. The preparation script writes
gh-release-draft.sh, which can be inspected before creating the draft with
GitHub CLI.
Generate an updater feed for a staged OTA:
scripts/generate-ota-feed.sh \
--version 0.0.1-preview \
--channel preview \
--device tegu \
--artifact .worktree/releases/v0.0.1-preview/openphone_tegu-<build>-ota.zip \
--base-url https://downloads.example/openphone/v0.0.1-preview \
--release-notes-url https://github.com/secondly-com/OpenPhone/releases/tag/v0.0.1-preview \
--output .worktree/releases/v0.0.1-preview/ota-feed-tegu-preview.json \
--requires-wipe
scripts/validate-ota-feed.sh \
.worktree/releases/v0.0.1-preview/ota-feed-tegu-preview.json \
.worktree/releases/v0.0.1-previewThe feed contract is documented in
schemas/ota-feed.schema.json. The assistant now includes the first
preview on-device OTA client for this feed: it checks that the feed targets the
current device, downloads the chosen OTA ZIP to Downloads/OpenPhone, and
verifies size and SHA-256 before making the file visible. Installation is still
manual for 0.0.1; use recovery sideload or the documented host flashing flow.
GitHub Actions Release Workflow
Use .github/workflows/release.yml for the normal device-preview path. The
workflow requires:
version, such asv0.0.1-preview.1;device, currentlytegu;release_notes, the markdown file that becomes the GitHub Release body;prerelease, usuallytruebefore1.0.0;make_latest, usuallyfalsefor preview builds unless this release should become the repository's Latest release.
The workflow validates the repository, confirms the release-notes file exists,
builds the OTA on the openphone-build runner, stages the OTA, generates
SHA256SUMS and ARTIFACTS.md, validates the staged directory, and publishes
the GitHub Release with those assets.
Before dispatching a release:
- move relevant entries from
[Unreleased]indocs/releases/CHANGELOG.mdinto the target version section; - update the target
docs/releases/<version>.mdnotes; - run or review the relevant device/eval evidence;
- decide whether the release should become GitHub's Latest release.
## OpenPhone 0.0.1
Developer preview for OpenPhone.
### Supported Devices
- Google Pixel 9a (`tegu`) - development target
### Highlights
- Privileged OpenPhone Assistant app.
- OS-level OpenPhone agent manager service.
- Task, screen, action, policy, confirmation, and audit plumbing.
- Assistant-owned cursor/status overlay.
- Development screenshot, UI-tree, trajectory, and model-adapter paths.
### Artifacts
- Source archive
- OTA ZIP: TBD
- SHA-256: TBD
### Known Issues
- Not a consumer-ready ROM.
- Device support is limited.
- Full autonomous agent loop is still in progress.
- Production signing is not yet used for the preview artifact, but private
signing workspace preparation is documented.
- On-device OTA updater is not implemented; the first server-side OTA feed
contract and generator exist.
- Hardware validation is incomplete.
- A clean wipe may require completing onboarding and re-authorizing USB
debugging before ADB shell/logcat/install channels work.
### Flashing Notes
See `docs/BUILD.md`, `docs/TEGU_BOOTCHAIN.md`, and `docs/devices/tegu.md`.