Repository navigation
スナップショット: 作り直せるキャッシュ・一時ファイル・ログまで毎回控え、フルの世代と差分が大きくなる → 本体が持つ既定の除外と利用者が足した除外を控えから外し、除外が違う世代へは差分を積まない(#368) - #459
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 除外は各ボリュームの頭にアンカーし、* は 1 つの要素の中だけに当てる(GNU tar 1.35 で測った) - 利用者の除外は backups/exclude.yml で受け、使えない値は警告して外す - 世代の meta.yml に除外の一覧を残し、違う世代へは差分を積まない - 既定の除外に logs_2.sqlite の WAL・SHM を足す(課題の表に無いパス。承認ゲート 1 で見る) - 用語集に「除外のパターン」を足し、「利用者の除外」に置き場を書き足す 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 | APPROVE
ドメインモデルの節と用語集の差分について、指定の基準に該当する修正指摘はありません。判断の根拠: Vision・Value 2・Value 3(世代ごとの除外の固定、既存世代の復元互換性、ボリュームを起点とする除外の条件を確認)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
設計 PR のドメインモデルの節(コンテキスト・集約・不変条件・ドメインイベント・用語)と用語集の差分を見た。コンテキストは snapshot 1 つで volume との順応者関係も宣言済み、集約はそれぞれ持ち主が 1 つ(世代=SnapshotManager、利用者の除外の設定=利用者)、不変条件 I1〜I8 に相互矛盾は無く、ドメインイベント E1〜E7 はすべて受け手を持ち要求 E1〜E7 の番号を 1:1 で引き継ぐ。用語集の差分(除外のパターンを追加、利用者の除外の意味を backups/exclude.yml 置き場で変更、除外の一覧・既定の除外は要求で追加済みで不変)は設計の用語表の『追加・意味の変更・変えない』の宣言と一致する。基準(critical/major)に当たる指摘は無い。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
1 件。読めない exclude.yml を既定の除外だけで続ける扱い(決定 4)が、不変条件 I1 と自動スナップショットの rotate を通じて古い世代を消す経路になっている。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
設計 PR #368 を kiro 観点(共通・ドキュメント・設計の各観点)で round 2 レビューした。要求(issue-368-requirements.md)・設計(issue-368-design.md)・用語集差分(glossary.json / glossary.md)を実装(lib/devbase/snapshot/manager.py)と照合した。受け入れ条件 1〜14・不変条件 I1〜I8 はテスト設計表に 1:1 で対応し、退けた案(決定 1〜7 の『採らない』)は他節に残っていない。入出力の契約の SnapshotError の文面・終了コード 1 への経路(create→_create_incremental→cmd_snapshot)、copy の meta 丸写し(shutil.copytree)、restore を変えない(I8)を実コードで確認した。tar の挙動は『測った tar の振る舞い』で実測の根拠がある。用語集 json/md は一致し、設計の用語表の『追加・意味の変更・変えない』の宣言と整合する。critical / major の基準(誤動作・停止・データ破壊・秘密や戻せない操作・実装者が別物を作る食い違い)に当たる修正指摘は無い。
読めない exclude.yml を既定の除外だけとして比べると、新しい世代ができて rotate が古い世代を消し、設定を直した次の up でもう 1 世代消える。 読めない間は記録を持つ世代へ記録の一覧で差分を積む形に変え、決定 4・ テスト設計・snapshot-guide に書くことを直した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 2 | commit 621ba0e対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | REQUEST_CHANGES
1 件。I9 が差分の経路だけを守り、読めない間に差分の上限で作る新しいフルが既定の除外だけになるため、設定を直した後にもう 1 世代がローテーションで消える経路が残る。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | APPROVE
指定の差分(1e1a59c → 621ba0e)に、重複を除く critical / major の修正指摘はありません。判断の根拠: Value 2・Vision(読めない設定時の除外の引き継ぎを、積み先判定・差分作成・テスト設計と照合)。
差分の上限・snar 無しのフォールバック・復元前バックアップで作る新しいフルを _excludes_for で系列の記録の一覧にし、設定を直した次の up で世代を失わないようにする。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 3 | commit 3ddf5dc対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
#368 の要求と受け入れ条件の写し、および設計文書を追加しました。除外にかかわる語を用語集へ足しています(スプリント m8a)。コードの変更は含みません。
利用者向けの変化
移行の手順
変更の要点
issues/issue-368-requirements.mdを追加issues/issue-368-design.mdを追加docs/glossary.mdとdocs/glossary/glossary.jsonへ除外の語を追加変更は 4 ファイル、637 行の追加です。
テスト
supervise.pyの run のステップの結果です。issues/issue-368-requirements.mdを読めない:[Errno 2] No such file or ...)requirements-check の終了コード 2 は失敗ではありません。要求の文書(
issues/issue-368-requirements.md)をまだ書いていない時点で打つ検査で、「仕様のコピーが無いので要求の工程を通す」という意味です。要求はこの PR で書きました。モード: standard / 通した工程: 設計 → 要求と受け入れ条件 → ドキュメントレビュー
🤖 Generated with Claude Code
決めたこと
issues/issue-368-design.mdexclude.pyに置き、manager.pyは受け取って使うだけにするchats/の下を外さないよう、パターンにメンバー名を頭に付け、--anchored --no-wildcards-match-slashでメンバーより前に渡すbackups/exclude.ymlで受けるmeta.ymlに full を作ったときの一覧を残し、違う世代へは差分を積まない.codex/logs_2.sqlite-walと-shmを足す