Memories / ドキュメント

このページの内容

検証記録

ローカル開発ビルドの記録です。結果の日付は各節に記載しています。古い成果物のハッシュは、それとともに記録されたビルドにのみ適用されます。 コマンド例には現在のプロジェクト表記を使用しています。過去の成果物のハッシュは、名称変更後のバイナリを示すものではありません。 これらは実際に実行した確認の結果です。CI の設定は、リモート CI の成功や独立したセキュリティ監査の証拠ではありません。

SaaS アカウントと設定可能な登録 (2026-10-14)

リリース 20261014-83aca4d86199 を ldny にデプロイしています。Linux バイナリの SHA-256: 83aca4d86199718587da2fe812471bffb6ea7aefd499c52ed53e6566a7dd4c73。 アカウント UI のデプロイ先: 908a7085.memories-ap4.pages.dev。

  • Windows で cargo fmt --all --check、cargo clippy --workspace --all-targets --locked -- -D warnings、cargo test --workspace --locked が成功しました。既存の任意の環境依存テストは、宣言された無視状態を維持しています。
  • Windows で cargo build --workspace --release --locked が成功しました。Linux の memories-center リリースビルドは固定した依存関係グラフで成功し、後述の本番互換 Ubuntu コンテナでテストしました。
  • Center テスト: 79 件成功。ユーザー名登録、正規化した ID、メール確認・期限切れ・再利用、SMTP 転送失敗、ループバック SMTP フィクスチャへの実際の配信、パスワードのハッシュ化、認証処理・リクエストの制限、アカウント間の読み書き拒否、管理者による変更・削除、ログアウト、再起動後の永続性、安全側に拒否するメンバー書き込みを対象とする 7 件のアカウント・設定テストを含みます。
  • Web クライアントと API プロキシの Node テスト: 13 件成功。ドキュメント生成で 32 HTML ページのローカルリンクとアンカーを検証しました。
  • 実際の Chromium で分離した Center に登録・ログインし、メモリーを作成しました。メールフォームの遷移はモック API 応答で確認し、このブラウザ確認ではメールを送信していません。バックエンドのメール配信は、外部プロバイダーではなくローカル SMTP フィクスチャで別途確認しました。
  • 本番と同一のイメージで、分離した ldny コンテナのカナリアテストが成功しました。2 アカウント、別々の保管庫、アカウント間アクセス拒否、ログアウト、再起動後の永続性、登録停止中のログインを確認しました。カナリアコンテナと合成データは削除しました。このテストに本番データは使用していません。
  • 本番再起動後も、公開ドメイン経由で既存所有者の保管庫 ID とメンバートークンが保持されました。既存の PostgreSQL コンテナと cloudflared サービスは稼働を継続しました。組み込みの /app/ アセットと公開 Pages アセットは一致しています。公開デスクトップ・モバイルページでは、ブラウザコンソールエラーも 390px での横方向のはみ出しもありません。
  • 本番では /etc/memories-center/auth.toml でメールモードを選択しています。2026-10-14 に Tencent 企業メールを使用し、ポート 465 の証明書検証付き暗黙的 TLS で SMTP を設定しました。プロバイダー認証は成功し、サービスは正常に再起動し、公開設定は登録有効を示しています。公開登録リクエストは、確認メールをプロバイダーに送信した後、verification_required: true とともに 200 を返しました。受信箱への到着と、ユーザーによる最終コード・パスワード送信は未検証です。パスワードはリポジトリ外の保護された設定にのみ保存しています。
  • 保護された整合性のあるバックアップ: /var/backups/memories-center/20261014-before-accounts-83aca4d86199/state-and-config.tar.gz。証拠、ソースパッチ、ビルド記録: dist/saas-accounts-20261014/。パッチは記録したクリーンなベースに適用できます。Git はテキストの改行を正規化します。

ldny 上のホスト型 SaaS (2026-10-14、初回デプロイ)

memories.ivjn.us は、Cloudflare Worker と既存の ldny Tunnel を経由してホスト型 Center API を提供するようになりました。静的 Web サイト、Web クライアント、独立したドキュメントは引き続き Pages にあります。ldny は Ubuntu 24.04 の Podman コンテナで Linux リリースを実行し、暗号化された永続データをイメージ外に保持し、systemd で起動・再起動を管理しています。

  • 公開 /health は ok を返し、/v1/public-key は memories-saas を示します。匿名の /v1/session は 401 を返し、スコープ付きメンバー・グラントは認可されたセッションを返します。API 応答は Cache-Control: no-store を使用します。
  • 合成コンテンツはサービス再起動後も保持されました。実際の Chromium で https://memories.ivjn.us を通じてメモリーを作成・編集・再表示し、その後削除しました。最終コンテナリリースでは、新たに永続化したテスト項目を使い、systemd の連続 2 回の再起動に成功しました。公開 API 経由でアップロード・ダウンロードした 1 MiB のバイナリファイルは SHA-256 が一致しました。読み取り専用グラントは書き込みを 403 で拒否しました。
  • デスクトップと 390px モバイルのブラウザ確認では、横方向のはみ出しもコンソールエラーもありませんでした。ブラウザストレージにトークンやコンテンツはありませんでした。QA コンテンツを消去し、一時グラントを取り消しました。既存の所有者トークンは最終アップグレード後も機能しました。アップグレード前の状態・設定の保護されたバックアップを保持しています。
  • Web API とエッジプロキシの Node テスト 10 件すべてが成功しました。Linux リリースビルドと、ローカル Linux の認証・永続性・組み込みアセットのスモーク確認も成功しました。

サービス構成とロールバックは、リポジトリの deploy/README.md を参照してください。秘密情報はサーバーで生成し、リポジトリには入れていません。これらの確認は、独立したセキュリティ認証や公開セルフサービスのアカウント登録を立証するものではありません。ローカルの証拠は dist/saas-ldny-20261014/ にあります。

Memories Web (2026-10-14、フロントエンドの初回デプロイ)

静的 Center クライアントを /app/ に追加し、同じアセットを memories-center に組み込みました。これはホスト型 Center のクライアントであり、オフラインのブラウザ保管庫ではありません。このフロントエンドの初回デプロイは、上記 SaaS 展開の前に行われました。

  • Rust の全手順が成功しました。フォーマット確認、警告をエラー扱いにしたワークスペース・全ターゲットの Clippy、ロック付きワークスペーステスト、ロック付きワークスペースリリースビルドです。Center スイートには明示的オリジンの検証と CORS スコープ・認証テストが含まれます。
  • node --test scripts/tests/web-client.test.mjs: 6 件成功。トークンとオリジンの結び付け、リダイレクト・Cookie・キャッシュ制限、部分更新、キャンセルと古い応答、接続失敗の競合、汎用エラー、バイナリエンコーディングを対象としています。
  • 実際の Chromium で、ポート 8097 の静的サイトをポート 9297 の使い捨てホスト型 Center に接続しました。メモリーの作成・編集・再表示、カードの作成・削除、ファイルのアップロード・ダウンロードが成功しました。10,240 バイトのバイナリダウンロードはソースの SHA-256 と一致しました。読み取り用グラントでは変更操作が無効でした。書き込み専用グラントで作成したメモリーは所有者グラントで別途読み取り、削除したカードが存在しないことも確認しました。
  • デスクトップと 390px モバイルのワークスペース配置を確認しました。明示的な切断で表示コンテンツとトークン欄が消去され、5 分間のアイドルロックも確認しました。localStorage と sessionStorage のどちらにもトークンやコンテンツはありませんでした。
  • リリース版 Center は、Web サイトのソースとバイト単位で一致する組み込みアセット 7 個すべてを配信しました。/app/ ページはブラウザコンソールのエラー・警告なしで読み込まれ、CSP・セキュリティヘッダーも確認しました。

合成保管庫データと使い捨てグラントのみを使用しました。これらの確認は、本番保管庫への接続、独立したセキュリティ監査、ネイティブクライアントとの機能同等性を示すものではありません。証拠はローカルの dist/site-update-7647166/output/playwright/ と dist/web-client-qa/ に保持しています。

Web サイトクライアントの更新 (2026-10-14)

Web サイトの追加更新: ダウンロードカードのハッシュ、主ボタン、メタデータリンクが共通のグリッド行に配置されるようになりました。/docs/ の独立したドキュメントは、ナビゲーション、見出しリンク、モバイル用折りたたみメニューを備えた生成ページ 29 個で構成されます。python scripts/build-website-docs.py は HTML 30 ページ全体のローカルリンクとフラグメント参照先を検証します。両方の Web サイトスクリプトで node --check が成功しました。ブラウザ確認はホーム、ドキュメントハブ、英語・中国語ガイド、設定を 390px、900px、1440px で対象とし、ページの横方向のはみ出しもコンソールエラーもありませんでした。デスクトップの 4 カードで、ダウンロードボタン、ハッシュ、BUILD-INFO リンクの縦位置が一致しています。

