# 提出手順 — ファイル上書き保険（依頼主の作業）

開発側でできるところ（MSIX・掲載文・スクリーンショット・プライバシーポリシー案・実エディタでの確認・常駐の負荷の実測）は済んでいる（DEVLOG「M3 リリース準備」）。
ここに書いたのは、Partner Center のアカウントと、**この PC に無いアプリ・依頼主のふだんの環境**が要るため、依頼主にしかできない作業。
**名前はまだ予約していない**（手順 1）。identity・store_id は仮の値のままなので、予約後に手順 2 で差し替えて MSIX を作り直す。

## 0. 手元にあるもの
| もの | 場所 |
|---|---|
| MSIX（未署名・Store が署名する。**identity は仮**） | `apps/file-guardian/dist/FileGuardian_1.0.0.0_x64.msix`。2026-11-10 の M3 版：34,489,177 バイト、SHA256 `D1BB370DBA85EE6F53249107B84A3149C8FE28AD897BCA8D85FACB0FA38F15E9`（確かめ方：`Get-FileHash apps\file-guardian\dist\FileGuardian_1.0.0.0_x64.msix`。手順 2 で作り直すと値は変わるので、そのときは DEVLOG に新しい値を書く） |
| 掲載文（日本語・英語） | `store/listing-ja.md`・`store/listing-en.md` |
| スクリーンショット 5 枚（1366×768。架空のフォルダー・ファイル名だけ） | `store/screenshots/01〜05.png`（作り直し：手順 2 の末尾） |
| プライバシーポリシー案 | `store/privacy-policy.md` |
| 実エディタでの確認結果・常駐の負荷 | DEVLOG「M3 リリース準備」 |

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

## 2. 予約した値に差し替える（開発側に頼んでもよい・5 分）
| ファイル | 項目 | 今の値（仮） | 入れる値 |
|---|---|---|---|
| `apps/file-guardian/msix.json` | `identity.name` | `imoninja.FileGuardianDev` | Package/Identity/Name |
| 同 | `identity.publisher` | `CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE` | Package/Identity/Publisher（同じなら変更なし） |
| 同 | `display_name` | `ファイル上書き保険` | 予約した名前（完全に同じ文字） |
| 同 | `startup_task.display_name` | `ファイル上書き保険` | 予約した名前（設定 → スタートアップ アプリに出る名前） |
| 同 | `_note` | 「仮」の説明 | 消すか「予約済み（日付）」に |
| `apps/file-guardian/main.py` | `INFO.store_id` | `""`（空＝購入ボタンで案内文を出す） | Store ID |
| 同 | `INFO.name["ja"]` / `["en"]`、`ResidentSpec.tooltip` | `ファイル上書き保険` / `File Overwrite Insurance` | 予約した名前（英語名を予約しなかったら en はそのままでよい） |
| `apps/file-guardian/tools/msix_check.ps1` | ウィンドウ名「ファイル上書き保険」 | 同左 | 名前を変えたときだけ（1 か所） |
| `store/privacy-policy.md` | §4 の保存先 | `%LOCALAPPDATA%\Packages\<本アプリ>\LocalState\store` | そのままでもよい（PFN を書くなら `<本アプリ>` を PFN に） |
| `apps/file-guardian/DEVLOG.md` | — | — | 差し替えたこと・新しい SHA256 を一行 |

- `STARTUP_TASK_ID`（`FileGuardianStartup`）は名前と関係ないので変えない。
- 名前を変えた場合は、スクリーンショットのヘッダーにアプリ名が写っているので撮り直す（アプリのフォルダーで。空いているドライブ文字を `--drive` に）：
  ```
  .venv\Scripts\python tools\store_shots.py store\screenshots %TEMP%\fg-shots --drive R:
  ```
  （架空のファイルを `%TEMP%\fg-shots` に作り、`subst R:` で「R:\創作\小説原稿」などに見せて撮る。終わったら subst は外れる。`%TEMP%\fg-shots` は手で消す）
