# Microsoft Store 提出チェックリスト — オフライン文字起こし（依頼主 imoninja が Partner Center で行う操作）

開発側で用意したもの（このフォルダー `apps/transcriber/store/`）:
| ファイル | 中身 |
|---|---|
| `listing-ja.md` | 日本語の説明文・短い説明・機能一覧・キーワード・新機能・著作権表示（そのまま貼る） |
| `listing-en.md` | 英語（en-us）の同じもの |
| `screenshots/01-…05-*.png` | スクリーンショット 5 枚（1366×768）。番号順にアップロード |
| `privacy-policy.md` | プライバシーポリシー案（日本語＋英語）。**公開して URL を作るのは依頼主** |
| `qt-license-notice.png` | バージョン情報の Qt（LGPL）の欄の文面。**提出前に一度読む**（法的な最終確認ではないため） |
| `../dist/OfflineTranscriber_1.0.0.0_x64.msix` | 提出するパッケージ（未署名のまま。Store が署名する） |

識別情報（予約済み・パッケージに設定済み）：アプリ名「オフライン文字起こし」／Store ID 9PPKX628D482／
Package/Identity/Name imoninja.567392313BB03／Publisher CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE／PFN imoninja.567392313BB03_gytd433ssh6vj。
名前の予約の期限は 2027 年 2 月上旬の目安（WORKORDER §6）。それまでに 1 回目の提出を済ませる。

---

## 0. 提出前に依頼主の PC でやること
- [ ] **速度の確認（完成の定義 4）**：DEVLOG「M3 リリース準備」§速度 の「依頼主の確認手順」で、1 時間の音声を「標準」で処理し、
      実時間の 1/3（20 分）以下かを見る。開発機（i5-7400、他アプリの負荷あり）では約 27.5 分だった。
      超えても説明文には速度の数値を書いていないので出すこと自体はできるが、アプリ内 FAQ「処理にどのくらい時間がかかりますか？」
      （ui/strings.py。開発機の値「約 30 分」を書いてある）と DEVLOG の表に依頼主の PC の結果を反映するか判断する。
- [ ] `dist\OfflineTranscriber_1.0.0.0_x64.msix` が最新か（DEVLOG「提出用ビルド（2026-11-10）」の SHA256 `B2427FC36150C43E8744112E0008E22A57C21D9EC48F0335099C4E72A7C88501` と一致するか）を確認：
      `Get-FileHash apps\transcriber\dist\OfflineTranscriber_1.0.0.0_x64.msix`
- [ ] `qt-license-notice.png` で、アプリ内に出る Qt の LGPL の表示文（差し替え方法・ソースの入手先）を読む。気になる点は開発へ。
- [ ] 同梱の Intel OpenMP（libiomp5md.dll）は **Intel End User License Agreement for Developer Tools** で再配布している
      （本文は `../third_party/intel-openmp-LICENSE.txt`、条件の要約は `../LICENSES.md`）。再配布の条件（リバースエンジニアリングを
      禁じる使用許諾の下で配る＝Store の標準アプリケーション ライセンス条項で満たす想定、責任制限を利用者に及ぼす 等）を一度読む。
      法的な最終確認ではない。
- [ ] プライバシーポリシーを公開し URL を控える（`privacy-policy.md` の本文を note・GitHub Pages などに貼る。日本語だけでも可）。
- [ ] サポートの返信体制：リリース後 2 週間は夜間に imoninja@gmail.com とレビューを確認（ロードマップの共通基準 4）。
      説明文には「通常 3 日以内に返信」と書いた。守れない見込みなら listing-ja.md / listing-en.md の該当文を直してから貼る。

## 1. アプリの概要 → 「申請の開始」
- [ ] Partner Center → アプリとゲーム → 「オフライン文字起こし」→「申請の開始」。

## 2. 価格と使用可能状況（Pricing and availability）
- [ ] **市場**：既定（すべての市場）でよい。日本語 UI が正なので「日本のみ」に絞るのも可（英語の説明文と英語 UI はあるが、
      英語 UI は一部の文言が日本語のまま出る）。迷ったら「すべての市場」。
