Memories / Documentation

On this page

    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.py verification.
    • [ ] 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.