Skip to content

Latest commit

 

History

History
398 lines (322 loc) · 41.2 KB

File metadata and controls

398 lines (322 loc) · 41.2 KB

English Version

Softveil Devlog

開発中に発生した問題・決定・気づきを時系列で記録する。
運用ルール:

  • 実装セッション終了時に追記する
  • 「何を試みたか」「なぜそうしたか」「何がうまくいかなかったか」を残す
  • 解決した既知の問題は仕様書 §9 の Known Issues テーブルも ✅ に更新する

テンプレート(コピーして使う)

## YYYY-MM-DD

### <フェーズ名> (<対象 OS/範囲>)
- **<対応内容の見出し>**: <詳細>
- **<対応内容の見出し>**: <詳細>

### 既知の問題 / 持ち越し
- <項目>

2026-08-10

OLED / LCD 光学プライバシーフィルターのアルゴリズム抜本刷新 (Flex Magic Pixel Narrow Pixel Emulation)

  • Samsung Flex Magic Pixel 方式のソフトウェア擬似再現 (OLED 向け):
    • Galaxy S26 Ultra 等に搭載される hardware-based Flex Magic Pixel (Wide Pixel / Narrow Pixel) の光学原理を取り入れ、shader.wgsl の OLED 向けロジックを刷新。
    • 自発光型 OLED ディスプレイにおいて、正面発光成分(Narrow Pixel成分)に相当するエリアの開口率を 100% 透過 (alpha = 0.0) に維持。
    • 周縁拡散成分(Wide Pixel成分)のみを選択的に黒遮蔽・高周波サブピクセル干渉させることで、正面透過時・文字可視性の低下(画面の単純な暗小化)を解消しつつ、斜めからの視野角遮蔽効果を最大化
  • 液晶 (LCD) 向け高透過空間ジャミング&コントラスト崩壊の強化:
    • 単なる黒グラデーションや全体減光を排除し、アパーチャ部(透過領域)を 100% 透明に保つことで正面明るさを確保。
    • 遮蔽領域に 1px〜1.5px 単位の微細空間パターンとサブピクセル位相シフト(色収差)を重ねることで、液晶の視野角輝度減衰と合わさり、斜めから見た際に文字と背景のコントラストが崩壊(文字が溶け込んで判読不能)するアルゴリズムを導入。

既知の問題 / 持ち越し

  • 特になし。macOS ネイティブ環境での正常ビルドおよび動作を確認。

2026-05-28

Phase 15: AI監視 (Vigilance) モードの実装 (AI Vigilance Mode)

  • AI 監視 (Vigilance) モードの追加と改善:
    • FilterMode::AIVigilance を実装。通常時は完全透明で、カメラに複数人数(覗き見者)を検知したときのみ自動で強力なプライバシーフィルターを起動するインテリジェントモードを実装。
    • 動的な最適フィルター適用ロジック: 覗き見検出時に HighIntensitySPD に固定するのではなく、パネル種別や画面カテゴリに応じたおすすめ設定 または ユーザーが保存したプリセット設定 を動的かつ自動的に適用して有効化するロジックを AppStateoverlay.rs に実装。
      • OLED モニター: HighIntensitySPD (OLED 高密度ルーバー)
      • LCD IPS モニター: OSテーマ連動による StealthLight または StealthDark を自動適用。
      • プリセット優先: 保存プリセット(High/Transitなど)があればそれを優先適用。
  • インテリジェントな AI スレッド起動/停止同期の強化:
    • モニターのフィルター形式に「AI 監視 (Vigilance)」が選択された際、自動的かつアトミックに「AI 覗き見検知」を有効化してカメラ検出スレッドを起動する同期ロジックを AppState および src/main.rs に実装。
    • AI 監視モード(グローバル/個別両方)がすべて無効化された際は、自動的に「AI 覗き見検知」を無効化してスレッドを停止(省電力化)させるアトミック処理を AppState::check_ai_vigilance_activation に追加。
  • 省電力と低 GPU 負荷の実現:
    • 通常時(覗き見なし)は Alpha = 0 での描画となるため、アニメーション更新(描画ループ)を完全停止(ControlFlow::Wait)させて GPU 負荷を 0% に抑制する最適化を行い、バッテリーへの影響を最小限に抑える設計を適用。
  • マルチモニターと UI の完全統合、メニューバグ修正:
    • トレイメニューの各ディスプレイサブメニューに「AI 監視 (Vigilance)」のチェック項目を追加し、個別の画面ごとに設定可能に。
    • トップレベルメニューでのON/OFF統合: 第一階層にある「AI 監視 (Vigilance) モード」トグルのクリックイベント処理が漏れていたバグを src/main.rs で修正・完備。
  • ドキュメントの同期更新とUIの視覚的ドキュメント化:
    • 基本仕様書 (Softveil_specs_v1_6.md)、ユーザーマニュアル (MANUAL.md)、ToDoリストの更新。
    • マニュアルの視覚的強化: 複雑なトレイメニューの入れ子階層(グローバルトグル、ディスプレイ別サブメニュー、各種微調整)を直感的に把握できるよう、MANUAL.md に詳細な「📋 メニュー階層ツリー」をASCII形式で追加。