- 差し替えたら MSIX を作り直す（アプリのフォルダーで）：`powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1`
  → `dist\FileGuardian_1.0.0.0_x64.msix`。`build\licenses\index.json`（14 件）は差し替えで変わらない。
- 作り直した MSIX を一度入れて確かめるなら：`build.ps1 -DevInstall` → `powershell -ExecutionPolicy Bypass -File tools\msix_check.ps1`（一時フォルダーを保護→上書き→復元→設定の標準ボタン→`--quit`→登録解除まで自動。15/15 が出れば良い）。

## 3. この PC で確かめられなかったこと（依頼主の環境で・提出前に。30 分）
開発側の確認（DEVLOG）：メモ帳・VS Code・PowerShell・cmd の copy・エクスプローラーの上書きコピー・git checkout／reset・削除で、
控えが取れ、書き込み途中の中身を版にしておらず、元の中身に戻せた。**Office（Word・Excel）とクリエイター向けのアプリはこの PC に無い**ので未確認。

### 3-1. 手順（ふだん使うアプリで。本物の作業フォルダーではなく、試し用のフォルダーで）
1. 開発者モードで入れる：アプリのフォルダーで `powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1 -DevInstall`（スタートメニューに「ファイル上書き保険」）。
   開発者モードの登録は Store の外なので**試用扱い（監視フォルダー 1 つ）**。試し用のフォルダーを 1 つ作って（例 `ドキュメント\上書き保険テスト`）追加する。
2. 下の表のアプリで、そのフォルダーの中に新しいファイルを作って保存 → 少し書き換えて保存（2〜3 回、それぞれ 5 秒以上あける）→ **保存のたびにアプリがエラーを出さないか**を見る。
3. 「復元」画面でそのファイルの版が保存の回数だけ（＋監視開始時）あるか → いちばん古い版を選んで「この版に戻す…」→ アプリで開き直して中身が戻っているか。
4. 一度だけ、ファイルを**エクスプローラーで削除**（ごみ箱へ）→「復元」画面で「（削除済み）」が出て、戻せるか。
5. 終わったら：トレイのアイコン →「終了」、`Get-AppxPackage -Name imoninja.FileGuardianDev | Remove-AppxPackage`（控えた版・設定も消える。試し用のフォルダーは残るので手で消す）。

### 3-2. 記録用紙（コピーして使う）
```
日付：      PC：（ノート／デスクトップ、CPU・メモリ）    Windows：11 ／ 10
| アプリ（版）              | ファイルの種類 | 保存のたびに控えが増えた | 保存時にアプリ側のエラー | 復元して中身が戻った | 気づいたこと |
| Word                      | .docx          |  |  |  |  |
| Excel                     | .xlsx          |  |  |  |  |
| （CLIP STUDIO PAINT 等）  | .clip          |  |  |  |  |
| （Photoshop 等）          | .psd           |  |  |  |  |
| （DAW・動画編集ソフト）   |                |  |  |  |  |
| （ゲームのセーブ）        |                |  |  |  |  |
削除（ごみ箱）から戻せたか：はい／いいえ
「控えられませんでした」の通知が出たか：なし／あり（いつ・どのファイル）
```
- 特に見てほしいのは「**保存時にアプリ側のエラー**」。大きいファイル（16 MB 超）を「一時ファイル → 名前の置き換え」で保存するアプリは、控えの読み取りと重なると保存に一度失敗することがある（開発側の最悪条件の試験：24 MB・約 2 秒おきの連続保存で 15 回中 1 回。DEVLOG）。Word・Excel は保存中に一時ファイルを作る方式なので、大きい文書で何度か保存してみてほしい。
- Word・Excel・クリエイター向けアプリで問題が出たら、記録用紙を開発側へ。対処（その拡張子の控えを少し遅らせる、など）を v1.0.1 で入れる。