ソースベース: 7647166a6d97e59e9a466fec5ead287892b428af (main、origin/main と同期済み)。Windows と Linux のパッケージはこのコミット済みソースを使用します。Android には後述のローカル R8 コンストラクター保持修正も含まれます。BUILD-INFO.json は source_dirty: true と公開ソースパッチを記録しています。

公開成果物 バイト SHA-256
Windows x86_64 v0.1.7 ZIP 51646344 755663b54323bfcf4ba9bef474c10599542372416ac6b50dcc4bd0d3f75fdcad
Linux x86_64 v0.1.7 tar.gz 44817901 2a58ab5702e82baa4dc7fcc30a42b4ca01811d3a9312facf5429d444b0f64b7d
Android v0.1.7, versionCode 8 APK 146722216 74256790a248ea17b0f9ad60aa74be311da7ef77b243023fa8d4490b76a1d24d

公開ベース URL は https://r2.ivjn.us/memories/7647166/windows/、https://r2.ivjn.us/memories/7647166/linux/、https://r2.ivjn.us/memories/7647166/android-cc5ac4b5/ です。3 パッケージすべてと公開メタデータを再ダウンロードし、ローカルの SHA-256 ハッシュと一致しました。Android の SOURCE.patch の SHA-256 は cc5ac4b57ced3bc87738d51da5ded84822627b5f05f8db024d323bde98dda4c2 です。クリーンなベースチェックアウトに対して git apply --check が成功しました。

実施した検証:

  • Windows 上の Rust 1.98.0: cargo fmt --all --check、cargo clippy --workspace --all-targets --locked -- -D warnings、cargo test --workspace --locked、cargo build --workspace --release --locked がすべて成功しました。無視するよう設定されたテストは引き続き無視され、依存関係の将来互換性の警告は残っています。
  • Windows パッケージ: マニフェストのファイルとアーカイブ項目 47 個を検証しました。展開した CLI の --version は memories 0.1.7 を返し、リレーの --help も成功しました。
  • Linux パッケージ: クリーンな WSL GNU チェックアウト (glibc 2.39、OpenSSL 3) で bash scripts/package-linux.sh によりビルドしました。マニフェストのファイル 45 個すべて、アーカイブ項目、実行権限を検証しました。展開した CLI の --version と file exec --help は成功し、ldd はすべての依存関係を解決しました。
  • Flutter 3.44.2 / Dart 3.12.2: flutter pub get、dart format --output=none --set-exit-if-changed lib test integration_test、flutter analyze、flutter test が成功しました (126 テスト)。
  • ARM64/x86_64 Rust FFI ライブラリを再ビルドし、Android API 35 x86_64 で flutter test integration_test/native_smoke_test.dart -d emulator-5680 が成功しました。古い 8 文字 ID のアサーションを、core の偶数長 6-16 桁 16 進文字の契約に合わせて更新しました。その後通常のデバッグ APK を再ビルドし、ネイティブライブラリを検証しました。
  • flutter build apk --release --target-platform android-arm64,android-x64 --build-number 8 でリリース APK をビルドし、アラインメントを調整し、AGENTS.md 記載の外部設定で署名しました。apksigner verify は既存リリース証明書の SHA-256 d637a37d5dd77aa5753722eccf53ab1b84baed2189e603cef9c34dbf354948f8 で成功しました。両 ABI について、ソース、マージ後、シンボル除去後、パッケージ内の FFI ライブラリを確認しました。
  • 実際の署名済みリリースのテストで R8 起動クラッシュが見つかりました。Room は androidx.work.impl.WorkDatabase_Impl をリフレクションで生成しますが、その public な引数なしコンストラクターが削除されていました。対象を絞った keep ルールを追加して再ビルドし、AndroidRuntime の致命的例外なしで 2 回のコールド起動と Standalone モードへの移行を検証しました。失敗した候補は Web サイトのデプロイ前に撤回し、その公開 APK URL は HTTP 404 を返しました。
  • Web サイトの JavaScript 構文とローカル HTML リソース、ID、フラグメント参照先の確認が成功しました。1440px と 390px のローカルブラウザ確認で、横方向のはみ出しやコンソールエラーなしに 2 言語の切り替えが成功しました。

Cloudflare Pages の本番デプロイが、プロジェクト memories、ブランチ main、未コミット変更のあるソースのメタデータ付きで https://09253fe4.memories-ap4.pages.dev に完了しました。https://memories.ivjn.us/ は HTTP 200 を返し、ローカルの website/index.html とバイト単位で一致しました。保持した macOS リンクを含むダウンロード・メタデータリンク 12 個すべてが HTTP 200 を返しました。CSP、nosniff、フレーム拒否、referrer、permissions-policy ヘッダーが存在しました。本番ブラウザ確認は 1440px と 390px で英語・中国語を切り替えて成功し、横方向のはみ出しはなく、コンソールのエラー・警告は 0 件でした。スクリーンショットは dist/site-update-7647166/output/playwright/live-*.png にあります。

ローカルの証拠とヘルパーは dist/site-update-7647166/ に、Windows パッケージは dist/v0.1.7/ にあります。署名用の秘密情報はチェックアウト外に保持しました。macOS は既存の v0.1.3 ダウンロードのままです。macOS ホストがオフラインで、GitHub Actions はアカウントの請求・使用上限でブロックされていました。新たな macOS・iOS ビルド、実機 ARM64 実行、ストア公開、独立したセキュリティ監査を行ったとはしていません。上記 Linux 検証は、このパッケージに関する古いベースラインの Linux 制約を置き換えます。

無人運用のネイティブ CI 設定 (2026-10-01、実行予定として設定済み、未実行)

.github/workflows/ci.yml の Rust OS マトリクスでは、通常のワークスペーステスト後に明示的なネイティブ確認を実行するよう設定しました。

  • Windows: cargo test -p memories --lib native_dpapi --locked は、既存の現ユーザー DPAPI ラウンドトリップと、結び付け変更時の拒否テストを実行します。合成のインメモリバッファのみを使用し、ネイティブバッファガードが解放とゼロ化を行います。プレースホルダーの保管パスにはアクセスしません。
  • macOS: cargo test -p memories --lib unattended_backend::macos::tests::native_roundtrip_when_keychain_is_unlocked --locked -- --exact --ignored は、無視対象のネイティブ Keychain ラウンドトリップのみを実行し、他の無視対象テストは実行しません。一意の一時ディレクトリに結び付けた、同期しない合成エントリを作成し、読み取り結果の確認や等価性のアサーション前にそのエントリだけを削除します。準備・読み取り・クリーンアップのエラーはテスト失敗となり、作成失敗時に既存エントリの削除は行いません。

macOS ランナーには、UI なしで作成・読み取り・削除を許可する、利用可能でロック解除済みのユーザーキーチェーンが必要です。キーチェーンのロック解除、認証 UI、ACL の緩和、グローバルなキーチェーン変更、パスワード注入は追加していません。キーチェーンがない場合やロック中の場合は、黙ってスキップやフォールバックせず失敗します。ネイティブ削除が失敗するとテストも失敗し、使い捨てランナーに合成エントリが残る可能性があります。それ以前のフォーマット・lint・テストが失敗すると、これらの手順に到達しない場合があります。

これらは今後の push・pull-request CI 実行向けに設定した手順であり、実行済みのネイティブ検証の証拠ではありません。ワークフローは起動しておらず、Windows・macOS のネイティブテストもローカルでは実行していません。この実装環境は Linux で、ネイティブホストは設定されていません。実際のネイティブ実行と、ロック中・承認が必要な状態での UI なしの検証は、引き続きリリース条件です。CI 設定だけでは完了しません。

Linux ビルド・パッケージスクリプト (2026-09-18)

Windows チェックアウトから WSL2 の Ubuntu で新しい Linux シェルスクリプトを検証しました。両スクリプトで bash -n が成功しました。使い捨てのコミット済みフィクスチャリポジトリとモックビルドツールで、release・debug の選択、競合する CARGO_BUILD_TARGET がある場合の明示的ネイティブターゲット選択、空白を含むパス、独自 Cargo ターゲットディレクトリ、x86_64/aarch64 アーカイブ構成、実行権限、追跡済みドキュメント・ライセンス、ソースコミットメタデータ、全ファイル・アーカイブのチェックサムを確認しました。異なる OS、未対応ターゲット、不正な引数、OpenSSL 不足、ビルド失敗、未コミット変更のあるチェックアウト、既存パッケージディレクトリは想定どおり拒否され、既存アーカイブは変更されませんでした。

この WSL 環境には Rust/C ビルドツールチェーンがないため、これはフィクスチャ成果物でのスクリプト動作の検証であり、Linux コンパイルやネイティブ実行の検証ではありません。更新した手動デスクトップワークフローには、Linux 依存関係のインストール、ShellCheck、Rust 確認、パッケージ化、チェックサム検証、展開した CLI・リレーのスモークコマンドが含まれます。この変更についてリモートワークフローは未実行です。ネイティブ ARM64 とディストリビューション・glibc・OpenSSL の互換性は未検証です。

Windows v0.1.3 の検索、組み込みモデル、6 文字 ID (2026-09-18)

