Skip to content

feat: 認証前の画面で何が流れるか見せる / 𝕏 の同意画面の変更を知らせる - #142

Merged
5ym merged 2 commits into
mainfrom
lp
Sep 16, 2026
Merged

5ym merged 2 commits into
mainfrom
lp

Conversation

@5ym

@5ym 5ym commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

1. 𝕏 の同意画面の変更を知らせる

𝕏 が 2026 年 9 月から、従量課金のアプリが書き込み権限を求めると同意画面に「Sensitive permissions requested / This app is not affiliated with X」の枠を出すようになった(告知)。xool は tweet.write を使うので該当する。開発者側で消す手段は無く、「I trust this app」にチェックを入れないと認可ボタンが押せないので、押す前に画面で知らせるようにした。

2. 認証前の画面を作り直した

以前はサインインボタンと注意書きが縦に並ぶだけで、何が起きるものなのか分からなかった。

  • 実際に流れるポストの見本を横に置いた(行の並びは summary.ts の組み立てと同じ。数字は架空でサンプルと明記)
  • 通信簿に出る指標を色付きの札で並べた(反応=桃・伸び=青系・行動=緑系)。画面で唯一の色をここに集めている
  • 認証済みの画面は、自動ポストの入切を主色の枠の箱に入れて最初に目が行くようにし、アカウントは 1 行の表ではなく丸+名前に
  • 上に 3px の帯(𝕏 の黒 → 主色)

app.scss には .panel / .cluster と --ui-ok / --ui-shadow / --ui-tint を戻した(daisyUI 剥がしのときに未使用として削っていたもの)。

ロジック(トグル・今すぐ投稿・エラー表示・API 呼び出し)は変えていない。bun run build / bun run check(0 errors 0 warnings)とも通り、明色・暗色・SP の 3 通りを実機で確認済み。

🤖 Generated with Claude Code

https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv

𝕏 が 2026 年 9 月から、従量課金のアプリで書き込み権限を求めると同意画面に
「Sensitive permissions requested」の枠を出すようになった。開発者側で消す
手段が無く、チェックを入れないと認可ボタンを押せないので、押す前に知らせる。

あわせて認証前の画面を作り直した。以前は署名ボタンと注意書きが縦に並ぶだけで、
何が起きるものなのか分からなかった。

- 実際に流れるポストの見本を並べて置く(行の並びは summary.ts と同じ)
- 通信簿に出る指標を色付きの札で並べる(反応=桃・伸び=青系・行動=緑系)
- 認証済みの画面は自動ポストの入切を主色の枠の箱に入れ、アカウントは
  表ではなく丸+名前で出す
- 上に 3px の帯(𝕏 の黒 → 主色)

app.scss に .panel / .cluster と --ui-ok / --ui-shadow / --ui-tint を戻した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
@claude

claude Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 2m 19s —— View job


レビュー完了

タスクリスト

  • コンテキスト収集 (CLAUDE.md / 差分取得)
  • 差分の確認 (app.scss, SummaryScreen.svelte, +layout.svelte)
  • 不具合・境界値の確認
  • セキュリティ確認
  • 設計・一貫性の確認
  • テストの確認
  • レビューコメント投稿

全体所感