- [ ] **表示**：「Microsoft Store で公開して検出可能にする」（Public audience / Make this product available and discoverable）。
- [ ] **価格**：基本価格 **JPY 2,980**（一覧に 2,980 円の段が無ければ最も近い段を選び、市場別の価格で日本を 2,980 円に上書き）。
- [ ] **無料試用版**：**「期限なし」（Trial never expires）** を選ぶ。
      アプリは「Store の試用ライセンス」のときに累計 30 分のアプリ内メーターで制限する作り。
      **試用を「なし」にすると購入前にインストールできず、試用メーターが意味を持たない**（imoshell/store.py の注意）。
      期限付き（1 日・7 日など）は選ばない（期限後は起動できなくなり、30 分メーターと二重になる）。
- [ ] セール価格：なし。
- [ ] 公開日：「認定後すぐに公開」でよい（夜間の対応を考えるなら「手動で公開」にして、確認できる日に公開ボタン）。

## 3. プロパティ（Properties）
- [ ] **カテゴリ**：仕事効率化（Productivity）。サブカテゴリなし。
- [ ] **プライバシー ポリシーの URL**：0 で公開した URL（このアプリはモデル取得でインターネットを使うので必須扱い）。
- [ ] **Web サイト**：任意（無ければ空欄）。
- [ ] **サポートの連絡先**：imoninja@gmail.com
- [ ] **製品の宣言**：
  - 「この製品はユーザーの個人情報にアクセス、収集、送信します」→ **いいえ**（送信しない。音声はローカル処理）。
  - 「アクセシビリティのガイドラインを満たす」→ チェックしない（未検証）。
  - 「ペンとインクの入力をサポート」等 → なし。
  - 「OneDrive などへのバックアップを許可」→ 既定のまま。
- [ ] **システム要件**（推奨として入力）：メモリ 8 GB 以上（最小 4 GB でも「速い」モデルは動く想定だが未確認なので、最小は書かずに推奨だけ）、
      プロセッサ x64、空き容量：アプリ約 0.5 GB＋モデル（標準 約 0.5 GB／高精度 約 3.1 GB）。DirectX・グラフィックスは指定しない。
- [ ] 表示モード・ゲーム設定：なし。

## 4. 年齢区分（Age ratings）— IARC の質問票
- [ ] カテゴリ：**「アプリ」（ゲームではない）→ ユーティリティ／仕事効率化系**。
- [ ] 質問の答え（すべて「いいえ」になる想定）:
  - 暴力・性的表現・薬物・ギャンブル・粗暴な言葉：いいえ
  - ユーザー同士のやり取り・コンテンツの共有（チャット・投稿）：**いいえ**（ファイルを書き出すだけで、共有機能は無い）
  - 位置情報の共有：いいえ
  - 個人情報の共有：いいえ
  - デジタル商品の購入（アプリ内購入）：いいえ（アプリ自体の購入だけ。アドオンは無い）
  - 制限の無いインターネットアクセス（ブラウザー機能）：いいえ
- [ ] 想定結果：IARC 3+ / 全年齢。メールアドレスに IARC の証明書が届く。

## 5. パッケージ（Packages）
- [ ] `dist\OfflineTranscriber_1.0.0.0_x64.msix`（約 167 MB、SHA256 `B2427FC3…A7C88501`）をドラッグ＆ドロップ。検証で Identity・Publisher の不一致が出ないこと
      （出たら WORKORDER §6 と msix.json を照合）。
- [ ] デバイス ファミリ：**Windows 10/11 Desktop だけ**にチェック（Xbox・HoloLens 等は外す）。
- [ ] 「Windows 10 デバイス ファミリの選択に基づいて…」の既定のままでよい。

## 6. 申請オプション（Submission options）
- [ ] **制限付き機能（runFullTrust）の理由**（英語で入力欄に貼る）:
      > This is a Win32 desktop app (Python/Qt, packaged as MSIX). runFullTrust is required to run the desktop executable and
      > the bundled ffmpeg (LGPL) that converts the user's audio/video files to WAV locally before on-device speech recognition.
      > The app does not send user files or data anywhere.
- [ ] **認定の注意事項（Notes for certification）**（英語で貼る）:
      > The app transcribes audio/video locally. On the first transcription it asks for consent and downloads a speech model
      > (Standard ~464 MB) from Hugging Face; internet access is needed only for this step, after which it works fully offline.
      > To test: Transcribe > Add files > choose any mp3/wav/m4a/mp4/mov with speech > accept the model download.
      > Results appear on the right; Results page lets you assign speakers and export TXT/SRT/VTT.
      > Trial: the Store trial allows 30 minutes of audio in total (in-app meter); the full version has no limit.
      > The default language is Japanese; English UI is partially available (Settings > General > Language).
