Skip to content

#368 を実装する(スプリント m8a) - #461

Merged
takemi-ohama merged 4 commits into
sprint/m8afrom
feat/issue-368-m8a
Oct 12, 2026
Merged

takemi-ohama merged 4 commits into
sprint/m8afrom
feat/issue-368-m8a

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

スナップショットの控えから、既定の除外パスと backups/exclude.yml に書いたパスを外すようにしました(#368)。除外の一覧が前の世代と違う系列では、新しいフルの世代を作ります。

利用者向けの変化

  • スナップショットの控えに、既定の除外パスは含まれません。
  • backups/exclude.yml に書いたパスも控えから外れます。
  • 除外の一覧が前の世代と違うときは、その系列に新しいフルの世代を作ります。
  • 除外を入れる前に作った世代も、そのまま一覧・復元できます。

移行の手順

  • 無し

変更の要点

  • lib/devbase/snapshot/exclude.py を新しく追加しました。既定の除外と backups/exclude.yml の除外をまとめて、一つの除外の一覧にします。
  • lib/devbase/snapshot/manager.py は、控えを作るときにこの除外を当てます。また、世代ごとに除外の一覧を記録します。記録した一覧が前の世代と違えば、系列に新しいフルの世代を作ります。
  • 除外の効き方と世代の扱いは、次のとおりです。
    • 既存の世代は書き換えません。
    • 更新後の最初の自動スナップショットで、系列ごとに新しいフルの世代を作ります。
    • 変更前の devbase へ切り戻した場合も、変更後に作った世代を復元できます。ただし、除外したパスは含まれません。
  • 系列の確定仕様(docs/specifications/snapshot-series.md)に、順 4a を書き足しました。除外の一覧が違うときに新しい世代を作る手順です。
  • 利用者向けの文書(docs/user/snapshot-guide.md、docs/user/cli-reference/05-snapshot.md)と CHANGELOG に、次の内容を書きました。
    • 控えから外すもの
    • backups/exclude.yml の使い方
    • 除外が違う世代の扱い

テスト

  • 次の 3 点をテストで確かめます。
    • 除外の一覧(tests/snapshot/test_exclude.py)
    • 世代の記録と、新しいフルの世代を作る条件(tests/snapshot/test_exclude_generations.py)
    • 実際の tar で除外が効くこと(tests/snapshot/test_backup_real_tar.py)
  • 既存のテストも、除外に合わせて直しました(test_archive_layout.py、test_manager_series.py、test_restore_incremental.py)。
  • supervise.py の run のステップの結果は、次のとおりです。
ステップ exit 結果
test-limited 0 範囲テスト 1 本が通った(125.7 秒、戦略 local-full)
design-tests 0 設計文書 issues/issue-368-design.md に名前の出るテスト 3 件が、すべて HEAD にある
design-specs 0 変えたパス 11・シンボル 73 に関わる既存の確定仕様と変更履歴 14 件を照合した

設計と違う点

設計の箇所 違い 理由
issues/issue-368-design.md「テスト設計」受け入れ条件 10・I8 の行(test_restore_incremental.py を変えずに通る) tests/snapshot/test_restore_incremental.py の _swap_directories を変えた。実の Docker で入れ替える場所を .claude/plugins/cache から data/cache へ移した(復元の経路・確かめる中身は変えていない) 入れ替えていた .claude/plugins/cache が既定の除外(決定 6・S4)に入り、控えに入らなくなったため。除外の中のままでは入れ替えた中身の復元を確かめられない。受け入れ条件 10 そのもの(変更前の世代を一覧・復元できる)は変わらない

モード: standard / 通した工程: 実装 → 完了判定 → Pull Request

実装の担当の覚え書き(conductor が転記)

  • 設計の決定(issues/issue-368-design.md の決定 1〜7)と違えたところ: 無し。上の表の test_restore_incremental.py の変更はテスト設計の行で、決定ではない
  • 受け入れ条件 9: conductor がマージ前に行った(合格。スプリント m8a #462 のコメント)
  • 手元で飛んだテスト: tests/snapshot/test_backup_real_tar.py の実の GNU tar のテスト(受け入れ条件 1・2・3・8・13)は、手元の macOS に GNU tar が無く飛んだ。CI(Linux。GNU tar と zstd がある)で走る。受け入れ条件 1〜4・8 は conductor が実の devbase-snapshot イメージでも確かめた(スプリント m8a #462 のコメント)

🤖 Generated with Claude Code

takemi-ohama and others added 4 commits October 12, 2026 18:03
除外の一覧を exclude.py で組み立て、フル・差分・復元前バックアップの tar に
--anchored --no-wildcards-match-slash でメンバーより前に渡す。世代の meta.yml に
作ったときの除外の一覧を残し、違う一覧の世代へは差分を積まない(自動は新しい世代、
名前の指定は止める)。設定が読めない間は世代の記録の一覧で控える。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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