v0.1.3 タグとリリースの BUILD-INFO.json がソースとパッケージ化したファイルを特定します。推論エンジンはアプリケーションの一部です。モデル重みは検証済みデータファイルとして別途インストールし、他のアプリケーションで実行するものではありません。

  • ワークスペース回帰テスト: 158 件成功、失敗 0 件、意図的な無視はヘルパー・ツール・モデル依存の 17 件です。最終版の検索テスト 6 件も別途成功しました。ワークスペース実行開始後に追加した、処理中にドキュメントを公開から非公開へ変更する新しい回帰テストを含みます。
  • ネイティブ EmbeddingGemma を、実際の固定した Q4 モデルファイルでプロセス内実行しました。中国語の質問で、関連する英語の犬の文書を無関係な金融文書より上位に評価し、768 次元の有限・正規化済みベクトルを得ました。2 件目の実 CLI・デーモンテストでは、ベクトル索引を構築し、意味的一致を検索し、ロックによる拒否とキャッシュ消去を確認しました。セッション作成前に ONNX テレメトリーを明示的に無効化してから、任意実行テストの両方が成功しました。
  • 最終的な最適化済み Windows リリース CLI も実デーモン IPC で直接確認しました。6 文字 ID、索引化した 2 文書、言語をまたぐ意味的一致、ロックによる拒否が成功しました。報告は target/rag-release-smoke.json です。外部の埋め込みアプリケーションは使用していません。
  • 実リリース CLI によるモデルインストールは、使い捨てループバックミラーで成功しました。注入した HTTP 429 と中断したモデル応答は、再試行・範囲リクエストで回復しました (59 リクエスト、53 範囲)。モデルファイル 7 個すべてが固定 SHA-256 と一致しました。ミラー停止後にインストールを繰り返すと、検証済みファイルをオフラインで再利用しました。インストールで暗号化ストアは初期化していません。
  • HTTP フィクスチャは、Gemini・互換ペイロード、要求した次元、埋め込みの順序・数・次元の確認、学習済み再ランキング、引用の拒否、一時エラーの再試行、認証エラーを再試行しないこと、キャンセル、実際の HTTPS プロキシ CONNECT を検証します。失敗応答の本文と直接的な API キーの反映は抑制します。
  • 検索・RAG 回帰テストは、中国語語句、any・all・phrase モード、Unicode チャンクオフセット、ベクトルキャッシュの再利用・無効化、資格情報・非公開・削除済みコンテンツの非表示、ロックとグラント取消、保管庫間アクセス拒否、デバイス限定情報のリモート開示拒否、モデル処理中の文書変更を対象とします。CLI と MCP の取り込み・検索は、BM25 モードならモデルなしで動作します。
  • 6 文字 ID、6・8 文字の衝突時拡張、旧 8 文字入力の互換性、型付き参照の投影が、既存の認可・ストレージ・FFI 回帰テストとともに成功しています。保存された正規 ID とセキュリティフィンガープリントは変わりません。
  • フォーマット、-D warnings 付きワークスペース・全ターゲットの Clippy、最適化ビルド、任意のネイティブ埋め込み機能を無効にした core ビルドが成功しています。既存の依存関係の将来互換性とネイティブリンカーの情報警告は残っています。
  • 実顧客の Gemini・生成・再ランキングサービスは呼び出していません。プロトコル検証には合成 HTTP フィクスチャを使用しています。macOS・Linux 実行とモバイルネイティブビルドは確認していません。モバイル FFI は語彙検索を公開しますが、モデルを使用する操作は拒否します。Flutter UI は変更していません。

モデルリビジョン: onnx-community/embeddinggemma-300m-ONNX の 5090578d9565bb06545b4552f76e6bc2c93e4a66。ログは target/rag-*.log、ダウンロード・ミラー記録は target/ 配下です。合成ストア、文書、資格情報のみを使用しました。

Windows v0.1.2 のデスクトップ状態と設定 (2026-09-18)

v0.1.2 タグがこのソースを特定します。リリースの BUILD-INFO.json は正確なコミットとパッケージ内の全ファイルを結び付け、SHA256SUMS は独立した設定例も対象とします。Windows アーカイブにはトレイ実行ファイル、組み込み WebUI、追跡済みドキュメントすべて、TOML 例、組み込みフォントのライセンスが含まれます。

  • cargo test --workspace --locked -- --test-threads=2: 144 件成功、失敗 0 件、意図的な無視はサブプロセスヘルパー・外部ツールの 14 件です。強化した設定転送・実 WebUI 回帰テストも、最終ソースに対して別途成功しました (デスクトップ統合テスト 2 件)。
  • Rust 1.98.1 MSVC で、フォーマット、-D warnings 付きワークスペース・全ターゲットの Clippy、最適化ワークスペースビルドが成功しました。既存の依存関係の将来互換性と FFI リンカーの情報警告は残っています。
  • 回帰テストは、capability・Host・Origin・fetch-site の拒否、変更・汎用 IPC ルートがないこと、トークン更新、部分的な HTTP 接続がある状態での終了、受動的アイドル期限切れ、ロック中詳細の非表示、MCP 拒否を対象とします。実デーモン・WebUI 統合は、セットアップ、ロック解除時の件数、ロック、切断を対象とします。
  • 設定テストは、CLI・環境・ファイルの優先順位、相対ストレージ、ストアなしの調査、プローブへの明示的な設定転送、選択したホームの保存言語、リレー既定値、不正な値、秘匿化したエラー、既存設定ファイルの保持を対象とします。
  • 実際の Windows リリース CLI・トレイプロセスを、使い捨て TOML ファイルと合成ストアで起動しました。ブラウザでロック・ロック解除状態、3 つの合成ライブラリ、全 5 言語、デスクトップ・390 ピクセルの配置を検証し、横方向のはみ出しやブラウザエラーはありませんでした。トレイプロセスは起動エラーなしで応答を維持しました。自動化環境がタスクバー・トレイウィンドウを公開しないため、ネイティブメニュークリックは未検証です。
  • cargo package --list には組み込みアセット・フォント、設定テンプレート、ランチャーソースが含まれます。macOS シェル・組み込み Python のパッケージ構文確認が成功しました。この Windows ホストでは、macOS コンパイル、メニューバー実行、署名・公証、Linux 実行の確認はできませんでした。
  • モバイルアセットや Flutter コードの変更はありません。このリリースでは Flutter・ネイティブデバイス実行と、任意の外部暗号ツールのケースは再実行していません。

ログは target/desktop-config-*.log と target/config-tests.log です。手動の Build desktop packages ワークフローは Windows・macOS パッケージジョブを提供しますが、ワークフロー定義は macOS ビルドの成功を立証しません。

Windows v0.1.1 のドキュメントとパスワード ID 別名 (2026-09-18)

v0.1.1 タグがソースを特定します。この Windows 限定プレリリースには、ディレクトリ構造を保った追跡済み docs/ ファイルすべてが含まれます。BUILD-INFO.json はソースコミットとパッケージ内各ファイルの SHA-256 を記録し、SHA256SUMS はアーカイブとビルドマニフェストを対象とします。

  • cargo test -p memories --locked --test crypto_jobs --test localization: 7 件成功、失敗 0 件、外部ツールテスト 3 件を意図的に無視しました。回帰テストは、--password_id、--password、--password-id が同一の計画・承認ダイジェストを生成し、資格情報 ID の変更で承認が変わることを確認します。5 言語のヘルプで別名を案内しています。
  • Rust 1.98.1 MSVC で、cargo fmt --all --check、-D warnings 付きワークスペース・全ターゲットの Clippy、cargo build --workspace --release --locked が成功しました。既存の依存関係の将来互換性と FFI リンカーの通知は残っています。
  • リリース CLI・リレーのバージョンと暗号ヘルプのスモーク確認が成功しました。
  • 後述の全ワークスペース、外部ツール、Flutter の結果は v0.1.0 に適用されます。今回の CLI 別名・ドキュメント更新では、それらの広範なスイートは再実行していません。モバイル成果物は再ビルドせず、Flutter アプリケーションのバージョンは変わりません。
  • 再現可能なパッケージコマンドは pwsh -File scripts/package-windows.ps1 です。この実行のログは target/release-0.1.1-*.log にあります。

Windows v0.1.0 プレリリース (2026-09-18)

Windows x86_64 上で Rust 1.98.1 MSVC と Flutter 3.44.2 を使ってローカルビルドしました。v0.1.0 タグがソースを特定し、リリースの BUILD-INFO.json が完全なコミットを記録し、SHA256SUMS がダウンロード可能な成果物を対象とします。

  • cargo test --workspace --locked -- --test-threads=2: 131 件成功、失敗 0 件、意図的に無視したテスト 14 件。デスクトップはアクティブでロック解除済みでした。以前画面ロックに阻まれた IPC テスト 2 件とも、除外なしで成功しました。
  • 任意実行の暗号相互運用テスト 3 件は、合成 ID で別途成功しました。S/MIME、OpenPGP、Android APK・AAB 形式の署名です。
  • Rust フォーマット、-D warnings 付きワークスペース・全ターゲットの Clippy、cargo build --workspace --release --locked が成功しました。既存の依存関係の将来互換性の通知は残っています。
  • Flutter 解析、Dart フォーマット、Flutter テスト 36 件すべてが成功しました。
  • リリース CLI のバージョン・暗号ヘルプ、リレーヘルプ、実リリース DLL のスモークテスト (初期化、ロック、ロック解除、全ロック、クローズ) が使い捨てデータベースで成功しました。
  • GitHub がアカウント支払いや使用上限の制限を報告したため、GitHub Actions は開始できませんでした。これらはローカル結果であり、リモート CI 結果ではありません。
  • 成果物は未署名の Windows 開発バイナリです。Android NDK のセットアップ・ダウンロードは完了せず、この実行では Android・iOS 成果物やネイティブデバイステストを作成していません。Linux・macOS ビルドと本番リリース受け入れは未完了です。
