Repository navigation
snapshot create: 既にある世代の名前で --full を打つと失敗し、その後の差分が失敗の前の変更を落とす → その世代を今のボリュームの全体で作り直し、失敗しても前の控えを保つ(#458) - #467
Conversation
既存の世代の名前で snapshot create --full を打ったときの作り直しの要求。 課題の本文が正で、この写しは spec-copy.py write で作った。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
新しい full を仮の名前と新しい状態ファイルで控えてから入れ替え、 前の状態ファイル → 差分(番号の大きい順)→ full → 状態ファイルの順で 置き換える。新しい世代の作成は今と同じ経路のまま。 語「世代の作り直し」を用語集へ足した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
修正が必要な指摘は major 1 件です。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
設計文書のドメインモデルの節と用語集の差分を見た。コンテキストは snapshot 単一で閉じ(コンテキストマップ不要)、集約「世代」の書き換えは単一の orchestrator _create_full 経由に収束し、不変条件 I1〜I5 は矛盾せず、ドメインイベント E1〜E7 は受け手を持ち要求の E1〜E7 の番号を引き継いでいる。用語集に追加した「世代の作り直し」は設計の用語表・参照先(snapshot-series.md)と一致する。critical/major の指摘は無し。
full と meta.yml の入れ替えの間は meta.yml に rebuilding の印を立て、restore が 消去の前に拒む。状態ファイルは印を外した後に入れ替える(I3・決定 2)。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 1 | commit 21963e9対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | APPROVE
round 1 の指摘(full と meta.yml の組の食い違い)への対応として入った印 rebuilding: true・meta.yml の 2 回の書き換え・restore の消去前の拒否は、止まる各状態で restore が別の組のボリュームを消さないことを満たしており、manager.py の restore(唯一の消去の経路、呼び出しは commands/snapshot.py:126 のみ)とも矛盾しない。critical/major の指摘は無し。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
round 1 の major(別のボリュームの組で既存名へ --full を打ち、full と meta.yml が別の組を指す途中状態で restore するとデータを取り違えて消す)への対応差分を確認した。(1) 破壊的に対象ボリュームを消すのは restore(clear_command 経由)だけで、rotate/delete は snapshot.yml のエントリだけを触り meta.yml の volumes/archive_root を読まないため、restore に印チェックを置けば保全できる。(2) 入れ替え順(snar 削除 → incr 削除 → 印付き meta → full 改名 → 印無し meta → snar 改名)により full=新/meta=旧 の窓は生じず、meta=新/full=旧 の窓は rebuilding 印で restore を止める。(3) meta.yml を消さず印にする決定は、snapshot_volumes が meta 欠落時に旧レイアウト(HOME_UBUNTU_VOLUME をルートへ)へフォールバックする実装(manager.py:1248-1271)と整合し、採らなかった形の根拠が実装で裏づけられる。(4) 用語集の『世代の作り直し』と整合し、rebuilding は内部キーで利用者語ではない。I3(a)(b)・状態表・テスト設計行・入出力の契約が互いに矛盾しない。critical/major の指摘は無し。
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
#458 の要求と受け入れ条件の写し、および設計文書(スプリント m8b)を追加しました。設計の主題は「既存の世代を
--fullで作り直す」ことです。この PR には文書だけが含まれ、実装は入っていません。利用者向けの変化
移行の手順
変更の要点
issues/issue-458-requirements.mdを追加しました。既存の世代の名前で snapshot create --full を打つと、full.tar.zst が変更分だけになり復元でファイルを失う #458 の要求と受け入れ条件の写しです。issues/issue-458-design.mdを追加しました。既存の世代の名前で snapshot create --full を打つと、full.tar.zst が変更分だけになり復元でファイルを失う #458 の設計(既存の世代を--fullで作り直す)を書いています。docs/glossary.mdとdocs/glossary/glossary.jsonに足しました。テスト
supervise.py の run のステップの結果です。
issues/issue-458-requirements.mdを読めない:[Errno 2] No such file or ...)requirements-check は止まりました。理由は
issues/issue-458-requirements.mdを読めなかったことです。このファイルは変更の統計では追加されています。止まった原因を確かめたうえで、このステップをやり直す必要があります。モード: standard / 通した工程: 設計 → 要求と受け入れ条件 → ドキュメントレビュー
🤖 Generated with Claude Code
決めたこと
issues/issue-458-design.md--fullを止めずに受け付け、前の差分は消して前の時点へは戻せないと文書に書くCHANGELOG.mdで条件と取り直しを案内する(要求の未決 1 の案)