### 3-3. OneDrive（任意・5 分）
開発機の OneDrive フォルダーには本物の「オンラインのみ」のファイルが 955 件あり、すべて**中身を開かずに飛ばし、ダウンロードも起きない**ことを確かめた（読み取りのみ）。
ただし開発機では OneDrive が起動していない（サインアウト状態）ため、次は確かめていない：
1. OneDrive の中の試し用フォルダー（例 `OneDrive\上書き保険テスト`）を監視に追加し、ファイルを作って保存 → 控えが増える。
2. そのファイルを右クリック →「空き領域を増やす」（オンラインのみにする）→ 控えが**増えず**、「削除」とも記録されない（復元画面に「（削除済み）」が出ない）。
3. もう一度「このデバイス上に常に保持する」→ 中身が変わっていなければ控えは増えない。
4. 監視中にファイルが勝手にダウンロードされていない（エクスプローラーの状態の列が雲のまま）。

### 3-4. ノート PC の電池（任意）
常駐の負荷は開発機（デスクトップ、4 コア）で実測した（待機中 CPU 1 コアの 0.1% 前後・2 プロセス合計の専用メモリ 81〜97 MB。DEVLOG）。ノート PC をお持ちなら、
一晩つけたまま（スリープなし）でバッテリーの減りが入れる前と変わらないか、設定 → システム → 電源とバッテリー → バッテリー使用状況でこのアプリの割合が低いかを見る。

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

## 5. 提出前に一度読むもの（法的な最終確認ではない）
- アプリの「ヘルプ」→「バージョン情報」で、一覧の上の **「Qt 6 / PySide6 / Shiboken6」の表示文**（LGPL v3、差し替えの方法、ソースの入手先）を読む（手順 3 のついでに）。common TODO-M2 §17.3 の注のとおり、表示文は人が一度読むこと。

## 6. Partner Center で提出する
1. **価格と使用可能状況**：市場＝日本（任意で全市場。英語の掲載文と一部英語の画面はある）、価格 **¥1,480**、
   無料試用＝**「期限なし」（Trial never expires）**（アプリ側で監視フォルダー 1 つに制限している。試用を「なし」にすると購入前に入れられず、
   期限付きにすると期限後に起動できなくなって制限と二重になる）。セール価格：なし。公開日：「認定後すぐに公開」か「手動で公開」。
2. **プロパティ**：カテゴリ＝**ユーティリティ＆ツール（Utilities & tools）**、サブカテゴリがあれば「バックアップと管理（Backup & manage）」。
   プライバシーポリシーの URL（手順 4）。サポート連絡先 imoninja@gmail.com。
   「このアプリは個人情報にアクセス・収集・送信しますか？」→ **いいえ**（外部送信しない。ファイルの控えは端末内だけに保存し、インターネットに接続しない）。
   システム要件（推奨として）：x64、メモリ 4 GB 以上、空き容量 約 0.1 GB（アプリ）＋版の保存先（既定の上限 10 GB、設定で変更可）。
3. **年齢区分**：IARC の質問票（暴力・性的表現等なし、ユーザー同士のやり取りなし、位置情報なし、個人情報の共有なし、アプリ内購入なし、ブラウザー機能なし）→ 全年齢（3+）になるはず。
4. **パッケージ**：手順 2 で作り直した `.msix` をアップロード。対象：Windows 10/11 デスクトップだけ（Xbox・HoloLens 等は外す）。
   エラーが出たら：identity・publisher・display_name の不一致がほとんど（予約情報と 1 文字でも違うと弾かれる）。
5. **ストア登録情報（日本語）**：`listing-ja.md` を貼る。スクリーンショット 5 枚を番号順に（キャプションは listing の表）。アイコンはパッケージのもの。
   **英語**：`listing-en.md`。パッケージが ja-JP と en-US を宣言しているので両方の登録情報が求められる。