- [ ] 公開の保留：2 で「手動で公開」にした場合はここで同じ設定。

## 7. ストア登録情報（Store listings）— 日本語（ja-jp）を先に、次に英語（en-us）
アプリのパッケージが ja-JP と en-US を宣言しているので、両方の言語の登録情報が求められる。
- [ ] **説明**：`listing-ja.md` の「説明」をそのまま貼る（en-us は `listing-en.md`）。
- [ ] **新機能**（What's new）：初回は空欄でもよい。入れるなら listing の「新機能」。
- [ ] **製品の機能**（Product features）：listing の「機能一覧」を 1 行ずつ。
- [ ] **スクリーンショット**：`screenshots/` の 01〜05 を番号順に。キャプションは listing の「スクリーンショットの説明」。
- [ ] **ストアのロゴ**：任意（無ければパッケージのアイコンが使われる）。
- [ ] **短い説明**（Short description）：listing の「短い説明」。
- [ ] **検索語句**（最大 7 個）：listing の「キーワード」。
- [ ] **著作権と商標の情報**：`© 2026 imoninja`
- [ ] 追加のライセンス条項：空欄（標準のアプリライセンス条項）。
- [ ] 開発者：imoninja

## 8. 申請
- [ ] 「Microsoft Store に申請」。認定は通常数日。不合格の理由が来たら、その文面を開発に渡す。

## 9. 公開後すぐに確かめること（公開前には確かめられない項目）
「手動で公開」や非公開の配信（限定公開）にしておけば、一般に出す前にここを確かめられる。ログは
`%LOCALAPPDATA%\Packages\imoninja.567392313BB03_gytd433ssh6vj\LocalState\logs\app.log`（メモ帳で開ける）。

**試用 → 購入の切り替え**
- [ ] Store から試用版（「無料試用版」ボタン）をインストール → ヘッダーが「試用 残り 30 分」。1 ファイル処理すると減る。
      ログに `store license: active=True trial=True`（Store の試用ライセンス）。
- [ ] 同じアカウントで購入 → アプリに戻る（購入画面から戻ると自動で確認し直す）か再起動 → ヘッダーが「製品版」になる。
      ログに `store license: active=True trial=False`。試用で使った分は購入後に関係しない（製品版は無制限）。
- [ ] 購入後、バージョン情報の「ライセンス」が「製品版」（「前回の確認結果」の注記が付かない）。

**オフラインでのライセンス判定**（common TODO-M2 §18.2。オフラインで使うのが売りなので必ず）
- [ ] 購入した PC で、一度**ネットにつないだまま**起動して「製品版」を確認して閉じる。
- [ ] **機内モード**（または Wi-Fi・LAN を切る）にして起動 → ヘッダーが「製品版」のままか。1 ファイル変換できるか（モデルは取得済みのもの）。
      ログに `store license: active=True trial=False`（Windows のライセンスのキャッシュから返った）か、
      `store license failed -> using last known state purchased`（`failed` の所は `timeout`・`inactive` のこともある。
      アプリが覚えていた前回の状態を使った。
      このときバージョン情報は「製品版（Store に確認できなかったため、前回の確認結果）」）のどちらかが出ていれば正常。
- [ ] 可能なら別の PC（または一度アンインストールしてから）で：購入済みのアカウントでインストールし、**一度もネットありで起動しないまま**
      機内モードで起動 → 「製品版」か。ここは Windows のキャッシュだけが頼りで、アプリは前回の状態を持っていないので、
      Windows が購入済みを返さなければ「試用」扱いになる（ネットにつないで一度起動すれば以後はオフラインでも製品版）。
      試用扱いになった場合は、その旨とログを開発に渡す（FAQ に「購入後に一度ネットにつないで起動してください」と書き足す判断）。
- [ ] 機内モードを戻す。

**その他**
- [ ] Store 版でデータが `%LOCALAPPDATA%\Packages\imoninja.567392313BB03_gytd433ssh6vj\LocalState` に入ること（バージョン情報の保存先）。
- [ ] 最初の 2 週間はレビューと問い合わせを毎晩確認する。

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

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

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

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