| @@ -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 / サイズ制限を入れる | ### 57. [P1] アップロードファイルの content-type / サイズ制限を入れる | ||||
| @@ -394,22 +329,6 @@ thumbnail / material file は ActiveStorage に入るが、サイズや種類の | |||||
| - [ ] 画像なら寸法上限も見る | - [ ] 画像なら寸法上限も見る | ||||
| - [ ] エラーを UI に出す | - [ ] エラーを 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 を共通化する | ### 59. [P2] フロントの role guard を共通化する | ||||
| @@ -446,72 +365,6 @@ uploadedUser / createdByUser / Wiki history user など、bot 操作や移行デ | |||||
| - [ ] null 許容型に直す | - [ ] null 許容型に直す | ||||
| - [ ] 表示側に fallback を入れる | - [ ] 表示側に 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 対応に寄せる | ### 65. [P3] preview API を OpenGraph / oEmbed 対応に寄せる | ||||