6. **申請オプション**：
   - 制限付き機能 `runFullTrust` の理由（英語で貼る）：
     > Desktop (Win32) app packaged as MSIX (Python/Qt). runFullTrust is required to run the desktop executable, which watches the
     > folders the user selects (ReadDirectoryChangesW) and keeps local versions of changed files so they can be restored. It also
     > registers an optional StartupTask so protection resumes after sign-in (the user can turn it off in Settings > Apps > Startup).
     > The app has no network access and does not send user files or data anywhere.
   - 認定の注意事項（Notes for certification、英語で貼る）：
     > Keeps a version of files in user-selected folders every time they are saved, so accidental overwrites and deletions can be undone.
     > Fully offline. To test: Folders > Add folder > choose any folder with a text file (e.g. Documents\test) > edit and save the
     > text file twice in Notepad > Restore > select the file > select the oldest version (the diff is shown) > "この版に戻す…"
     > (Restore this version) > confirm. Closing the window keeps the app in the system tray; use the tray icon > Exit to quit.
     > Trial: one watched folder (in-app limit); the full version allows any number. The default language is Japanese; English UI is partial
     > (Settings > General > Language).

## 7. 公開後すぐ（2 週間は夜間チェック：ロードマップの共通基準 4）
「手動で公開」や限定公開にしておけば、一般に出す前にここを確かめられる。ログは `%LOCALAPPDATA%\Packages\<PFN>\LocalState\logs\app.log`。
- [ ] Store から試用版をインストール → ヘッダーが「試用 監視フォルダー 0 / 1」→ 1 つ追加で「1 / 1」、2 つ目は購入案内。ログに `store license: active=True trial=True`。
- [ ] 同じアカウントで購入 → アプリに戻るか再起動 → 「製品版」、2 つ目のフォルダーを追加できる。購入ボタンで Store のページが開く（store_id が入っているか）。
- [ ] **オフライン**（common TODO-M2 §18.2）：購入した PC で一度ネットありで起動 →「製品版」を確認 → トレイから終了 → 機内モードで起動 →「製品版」のままか・2 つ目以降のフォルダーも「保護中」か。ログに `store license: active=True trial=False` か `store license failed -> using last known state purchased` が出れば正常。
- [ ] サインアウト → サインインで自動で常駐が始まる（設定 → アプリ → スタートアップに「ファイル上書き保険」がありオン）。
- [ ] 評価・レビューと imoninja@gmail.com を毎晩見る。「戻せなかった」の問い合わせには「どのアプリで保存したか・ファイルの大きさ・『控えられませんでした』の通知の有無」を聞く（ファイルは送ってもらわなくてよい、と掲載文に書いた）。

## 未確認のまま提出することになる点（知っておいてほしいこと）
- Word・Excel・クリエイター向けアプリ・ゲームでの保存（手順 3。この PC に無い）。
- 本物の OneDrive が動いている状態での「空き領域を増やす」「常に保持する」の切り替え（手順 3-3）。
- ノート PC の電池への影響（手順 3-4。開発機はデスクトップ）。
- 大きいファイル（16 MB 超）を名前の置き換えで頻繁に保存するアプリとの衝突は、ゼロではなく確率を下げただけ（DEVLOG）。
- Windows 10、ネットワークドライブ（未確認）。
- Store 経由の購入・試用・オフライン判定の実反映（公開後にしか確かめられない）。

## プライバシーポリシーの URL（2026-11-10 公開済み）
https://file-overwrite-insurance.pages.dev/ （Cloudflare Pages。更新手順は ms-store-apps/privacy-site/README.md）。Partner Center の「プライバシー ポリシーの URL」にこれを入れる。

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

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

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

- 2026-11-10 追記：英語名を「Overwrite Guard」で予約したので main.py の INFO.name["en"]・listing-en・privacy-policy を直して作り直した（上の SHA256 は作り直した後の値）。
