Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
311 changes: 203 additions & 108 deletions docs/dev-notes/2026-09-09/task-title-index-change-impact/done.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ PR0 / PR1 だけに関わる調査(出典欄の呼び出し元、テストの

# 1. PR2 の照合(2026-10-24)

メンテナのスプレッドシート(スクリーンショット 16 枚、行 2〜1025。上が新しい)と、本番の問題一覧の JAG 模擬地区(スクリーンショット 10 枚、158 問)を目視で突き合わせた。目視の結果で、PR2 の照合スクリプト(書き写したスプレッドシートとの機械的な照合)でも同じ結果になった([done.md](./done.md#pr2--jag-合宿系と-jag-模擬地区を問題記号にする4030))。
メンテナのスプレッドシート(スクリーンショット 16 枚、行 2〜1025。上が新しい)と、本番の問題一覧の JAG 模擬地区(スクリーンショット 10 枚、158 問)を目視で突き合わせた。目視の結果で、PR2 の照合スクリプト(書き写したスプレッドシートとの機械的な照合)でも同じ結果になった([done.md](./done.md#照合記号の対応表))。

スプレッドシートで折りたたまれた行(40–50 ほか 19 か所)は JAG 模擬国内だけで、合宿系・模擬地区は含まない(メンテナに確認済み)。

Expand Down Expand Up @@ -89,7 +89,7 @@ AtCoder Problems の `contests.json` には、ほかに `JAG2013Spring` / `JAG20

## 表示順(76 コンテスト)

PR2.5 の配列の元。スプレッドシートの行順そのまま(上が新しい)。括弧書きは M16 に従う(「過去問」「in AtCoder」「AMATSUKAZE2025」は書かない)。「DB」列の「無し」は PR2.1 で入るもの、「補正」は上の 8 コンテスト。
PR2.5 の配列(`aoj_jag_regional_entries.ts`)の元。スプレッドシートの行順そのまま(上が新しい)。括弧書きは M16 に従う(「過去問」「in AtCoder」「AMATSUKAZE2025」は書かない)。「DB」列の「無し」は PR2.1 で入るもの、「補正」は上の 8 コンテスト。

| # | 行 | contest_id | 括弧書き | DB |
| --- | ---- | ------------------------------------ | ----------------------- | ---- |
Expand Down
157 changes: 0 additions & 157 deletions docs/dev-notes/2026-09-09/task-title-index-change-impact/plan-pr2-1.md

This file was deleted.

This file was deleted.

31 changes: 17 additions & 14 deletions docs/dev-notes/2026-09-09/task-title-index-change-impact/plan.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
# AOJ ICPC / JAG の `problem_index` を A/B/C 形式へ変更する

**日付**: 2026-09-09 作成、2026-10-24 に PR2 以降を再構成/ **状態**: PR0・PR1・PR1.5(#4219)完了。PR2(#4220)は staging に反映、本番は未反映。PR2.1(#4221)は実装済み(PR 前)
**日付**: 2026-09-09 作成、2026-10-24 に PR2 以降を再構成/ **状態**: PR0・PR1・PR1.5(#4219)完了。PR2(#4220)・PR2.1(#4222)は staging に反映、本番は未反映。PR2.5 は実装済み、未マージ

このファイルは全体像と、PR をまたぐ決定・手順だけを書く。各 PR の作業はそれぞれのファイルにある。

| ファイル | 内容 |
| -------------------------------------- | -------------------------------------------------- |
| [plan-pr2-1.md](./plan-pr2-1.md) | PR2.1: DB に無い 10 コンテストを入れる |
| [plan-pr2-5.md](./plan-pr2-5.md) | PR2.5: コンテスト別のテーブルの作成(Provider) |
| [plan-pr3.md](./plan-pr3.md) | PR3: 欠落問題の補完 |
| [done.md](./done.md) | PR0 / PR1 / PR1.5 / PR2 の決定の要約と残タスク |
| [done.md](./done.md) | PR0〜PR2.5 の決定の要約と残っている作業 |
| [investigation.md](./investigation.md) | 根拠データ。PR2 の照合結果、表示順、欠落の一覧など |

## ゴール
Expand Down Expand Up @@ -37,21 +35,26 @@ AOJ の API は 2026-09-07 に別のホストへ移り、旧ホストは 410 を

PR2(#4220)で、合宿系と模擬地区も記号になり、合宿系の title は素になった。管理画面の取り込みも、JAG は全 round で記号を付ける(staging に反映。本番は未反映)。

PR2.1(#4222)で、AtCoder 上の JAG 4 コンテスト用に `ATCODER_JAG` を新設し、seed に 4 コンテストと 2025 / 2026 の夏合宿を足した(staging に反映し、データも投入した。本番は未反映)。

PR2.5 で、グループ「JAG 模擬地区」に 76 コンテストのテーブルを作った(実装済み、未マージ)。

## PR の分割と順序

| | 範囲 | コンテスト | 問題数 | 内容 |
| ------------------------------------------------------------------- | ------------------------------------------------------- | ---------- | ------------------------- | --------------------------------------------------------- |
| [PR1.5](./done.md#pr15--aoj-api-の移転に追従する4028) | AOJ の API クライアント | — | — | ベース URL を新しいホストへ変える(#4028)。完了(#4219) |
| [PR2](./done.md#pr2--jag-合宿系と-jag-模擬地区を問題記号にする4030) | JAG 夏合宿 / 冬合宿 / 春合宿 + JAG 模擬地区 | 66 | 625 | 既存データを記号にする。staging に反映(#4220) |
| [PR2.1](./plan-pr2-1.md) | 2025 / 2026 の夏合宿(AOJ)+ in AtCoder の 4 コンテスト | 10 | 114(スプレッドシート上) | 新しいデータを入れる(`ATCODER_JAG` の新設を含む) |
| [PR2.5](./plan-pr2-5.md) | PR2 / PR2.1 の 76 コンテスト | 76 | — | グループ「JAG 模擬地区」に、コンテスト別のテーブルを作る |
| [PR3](./plan-pr3.md) | 欠落問題の補完 | — | — | AOJ のコンテスト一覧に無い問題をどう埋めるか |
| | 範囲 | コンテスト | 問題数 | 内容 |
| -------------------- | ------------------------------------------------------- | ---------- | ------------------------- | ---------------------------------------------------------------------------- |
| [PR1.5](./done.md) | AOJ の API クライアント | — | — | ベース URL を新しいホストへ変える(#4028)。完了(#4219) |
| [PR2](./done.md) | JAG 夏合宿 / 冬合宿 / 春合宿 + JAG 模擬地区 | 66 | 625 | 既存データを記号にする。staging に反映(#4220) |
| [PR2.1](./done.md) | 2025 / 2026 の夏合宿(AOJ)+ in AtCoder の 4 コンテスト | 10 | 114(スプレッドシート上) | 新しいデータを入れる(`ATCODER_JAG` の新設を含む)。staging に反映(#4222) |
| [PR2.5](./done.md) | PR2 / PR2.1 の 76 コンテスト | 76 | — | グループ「JAG 模擬地区」に、コンテスト別のテーブルを作る。実装済み、未マージ |
| [PR3](./plan-pr3.md) | 欠落問題の補完 | — | — | AOJ のコンテスト一覧に無い問題をどう埋めるか |

PR1 と PR2 で、記号にするのは 1,257 問 / 145 コンテストになる。PR2 で完結し、PR3 に進まなくても機能として成立する。

- **PR1.5 → staging で JAG REGIONAL を取り込む → PR2** の順で進めた(済)。PR2 の件数チェックを staging で通すには、staging の模擬地区を本番と同じ 16 / 158 にそろえる必要があったため
- **PR2 → PR2.5 は守る**。Provider を先に出すと、合宿系の数値の index と `'2389. …'` の title がそのまま表に出る
- **PR2.1 は PR2 / PR2.5 と前後してよい**。PR2 の移行 SQL は index が問題 ID のままの行しか書き換えず、Provider はデータの無いコンテストを表示しない(`TaskTable.svelte` の `prepareContestTable` が `null` を返す)
- **PR2.1 は PR2 と前後してよい**。PR2 の移行 SQL は index が問題 ID のままの行しか書き換えない
- **PR2.5 のコードは PR2.1 の後に出す**。AtCoder の 4 コンテストの Provider に `ATCODER_JAG` を使い、seed との整合テストも PR2.1 の seed を前提にする(計画では PR2.1 と独立させていたが、実装時に変えた。[理由](./done.md#分類と表示))。本番の PR2.1 のデータ投入は PR2.5 の後でもよいが、投入までは「JAG 模擬地区」に 10 コンテストの見出しと空の枠が出る(`TaskTable.svelte` は、データの無い Provider でも見出しと枠を描画する。[残タスク](./done.md#残タスク))
- **PR3 は独立**。PR2 で記号を補正するので、欠落を後から足しても既存の記号はずれない

### スコープ外
Expand Down Expand Up @@ -156,12 +159,12 @@ PR2(記号の移行)と PR2.1(enum の追加)、PR3 に当てはまる
| **バックアップ** | Supabase Pro のため PITR が利用可。復元トリックが効くのは一度目だけなので、**再修正時は PITR が唯一の手段** |
| **`updated_at`** | `@updatedAt` は Prisma Client 側の実装で DB トリガーではない。生 SQL では更新されない。**意図的に含めない** |
| **キャッシュ** | TTL 1 時間(`src/lib/clients/cache.ts`)。生 SQL と CSV の投入は `invalidateTaskCaches()` を経由しない。「更新したのに表示が変わらない」ときはこれを疑う |
| **トランザクション境界** | マイグレーションファイル単位で原子的に適用される([done.md](./done.md#検証で分かったこと)) |
| **トランザクション境界** | マイグレーションファイル単位で原子的に適用される([done.md](./done.md#移行-sql)) |
| **デプロイ直前の数分** | マイグレーションの適用から Vercel のデプロイ完了までの間は、旧コードが新しいデータを描画する。数分で解消するので**許容する** |

### スプレッドシートとの照合

対応表は次の手順で作る(M6)。PR1 のスクリプトを直して使う(仕組みは [done.md](./done.md#検証で分かったこと))。
対応表は次の手順で作る(M6)。PR1 のスクリプトを直して使う(仕組みは [done.md](./done.md#照合記号の対応表))。

1. 基本ルールで対象範囲の記号を生成する
2. コンテスト単位で、メンテナのスプレッドシートと照合する ← 人手が要るのはここだけ(書き写し)
Expand Down
Loading
Loading