既知の問題 / 持ち越し

  • 特になし。コンパイルおよびテストが macOS (native) / Windows (cross) ともに 100% 警告なしで成功することを確認済み。

2026-05-25

macOS 画面収録権限ダイアログの重複表示バグ修正

  • has_screen_capture_access の改善: 1x1 キャプチャによる偽陰性チェックが macOS 14+ で TCC ダイアログをトリガーしていたため、これを削除し CGPreflightScreenCaptureAccess のみの preflight_screen_capture_access を導入。
  • 起動時チェックの追加: アプリ起動時に権限をチェックし、許可されている場合は即座に screen_capture_authorizedtrue に設定して保存するように変更。
  • ベンチマーク開始フローの修正: ベンチマーク開始前に preflight チェックを行い、権限がない場合はカスタムダイアログを表示して中断するように変更。これにより、不意なシステムダイアログの表示を防止。

既知の問題 / 持ち越し

  • TCC データベースのリセット(tccutil reset ScreenCapture)後の初回挙動の確認。

  • ベンチマーク完了時の「最良設定」自動適用:

    • ベンチマーク終了時、旅行中(飛行機・電車・カフェ)に最適な「Transit (Maximum)」プリセットを全モニターに対して自動適用するロジックを src/main.rs に実装。ユーザーの介入なしで即座に最強の保護状態へ移行可能に。
  • HLCC (Stealth Light) の描画バグ修正:

    • shader.wgsl における HLCC (mode 5) のライン生成ロジックを修正。0.5px 相当の計算による整数ピクセル境界でのエイリアシング( uneven width / 線の太さの不揃い)を解消するため、1px 整数境界に整列したライン描画へ変更。視覚的なノイズが低減し、安定したベール効果を実現。
  • 🍎 macOS: ステルス・ダークのテーマ切替の堅牢化:

    • src/platform/macos.rsset_dark_mode を強化。従来の NSAppleScript によるインメモリ実行に加え、失敗時のフォールバックとして osascript CLI を呼び出す二重化構造を導入。システムイベント権限に起因する切替不能問題を緩和。
  • プリセット推奨アルゴリズムの改善:

    • ユーザーフィードバックに基づき、Office (Balanced) プリセットのデフォルト形式を StealthLight (HLCC) から、より視覚的品質の高い StealthLight (Subpixel) へ変更。

既知の問題 / 持ち越し

  • OCR 認識率の統合: Tesseract 環境の構築と、実際の文字認識率との相関分析(継続課題)。
  • macOS システムイベント権限: アプリの初回実行時にシステムイベントの制御許可を求めるガイドの検討。

Phase 8: サブピクセル・レンダリング・ハックの実装 (Subpixel UHD Jamming)

  • Subpixel 制御の導入:
    • shader.wgsl において (x * 3.0) 座標系を導入し、R/G/B サブピクセル単位での独立した透過制御を実現。
    • Stealth Light (Subpixel) モード: 0.5px 相当の極細ラインをサブピクセルごとに 1/3px ずつずらして配置するアルゴリズムを実装。文字エッジの MTF (Modulation Transfer Function) を物理的に破壊し、斜めからの色偏移(Chromatic Aberration)を意図的に増幅させることに成功。
    • UI 統合: トレイメニューに「Stealth Light (Subpixel)」を追加。

Phase 10: 動的最適化 (Benchmark-Driven Auto-Optimization)

  • パラメータ自動選定ロジック:
    • --benchmark モードにおいて、period_mmcover_ratio の複数の組み合わせを自動テストし、Obfuscation Index が最大となる「ハードウェア固有の最適値」を算出する検索アルゴリズム find_optimal_params を実装。
    • 評価指標の拡充: 新規追加したサブピクセルフィルタをベンチマーク対象に追加し、客観的な秘匿性能を測定。

Windows Subsystem の調整

  • コンソールウィンドウの強制非表示: src/main.rswindows_subsystem = "windows" 属性を無条件に適用するよう修正(Debugビルドでも cmd.exe が開かないように変更)。
  • 不要な標準出力の整理: GUIモード起動時の不要な println! を整理。