Windows 成果物 SHA-256
memories.exe b8c2598e946bf1bcaca0cfb103ab1f4530b4f168579a5788a9ad73d86b252497
memories-relay.exe a810a647fea9a1a94a67a89e3c53801a38d46e41218f013b8394d176bb008d55
memories_ffi.dll b18925b45b84c4fdc1dafa16f6db5e4ea226629ff5d971a9289170c1c5cc4375

ログは target/release-20260918-*.log にあります。

メール暗号とアプリケーション署名 (2026-09-17)

  • 任意実行の相互運用テスト 3 件が、生成した ID のみで成功しています。S/MIME 署名・検証と PKCS#12 暗号化・復号、OpenPGP 分離署名・検証と暗号化・復号、Android APK のアラインメント・署名・検証と AAB 形式 JAR の署名・検証です。APK フィクスチャには実際のバイナリ Android マニフェストがあります。AAB テストは合成 JAR コンテナであり、デプロイ可能な App Bundle ではありません。実際のアカウント、ID、アプリケーションは使用していません。
  • ホストツール: Git for Windows OpenSSL 3.5.6、MSYS GnuPG 2.4.9、Adoptium JDK 17、Android Build Tools 35.0.0、Android 36 プラットフォーム JAR。GPG テストは --msys-gpg と使い捨てキーリングを使用します。任意テストは、crates/cli/tests/crypto_jobs.rs に記載された MEMORIES_TEST_* ツールパスと cargo test -p memories --locked --test crypto_jobs -- --ignored --test-threads=1 で実行してください。
  • core 回帰テストは、ローカル昇格、MCP 拒否、改変された承認、入力・ツール変更、既存出力、秘密情報を含まない監査・結果、一時資格情報の消去、ツール実行失敗、出力なしで成功するツールを対象とします。5 言語 CLI ヘルプと、macOS 以外での iOS 拒否もテストしています。
  • 後述の画面ロック依存 IPC ケース 2 件を除くと、ワークスペース実行で 129 テストが成功、失敗 0 件、意図的に無視したテスト 14 件でした (サブプロセスヘルパーと、別途実行したツールテスト 3 件)。コマンドは cargo test --workspace --locked -- --test-threads=2 --skip actual_daemon_enforces_unlock_sudo_and_suppresses_child_secrets --skip catch_cli_stores_secrets_without_disclosure_and_requires_sudo です。
  • cargo build --workspace --locked、-D warnings 付きワークスペース・全ターゲットの Clippy、Rust フォーマット、差分の空白、更新したスキルの quick_validate.py 確認が成功しています。
  • ワークスペース全体の実行では、Windows セッションが切断・ロック中に既存の実デーモン・IPC の失敗 2 件が発生しました (query user は Disc を報告し、そのセッションに LogonUI が存在しました)。デーモンの画面ロックフックが合成セッションを取り消し、LOCKED またはリモートセッション削除のエラーが発生しました。これらを直列で再実行しても同じロック動作でした。アクティブでロック解除済みのデスクトップが必要です。テストのためにロック保護を無効にはしていません。
  • iOS 署名は実装済みですが、macOS での実行時検証は未実施です。ここには Android デバイスもインストール済み NDK もなく、モバイルネイティブライブラリ、APK、iOS 成果物は再ビルドしていません。モバイル FFI は引き続きデスクトッププロセスジョブを拒否します。実機インストール、Apple プロビジョニング受け入れ、PGP・MIME メールクライアント統合、ストア公開を行ったとはしていません。

AI クライアントへのスキル注入 (2026-09-17)

  • push 前に、ステージ済みのスキルのみのスナップショットを分離ディレクトリにエクスポートし、cargo test -p memories --locked --bin memories --test skill_injection --test localization が成功しました。25 件成功、失敗 0 件、意図的に無視したサブプロセスヘルパー 4 件です。その環境でもフォーマットが成功しています。
  • 既存の wiki・クリップボード変更を含む全作業ツリー検証: cargo test --workspace --locked -- --test-threads=2: 127 件成功、失敗 0 件、親シナリオが呼び出す意図的な無視対象のサブプロセスヘルパー 10 件です。既存の認可、MCP、ストレージ、同期、FFI、リレー回帰テストが、新しいインストールテストとともに成功しています。
  • Windows: 新しい回帰テスト 9 件が成功しています (単体 3 件、CLI 統合 6 件)。ユーザー・プロジェクトディレクトリ、設定上書き、重複ターゲット、共有上書きパス、dry-run、冪等性、明示的な置換、競合の事前確認、不正入力、同階層ファイルの保持、5 言語ヘルプを対象とします。使い捨てディレクトリを使用し、デーモンの起動や Memories ストアの初期化は行いません。
  • 別の Windows ジャンクション確認で、--force が他のターゲットへの書き込み前にリンクされたスキルディレクトリを拒否し、元ファイルを保持することを確認しました。Unix シンボリックリンク回帰テストも含まれますが、このホストでは未実行です。
  • cargo build --workspace --locked、cargo fmt --all --check、cargo clippy --workspace --all-targets --locked -- -D warnings、git diff --check が成功しています。既存の Rust 依存関係の将来互換性と FFI リンカーの情報警告は残っています。
  • skill-creator の quick_validate.py 確認が成功しています。cargo package -p memories --list --allow-dirty --locked で、組み込み SKILL.md が CLI パッケージに含まれることを確認しました。インストールにネットワークアクセスは不要です。
  • 検出パスを現在の Codex、OpenCode、Claude Code のドキュメントと照合しました。実クライアントの検出・モデル動作、Linux・macOS 実行、Claude Desktop・Cowork、クラウドへのスキルアップロードは確認していません。検証中に個人のスキルディレクトリやクライアント設定は変更していません。

Wiki の秘密情報参照とクリップボード (2026-09-17)

  • Windows Rust ワークスペース: 118 件成功、失敗 0 件、親シナリオが呼び出す意図的な無視対象のサブプロセスヘルパー 10 件です。ワークスペースビルド、Rust フォーマット、差分の空白確認が成功しています。更新した CLI、IPC、FFI 経路も、最終変更後に対象を絞って確認しました。
  • core 機能回帰テスト 4 件が成功しています。完全一致の置換、安全な投影、ローカル昇格・MCP 分離、メタデータ拒否 (エスケープ文字列を含む)、保護カードのコピー、バイナリ・NUL 拒否、同期、永続性、独立したバックアップ復元を対象とします。追加の限定実行で、資格情報の準備後に置換が文書を本文サイズ上限より大きくした場合のアトミックなロールバックを検証しました。署名済みの過去コンテンツは意図的に変更しません。
  • 実 CLI・デーモン IPC スイートが成功しています (テスト 3 件と明示的に呼び出すサブプロセスヘルパー 4 件)。置換、マスクされた読み取り、認可されたコピー送信を含みます。FFI 回帰テストは同じ JSON 操作で成功し、ネイティブロック後のコピーを拒否します。全フィクスチャは合成秘密情報と使い捨てストアを使用します。インストール済みストアやユーザーのクリップボードは使用していません。
  • Flutter: 36 テスト成功。非表示の置換入力、クリップボード書き込み前の昇格、バックグラウンドロック後の遅延応答破棄、コピー失敗、編集時の参照保持という新しい 5 ケースを含みます。クリップボード送信はモックのプラットフォームチャネルを使用します。Flutter 解析、Dart フォーマット、-D warnings 付きワークスペース・全ターゲットの Clippy が成功しています。
  • ネイティブ Windows クリップボード呼び出しはコンパイルされますが、対話型クリップボードでの実行は確認していません。Linux・macOS のクリップボードヘルパーと、モバイル OS のクリップボード送信は未実行です。Android デバイスは接続されておらず、設定済み SDK に NDK はインストールされていません。Android ライブラリ・APK、iOS 成果物は再ビルドしていません。
  • ログ: target/wiki-secret-tests.log、target/wiki-atomic-tests.log、target/wiki-ipc-tests.log、target/wiki-ffi-tests.log、target/wiki-flutter-tests.log、target/wiki-clippy.log、target/wiki-workspace-tests.log、target/wiki-build.log。

保存された言語設定 (2026-09-17)

  • CLI テスト: 19 件成功、意図的に無視したサブプロセスヘルパー 8 件。永続化テストは、使い捨てホームで別々の CLI プロセスを起動し、設定の保存・置換、起動とヘルプ選択、ホームごとの分離、一時上書き、設定解除、不正な設定、書き込み失敗時のクリーンアップを検証します。
  • Flutter テスト: 31 件成功。新しい回帰テストは、実行中のシステムロケール変更が、設定を書き込まずに UI とフォントフォールバックを更新することを検証します。保存した選択は固定され、システム既定値へのリセットは再起動後も維持されます。
  • Flutter 解析、-D warnings 付きワークスペース・全ターゲットの Clippy、Rust・Dart フォーマット、差分の空白確認が成功しています。ネイティブデバイスは確認していません。
  • ログ: target/i18n/persistence-rust.txt、target/i18n/persistence-flutter.txt。

5 言語対応のクライアントと CLI (2026-09-17)

ホスト: Windows x86_64、Rust 1.98.1 MSVC、Flutter 3.44.2 / Dart 3.12.2。

  • Rust ワークスペーステスト: 112 件成功、意図的に無視したサブプロセスヘルパー 10 件。CLI ローカライズテストも最終 CLI 変更で成功しています。
  • Flutter ウィジェット・単体テスト: 29 件成功。システムの 5 言語、英語フォールバック、言語選択の永続化、ロック解除済みセッションの保持、スマートフォン幅のダイアログ、複数形の件数、保護プレビューのマスクを含みます。
  • Flutter 解析、Rust・Dart フォーマット、-D warnings 付きワークスペース・全ターゲットの Clippy、差分の空白確認が成功しています。既存の Rust 依存関係の将来互換性の通知は残っています。
  • 実バイナリで CLI ヘルプ、入れ子のヘルプ、ロケールの優先順位、ローカライズされた非対話エラーを確認しました。JSON フィールドとエラーコードは安定しています。ウィジェットスクリーンショットは、テストで読み込んだフォントを使って 390 x 844 で描画しました。

ローカルログは target/i18n/ にあります。Flutter のループバックテスト接続からホスト HTTP プロキシを除外しました。このローカライズ変更では、Android・iOS デバイス、ネイティブファイル選択、実 OAuth プロバイダー、Linux・macOS 実行は確認していません。

クラウド復旧と取消の追加確認 (2026-09-17)

ホスト: Windows x86_64、Rust 1.98.1 MSVC。回帰フィクスチャは、合成データ、一時暗号化データベース、ループバック HTTP のみを使用します。

  • cargo test --workspace --locked -j 2 --no-fail-fast -- --test-threads=2: 106 件成功、意図的に無視したサブプロセスヘルパー 10 件。クラウド同期・HTTP 統合テスト全 24 件を含みます。
  • cargo fmt --all --check と -D warnings 付きワークスペース・全ターゲットの Clippy が成功しています。既存の依存関係の将来互換性の通知は残っています。

回帰スイートは、壊れたダウンロード応答の後の正常な再試行、拒否されたオブジェクトと取り込み成功の区別、旧受領記録の 1 回限りの再走査を対象とします。満杯の受信箱での依存関係ダウンロード、参照されないエンベロープバッファの退避、部分的に受け入れたページに留まるディレクトリカーソルも確認します。

取消テストは、決して送信してはいけないキュー済みデータと、すでに処理中のアップロードの両方を対象とします。後者は完了する可能性がありますが、次のリクエストは阻止され、その古い確認応答は拒否されます。Google Drive フィクスチャは重複名を許可し、重複ファイル ID のみを拒否します。再起動テストでは、サーバーがファイルを受け入れた後にワーカーを中断し、ID がすでにローカル保存されていることを確認し、再試行でエンベロープと記述子がそれぞれ正確に 1 個作成されることを確認します。

HTTP フィクスチャは、Windows で受け入れたソケットを明示的にブロッキングモードにします。そうしないと、リスナーの非ブロッキングモードを継承し、リクエストのバイトが届く前に接続をリセットする場合があります。メモリーフィクスチャは、不完全な公開を模擬するとき、一覧と直接ダウンロードの両方からオブジェクトを隠すようになりました。

この追加確認では、実クラウドアカウントや Android・iOS ネイティブデバイスは使用していません。後述のプラットフォームとリリース受け入れの制約は引き続き適用されます。

信頼性とモバイルクラウドの追加確認 (2026-09-17)

ホスト: Windows x86_64、Rust 1.98.1 MSVC、Flutter 3.44.2 / Dart 3.12.2。全体を通して合成秘密情報と使い捨てデータベースを使用しました。

  • Rust ワークスペーステストが成功しています。実デーモンの停滞クライアント・ロック回帰テストを含みます。限定テストではさらに、クラウド HTTP リクエストがブロック中でもロックできること、プロバイダーの同時実行が拒否されること、遅い確認応答が無効化済みセッションを復元できないことを検証します。
  • クラウド回帰テストは、Bearer トークンを転送しない通常の OneDrive ダウンロードリダイレクト、リダイレクトループ・危険な宛先、プロバイダー別のキュー登録と再接続、従来の 256/4096 上限を超えた完了キューの圧縮、一時的に欠けたオブジェクトのバックオフ後の再試行を対象とします。取り消された受信者が、アクティブデバイス向け準備を阻止したり、保管庫を永遠に未同期状態にしたりすることはなくなりました。HTTP フィクスチャは 30 秒で期限切れになるのではなく、所有者が停止するまで存続します。
  • Windows FFI テストは、処理中とアイドルの両ハンドルでの保留中バックグラウンドロックと、ネイティブクラウドワーカー経由のディスパッチを検証します。ネイティブ OAuth 検証は、ネットワーク I/O 前に危険なコールバックと不正な PKCE を拒否します。
  • Rust フォーマットと -D warnings 付きワークスペース・全ターゲットの Clippy が成功しています。既存の russh・proc-macro-error2 の将来互換性の通知は残っています。
  • Flutter 解析と 16 ウィジェットテストすべてが成功しています。アカウント状態と、同期リクエスト処理中の手動ロックを含みます。Rust のアクセス・更新トークンを Dart に返すことはありません。AppAuth が認可コード・検証値を提供します。
  • リリースストレージベンチマークは、合成レコード 10、100、1000 件で実行しています。結果と指標の定義は性能にあります。監査追記では、過去の各エントリに対して同じデバイス公開鍵を毎回導出しなくなりました。
  • ワークフロー YAML、組み込み署名設定 Python、Unicode の Java プロパティエスケープ、Markdown リンク・コードフェンス、差分の空白をローカルで確認しています。

Android SDK・NDK・エミュレーターのインストールを試みましたが、大きな公式アーカイブの転送が遅く、この実行中には完了しませんでした。この変更について Android APK・ネイティブデバイスの結果を示していません。iOS ビルドには macOS が必要で、未実行です。新しいネイティブ CI ジョブと手動 Android 署名ワークフローは、リモートでは未実行です。設定済みの確認であり、検証済みビルド成果物ではありません。

登録済みネイティブ OAuth クライアント、実クラウド同意、署名済み配布、実機実行、独立したセキュリティレビューは実施していません。Google のネイティブリダイレクト対応は、選択した登録設定で Android と iOS を別々に検証する必要があります。受け入れ条件はリリースチェックリストを参照してください。インストール済み memories バイナリと実ユーザー保管庫は置き換えていません。

初回リリースのプロジェクト命名 (2026-09-17)

プロジェクト、リポジトリ、CLI、Rust・Dart パッケージ、FFI シンボル・ヘッダー、Android・iOS 識別子、ストレージ名、環境変数、暗号ドメインは、現在すべて一貫して memories を使用しています。この初回リリースには旧名の別名や移行経路はありません。リポジトリは https://github.com/mbcc2006/memories です。

ホスト: Windows x86_64、Rust 1.98.1 MSVC、Flutter 3.44.2 / Dart 3.12.2。

  • cargo test --workspace --locked -j 2 -- --test-threads=2: 89 件成功、意図的に無視したサブプロセスヘルパー 10 件。
  • cargo fmt --all --check と -D warnings 付きワークスペース・全ターゲットの Clippy: 成功。
  • cargo build --workspace --release --locked -j 2: 成功。CLI バージョンとリレーヘルプはいずれも新しい名前を表示します。
  • 使い捨てライブラリで、リリース CLI・デーモン・FFI のスモーク確認 6 件が成功しました。ネイティブ初期化・書き込み・バックアップ、デーモンのロック解除・読み取り、MEMORIES_HOME の選択、CLI 読み取りとロック・ロック解除、ネイティブバックアップ復元、エクスポート memories_lock_all によるアクティブなネイティブハンドルのロックです。
  • Dart フォーマットと flutter analyze: 成功。Flutter ウィジェットテスト: 14 件成功。最初のウィジェット実行は、ホスト HTTP プロキシのためローカルテストランナーに接続できませんでした。そのプロセスからプロキシ変数を除去し、NO_PROXY にループバックを設定して再実行すると成功しました。

