# 提出手順 — ローカルAI写真整理（依頼主の作業）

開発側でできるところ（MSIX・掲載文・スクリーンショット・プライバシーポリシー案）は済んでいる（DEVLOG「M3 リリース準備」）。
ここに書いたのは、Partner Center のアカウント・本物の写真フォルダー・iPhone の写真が要るため、依頼主にしかできない作業。

## 0. 手元にあるもの
| もの | 場所 |
|---|---|
| MSIX（未署名・Store が署名する） | `apps/photo-organizer/dist/PhotoOrganizer_1.0.0.0_x64.msix`（identity は仮。手順 2 で作り直す）。大きさ・SHA256 は DEVLOG「M3 リリース準備」の「最終ビルド」（確かめ方：PowerShell で `Get-FileHash dist\PhotoOrganizer_1.0.0.0_x64.msix`。手順 2 で作り直すと値は変わるので、そのときは DEVLOG に新しい値を書く） |
| 掲載文（日本語・英語） | `store/listing-ja.md`・`store/listing-en.md` |
| スクリーンショット 5 枚（1600×900） | `store/screenshots/01〜05.png`（作り直し：下の手順 2 の最後）。写っている写真はすべて CC0（出典は `store/photo-sources.csv`） |
| プライバシーポリシー案 | `store/privacy-policy.md` |

## 1. 名前を予約する（Partner Center）
1. Partner Center → アプリとゲーム → 新しい製品 → MSIX または PWA アプリ。
2. 名前：**ローカルAI写真整理**（2026-11-09 に空きを確認。`docs/ms-store-apps/name-availability-2026-11-09.md`。確認から日が経っているので取られていないか見る）。取られていたら別名を決め、下の差し替えをその名前で行う。
3. 英語の掲載名を別に持つなら、同じ製品に「Local AI Photo Organizer」も予約する（任意。予約しない場合は英語の掲載にも日本語の名前を使う）。
4. 製品 → 製品 ID（Product identity）の画面で次をメモする：
   - Package/Identity/Name（例 `imoninja.1234ABCD5678`）
   - Package/Identity/Publisher（`CN=ECF78C6D-…` — transcriber と同じはず）
   - Store ID（12 文字、例 `9ABCDEFGHIJK`）

## 2. 予約した値に差し替える（開発側に頼んでもよい・5 分）
| ファイル | 項目 | 今の値（仮） | 入れる値 |
|---|---|---|---|
| `apps/photo-organizer/msix.json` | `identity.name` | `imoninja.PhotoOrganizerDev` | Package/Identity/Name |
| 同 | `identity.publisher` | `CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE` | Package/Identity/Publisher（同じなら変更なし） |
| 同 | `display_name` | `ローカルAI写真整理` | 予約した名前（完全に同じ文字。空白・全角半角も） |
| 同 | `_note` | 「仮」の説明 | 消すか「予約済み（日付）」に |
| `apps/photo-organizer/main.py` | `INFO.store_id` | `""`（空＝購入ボタンでストアを開けない） | Store ID |
| 同 | `INFO.name["ja"]` / `["en"]` | `ローカルAI写真整理` / `Local AI Photo Organizer` | 予約した名前（英語名を予約しなかったら en はそのままでよい） |
| `store/listing-ja.md`・`listing-en.md` | 製品名 | 同上 | 予約した名前 |

差し替えたら MSIX を作り直す（アプリのフォルダで）：
```
powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1
```
→ `dist\PhotoOrganizer_1.0.0.0_x64.msix`。作り直したら `build\licenses\index.json` に `"license text not included"` が 0 件であることを見る（DEVLOG の確かめ方）。

名前を変えた場合は、スクリーンショットのヘッダーにアプリ名が写っているので撮り直す（CC0 の写真は初回だけ Wikimedia Commons から取得。作業フォルダーは何でもよい。P: ドライブを一時的に使う）：
```
set LOCALAPPDATA=%TEMP%\po-shots\appdata
set QT_QPA_PLATFORM=offscreen
set IMOSHELL_LICENSE=purchased
apps\photo-organizer\.venv\Scripts\python apps\photo-organizer\tools\store_shots.py %TEMP%\po-shots\work apps\photo-organizer\store\screenshots
```

## 3. 本物の写真でドッグフーディング（提出前・半日）
CC0 の写真と、評価用の 132 枚・合成画像でしか確かめていない。**提出前に必ず自分の写真フォルダーで一度通す。**
1. 開発者モードで入れる：`powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1 -DevInstall`（スタートメニューに出る）。
2. 「索引管理」→「フォルダーを追加」で、ふだんの写真フォルダー（できれば **1 万枚以上**。仕様のリリース基準「1 万枚で完走・検索 1 秒以内」）を選ぶ。試用の 1,000 枚を超えて試すには、開発版では設定から試用を製品扱いにできないので、`IMOSHELL_LICENSE=purchased` を付けた未パッケージ版（`.venv\Scripts\python main.py`）で行う。
3. 記録してほしいこと（DEVLOG に追記するか、開発側に渡す）：
   - 枚数・かかった時間（画面下の「索引作成中 N / M 枚」の始まりと終わり）・PC の CPU 名
   - 途中でアプリを閉じて（「中止して終了」）開き直し、続きから再開するか
   - 検索：家族の行事・旅行先・食べ物など 10 語くらいで、上位に目当ての写真が出るか（出なかった言葉）
   - 「類似グループ」の候補に、明らかに別の写真が混ざっていないか（スクショ・書類は混ざりやすい＝想定どおり）
   - 「ごみ箱へ」を 1 回だけ試し、ごみ箱から元に戻せること
4. **iPhone の写真（HEIC）**：iPhone から取り込んだフォルダー（「互換性優先」ではなく「高効率」で撮った HEIC）を追加して、
   - 索引に入るか、向き（縦持ちで撮った写真が横倒しにならないか）、撮影日が合っているか（検索結果の日付）
   - 「HEVC ビデオ拡張機能」が入っていない PC があれば、そこで「索引管理」に入れ方の案内が出るか、入れた後の「索引を作成・更新」で読めるようになるか
   （開発機では Windows で作った HEIC でしか確かめていない。DEVLOG の HEIC の節）
5. 終わったら登録を外す：`Get-AppxPackage -Name <identity.name> | Remove-AppxPackage`（索引・サムネイルも消える）。写真そのものはアプリが動かさないので何もしなくてよい。

## 4. プライバシーポリシーを公開する
1. `store/privacy-policy.md` の「最終更新日」を入れ、内容を確認する。
2. 公開場所（transcriber・receipt-prep と同じ置き場所）に置き、URL を控える。

## 5. Partner Center で提出する
1. **価格と使用可能状況**：市場＝日本（任意で全市場）、価格 ¥1,980、無料試用＝「試用版あり・期限なし」（アプリ側で 1,000 枚に制限している）。
2. **プロパティ**：カテゴリ＝写真＆ビデオ。プライバシーポリシーの URL。サポート連絡先 imoninja@gmail.com。
   「このアプリは個人情報にアクセス・収集・送信しますか？」→ いいえ（外部送信しない。写真は端末内で解析）。
3. **年齢区分**：IARC の質問票（ユーザー間のやり取りなし・位置情報なし・購入はストアのみ）→ 全年齢になるはず。
4. **パッケージ**：手順 2 で作り直した `.msix`（約 225MB）をアップロード。対象：Windows 10/11 デスクトップ。
   エラーが出たら：identity・publisher・display_name の不一致がほとんど（予約情報と 1 文字でも違うと弾かれる）。
5. **ストア掲載情報（日本語）**：`listing-ja.md` を貼る。スクリーンショット 5 枚（キャプションも）。アイコンはパッケージのもの。
   **英語**：`listing-en.md`（英語 UI は主な画面だけ、と明記済み）。出さないなら日本語のみでもよい。
6. **提出時のオプション → 審査担当へのメモ（Notes for certification）**：
   「Photo search and duplicate finder. The AI model (Japanese CLIP, Apache-2.0) is bundled; no network access. Test: Index → Add folder (any folder with JPEG photos) → wait for indexing → Search tab: type a word such as "beach" or "海" → Duplicates tab → Find. Photos are only moved to the Recycle Bin after explicit confirmation. HEIC files require the Windows HEIF/HEVC extensions. Free trial: 1,000 photos.」
7. 制限付き機能 `runFullTrust` の理由欄：「Desktop (Win32) app packaged with MSIX; runs a PySide6 GUI, ONNX Runtime for on-device image analysis, and Windows.Graphics.Imaging for HEIC. No other restricted capabilities.」

## 6. 公開後すぐ（2 週間は夜間チェック：ロードマップの共通基準 4）
- 実際に Store から入れて：購入前に「試用 索引 0 / 1,000 枚」→ 購入後に「製品版」、購入ボタンでストアのページが開く（store_id が入っているか）。
- 機内モードで起動しても「製品版」のまま（common TODO-M2 §18.2）。
- 評価・レビューと imoninja@gmail.com を毎晩見る。検索の質の報告には「どんな言葉で、どんな写真を探したか」を聞く（写真は送ってもらわなくてよい、と掲載文に書いてある）。

## 未確認のまま提出することになる点（知っておいてほしいこと）
- 1 万枚の本物の写真フォルダーでの完走（手順 3）。開発機では 132 枚×数回でしか測っていない。
- 本物の iPhone の HEIC（手順 3-4）。特に向き・撮影日・HEVC 拡張機能が無い PC での案内。
- 索引の速さ：開発機（i5-7400、他の作業で CPU が埋まった状態）で 1,000 枚あたり約 5〜7 分。依頼主の PC での実感を手順 3 で。
- Windows 10 での動作（開発機は Windows 11 のみ）。
- Store 経由の購入・試用の実反映（公開後にしか確かめられない）。
- バージョン情報の画面のライセンス表示（Qt・PyInstaller の表示文、AI モデルの欄）は index.json で確認済み、画面では一度目で見る（表示文の法的な最終確認は人が読む：common TODO-M2 §17.3）。

## プライバシーポリシーの URL（2026-11-10 公開済み）

https://local-ai-photo-organizer.pages.dev/ （/privacy/ でも同じページ）。Partner Center の「プライバシー ポリシー URL」に入れる。本文を直したら privacy-site/README.md の手順で作り直す。

## 提出用の最終 MSIX（2026-11-10、名前の予約後）

**これより前に書いた MSIX の大きさ・SHA256 は古い。提出にはこれを使う。**

- `apps/photo-organizer/dist/PhotoOrganizer_1.0.0.0_x64.msix`：222306519 バイト
- SHA256 `37254A098BE482FD6B274688DC694D6AEED7864C872220ACC5153B20B9DB35C2`
- Identity/Name `imoninja.AI`、Store ID `9NSJZJK7WRXS`、Publisher `CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE`
- 含むもの：BOM 付き JSON の読み込み（common §22・アプリ側 utf-8-sig）、ライセンス収集の改善（§23）、左メニューの UIA（§23）、ビルド時の PATH 固定（§24：Git の OpenSSL DLL 混入なし）
- この PC にも同じレイアウトを開発者モードで登録済み（動作確認用）
