P · 02 検証済

no_ads

QiFlux は全ユーザーに広告 0個 — 無料・Premium ともに。binary に広告 SDK は含まれません(Google Mobile Ads 削除済)。リワード広告も、バナーも、インタースティシャルもありません。この約束は UI トグルではなく SDK の不在で保証されます。

$ grep "google_mobile_ads" app/pubspec.yaml
# expected: 0 matches — SDK not present
P · 03 検証済

anonymous_default

初回起動はアカウント、メール、電話番号のないローカル専用プロファイルを作成します。サインインはオプトインのみで、Settings の 1 つのトグルでゲートされます。「データを保存するために」メールアドレスを尋ねることはありません。

$ docs/design/scripts/validate-design-system.sh anonymous_default
# greps Onboarding/* for email|phone|account; expect 0
P · 04 検証済

data_egress = 0

デフォルトでは、月経データは端末から外に出ません。クラウド AI はオプトイン。暗号化クラウドバックアップもオプトイン。マーケティングサイトは第三者トラッカーを 0 個 — GA も、Mixpanel も、PostHog もありません。

$ npx @cap-go/cli analyze --binary build/ios/QiFlux.app
# expects: outbound endpoints == [Apple StoreKit, Google Play Billing only]
P · 05 検証済

sdk_count ≤ 5

両プラットフォームで最大 5 つの第三者 SDK を出荷します。現在の binary は 3 つ:RevenueCat(サブスクリプション)、Sentry(クラッシュレポート、PII フィルタ済)、Health SDK(HealthKit / Health Connect OS bridge — 外部サーバなし)。Sign-in-with-Apple と google_sign_in はバックアップログイン専用の OS bridge です。すべての依存関係は公開 pubspec で監査可能です。

$ jq '.dependencies | keys | length' pubspec.yaml.json
# expects: ≤ 5 third-party network SDKs
P · 06 検証済

cancel ≤ 2 clicks

app のどこからでも 2 タップで購読をキャンセル:設定 → 「購読を管理」が OS ネイティブの購読画面にディープリンク。私たち自身の UI 内にキャンセルフローを置きません — Apple も Google も、そこで使いたくなるダークパターンを禁止しているからです。

$ flutter test test/integration/cancel_subscription_test.dart
# asserts settings_subscription_row → openManageSubscriptionsUrl()
P · 07 検証済

trial_transparent

すべてのチェックアウトに 3 重ロック:(1) Confirm ボタンの上に初回課金日と金額を太字で表示、(2) 設定 → 購読 に「次の課金まで N 日」のカウントダウンを常時表示、(3) 私たちの UI を完全にスキップする「今すぐキャンセル」のワンタップ。下に計算を示さない「無料体験」見出しはありません。

$ flutter test test/widget/paywall_transparency_test.dart
# asserts boldface charge date, countdown, cancel-now visible pre-confirm
P · 08 検証済

cloud_ai_anonymized

クラウド AI をオプトインした場合、Google Gemini に送られるプロンプトには周期フェーズ、體質タグ、選択した症状 3 つだけが含まれます — 名前、メール、生年月日、デバイス ID は含まれません。Google の paid tier は no-train を保証します。いつでもオンデバイス専用に戻せます。

$ docs/design/scripts/audit-prompt-payload.ts
# decodes outbound prompts; expects no PII fields

約束が破られた場合

私たちはまず、ここでそう言います。

こっそり編集することも、静かにロールバックすることもしません。もし約束のひとつを破るリリースを出してしまったら、このページは緑色から琥珀色に変わり、何が起きたか、何を出荷して修正したか、いつそうしたかを説明します。