リリース受け入れ
リリースするコミットと成果物に対してすべてのゲートを実行してください。CI 定義や過去の結果は、新しいリリースが合格した証拠にはなりません。コミット、成果物の SHA-256、プラットフォーム、コマンド、結果を validation.md に記録してください。
- [ ] Rust ワークスペースのテスト、整形、警告のない Clippy が合格する。
- [ ] 検索が中国語/複数キーワード、チャンクのオフセット、非公開情報/認証情報の除外、6 文字 ID の衝突、キャッシュ無効化、処理中のロック/取り消し/ソース変更、デバイス限定の開示制限を網羅する。ローカル EmbeddingGemma 推論とモデルファイルのハッシュ、プロキシ/再試行の動作、回答の引用検証を確認する。実際の顧客モデルのエンドポイントをテストしたか記録する。
- [ ] Flutter の解析、整形、ウィジェットテストが合格する。
- [ ] 合成 ID を使用してメールとアプリ署名のジョブが合格する。S/MIME と OpenPGP の検証/復号、署名済み APK の検証、リリースパイプラインで確認した実際の署名済み AAB を含む。各デスクトッププラットフォームでプレビュー/承認の結び付け、失敗時のクリーンアップ、所有者のみが利用できる認証情報ワークスペースを確認する。
- [ ] macOS では、使い捨ての Apple ID、一致するプロファイルとエンタイトルメントを使用し、フレームワークの順序、Keychain のクリーンアップ、デバイスへのインストールを含めて iOS 署名を検証する。Windows のコンパイルを iOS 署名の証拠として扱わない。
- [ ] Wiki のシークレット置換とコピーの回帰テストが core、CLI/IPC、FFI、Flutter を通じて合格する。合成データを使用し、失敗の原子性、編集時のマッピング保持、現在値の解決、MCP の拒否、ロック/バックグラウンド処理を確認する。
- [ ] 出荷する各プラットフォームで実際のクリップボード配信を確認する。Linux ヘルパーの利用可否とモバイル OS への配信を含む。モックのクリップボードテストだけではこのゲートを満たさない。更新済みクライアントでシークレット参照の同期/復旧を確認し、旧クライアントとの非互換性をリリースノートに記載する。
- [ ] FFI の再ビルド後に Android ネイティブのスモークテストが合格し、続いて通常の APK を再ビルドし、
scripts/verify-apk-native.pyで検証する。 - [ ] ネイティブライブラリと AppAuth プラグインを使用した iOS Xcode/シミュレーターのチェックが合格する。
- [ ] ARM64 Android 実機と物理 iOS デバイスで、ロック/バックグラウンド、セキュアストレージの永続性、復旧のチェックが合格する。
- [ ] 実際の OneDrive と Google Drive のネイティブ/デスクトップ登録で、同意、更新、ログアウト、2 台のデバイス間の収束、オフライン再試行、取り消しのテストが完了する。使い捨てのクラウドアカウントと合成レコードを使用する。クライアント/プラットフォームの組み合わせを記録し、iOS OAuth の結果を Android に当てはめない。
- [ ] ストレージベンチマークの結果が、サポート対象として意図するライブラリサイズを満たす。
- [ ] 独立した暗号/アプリケーションセキュリティレビューと侵入テストの指摘事項が解決済み、またはリリース責任者によって明示的に受け入れられている。
- [ ] 署名済み成果物の検証と独立したバックアップ/復旧訓練が合格する。
Validate ワークフローは Android と iOS のネイティブクライアントをビルドし、スモークテストを実行します。Build signed Android release は release 環境に対する手動ワークフローです。ANDROID_KEYSTORE_BASE64、ANDROID_KEY_ALIAS、ANDROID_KEY_PASSWORD、ANDROID_STORE_PASSWORD を環境シークレットとして設定してください。認証情報がなければ失敗し、APK の署名/ネイティブライブラリのチェーンを検証し、APK とチェックサムをワークフロー成果物としてアップロードします。ストアには公開しません。実行前に、ソースコミットの Validate 結果を確認してください。
Windows プレリリースでは、ソースをコミットし、Windows x86_64 MSVC ホストから pwsh -File scripts/package-windows.ps1 を実行してください。Rust ワークスペースを再ビルドし、CLI、トレイ、リレー、FFI DLL/インポートライブラリ、C ヘッダー、ルートの README/セキュリティ/ライセンスファイル、docs/ 配下の追跡対象ファイルすべてを、ディレクトリ構造を保持してパッケージ化します。アーカイブ、BUILD-INFO.json(ソースコミットとファイルごとのハッシュ)、memories.example.toml、SHA256SUMS は dist/vVERSION/ に書き込まれます。対応する GitHub Release に 4 ファイルすべてをアップロードする前に、アーカイブの内容とハッシュを検証してください。既存の出力ディレクトリは上書きされません。
macOS では、bash scripts/package-macos.sh がホストアーキテクチャをビルドし、未署名の Memories.app、CLI/リレー/FFI パッケージ、完全なドキュメント、フォントライセンスを作成します。Linux では、bash scripts/build-linux.sh がネイティブ x86_64/aarch64 GNU ターゲットをビルドし、--debug で開発ビルドを選択します。クリーンでコミット済みのチェックアウトから bash scripts/package-linux.sh を実行すると、CLI/リレー/FFI、C ヘッダー、追跡対象のドキュメントとライセンスを含む .tar.gz が dist/vVERSION-linux-ARCH/ 配下に、BUILD-INFO.json、memories.example.toml、SHA256SUMS とともに作成されます。対象の glibc/OpenSSL ディストリビューションでハッシュ、Unix 実行権限、実行時依存関係を検証してください。Linux は WebUI を使用し、ネイティブのトレイパッケージはありません。
手動の Build desktop packages ワークフローは Linux/Windows/macOS のチェックを実行し、これらのパッケージをワークフロー成果物としてアップロードします。GitHub Release は公開しません。デスクトップビルドを配布する前に、出荷対象 OS でトレイの起動/メニュー操作/終了と WebUI の描画を確認し、トークン/Origin の拒否、受動的なアイドル期限切れ、ロック/オフライン時の詳細消去、実際のデーモン状態変更をテストしてください。
iOS の配布には、macOS 上の Apple チーム、証明書/プロファイル、プロビジョニング設定が必要です。このリポジトリには認証情報や開発者アカウントは含まれていません。クラウド対応の配布ビルドには、cloud-authorization.md にあるプラットフォームクライアント ID と登録済みコールバックスキームも必要です。汎用 CI ビルドには OAuth クライアント登録は含まれていません。