Phase 11: プリセット管理システム (Preset Management)

  • データ構造の統合: FilterSettings 構造体を導入し、濃度・形式・各種パラメータをカプセル化。
  • マルチモニター対応の洗練:
    • 階層型 UI: トレイメニューを「設定プリセット ➔ モニター名 ➔ 設定リスト」の階層構造に刷新。
    • 個別・一括適用: 特定のモニターのみ、または全画面一括でのプリセット適用をサポート。
    • 一括ベンチマーク: --benchmark 実行時に全ディスプレイを自動巡回し、各画面の物理特性(PPI等)に最適化された推奨プリセット(Office, Transit, Night)を個別に生成するよう強化。
  • プラットフォーム拡張:
    • Windows/macOS 両 OS において、指定したモニターのスクリーンショットを取得する capture_display(id) を実装。
  • 最適化完了通知: Windows において、全モニターのベンチマーク完了とプリセット生成をユーザーに知らせるダイアログ表示を実装。

既知の問題 / 持ち越し

  • OCR 認識率の統合: Tesseract 環境の構築と、実際の文字認識率との相関分析。
  • 動的パラメータの永続化: 最適化されたパラメータを DisplayConfig に自動保存し、次回のフィルター適用時に反映させる仕組みの検討。

Phase 8: ステルス・ライト & サブピクセル・ハック (Stealth Light Implementation)

  • StealthLight (HLCC) の実装:
    • ライトモード向けのコントラスト崩壊アルゴリズムを shader.wgsl に実装。背景(白)をわずかに沈める veil(ベースベール)と 0.5px ラインによるエッジ破壊を組み合わせ。
    • OS 同期: フィルター選択時に OS テーマをライトモードへ、輝度を 20% へ自動調整するよう AppState を拡張。
    • パラメータ・チューニング: 初例での効果不足を改善するため、veil 強度を 0.32 へ強化後、視認性とのバランスを考慮し 0.22 に最終調整。

Phase 9: 機械的ベンチマークの実装と最適化 (Mechanical Benchmarking)

  • ベンチマークモードの導入: --benchmark 引数による自動評価プロセスを構築。
  • 高速化と安定化の施策:
    • ネイティブ GDI キャプチャ: Windows において PowerShell 経由のキャプチャを廃止し、Win32 GDI を用いた Rust ネイティブ実装へ移行。外部プロセス起動のハングアップを解消。
    • 軽量化ベンチマーク: デバッグビルドでの極端な低速化を回避するため、解析前に画像を 1/2 に縮小し、保存形式を PNG から JPEG へ変更。
    • メッセージポンプ: Windows のメッセージループをベンチマーク中に明示的に回すことで、OS との通信を維持しフリーズを防止。
    • メモリ内解析: キャプチャした画像をファイルに書き出す前にメモリ上で直接 Obfuscation スコアを計算するフローへ最適化。

既知の問題 / 持ち越し

  • OCR 認識率の統合: Tesseract 等を用いた実際の文字認識率の測定(Phase 10予定)。
  • サブピクセル制御の深化: 色収差シミュレーション等の高度な物理ハックの追加検討。

Phase 7: Windows 最適化とリファクタリング (Phase 6+ Improvement)

  • ネイティブ API への移行 (osascript/PowerShell 廃止):
    • Windows WMI 直接制御: 輝度取得・設定において PowerShell 呼び出しを完全に廃止し、windows クレートを用いた WMI/COM 直接アクセスへ移行。実行速度の向上とセキュリティリスク(スクリプトインジェクション)の排除。
    • Windows ブロードキャスト実装: レジストリによるテーマ変更後、SendMessageTimeout を用いて WM_SETTINGCHANGE をブロードキャストするよう実装。タスクバー等の他アプリへ変更が即時反映されるようになった。
    • macOS Native API 統合: osascript コマンドを廃止。輝度制御には IOKit (IODisplaySetFloatParameter)、アラート表示には NSAlert、ダークモード判定には NSUserDefaults を使用。設定変更には NSAppleScript をインメモリ実行することで、プロセス起動オーバーヘッドを削減。
  • シェーダー演算の最適化:
    • CPU 事前計算: VerticalLouver モードの斜め成分計算で使用していた cos/sin 演算を CPU 側(Rust)に移動。毎フレーム、各ピクセルで実行されていた重い trig 関数を uniforms 経由の定数参照に置き換え、GPU 負荷をさらに低減。
  • Windows 視覚的品質の改善:
    • FHD ノート最適化: Windows FHD (150-170 PPI) 向けに period_mm を 0.20mm に引き下げ。格子の目を微細化することで、スクリーンセーバーのような「格子感」を排除し、均一なベールのような視覚効果を達成。
    • DPI Awareness 統合: SetProcessDpiAwarenessContext を呼び出し、Per-Monitor DPI Aware v2 を有効化。これにより OS による強制スケーリングを回避し、物理ピクセルに基づいた正確なフィルタ描画を実現。
    • 格子状パターンの制御: bidirectional フラグを導入。低 PPI 環境では視認されやすい千鳥格子を避け、デフォルトで縦縞(Vertical-only)を適用するよう修正。
  • パフォーマンスとシステム負荷の最適化:
    • フレームリミッター: イベントループに 60fps 上限のフレームリミッターを実装。無制限なループによる GPU 負荷を抑制。
    • 動的描画停止: 静止ディザ(スクロール速度 0)やフィルター OFF 時には ControlFlow::Wait に切り替え、GPU レンダリングを完全に停止するロジックを実装。
    • Windows GPU バックエンド: バックエンドを DX12/DX11 に優先順位付け。Intel 内蔵 GPU 等での安定性と効率を向上。
  • システム統合と堅牢性の向上:
    • PowerShell ウィンドウの隠蔽: 輝度操作等の PowerShell 呼び出し時に CREATE_NO_WINDOW フラグと -WindowStyle Hidden を併用し、黒いコンソール画面が瞬間表示される問題を解決。
    • アライメント検証: Uniforms 構造体のサイズ (80bytes) とアライメント (16-byte) をコンパイル時に検証するアサーションを追加。
    • 設定の下位互換性: DisplayConfig の全フィールドに #[serde(default)] を付与。将来のフィールド追加時にも既存の設定ファイルが読み込めるよう耐性を強化。

既知の問題 / 持ち越し

  • 内蔵ディスプレイ判定の更なる強化: SetupAPI を用いた ACPI バス接続判定への移行を検討。
  • crabgrab の遅延初期化: 将来の Semantic Privacy 実装に向け、依存関係のロードタイミングを最適化予定。

2026-05-18

Phase 6: 統合型ステルス・スイッチの実装 (v0.1.16)

  • OS 設定制御ブリッジ: フィルター形式「ステルス・ダーク」の選択に連動し、OS のダークモード切り替えと輝度自動調整(25%)を行うロジックを実装。OS の元の設定は OSSettingsSnapshot としてメモリに保持し、モード解除時またはアプリ終了時に自動復元する。
  • ステルス専用フィルター (shader.wgsl):
    • LLCC (Low-Luma Contrast Collapse): LCD 向けに、わずかなグレー(ベースグロー)を重畳して黒浮きを意図的に発生させ、斜め方向からのコントラストを消失させる新アルゴリズム。
    • UNA (Narrow Aperture Enhancement): OLED 向けに、物理ピクセル配列に最適化した超狭開口部パターンを適用。
    • Static UHF Dithering: 1x1 の固定ディザパターンにより、動きを排除しつつ高周波な遮蔽を実現。
  • プラットフォーム固有の実装:
    • macOS: osascript を利用したシステム外観(Dark Mode)と輝度キーコード送信による制御。
    • Windows: レジストリ (AppsUseLightTheme) によるテーマ制御と、PowerShell (WMI) を介した輝度操作を統合。
  • UI 統合: トレイメニューに「ステルス・ダーク (LLCC)」を追加。

既知の問題 / 持ち越し

  • macOS 輝度制御の精度: 現在はキーコード送信による擬似的な制御のため、環境によっては 25% への正確な収束が難しい場合がある。将来的に IOKit による直接制御を検討。
  • Windows PowerShell のオーバーヘッド: 輝度変更時に PowerShell を呼び出すため、わずかな遅延が発生する。

視覚バグ修正と OCR 妨害の再設計 (v0.1.13)

  • 対角線グラデーションの修正: Uniforms 構造体のアライメントを 16 バイト境界(80バイト)に厳密に合わせ、シェーダー内の斜め成分計算に modulo 演算を適用することで、画面全域に発生していた意図しない輝度勾配を解消。
  • OCR 妨害の刷新: ユーザーから「縦縞に見える」と指摘された従来のパターンを廃止し、千鳥格子状(Staggered Grid)のマイクロアパーチャ配列を採用。視覚的ストレスを抑えつつ、OCR による文字認識を効果的に妨害する高周波テクスチャへ変更。
  • Subpixel UHD Jamming (プロトタイプ): OLED および LCD の各モードにおいて、サブピクセル単位での干渉ロジックを導入。正面からの視認性を維持しつつ、斜めからの遮蔽力を物理ピクセルレベルで強化する戦略を推進。

リリース履歴 (Release History)

v0.1.23 (Current)

  • UIの改善: メニューのトップレベルにAI検知モードと最適化コマンドを配置。
  • 多言語対応 (Bilingual Support): 日本語と英語のバイリンガル対応を強化(OSのロケールに合わせて動的に切り替え)。
  • OCR妨害のリファクタリング: AIOcrInterference の内部名称を OcrJammer に変更し、ドキュメントの表記を「OCR妨害」に統一。