UI のみの変更で、トグル・今すぐ投稿・エラー表示・API 呼び出しなどのロジックには手が入っていないことを確認しました。全体として丁寧に作られており、大きな問題は見当たりません。

  • 不具合: 軽微な点を1点、該当行にインラインコメントしました(SummaryScreen.svelte:189 の slice(0, 1) が絵文字始まりの表示名でサロゲートペアを壊す可能性— 要確認)。それ以外の signedIn の判定変更(keyInfo の truthy 判定 → !== undefined)は Props の型上 keyInfo が undefined 以外の偽値を取り得ないため、実質的な挙動差はありません。
  • サンプル文言の整合性: SAMPLE の行構成・書式(見出し+前日比、リプライ、いいね/リポスト/返信/ブックマーク、インプレッション、クリック、連続日数)は src/lib/server/summary.ts の summaryText の組み立てと一致しており、PR 説明の通りでした。
  • セキュリティ: 入力値の検証・認証まわりの変更はなく、シークレットの混入も見当たりません。
  • 設計・一貫性: app.scss に追加された --ui-ok / --ui-shadow / --ui-tint と .panel / .cluster は、いずれも既存の --ui-base-* / --pico-* 変数から組み立てられており、他のルールとの整合性も取れています。.tag.on が .panel .main の枠色を上書きする詳細度の関係も問題ありません。
  • テスト: 見た目のみの変更でありテストの追加はありませんが、リポジトリに既存の UI テストの慣習は見当たらず、妥当と判断します。ビルド確認 (bun run build / bun run check) はこちらの環境では依存関係のインストールがネットワークアクセス許可の関係で実行できなかったため未検証です(--allowedTools にネットワークを伴う bun install を許可いただければ再検証可能です)。

Comment thread src/lib/components/SummaryScreen.svelte Outdated
</table>
<div class="who">
<span class="av" aria-hidden="true">
{(ret?.data?.name ?? "?").slice(0, 1)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

要確認(軽微): (ret?.data?.name ?? "?").slice(0, 1) は UTF-16 コード単位で切り出すため、𝕏 の表示名が絵文字など BMP 外の文字(サロゲートペア)で始まっている場合、先頭の1文字が壊れて文字化け(U+FFFD 等)して表示される可能性があります。X の表示名は先頭に絵文字を置くケースも珍しくないため、[...name][0] や Array.from(name)[0] でコードポイント単位に切り出す方が安全です。

Fix this →

slice(0,1) は UTF-16 の単位で切るので、絵文字始まりの表示名(𝕏 では
珍しくない)がサロゲートペアの片割れになって文字化けする(AI レビューの指摘)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
@claude

claude Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 1m 39s —— View job


進行状況

  • コンテキスト収集 (CLAUDE.md / 差分取得)
  • 差分の確認 (app.scss, SummaryScreen.svelte, +layout.svelte)
  • 不具合・境界値の確認
  • セキュリティ確認
  • 設計・一貫性の確認
  • テストの確認
  • レビューコメント投稿

全体所感

前回のレビュー以降の差分(b07a609)を確認しました。指摘していた SummaryScreen.svelte のアバター頭文字の切り出し (slice(0, 1) → [...name][0]) がコードポイント単位に修正されており、絵文字始まりの表示名でも壊れなくなっています。他の変更点も含め、ロジック(トグル・今すぐ投稿・エラー表示・API 呼び出し)には手が入っておらず、新たな不具合・セキュリティ上の懸念は見当たりませんでした。

  • 不具合: 修正後のコードで問題なし。name が空文字列の場合はアバターが空表示になりますが、これは修正前の slice(0,1) でも同じ挙動で今回の変更による劣化ではありません。
  • セキュリティ: 入力値検証・認証まわりの変更はなく、シークレットの混入もありません。表示内容はすべて Svelte の自動エスケープ経由で描画されています。
  • 設計・一貫性: app.scss に追加された --ui-ok / --ui-shadow / --ui-tint と .panel / .cluster は既存の --pico-* / --ui-base-* 変数から組み立てられており、他のルールとの整合性も取れています。+layout.svelte の帯 (.band) もシンプルで問題ありません。
  • テスト: 見た目のみの変更でテスト追加はありませんが、リポジトリに既存の UI テストの慣習は見当たらず妥当と判断します。ビルド確認 (bun run build / bun run check) はこちらの環境では依存関係のインストールがネットワークアクセス許可の関係で実行できず未検証です(--allowedTools にネットワークを伴う bun install を許可いただければ再検証可能です)。

大きな問題は無く、承認して問題ないと考えます。

@5ym
5ym merged commit 2a37583 into main Sep 16, 2026
2 checks passed
@5ym
5ym deleted the lp branch September 16, 2026 08:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant