Skip to content

部分点 (サブタスク) を同期する - #15

Merged
yuki2006 merged 4 commits into
mainfrom
subtask
Sep 8, 2026
Merged

yuki2006 merged 4 commits into
mainfrom
subtask

Conversation

@yuki2006

@yuki2006 yuki2006 commented Sep 8, 2026

Copy link
Copy Markdown
Owner

変更内容

本体側の GET / PUT /v1/problems/{id}/subtask に対応し、problems/<dir>/subtask.json (または subtask.toml) を pull / push / diff で同期します。

  • 置き場所: 単一ファイル。JSON が既定 (API の本文と同じ形で、swagger や GET の結果をそのまま置ける)。TOML でも書け、pull の書き戻しはローカルにある方の形式に合わせる。両方あるとエラー (statement の .md/.html と同じ)
  • pull: 未設定ならファイルを作らない (editorial と同じ)。ローカルにファイルがあるときは、未設定でも空配列を書いてリモートに揃える
  • push: テストケースのに処理 (送ったテストケースに対して prefixes の一致をサーバに判定させるため)。ファイルが無ければ触らない。設定を消すのは空配列の明示時のみ (ファイル削除では消さない)
  • 一致するテストケースが無いサブタスク (常に 0 点) の警告は、PUT レスポンスの Warning をそのまま表示 (一致判定のルールはクライアントに持たない)
  • 配点合計 100 などの検証もサーバの 400 表示に任せる
  • 省略可の name / description は空なら送らない (GET→PUT の往復で差分を出さない)

実測 (問題 14009、原状復帰済み)

  • 未設定の GET {"subtasks":[]} → pull はファイルを作らない
  • 2 サブタスク (30/70、name・description の省略混在、TOML) の push → pull 往復一致、diff 差分なし
  • JSON (subtask.json) の push → pull の書き戻しも JSON のまま (形式維持)
  • 合計 90 の push → HTTP 400 配点の合計が90%です。合計100%にしてください を表示
  • 一致しない prefix (99) の push → サブタスク: 警告 一致するテストケースが無いサブタスクがあります(このままだと常に0点です): 99
  • 空配列の push → 削除、GET が [] に戻る

単体テスト 56 件、clippy -D warnings / fmt 通過。

🤖 Generated with Claude Code

yuki2006 and others added 4 commits September 8, 2026 20:06
problems/<dir>/subtask.toml (キー名は PUT /v1/problems/{id}/subtask と同じ) を
pull / push / diff で同期する。

- pull: 未設定ならファイルを作らない。ローカルにファイルがあるときは、未設定
  でも subtasks = [] を書いてリモートの状態に揃える
- push: ファイルが無ければ触らない。設定を消すには subtasks = [] を明示する
  (ファイルを消しても設定は消さない。暗黙の削除をしないため)
- 配点合計 100 などの検証はクライアントに写さず、サーバの 400 に任せる

サーバ側の API (本体 PR #1694) がマージ前なので、実測は未実施。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
prefixes の一致判定はサーバの仕事なので、送ったテストケースに対して判定
できる順にする (PUT のレスポンスに一致ゼロの警告を足してもらう前提)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PUT /subtask のレスポンスに、一致するテストケースが無いサブタスク (常に
0 点になる) の警告が入るようになったので、そのまま表示する。一致判定は
サーバの仕事で、クライアントには持たない。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
JSON は API の本文と同じ形なので、swagger や GET の結果をそのまま置ける。
TOML (subtask.toml) も引き続き使え、pull の書き戻しはローカルにある方の
形式に合わせる。両方あるとどちらを送るか決められないのでエラーにする
(statement の .md / .html と同じ)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@yuki2006
yuki2006 merged commit f9b40c4 into main Sep 8, 2026
1 check passed
@yuki2006
yuki2006 deleted the subtask branch September 8, 2026 15: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