Code Review v2.0 対応と品質向上 (v0.1.12)

  • ホットプラグ処理の堅牢化: 新規ディスプレイ接続時に、カテゴリ検出 (detect_display_category) をオーバーレイ生成より前に行うよう順序を修正。これにより、最初のフレームから適切な PPI ベースのパラメータが適用されるようになった (#1)。
  • アニメーション判定の最適化: 毎フレーム行っていた全ディスプレイの走査を廃止。状態変更時(メニュー操作、ホットプラグ、AI 検知)にのみ calc_needs_animation で再計算し、変数を保持する方式に変更 (#8)。
  • 表示変更イベントのバッチ処理: ディスプレイ変更イベントが短時間に連続して発生した場合、プロキシスレッドでこれらをまとめ(デバウンス相当)、1回の UserEvent としてメインループに通知するように改善 (#3)。
  • macOS メインスレッド安全性の向上: detect_panel_type 内で Objc2 API を使用する際、MainThreadMarker::new() を使用して安全にメインスレッドであることを確認するよう修正 (#2)。
  • macOS システム情報のパース改善: system_profiler から取得したディスプレイ ID が 16 進数(例: 0x...)の場合でも正しくパースできるように修正 (#6)。
  • Windows 内蔵判定のヒューリスティック改善: INTERNAL キーワードに加え、プライマリディスプレイかつ横幅が 2560px 以下の場合をノート PC 内蔵と推定するフォールバックを追加 (#5)。
  • セキュリティと安全性: osascript でアラートを表示する際、文字列をエスケープするように修正 (#7)。

既知の問題 / 持ち越し

  • macOS クラムシェルモードの制限: クラムシェルモード(ノート PC の蓋を閉じた状態)からの復帰時、座標情報の変化により position_key が一致せず、稀に設定が Unknown にリセットされる場合がある。長期的には display_uuid やシリアル番号ベースの識別に移行を検討 (#4)。
  • Windows 実機検証: Windows 固有の is_internal_display フォールバックは、実機の多様な環境(特にマルチモニター環境)でのさらなる検証が必要。

2026-05-16

Phase 5: LCD IPS 視野角コントラスト崩壊型フィルターの実装

  • 新戦略の導入: LCD IPS パネルの「斜め方向でコントラストが激減する」という物理特性を積極的に利用。黒い縞で隠すのではなく、微細な輝度変調によって斜めからの判読性を奪うアプローチを採用。
  • マルチレイヤー合成シェーダー:
    • 輝度圧縮マイクログリッド: 前景/背景の輝度差を圧縮。
    • 逆コントラスト斜線ハッチング: 文字エッジのMTFを物理的に破壊。
    • 動的位相ノイズ: 8Hz の輝度揺らぎでカメラ等の積分を妨害。
  • LCD IPS 最適化: パネル種別が「LCD IPS」の場合、デフォルトの推奨モードとして LcdContrastJammer が自動選択されるように変更。
  • 低輝度低下・高視認性: 従来の黒縞フィルターに比べ、正面ユーザーの感じる画面の暗さを大幅に軽減(alpha 加算を 0.45 以下に抑制)。
  • 物理サイズ基準のパラメータ導入: フィルターの周期 (period) やスクロール速度をピクセル数ではなく物理ミリメートル単位で定義。これにより PPI の異なるディスプレイ間でも視覚的な遮蔽効果を一定に保つことが可能になった。
  • ディスプレイカテゴリの自動判定: 内蔵/外付け、解像度、物理サイズから NotebookFhd, NotebookHiDpi, ExternalLarge4K, ExternalGeneral の4カテゴリを自動判定するロジックを実装。
  • プラットフォーム固有の実装:
    • macOS: CGDisplayIsBuiltin での内蔵判定、CGDisplayScreenSize での物理サイズ取得を実装。HiDPI スケーリング時(例: 4K モニターで 3008×1692 設定)でも正しく 4K 相当として判定できるよう、カテゴリ検出の閾値を調整。PPI 計算に用いる解像度が論理値(スケーリング後)であっても、最終的な視覚効果としての物理ミリメートル幅が一致することを確認。
    • Windows: EnumDisplayDevices での内蔵判定、GetDeviceCaps での物理サイズ取得を実装。
  • シェーダーの物理サイズ対応: Uniforms を拡張し、PPI に応じて計算されたピクセル単位のパラメータをシェーダーへ渡すように変更。
  • UI 統合: トレイメニューに現在の画面タイプと PPI を表示し、必要に応じて手動でカテゴリを上書きできる機能を追加。

2026-05-15

Phase 0: プロトタイプ (macOS)

  • プロジェクト初期化: cargo init を実行し、Cargo.tomltao, softbuffer, tray-icon, muda, global-hotkey, objc2 等の依存関係を追加。
  • ディレクトリ構造の作成: src/ 直下に app.rs, display_config.rs, overlay.rs, platform/ を作成し、初期ファイルを配置。
  • データ構造の実装: MonitorId, DisplayConfig, AppState を実装。
  • オーバーレイウィンドウの実装: softbuffer を使用した描画ロジックと、objc2 を使用した macOS 固有設定(クリック透過、最前面、全スペース表示)を実装。
  • ビルド確認: cargo build が正常に完了し、実行可能なバイナリが生成されることを確認。

Phase 1: MVP (macOS)

  • 単一インスタンス制御: src/single_instance.rs を実装。macOS では flock、Windows ではミューテックスを使用。
  • トレイ UI: src/tray.rs を実装。tray-iconmuda を使用し、グローバルトグル、ディスプレイ別設定、終了メニューを構築。
  • ホットプラグ対応: macOS の NSNotificationCenter を利用して画面構成変更を検知し、オーバーレイウィンドウを動的に追加・削除するロジックを実装。
  • グローバルショートカット: src/hotkey.rs を実装。Cmd+Shift+P でフィルターのグローバル ON/OFF を切り替え可能に。
  • macOS バンドル: Info.plist を作成し、.app バンドルを生成するスクリプト scripts/bundle_macos.sh を用意。LSUIElement を有効にして Dock アイコンを非表示化。
  • Makefile: make mac, make win, make all 等のターゲットを持つ Makefile を作成し、ビルド工程を自動化。

既知の問題 / 持ち越し

  • Windows 版の検証: 現在の環境が macOS のため、Windows 特有の動作(トレイアイコン、ホットプラグ検知)は未検証。
  • アイコン: 現時点では Python で生成したダミーの黒い PNG を使用。製品版では適切なデザインの icns/ico が必要。
  • softbuffer の再生成: ホットプラグ時にウィンドウを再作成する際、描画サーフェスも適切に管理する必要がある(現在は都度生成)。

2026-05-15

Phase 2: Ver 2.0 拡張 (macOS)

  • 設定の永続化: confyserde を導入し、AppConfig を介して AppState の状態(グローバルON/OFF、濃度、各ディスプレイの設定、自動起動設定)を保存・復元するロジックを実装。
  • 濃度変更 UI: トレイメニューに「フィルター濃度」サブメニューを追加し、10%〜90%の間で一括変更できるようにした。
  • 自動起動: auto-launch クレートを使用し、macOS の LaunchAgent への登録・解除をトレイメニューから制御できるように実装。
  • macOS Alpha 調整: 今まで固定値だった setAlphaValueAppState の設定値に連動するように修正。

既知の問題 / 持ち越し

  • Windows 版の自動起動: auto-launch は Windows のレジストリにも対応しているが、実機での動作確認が必要。
  • ルーバーパターンの色味: 現在は 1px 黒 : 1px 透明の固定だが、Alpha 設定との兼ね合いで調整が必要になる可能性がある。

2026-05-15

Phase 2 Extension: 縦縞ルーバーパターン (macOS)

  • tiny-skia 導入: 描画ロジックの柔軟性を高めるため tiny-skia を追加。
  • 描画モード追加: 「単色レイヤー」と「縦縞ルーバー」を切り替える FilterMode を実装。
  • ルーバー描画: 1px 黒 : 1px 透明の垂直ストライプを描画するロジックを overlay.rs に追加。
  • トレイメニュー更新: フィルター形式を選択できるサブメニューを追加。設定は永続化される。

Phase 3: AI 覗き見検知 (macOS)

  • 技術選定: tract-onnxnokhwa を採用。Pure Rust に近い構成で軽量な推論環境を構築。
  • バックグラウンド検知: 専用スレッドでカメラキャプチャと推論を実行。メインループへの通知には mpscUserEvent を使用。
  • 動的フィルター: 2人以上の顔を検知した際、一時的に Alpha を 0.8 に引き上げるロジックを実装。
  • 権限管理: Info.plist を更新し、macOS でのカメラ・アクセシビリティ権限の説明を追加。

2026-05-16

Phase 5: バグ修正と視覚的妨害効果の更なる改善

  • シェーダーのバグ修正 (shader.wgsl):
    • Unknown パネルのスクロール速度が極低速(0.2px/s)になっていた問題を修正し、保守的な 300px/s に設定。
    • FastVibration モードが bidirectional フラグを無視していた問題を修正。
    • Rust 側と WGSL 側の Uniforms 構造体のアライメントとフィールド数(パディング)を一致させた。
  • イベントループの修正 (main.rs):
    • Poll モード中に RedrawRequestedMainEventsCleared で二重に描画が走るバグを修正。
  • プライバシー保護効果の強化 (shader.wgsl):
    • 輝度漸減レイヤー: VerticalLouver 等の透明部分に薄いグレーを重畳し、斜め方向での輝度差を強調。
    • ダブルレイヤー合成: FastVibration に第2の干渉レイヤーを追加し、斜め方向でのモアレ(干渉縞)発生を促進。
    • エッジブラー効果: 縞の境界に 1.5px のグラデーションを追加し、正面からの視覚的ストレスを軽減しつつ、斜めからの輪郭をボカした。
    • Intensity 仕様変更: フィルター強度が「縞の太さ」ではなく「遮蔽率 (30% - 90%)」に直感的に連動するよう計算式を刷新。
    • 動的閾値: AsymmetricCurve の遮蔽率を強度に応じて動的に変化させるよう改善。
  • シェーダーの修正 (shader.wgsl):
    • discard を廃止し、透明色 (vec4(0,0,0,0)) と遮蔽色 (vec4(0,0,0,alpha)) を返すように変更。これによりフィルター濃度設定が正しく機能するようになった。
    • パネル種別(OLED/LCD)に応じた高速スクロール(300-600px/秒)と位相反転アニメーションを各モードに実装。
    • bidirectional フラグを導入し、OLED 等で格子状(四方向)の遮蔽パターンを適用可能にした。
  • イベントループの改善 (main.rs):
    • アニメーションが必要なモードが有効な際、ControlFlow::Wait から ControlFlow::Poll に自動的に切り替えるロジックを実装。
    • MainEventsCleared で描画を駆動することで、フレームレートの安定化と滑らかなアニメーションを実現。
  • データ構造の更新 (overlay.rs):
    • Uniforms 構造体に bidirectional フィールドを追加し、16バイト境界へのアライメント調整(パディング)を実施。
  • パネル判定ロジックの実装: macOS (system_profiler, NSScreen EDR) および Windows (EnumDisplayDevices, モデル名マッチング) におけるパネル種別(OLED/LCD IPS/LCD TN)の自動判定を実装。
  • 適応型フィルタ戦略: シェーダー (shader.wgsl) を更新し、パネル種別に応じた最適化(OLED: 焼き付き防止、LCD IPS: 位相反転アニ メーション、LCD TN: 垂直スクロール)を適用。
  • 自動モード切り替え: パネル種別が判定・変更された際、そのパネルに最適な FilterMode(OLED: 縦縞, IPS: 高速振動, TN: 非対称曲線)を自動的に選択するロジックを AppState に実装。
  • UI 統合: トレイメニューに判定されたパネル種別を表示し、手動での変更・保存を可能にした。
  • データ構造の更新: DisplayConfigpanel_type を追加。
  • ドキュメント更新: macOS での画面収録パーミッション要求に関する説明を MANUAL.md および仕様書に追加。

2026-05-24

Phase 12: アルゴリズム改善と安定性向上 (Stability & Logging Improvements)

  • macOS 安定性の更なる改善:
    • StealthDark モード等のシステムテーマ切り替え時に発生していた NSAppleScript のクラッシュ(nil 戻り値の不正なデリファレンス)を修正。msg_send! を使用して安全に nil をハンドリングするように変更。
    • 権限判定ロジック has_screen_capture_access を改善。CGPreflightScreenCaptureAccess の偽陰性(既に許可されているのに false を返す)に対応するため、初回キャプチャ失敗時に CGRequestScreenCaptureAccess で確定的な再試行を行うよう強化。
    • 権限警告ダイアログの重複表示を抑制。
  • プラットフォーム固有の診断機能:
    • 全プラットフォーム共通の logger! マクロを刷新し、タイムスタンプ付きでログファイルへ出力する機能を実装。
    • macOS: /tmp/softveil.log へ出力。
    • Windows: %TEMP%\softveil.log へ出力。
  • ベンチマークの堅牢性向上:
    • ベンチマークスレッドとメインループ間の通信に 10 秒のタイムアウト処理を追加。メインループのハングやデッドロック発生時でもベンチマークスレッドが安全に継続/終了できるようにした。
    • キャプチャ失敗時のエラーハンドリングを強化し、個別のモニターでの失敗がベンチマーク全体を停止させないように改善。
  • 警告ゼロのクリーンビルド:
    • cargo check および cargo build --release において、未使用コードの整理を行い警告ゼロを達成。
    • macOS/Windows 両 OS でのクロスコンパイル成功を確認。

2026-05-24 (Update)

Phase 12.1: パラメーター微調整 (Display Parameter Tuning)

  • 指示書 v2.0 に基づく最適化:
    • NotebookHiDpi: period_mm を 0.50 へ、cover_ratio を 0.55 へ引き上げ、MacBook Air での縞の視認性を改善。
    • NotebookFhd: scroll_speed を 10.0mm/s に設定し OCR 対策を有効化。また bidirectional を true にし横方向の覗き見保護を強化。
    • HighIntensitySPD (OLED): alpha_base を 0.88 に下げ、MacBook Pro 等の OLED パネルでの正面視認性を向上。

2026-05-24 (Update 2)

Phase 12.2: 次世代 LCD 秘匿技術「NarrowMask」の実装

  • アルゴリズムの刷新: 「縞を描く」から「1px の開口部を残して完全黒で塞ぐ」アプローチへ転換。
    • shader.wgsl: HighIntensitySPD (LCD) において、alpha = 1.0 (完全黒) を使用した極小開口パターンを実装。
    • shader.wgsl: min_alpha_ratio を 0.0 (ダークモード) / 0.30 (ライトモード) に調整し、遮蔽部分のコントラストを最大化。
  • パラメーター最適化:
    • display_config.rs: MacBook Air 向け cover_ratio を 0.80、FHD 向けを 0.75 へ引き上げ、斜めからの遮蔽力を劇的に向上。

2026-05-24 (Update 3)

macOS 固有のバグ修正とUX改善

  • 終了メニューの修正: MENU_ID_QUIT のハンドリングが漏れていたため追加。ベンチマーク後も正常に終了可能に。
  • 権限判定の堅牢化: CGPreflightScreenCaptureAccess の偽陰性に対応するため、判定が false の場合でも実際に 1x1 のキャプチャを試行して成功すれば許可済みとみなす「実測ベース」の判定ロジックを導入。不要な警告ダイアログを完全に排除。
  • メニュー消失問題の解決: ベンチマーク進捗更新時の rebuild_menu を停止。ツールチップと通知のみで進捗を知らせることで、メニュー操作中に勝手にメニューが閉じる現象を解消。
  • ステルスモードの改善: set_dark_mode の AppleScript 実行タイミングとエラーハンドリングを見直し。またテスト実行時のハング防止のため、テスト環境下でのシステム設定変更をスキップするよう調整。

2026-05-24 (Final Update)

macOS 安定性向上とバグ修正

  • 権限判定の抜本的改善: CGRequestScreenCaptureAccess を導入し、has_screen_capture_access (プリフライト+実キャプチャ) で失敗した場合のみ呼び出すように変更。これにより、許可済み環境での不要なダイアログを完全に解消。
  • ベンチマーク進捗の視覚化: 10% ごとに rebuild_menu を呼び出すように変更(メニューが閉じる副作用はあるが、進捗の確認を優先)。ただし、ステルスモード切り替え(テーマ変更)による意図しないメニュー閉鎖は防止。
  • イベントループの整理: 重複していた MENU_ID_QUIT ハンドラを削除し、コードの健全性を向上。
  • ステルス・ダークの確実な動作: AppleScript の文字列構築とエラーハンドリングを強化し、macOS でのダークモード切り替えの信頼性を向上。

Phase 13: メニュー UX の刷新とパフォーマンス改善 (Menu UX & Polish)

...

  • ドキュメントの同期:
    • MANUAL.md および仕様書を最新のメニュー構造に合わせて更新。

2026-05-24 (Final Update 3)

メニュー構造の更なる最適化 (Further Menu Optimization)

  • グローバルプリセット管理の廃止:
    • アイコン直下の「設定プリセット管理」メニューを削除。ユーザーの指摘通り、各モニターごとのサブメニュー内での管理に一本化。
  • 個別モニター設定の保存:
    • 各モニターのサブメニュー内に「現在の設定を保存...」を追加。これにより、特定のモニターの設定を個別にプリセット化可能に。
  • アクティブプリセットの可視化:
    • 適用済みのプリセットにチェックマーク(☑️)が表示されるよう改善。

macOS 権限管理のバグ修正 (macOS Permission Bug Fix)

  • 1x1 キャプチャテストの堅牢化:
    • CGDisplayCreateImageForRect を使用し、極小範囲のキャプチャを試行することで、権限チェックの偽陽性(許可されているのに「未許可」と判定される問題)を抑制。
  • 非ブロック型権限チェック:
    • ベンチマーク開始時の権限チェックで失敗しても、即座にエラーダイアログを出さずに実行を継続。
    • 実際のキャプチャに成功した時点で screen_capture_authorized フラグを更新し保存するよう変更。これにより、OS側のフラグ反映の遅延による誤作動を完全に解消。

2026-05-29 (Update)

Phase 15.1: AI 覗き見検知メニュー UI の改善 (AI Menu UX Refinement)

  • AI 覗き見防止メニューの親メニュー(サブメニュー)集約:
    • トップレベルの肥大化を防ぎUIを整理するため、AI覗き見防止のグローバル設定項目を「AI 覗き見検知 ▶ [現在のステータス]」親メニューに集約。
  • 現在のステータスの動的表示:
    • 親項目(サブメニュー)のラベルに現在のモード名([オフ][✓ Vigilance][✓ 常時フィルター強化])を動的に表示。これにより、メニューを開く手間を省き、ワンクリック(一目)で有効状態と現在のモードが安心・安全に確認可能となった。
  • 排他選択 (3択ラジオ形式) の実装:
    • サブメニュー内を以下の3つの排他選択項目に統合:
      • オフ
      • Vigilance(検知時のみ展開)
      • 常時フィルター強化
  • ドキュメントの同期:
    • MANUAL.mdSoftveil_specs_v1_6.mdSoftveil_ToDo_v1_3.md を最新のメニュー構造と表示文字列に合わせて同期更新。