| @@ -308,73 +308,8 @@ Tag.merge_tags! は存在するが、運用 UI/API がない。タグ整理基 | |||
| - [ ] スクリーンショット添付の有無を決める | |||
| - [ ] 管理画面で一覧・対応済みにできる | |||
| ### 53. [P1] 利用規約・プライバシーポリシーを公開導線に載せる | |||
| **種別**: legal / release blocker | |||
| **対象** | |||
| - `frontend/src/App.tsx` | |||
| - `frontend/src/pages/*` | |||
| **背景 / 問題** | |||
| IP、引継ぎコード、編集履歴、外部埋め込み通信を扱うため、公開前に規約とプライバシーポリシーが必要。 | |||
| **完了条件** | |||
| - [ ] /tos と /privacy を作る | |||
| - [ ] 初回利用時・フッタ・設定画面から到達できる | |||
| - [ ] IP と外部埋め込みについて明記する | |||
| ### 54. [P1] IP アドレス保存期間と利用目的を設計する | |||
| **種別**: privacy / ops | |||
| **対象** | |||
| - `backend/app/models/ip_address.rb` | |||
| - `backend/app/models/user_ip.rb` | |||
| - `backend/app/controllers/users_controller.rb` | |||
| **背景 / 問題** | |||
| user_ips は監査に有用だが、保存期間と利用目的を決めずに溜めるとプライバシー負債になる。 | |||
| **完了条件** | |||
| - [ ] 保存期間を決める | |||
| - [ ] 削除/匿名化 rake task を作る | |||
| - [ ] BAN 用に残す情報とログ用情報を分ける | |||
| - [ ] プライバシーポリシーへ反映する | |||
| ### 55. [P2] 全 API のエラー JSON 形式を統一する | |||
| **種別**: DX / UX | |||
| **対象** | |||
| - `backend/app/controllers/application_controller.rb` | |||
| - `backend/app/controllers/*` | |||
| - `frontend/src/lib/api.ts` | |||
| **背景 / 問題** | |||
| head だけ、{ errors: ... }、例外メッセージ直返しなどが混在している。フロントが失敗理由を出しにくい。 | |||
| **完了条件** | |||
| - [ ] 標準エラー形式を決める | |||
| - [ ] validation / unauthorized / forbidden / not_found / conflict を統一する | |||
| - [ ] フロント toast が message を表示できる | |||
| ### 56. [P2] 日付パラメータの不正入力を 400 にする | |||
| **種別**: bug | |||
| **対象** | |||
| - `backend/app/controllers/posts_controller.rb` | |||
| - `backend/app/controllers/tags_controller.rb` | |||
| - `backend/app/controllers/nico_tags_controller.rb` | |||
| **背景 / 問題** | |||
| 日付・cursor 系パラメータで parse 例外が出ると 500 になりがち。ユーザ入力なので 400 に落とすべき。 | |||
| **完了条件** | |||
| - [ ] parse helper を作る | |||
| - [ ] 不正日付は 400 + error code | |||
| - [ ] 各検索 API に spec を追加する | |||
| ### 57. [P1] アップロードファイルの content-type / サイズ制限を入れる | |||
| @@ -394,22 +329,6 @@ thumbnail / material file は ActiveStorage に入るが、サイズや種類の | |||
| - [ ] 画像なら寸法上限も見る | |||
| - [ ] エラーを UI に出す | |||
| ### 58. [P2] PostRepr / MaterialRepr の URL 生成を環境設定で統一する | |||
| **種別**: ops / bug | |||
| **対象** | |||
| - `backend/app/representations/post_repr.rb` | |||
| - `backend/app/representations/material_repr.rb` | |||
| - `backend/config/environments/production.rb` | |||
| **背景 / 問題** | |||
| ActiveStorage URL の host 指定や request.base_url 依存が散らばると、本番/開発/プロキシ配下で URL が壊れる。 | |||
| **完了条件** | |||
| - [ ] default_url_options を環境変数で設定する | |||
| - [ ] representation に host を渡す箇所を統一する | |||
| - [ ] プロキシ配下の URL spec を追加する | |||
| ### 59. [P2] フロントの role guard を共通化する | |||
| @@ -446,72 +365,6 @@ uploadedUser / createdByUser / Wiki history user など、bot 操作や移行デ | |||
| - [ ] null 許容型に直す | |||
| - [ ] 表示側に fallback を入れる | |||
| ### 61. [P3] タグカテゴリ色・表示名をフロント固定から設定可能にする | |||
| **種別**: feature / settings | |||
| **対象** | |||
| - `frontend/src/consts.ts` | |||
| - `frontend/src/components/TagLink.tsx` | |||
| - `backend/app/models/setting.rb` | |||
| **背景 / 問題** | |||
| カテゴリ色はユーザ好みやアクセシビリティに直結する。settings 実装後の候補として切り出す価値がある。 | |||
| **完了条件** | |||
| - [ ] 既定テーマを維持する | |||
| - [ ] ユーザ設定で上書きできる | |||
| - [ ] コントラスト不足を警告する | |||
| ### 62. [P3] ミュートタグ / 非表示タグを実装する | |||
| **種別**: feature | |||
| **対象** | |||
| - `backend/app/models/setting.rb` | |||
| - `backend/app/controllers/posts_controller.rb` | |||
| - `frontend/src/pages/users/SettingPage.tsx` | |||
| **背景 / 問題** | |||
| コンテンツ量が増えるほど、ユーザごとの見たくないタグを制御したくなる。公開後の快適性に効く。 | |||
| **完了条件** | |||
| - [ ] ミュートと完全非表示の違いを決める | |||
| - [ ] 投稿一覧・ランダム・上映会候補に反映するか決める | |||
| - [ ] 設定画面から管理できる | |||
| ### 63. [P3] 埋め込み自動再生のユーザ設定を追加する | |||
| **種別**: feature / accessibility | |||
| **対象** | |||
| - `frontend/src/components/PostEmbed.tsx` | |||
| - `frontend/src/pages/theatres/TheatreDetailPage.tsx` | |||
| - `backend/app/models/setting.rb` | |||
| **背景 / 問題** | |||
| 上映会・投稿詳細で動画埋め込みが増えると、自動再生の好みと端末負荷の差が出る。設定化すべき。 | |||
| **完了条件** | |||
| - [ ] 自動再生 on/off 設定を作る | |||
| - [ ] Theatre と通常投稿で挙動を分けるか決める | |||
| - [ ] モバイルでは既定 off などを検討する | |||
| ### 64. [P2] PostEmbed の対応サイトを site parser として分離する | |||
| **種別**: refactor / feature | |||
| **対象** | |||
| - `frontend/src/components/PostEmbed.tsx` | |||
| - `backend/app/models/post.rb` | |||
| **背景 / 問題** | |||
| ニコニコ/YouTube/X/Twitter/その他の判定が UI に寄っている。プレビュー、上映会、検索候補でも同じ判定を使いたい。 | |||
| **完了条件** | |||
| - [ ] URL から site_type / embedable / canonical_url を返す関数を作る | |||
| - [ ] youtu.be, pixiv, Bluesky, ニジカ投稿局を追加しやすくする | |||
| - [ ] 単体テストを追加する | |||
| ### 65. [P3] preview API を OpenGraph / oEmbed 対応に寄せる | |||