ローカルの証拠は target/rename-tests.log、target/rename-clippy.log、target/rename-release-build.log、target/rename-e2e.log、target/rename-e2e-report.json、target/rename-flutter-analyze.log、target/rename-flutter-tests.log にあります。E2E 報告は結果を CLI ハッシュと結び付けています。この名称変更では Android APK・iOS ビルドとネイティブデバイス統合テストを実行していません。次節の実サービスプロキシ E2E 結果は以前のビルドを示します。この節は新しいリリースのローカルスモーク確認の記録です。

Windows リリース成果物 SHA-256
target/release/memories.exe 3820d6d0d1effb64a98f3672cf7d8235739b22989c16c1c4112a1d2282012e5e
target/release/memories-relay.exe 9e92d253572f57256b423dd893dde5d580d711ffd84d22e39e8eceb3f5235221
target/release/memories_ffi.dll 0cefa06d8527b5a9c9003636a1425cd7e2d0708f6b1d380ffaad9fc508b2c9af

SSH・データベースプロキシとリリース E2E (2026-09-16)

ホスト: Windows x86_64、Rust 1.98.1 MSVC。リリース CLI・デーモンを、Ubuntu 22.04 WSL 内の使い捨て OpenSSH 8.9p1、PostgreSQL 14.24、MySQL 8.0.46、Redis 6.0.16 サーバーに対して確認しました。サーバーパッケージは非公開の一時ディレクトリに展開し、独立したデータ、証明書、合成アカウントを使いました。システムサービスはインストールしていません。テストデーモンは使い捨ての --home を使用しました。その後、全フィクスチャサーバーを停止し、データと秘密鍵を削除しました。

  • ワークスペース回帰テスト: 88 件成功、意図的に無視したサブプロセスヘルパー 10 件。コマンド: cargo test --workspace --locked -j 1 -- --test-threads=1。
  • 後続の短縮 ID 修正は、リモートテスト 9 件すべてと実デーモン IPC シナリオで成功しました。最終終了処理の修正は、プロキシテスト 4 件、IPC シナリオ両方、テストクライアントに終了用 sleep・join のない追加の即時停止・ロック回帰テストで成功しました。これらの限定実行は全ワークスペース実行後に行いました。
  • 最終版の -D warnings 付きワークスペース・全ターゲットの Clippy、Rust フォーマット、差分の空白確認が成功しました。russh と proc-macro-error2 の既存依存関係の将来互換性通知は残っています。lint エラーは抑制していません。
  • cargo build --workspace --release --locked -j 2 が成功しました。再ビルドした CLI のバージョン・ヘルプとリレーヘルプコマンドが正常に動作しました。インストール済みデーモンとユーザーデータは置き換えていません。
  • 再ビルドしたリリースバイナリに対し、scripts/test-proxy-e2e.py による 11 件の実サービス E2E 確認が成功しました。OpenSSH・SFTP クライアント、psycopg2、PyMySQL、redis-py は、上流の秘密情報なしでデーモンが作成したループバックプロキシに接続しました。

E2E は、短縮 ID による資格情報取り込みと秘密情報読み取り拒否、SSH ホスト鍵不一致の拒否、stdout・stderr・終了ステータス転送、SFTP アップロード・ダウンロード、信頼しない PostgreSQL TLS の拒否、PostgreSQL SCRAM・検証済み TLS・Unicode・トランザクションロールバック、MySQL caching-SHA-256・検証済み TLS・4 バイト Unicode、TLS 上の Redis AUTH、MCP 昇格分離、他のプロキシを中断しない明示的停止、全リスナーと確立済み SSH・データベース接続のロックによる閉鎖を対象とします。

最初の E2E 実行で、proxy stop が返った後も accept ループが最大 200 ms リクエストを転送できることが見つかりました。現在はサービスがプロキシワーカーを所有し、停止・ロックの確認応答前に join します。最終 E2E 再実行は、応答直後の切断を確認して成功しています。

ローカルの証拠: target/proxy-20260916-workspace-tests.log、target/proxy-20260916-remote-tests.log、target/proxy-20260916-shutdown-tests.log、target/proxy-20260916-close-regression.log、target/proxy-20260916-clippy.log、target/proxy-20260916-release-build.log、target/proxy-20260916-e2e.log、target/proxy-e2e/results/report.json。報告は E2E 結果を後述の CLI SHA-256 と結び付けています。再利用可能なスクリプトには、モジュールドキュメントに記載した外部準備の使い捨てフィクスチャが必要です。サーバーのインストールは行いません。

Windows リリース成果物 SHA-256
Windows CLI (過去のビルド) eea9ee3db29ea26e0dbf0d8090475eed05e2653936cc70816ea5147b1240447f
Windows リレー (過去のビルド) 34d4a15094031e47d1d9086291d52d04419caf509b848dbc1ae41fa57f491c3a
Windows FFI ライブラリ (過去のビルド) f02e7efaff6fa182e3d9cd047289aad184c3c441277539bbf5920038fb149bfd

このデスクトッププロキシ変更では、Android・iOS 成果物の再ビルドやネイティブ実行テストを行っていません。本番 SSH・データベースや実クラウドアカウントは使用していません。

クラウドオブジェクト同期 (2026-09-16)

永続的な送信箱・受信箱の受領記録を持つ、プロバイダー非依存の不変オブジェクトランナーを追加しました。対象テストは crates/core/src/sync.rs の単体テストと crates/core/tests/cloud_sync.rs にあります。

  • エンベロープの正確なバイト列はプロセスを再開しても保持されます。put が失敗しても再暗号化せず、同じオブジェクト ID で再試行します。
  • 重複 put は、ジョブをアップロード済みにする前に、既存オブジェクトをダウンロードして検証します。
  • エンベロープより先に一覧に現れた記述子は保留のままです。エンベロープを公開し、一覧を並べ替えたり重複させたりしても、取り込みは 1 回だけです。
  • 壊れたダウンロードは corrupt として記録し、保管庫状態をマージしません。
  • ロックとログアウトで同期セッションを増加させるため、遅れて届く CloudSyncAck は取り込めません。未完了の送信箱ジョブは、ログアウトで取り消されるまで、ロック解除後も暗号化状態に残ります。
  • ペアリング済みの 2 デバイスが MemoryTransport 上で同時編集を交換します。
  • ローカル限定保管庫と MCP 呼び出し元は、作業をキュー登録・調査できません。バックアップと復元したライブラリは空の cloud_sync を持ち、クラウドアカウントを含みません。

命令ごとに提案・承認・実行を行う、デーモン所有の SSH・FTP・TCP セッションを追加しました (crates/core/src/remote.rs、crates/core/tests/remote.rs)。 MySQL、Redis、PostgreSQL セッションは実接続上で状態を保持し、既定で TLS を有効にします (ホスト名検証、任意の PEM CA 資格情報)。--no-tls は明示的な指定です。実データベースの TLS ハンドシェイクは実行していません。 SSH・TLS 鍵生成は秘密鍵を資格情報ストレージ内に保持します。テストは generate・public 応答に秘密鍵 PEM がないことを確認します。 ループバック SSH・Redis プロキシは保存済み資格情報を注入し、ローカルクライアントが秘密情報なしで接続できるようにします。ロックはプロキシ停止フラグを設定します。実アカウントは使用していません。

トークン更新、OneDrive・Google Drive アダプター、デーモンの CloudSyncRun、memories cloud sync を追加しました。対象テストは cloud.rs の更新テストと、crates/core/tests/cloud_drive.rs のループバックフィクスチャにあります。実 Microsoft・Google アカウントの認可は行っていません。モバイルのログイン・同期 UI は追加していません。

2026-09-16 のローカル確認 (Windows x86_64、rustc 1.98.1 GNU、MinGW-w64 GCC 16.2.0):

  • cargo test -p memories-core --locked -j 1 -- --test-threads=1: 49 件成功、意図的に無視したサブプロセスヘルパー 2 件。
  • cargo clippy -p memories-core --all-targets --locked -- -D warnings: 成功。
  • cargo fmt --all: 成功。

リポジトリレビュー (2026-09-09)

  • Windows Rust ワークスペース: 51 件成功、失敗 0 件。意図的な無視対象のサブプロセスヘルパー 10 件は、親テストが明示的に起動します。コマンド: cargo test --workspace --locked -j 1 -- --test-threads=1。
  • 初期化テストは、ステージング後・公開前にプロセスを停止し、その後ストアの再作成・ロック解除に成功します。初期化中に現れたファイルを含む既存宛先は保持されます。宛先の OS ロックは公開完了まで保持します。物理的な電源断の模擬ではありません。
  • 資格情報キャプチャは、入れ子オブジェクトやエスケープ後に同等となる名前を含む重複 JSON キーを拒否します。テストは、有効な配列・ポインター・文字列の動作、エラー秘匿化、実 CLI・デーモン IPC 経由の拒否を維持します。
  • 遅延する HTTP プロファイルフィクスチャで、OAuth のネットワーク遅延がアクセストークンの有効期間を延長しないことを確認しました。既存のプロバイダー交換とロック・ログアウト取消の回帰テストが成功しています。リレー WebSocket テストには Ping・Pong が追加され、制御応答はキュー済みデータと同じ 10 秒の送信タイムアウトを使用します。飽和ソケットの長時間テストは実施していません。
  • -D warnings 付きワークスペース・全ターゲットの Clippy、Rust・Dart フォーマット、差分の空白、ローカル Markdown リンク・コードフェンス確認が成功しました。Flutter 解析は問題なしで、14 ウィジェットテストすべてが成功しました。
  • 再ビルドした Windows FFI は、使い捨て合成データで、ステージングファイルを残さない初期化成功、ロック後の古いチケット拒否、再開後の暗号化アカウント保持、メタデータのみの状態、ローカルログアウトの確認に成功しました。その後フィクスチャを削除しました。
  • ローカルログ: target/review-20260909-rust-tests.log、target/review-20260909-clippy.log、target/review-20260909-flutter-tests.log。Rust は D:/memories-build-cache/cards を使い、ビルドジョブ・テストスレッドを各 1 としました。
  • このレビューでは、実 Microsoft・Google 認可、Android・iOS ネイティブ実行、Linux・macOS 実行確認を行っていません。インストール済みバイナリは置き換えず、リモート CI やリリース成果物は検証していません。

クラウド認可 (2026-09-09)

  • Windows Rust ワークスペース: クラウド認可とストレージ障害の回帰テストを含む 47 テストが成功しました。ヘルパーテスト 9 件は自動検出から除外し、親シナリオが明示的に起動します。
  • -D warnings 付きワークスペース・全ターゲットの Clippy、Rust フォーマット、差分の空白確認が成功しました。最終的な非ブロッキングブラウザ起動調整の後に、CLI クラウドテスト、Clippy、CLI・FFI の新規ビルドを行いました。
  • 両 OAuth プロバイダーをローカル HTTP フィクスチャで確認しました。PKCE、state、アカウント ID、スコープ確認、更新トークン不足、応答制限、リダイレクト拒否、秘密情報を反映しない汎用エラーを対象としました。
  • 実ループバックソケットテストは、無関係なコールバックを拒否し、一致するコールバックを受け入れ、そのコードを HTTP 応答に反映しませんでした。
  • core 回帰テストは、呼び出し元・プロバイダーの結び付け、リプレイ、ロック・ログアウト取消、暗号化永続化、監査・MCP 分離、復号したバックアップと同期ペイロードにクラウドトークンがないことを確認しました。
  • 合成トークンを使った一時 Windows FFI フィクスチャは、クローズ・再開後の認可保持、memories_lock_all による取消、ログアウトで成功しました。その後フィクスチャを削除しました。
  • 登録済みクライアント設定や実クラウドアカウントは提供されていないため、実 Microsoft・Google の同意とトークン発行は未検証です。クラウドファイルはアップロードしていません。Android デバイス・エミュレーターは接続されておらず、この変更では Android・iOS ネイティブ実行とモバイルログイン UI は検証していません。
  • ローカル開発バイナリはビルドしましたが、インストール済み CLI・デーモンバイナリは置き換えていません。リモート CI やリリースの結果は示していません。

push 前の検証 (2026-09-09)

  • Rust ワークスペース回帰テスト: 30 件成功。IPC 子プロセスヘルパー 2 件は引き続き親シナリオが明示的に呼び出します。短縮 ID の衝突、履歴、保護参照、グラントのラウンドトリップを含みます。
  • -D warnings 付きワークスペース・全ターゲットの Clippy と Rust フォーマットが成功しました。短縮 ID の偶数判定を is_multiple_of に更新し、同等の lint 修正後に ID 単体テスト両方が再度成功しました。
  • Dart フォーマット、Flutter 解析、14 ウィジェットテストすべてが成功しました。
  • Windows テストでは D:/memories-build-cache/cards を使い、ビルドジョブ 1、テストスレッド 1 としました。LNK1201・LNK1207 を起こした古い PDB ファイルは、再生成前に .pre-push-20260909 の接尾辞を付けて保持しました。成功したワークスペースログは target/push-20260909-rust-tests.log です。
  • この確認ではリリースバイナリと Android 成果物は再ビルドしていません。後述の古い成果物ハッシュは、新しい短縮 ID プロトコルを検証しません。リモート CI 結果は別途追跡しています。

パスワード長の追加確認 (2026-09-09)

ローカルパスワードとバックアップパスワードには、アプリケーションレベルの最小・最大長ポリシーがなくなりました。空入力を許可します。確認、Argon2id パラメーター、認証、sudo スコープ、暗号化ストレージは維持しています。

  • 長さ 0、1、4096 の新しい core 回帰テストが成功しました。ストレージ作成、認証、ロック解除、バックアップ、復旧を確認し、誤ったパスワードは拒否します。
  • -D warnings 付きワークスペース・全ターゲットの Clippy と Rust フォーマットが成功しました。
  • Flutter 解析と 14 ウィジェットテストすべてが成功しました。確認手順を保持したまま、空・1 文字のパスワードでの初期化を含みます。
  • Windows CLI・FFI を再ビルドし、ローカルデーモンを再起動しました。リリース FFI に対する別の一時フィクスチャで、1 文字による初期化・ロック解除・sudo、空のバックアップパスワード、1 文字パスワードで保護した復旧が成功しました。
  • Android の両 ABI と通常エントリーポイントの APK を再ビルドしました。ソース・マージ後、シンボル除去後・APK のネイティブライブラリ一致確認が成功しました。この長さのみの変更では Android 実行時統合を再実行していません。ネイティブテストフィクスチャは、次回デバイス実行に向けて 1 文字パスワードを使用するようになりました。

これらのハッシュは、以前の成果物記録を置き換えます。ビルドログは target/password-length-android-build.log、詳しい ABI ハッシュは target/password-length-artifacts.json にあります。

成果物 SHA-256
Windows CLI (過去のビルド) 0b35b8becadccfcb82d41ccca6c231880fa29003f60eb84ac590953ddf4ed10d
Windows FFI ライブラリ (過去のビルド) 2556e0bc894584520b6b7311e1889680a5cd28bc9c36a180f8b986ce59aca04c
mobile/build/app/outputs/flutter-apk/app-debug.apk 4167422819f7ed8ec5cd41faab7e0ac598b26d40e0869cec8f81906de6efc2d3

カード、保護メタデータ、OTP の追加確認

以下の機能確認と成果物は、この文書の後半に記録したベースラインビルドのハッシュを置き換えます。検証に使用した資格情報はすべて合成であり、提供されたアカウント資格情報やメールサーバーは使用していません。

  • Rust ワークスペース回帰テスト: 25 件成功。拡張した CLI IPC シナリオと RFC 6238・不正入力の確認も、最終テスト追加後に成功しました。ヘルパーテスト 2 件は意図的に自動検出から除外し、IPC シナリオが明示的に実行します (資格情報注入と兄弟プロセスの sudo)。
  • Rust フォーマットと -D warnings 付きワークスペース・全ターゲットの Clippy: 成功。Windows デバッグ確認は D:/memories-build-cache/cards と -j 2 を使用しました。
  • Flutter 解析と 12 ウィジェットテストすべて: 成功。スマートフォンサイズのグラフ、有向バックリンク、マスクされたプレビュー、非公開 OTP 認可、期限切れ、バックグラウンド・ロック時の OTP ダイアログ閉鎖を対象とします。
  • Windows リリースワークスペースを再ビルドしました。一時暗号化ストアを使う実リリース CLI で、Python 3.13.1 と実行ファイルのディレクトリを記録し、保管庫をローカル限定に設定し、カード検索でその観測を見つけました。確認後にフィクスチャとデーモンを削除しました。
  • ARM64/x86_64 Android FFI ライブラリを再ビルドしました。API 35 x86_64 エミュレーターで実 FFI 統合テストが成功しました。カード・リンク・グラフ、dotenv のキーのみの検索、TOTP 生成、資格情報読み取り拒否、監査、ロック・ロック解除です。ログ: target/cards-android-native-test.log。
  • 統合テスト後に通常エントリーポイントの開発 APK を再ビルドしてインストールしました。起動、パスワード初期化、ライブラリ作成、新しい保護カードフォームの表示に成功しました。その後の手動アカウントフォーム送信は、エミュレーターが ADB から消えたため中断しました。この追加手動シナリオは成功として記録していません。起動 XML: target/cards-android-startup.xml。ビルドログ: target/cards-android-build.log。
  • パッケージ内ネイティブライブラリを ABI ごとに確認しました。ソースと Gradle マージ後出力が一致し、シンボル除去後出力と APK 項目が一致します。証拠とサイズ: target/cards-artifacts.json。

core セキュリティテストは、分離された暗号化資格情報ストレージ、アトミックな失敗、検索・一覧・グラフ・MCP・監査と平文データベースバイト列に秘密情報がないこと、参照置換の拒否、ホスト制限・ヘッダー注入、ローカル限定項目のペアリング・同期・バックアップからの除外、同期・復旧後の OTP 参照を対象とします。 RFC 6238 は SHA-1・SHA-256・SHA-512 の標準タイムスタンプ 6 個すべてに加え、6 桁出力、不正なシード・周期の拒否を対象とします。HTTP ヘッダーテストは合成値を使用し、機密ヘッダーのマーキングを検証します。本番サービスへの認証済みリクエストは行っていません。

現時点の成果物 (開発ビルド、配布用署名なし):

成果物 SHA-256
Windows CLI (過去のビルド) 9ff3d67b145508935e793dd7ce9b773d9f373549a8b08479de2f9c31a499dbd3
Windows リレー (過去のビルド) 4aae7b45fbe9e009a7f118a384d246b3c878f2e43da821110c8e4bb5ef5a091a
mobile/build/app/outputs/flutter-apk/app-debug.apk 4551a72acab24cfdfb6279f2e27507ca24a938ee716417fb99e4bad96847a9fe

パッケージ内 Rust の SHA-256:

ABI SHA-256
arm64-v8a eb8013d2bde1041412d08deb074f3fbbab7a24400e7cdde4cec890398b58f6a9
x86_64 cf34d3a09ba0c417460625d2f2ddf102cb891241e64de97f09479b63449f1aa9

文書末尾のプラットフォーム制約は引き続き適用されます。この節はローカル検証の記録であり、リモート CI 結果は示していません。

Windows Rust ワークスペースのベースライン

ホスト: Windows x86_64、安定版 Rust 1.98、MSVC ツールチェーン、組み込み SQLite。

確認項目 結果
cargo fmt --all --check 成功
cargo clippy --workspace --all-targets --locked -j 1 -- -D warnings 成功
cargo test --workspace --locked -j 1 -- --test-threads=1 18 件成功、意図的に無視したヘルパー 1 件
cargo build -p memories -p memories-relay --release --locked -j 1 成功
cargo ndk -t arm64-v8a check -p memories --locked -j 1 成功。Unix 条件付きコードのコンパイルのみ

無視対象テストは IPC テストが使用する子実行ファイルであり、そこで資格情報注入のもと明示的に実行します。省略したセキュリティシナリオではありません。

テストは、認証付き暗号と転送改ざん、暗号化 SQLite 状態、誤ったパスワード、チェックポイント切り詰め、チャンク順序、権限、デバイスの承認・取消、ID 再認可の拒否、共有メンバーシップ、リプレイ、同時リビジョン、ポリシー分岐解決、独立したバックアップ復元を確認します。実 CLI デーモンテストは、ロック解除、端末 sudo、資格情報読み取り拒否、実行ファイルダイジェスト承認、子出力抑制、署名付き監査、MCP スコープ、ロックを対象とします。実 WebSocket テストは、実際のルーティングと切断後のルーム消去を確認します。

Windows 名前付きパイプ実装はブロッキングフレーミングを使用します。試行した PIPE_NOWAIT 実装は実デーモン回帰テストに失敗したため置き換えました。同一ユーザーの可用性制限は SECURITY.md に記載しています。

ベースライン Windows 成果物 (パスはチェックアウトからの相対パス。ビルド出力は Git の無視対象)。CLI は --version と --help の実行にも成功しました。

成果物 SHA-256
Windows CLI (過去のビルド) c9086eb0dfabc0fbdb0ce8ba37a8f82b837c551138aa8d2fe900df2e6d4b7495
Windows リレー (過去のビルド) 7a3713068f28d10e4c839a5c0587b85e1502b1a8bc7fe4ef6e42b8c349244b77

Flutter とモバイルネイティブライブラリ

ツールチェーン: Flutter 3.44.2 / Dart 3.12.2、Android NDK 28.2.13676358、Android SDK プラットフォーム 35、36、37.0、Gradle 9.1.0。

確認項目 結果
dart format --output=none --set-exit-if-changed lib test integration_test 成功
flutter analyze 成功、問題なし
flutter test ウィジェットテスト 3 件成功
ARM64 と x86_64 の Android Rust FFI リリースビルド 成功
Android API 35 x86_64 エミュレーターのネイティブ統合テスト 成功
通常 Android APK のインストールと UI スモークフロー 成功

ウィジェットテストは、ネイティブ起動失敗時にライブラリがロックされたままであること、バックグラウンド移行でコンテンツダイアログを閉じ認可状態を消去すること、アイドル期限切れでも表示済みコンテンツダイアログを閉じることを検証します。モバイル認可の世代が変わった後の遅い非同期応答は拒否します。 ネイティブ統合テストはモックバックエンドではなく、デバイス上の一時データベースを使用します。実 Rust サービスを初期化し、メモリーを書き込み・読み取り、資格情報追加には昇格を要求し、資格情報の読み取りを拒否し、監査チェーンを検証し、全ネイティブハンドルをロックし、昇格を復元せずに永続コンテンツのロックを解除します。テスト後にフィクスチャディレクトリを削除します。

エミュレーターは既存の API 35 x86_64 イメージを読み取り専用モードで実行し、スナップショットは保存しません。テスト出力はローカルの target/android-native-test.log にあります。Android ビルドはプラグインのツールチェーンから旧 SDK XML バージョンの警告を出しますが、コンパイルやネイティブ実行は妨げられませんでした。アプリの compile SDK は、secure-storage プラグインの要件に合わせて 37 です。

最終の通常エントリーポイント APK は、統合テスト後に再ビルド・インストールし、Android UI 自動化で確認しました。実際の secure-storage プラグインによる起動、パスワード初期化、ライブラリとメモリー作成、そのメモリーの読み取り、コンテンツ表示中のバックグラウンド移行、ロック画面への復帰、ロック解除後の永続コンテンツ再読み取りが成功しました。統合テストのエントリーポイントだけでなく、通常アプリを確認しています。UI 証拠は target/android-ui-startup.xml、target/android-ui-initialized.xml、target/android-ui-memory-saved.xml、target/android-ui-content-open.xml、target/android-ui-background-locked.xml、target/android-ui-unlocked-persisted-content.xml に保存しています。合成テストデータのみを使用しました。検証後に読み取り専用エミュレーターを停止しました。

ベースライン APK: mobile/build/app/outputs/flutter-apk/app-debug.apk、177,630,089 バイト。 SHA-256: 1d671906316c139eca786e89a5cca2c5d7895a825c0d58f4c32e71e6ff8be382。 これはデバッグ署名付き開発 APK であり、ストアリリースではありません。

arm64-v8a と x86_64 の両方に Flutter エンジンと Rust FFI ライブラリを含みます。ソース JNI ライブラリは Gradle のマージ済みライブラリと一致し、Gradle のシンボル除去済みライブラリは最終 APK 内容と一致します。ソースと APK の直接のハッシュ比較が異なるのはシンボル除去のためです。パッケージ内 Rust ライブラリの SHA-256 値:

ABI SHA-256
arm64-v8a 6475026924b2e0434b1bbb945b21f9fa1684c53760ba228a72e062e519835d8c
x86_64 3a208026380c0cc164f1f80c25de6daad3120857c4f2c9e96bf34e91912e9c1e

エミュレーター検証用のディスク容量を確保するため、Windows デバッグビルドキャッシュを D:/memories-build-cache/20260908/windows-debug に移動しました。ソースファイルとリリース成果物はチェックアウト内にあります。Android ビルドでは、ホストの古いプロキシ設定を避けるためタスク専用の target/gradle-home と、公式 HTTPS メタデータで検証した正確な Flutter エンジン JAR を含むローカルリポジトリを使用しました。エンジンコードやプラグインキャッシュのソースは変更していません。この Gradle ホームの caches、wrapper、jdks ディレクトリは、ホスト Gradle キャッシュへのジャンクションです。

プラットフォームと残りの検証

  • この Windows ホストでは、Linux と macOS のデスクトップ実行確認を行っていません。Android クロスコンパイルは Linux・macOS 実行の正しさを立証しません。
  • iOS Xcode コンパイル、シミュレーター・デバイス実行、署名、Keychain 動作、ネイティブ XCTest は macOS ホストが必要で、ここでは未実行です。
  • Android ARM64 実機実行は未実施です。クロスコンパイル成功だけでは、ハードウェア動作や secure-storage の保証を立証しません。
  • CI は Windows・Linux・macOS Rust 確認と Flutter 確認を定義していますが、リモート CI 結果は示していません。リリース署名やストア公開は行っていません。
  • 独立した暗号レビュー、侵入テスト、大規模リソーステストは実施していません。実際の秘密情報を使用する前に SECURITY.md を参照してください。

クライアント既定値とスキル生成 (2026-10-01)

  • memories default set/get/delete は使い捨て --home でラウンドトリップし、未知のキーや不正な type 値を拒否し、空になったら defaults.json を削除します。
  • 一覧コマンドは、フラグ省略時に vault / type / category の既定値を適用します。
  • Persona の world・thing・event コマンドは、省略した保管庫・アセットを persona / vault の既定値から解決します (VAULT/ASSET、スラッシュ形式、または保管庫既定値を使うアセット)。
  • memories skill generate / agents generate は、persona なしでオフラインに AGENTS.md またはスキル構成の SKILL.md を書き込みます。--force なしの上書きは拒否します。
  • cargo test --workspace --locked は、これらの経路の単体・統合テストを対象とします。