Release acceptance
Run every gate against the commit and artifact being released. CI definitions and
historical results are not evidence that a new release passed. Record the commit,
artifact SHA-256, platform, command and result in validation.md.
- [ ] Rust workspace tests, formatting and warning-free Clippy pass.
- [ ] Retrieval covers Chinese/multiple keywords, chunk offsets, private/credential exclusion, six-character ID collisions, cache invalidation, in-flight lock/ revocation/source changes and device-only disclosure restrictions. Verify local EmbeddingGemma inference and model-file hashes, proxy/retry behavior and answer citation validation. Record whether real customer model endpoints were tested.
- [ ] Flutter analysis, formatting and widget tests pass.
- [ ] Mail and app-signing jobs pass with synthetic identities: S/MIME and OpenPGP verification/decryption, signed APK verification, and a real signed AAB checked by the release pipeline. Check preview/approval binding, failure cleanup and owner-only credential workspaces on each desktop platform.
- [ ] On macOS, validate iOS signing with a disposable Apple identity, matching profile and entitlements, including framework order, Keychain cleanup and device installation. Do not treat Windows compilation as iOS signing evidence.
- [ ] Wiki secret replacement and copy regressions pass through core, CLI/IPC, FFI and Flutter. Verify atomic failure, preserved edit mappings, current-value resolution, MCP denial and lock/background handling with synthetic data.
- [ ] Real clipboard delivery is checked on each shipped platform, including Linux helper availability and mobile OS delivery. Mocked clipboard tests alone do not satisfy this gate. Check secret-reference sync/recovery with updated clients and document the older-client incompatibility in release notes.
- [ ] Android native smoke test passes after rebuilding FFI, followed by a normal
APK rebuild and
scripts/verify-apk-native.pyverification. - [ ] iOS Xcode/simulator checks pass with the native library and AppAuth plugin.
- [ ] ARM64 Android hardware and a physical iOS device pass lock/background, secure-storage persistence and recovery checks.
- [ ] Real OneDrive and Google Drive native/desktop registrations complete consent, refresh, logout, two-device convergence, offline retry and revocation tests. Use disposable cloud accounts and synthetic records. Record client/platform combinations; do not extrapolate an iOS OAuth result to Android.
- [ ] Storage benchmark results meet the intended supported library size.
- [ ] Independent cryptography/application security review and penetration-test findings are resolved or explicitly accepted by the release owner.
- [ ] Signed artifact verification and an independent backup/recovery drill pass.
The Validate workflow builds Android and iOS native clients and executes their
smoke tests. Build signed Android release is a manual workflow against the
release environment. Configure ANDROID_KEYSTORE_BASE64, ANDROID_KEY_ALIAS,
ANDROID_KEY_PASSWORD and ANDROID_STORE_PASSWORD as environment secrets. It
fails if credentials are absent, verifies the APK signature/native library chain,
and uploads the APK plus checksum as a workflow artifact. It does not publish to
a store. Review the source commit's Validate result before running it.
For Windows prereleases, commit the source and run
pwsh -File scripts/package-windows.ps1 from a Windows x86_64 MSVC host.
It rebuilds the Rust workspace and packages the CLI, tray, relay, FFI DLL/import library,
C header, root README/security/license files and every tracked file under docs/,
preserving the directory structure. The archive, BUILD-INFO.json (source commit
and per-file hashes), memories.example.toml, and SHA256SUMS are written to dist/vVERSION/.
Verify archive contents and hashes before uploading all four files to the
matching GitHub Release. Existing output directories are never overwritten.
On macOS, bash scripts/package-macos.sh builds the host architecture and creates
an unsigned Memories.app, CLI/relay/FFI package, complete docs and font licenses.
On Linux, bash scripts/build-linux.sh builds the native x86_64/aarch64 GNU
target; --debug selects a development build. From a clean committed checkout,
bash scripts/package-linux.sh creates a .tar.gz with CLI/relay/FFI, the C
header, tracked docs and licenses under dist/vVERSION-linux-ARCH/, alongside
BUILD-INFO.json, memories.example.toml and SHA256SUMS. Verify hashes, Unix
executable permissions and runtime dependencies on the intended glibc/OpenSSL
distribution. Linux uses the WebUI and has no native tray package.
The manual Build desktop packages workflow runs Linux/Windows/macOS checks and uploads
these packages as workflow artifacts; it does not publish a GitHub Release.
Before distributing desktop builds, verify tray startup/menu actions/exit and
WebUI rendering on the shipped OS, and test token/Origin rejection, passive idle
expiry, lock/offline detail clearing and real daemon status changes.
iOS distribution requires an Apple team, certificate/profile and provisioning
settings on macOS. No credentials or developer account are shipped in this repo.
Cloud-enabled distribution builds also require the platform client IDs and
registered callback schemes from cloud-authorization.md; the generic CI build
does not contain an OAuth client registration.