Jewelry AI・同意画面

更新された利用規約に同意するまで、アプリは一つの画面から先へ進ませません

同意がいまも有効かどうかは、サーバー側の一つのバージョン値が決めます。その値が動くと、以前に与えた同意は数えられなくなり、アプリは戻ることのできない確認画面へ移し、クレジットを消費する四つの操作は、同意が記録し直されるまで拒否されます。

この起動でこの画面が現れた理由

端末側では何も変わっていません。同意の状態はサーバー側で一つのバージョン値によって決まり、利用規約とプライバシーの文書は同じ値からバージョンを取ります。片方ずつ上げることはできません(apps/api/src/legal/legal-contract.ts)。値が動くと、前の値に対して記録された同意は現在のものとして数えられなくなり、アプリは改めて同意を求めます。

この値は手で入力されるものではなく、生成されたマニフェストから導かれます。片方の文書だけを直して同意は求めない、という静かな選択肢が製品に存在しないのはそのためです。値は一つで、それが同意の状態全体を左右します。

チェック自体は、別の意味で狭いものです。見るのは常に現在のバージョンだけです。古いバージョンに対して残っている同意が、この画面によって削除されたり否定されたりするわけではありません。ただ、チェックが数えている対象ではないというだけです。

この画面が開いている間の挙動

この画面は、アプリの上に置かれたダイアログではありません。開いていた画面そのものに取って代わります。

覆うのではなく、画面を置き換えます。
同意が必要になると、アプリは確認画面への置き換えを行います。そのため、戻る先の画面が下に残っていません(apps/jewelry-mobile/src/app/_layout.tsx)。
閉じられるのではなく、また現れます。
条件を評価しているのは画面ではなくアプリです。同意が記録されないまま画面を離れても、そこへ戻されます。
用意されているように見える除外は、効きません。
除外リストは規約とプライバシーのルート区間を名指ししたままですが、それらのルートのファイルは削除されています。法務のルートの下に残っているのはヘルプと確認の画面だけなので、除外は照合する相手を持ちません。
同意すると記録が書き込まれ、サーバーが読むのはその記録です。
同意が数えられるのは、二つの記録が現在のバージョンで揃って存在するときだけです。これは別のページが詳しく扱う仕組みで、ここでは足止めが解ける理由としてだけ関わります(apps/api/src/legal/legal-evidence.service.ts)。

足止めが適用される場所を、操作ごとに

二つの異なる仕組みが働いており、覆っている範囲は同じではありません。一つのものとして読むと、何が守られているかについて誤った結論に至ります。

試みる操作起こること働く仕組み
生成、高画質化、背景削除、画像編集リクエストが拒否され、現在の規約に同意する必要があるとアプリが伝えるリクエストに対するサーバー側のチェック
画面が開いている間の、アプリのほかの部分手が届かない。開いていた画面がこの画面に置き換えられているアプリ側の画面遷移
同意画面からヘルプへ行くこの画面からは行けないアプリ側の画面遷移。除外リストはどのルートとも一致しない
一覧の取得、お気に入り、削除といった無料のリクエストサーバー側で同意のチェックが付いていないリクエスト自体には同意のチェックがない

めったに見ない拒否と、その理由

足止めが届く道は二つあります。ふつうに起こるのは画面遷移のほうです。アプリが同意は必要だと判断し、リクエストが送られる前に確認画面を目の前に置きます。

もう一つは、サーバーがリクエストをそのまま拒否し、足りない同意を理由として名指しする道です。アプリはそれを、現在の規約に同意するよう求めるメッセージに変えます(apps/api/src/legal/legal-acceptance.guard.ts)。通常は画面遷移が先に届くため、この拒否に出会うのは古いクライアントや画面遷移を迂回したクライアントであって、いまの経路が生むものではありません。

実際上の帰結はこうです。生成の代わりに同意についてのメッセージが出たとしても、それは画面とは別の不具合ではありません。同じ条件が、あとの時点で報告されているだけです。

このページが述べられる立場にないこと

このページの根拠は、製品コードにある同意の仕組みです。すぐ隣にあるいくつかの問いは、その外にあります。

  • 文書が何を述べ、何を対象とし、何を認めているのか、どの規則に従っているのか。いずれも仕組みから導かれるものではなく、ここでは述べません。
  • ある時点で本番に出ているバージョンや、ストアに並んでいるビルド。コードは値を示しますが、配備された状態を報告するものではありません。
  • 購入、サブスクリプション、クレジット、返金のリクエストが、同意と何らかの関係を持つかどうか。
  • 同意が正確に何を書き込むのか、記録の組がそのあとどうふるまうのか、どの言語に固定されるのか。この仕組みは別のページが担っており、ここに現れるのはその帰結だけです。
  • 利用規約とプライバシーポリシーの文書がどこで開き、どの言語で表示されるか。
  • 年齢の申告について、同じバージョンでその記録が揃っていなければ同意が数えられないという事実を超えたこと。

これらの記述をどこから読み取ったか

バージョンの挙動:apps/api/src/legal/legal-contract.ts。登録時の法務バージョンが、正規のコンテンツバージョン定数から定義されている箇所。

同意が現在のものかどうかを決める数え方:apps/api/src/legal/legal-evidence.service.ts。現在のバージョンで両方の記録が揃っていることを求めている。

拒否と、その名前のある条件:apps/api/src/legal/legal-acceptance.guard.ts。

チェックが付いている四つのリクエスト:apps/api/src/generation/generation.controller.ts の、生成・高画質化・背景削除・画像編集のエンドポイント。

画面の置き換えと、もう一致しない除外リスト:apps/jewelry-mobile/src/app/_layout.tsx。src/app/legal の下にはヘルプと確認だけが残っている。

よくある質問

この画面を飛ばして、あとで同意できますか?

できません。アプリは開いていた画面を確認画面で置き換え、そこを離れても戻します。さらに、クレジットを消費する四つのリクエストは、アプリが何を描いているかとは無関係にサーバー側で拒否されます。先に生成だけを通せる手順の並べ方はありません。

同意すると、すでに作った画像に何か起こりますか?

同意は同意の記録に関わるものです。このページは同意の仕組みだけを説明しており、ライブラリ、コレクション、残高については主張しません。ここで扱う仕組みは、それらに触れません。

アプリを更新していないのに、なぜこうなったのですか?

きっかけがビルドに含まれる何かではなく、サーバー側のバージョン値だからです。利用規約とプライバシーの文書は同じ値からバージョンを取るため、値は同意の状態全体について一度に動きます。

先に確かめたいので、同意画面からヘルプを開けますか?

その画面からは開けません。除外リストは、ファイルが削除された規約とプライバシーのルート区間を名指ししたままなので、除外は一度も一致せず、画面はそのまま保たれます。ヘルプの画面はアプリの中に残っていますが、この画面からの出口ではありません。