verify-restore

バックアップ → リストアを偽の HOME で通しで流し、新規マシンでリストアが成立するかを実測する。scripts/ や置き場の構成を変更した直後に使う。ユーザーが「リストアを検証して」「新規マシンで動くか確かめて」「/verify-restore」等を指示したときに使う。

SKILL.md

GitHub

scripts/restore_dotfiles.sh は何も無いマシンで走るのが本番。既存マシンでは ln が File exists で黙って失敗して素通りするため、壊れる経路を通らない。詳細は .claude/rules/restore-verification.md。

進め方

  1. ステージを空にする: git diff --cached --name-only が空であること。フックの検査はステージ済みの全ファイルを見るため、残っていると結果が変わる

  2. 流す

    ./scripts/verify_restore.sh
    

    偽の HOME を mktemp -d に作り、終わったら消す。実機の ~ には触らない。 実リポジトリに対しては読み取りとステージ操作しか行わない

  3. 失敗した項目を読む: 期待 [...] 実際 [...] の形で出る。空の結果を「該当なし」と読まない(verify_before_asserting.md)

  4. 直したら再実行する。全項目が通るまで繰り返す

何を見ているか

節 観点
1 スクリプトの構文
2 新規マシンへのリストア。リンク先・部分リンク・秘匿値・リポジトリ本体が無傷か
3 偽 HOME でシェルが起動し、エイリアスが引けるか
4 冪等性。2 回流しても退避が起きず結果が同じか
5 既存の実体がある ~ への上書き。消さずに退避するか
6 アーカイブが無い場合。publicだけで進み、秘匿値の雛形が置かれるか
7 アーカイブの中身。AES-256・トップレベル・ソケット除外・秘匿値と macOS 設定の同梱
8 pre-commit が資格情報を止め、正常なものを通すか
9 雛形と実体の一致、置き場をまたぐ名前衝突、private/ の非追跡

検査を足すとき

スクリプトに check を 1 行足す。 手順書だけを直しても実行されない。

check "説明" "$(実際の値を出すコマンド)" "期待値"

固定値をハードコードしない。 スキル数のように増減するものは、リポジトリから数えて期待値にする($SKILLS)。固定すると、増えるたびに偽の失敗が出る。

出力の目安

失敗が無ければ合計行だけでよい。 全項目を貼ると、何が問題なのか埋もれる。

51 項目すべて通過(`./scripts/verify_restore.sh`)

失敗したときは、その項目の期待値と実際の値、原因、直し方を出す。

やってはいけないこと

  • 本物の ~ に対して restore を流すこと
  • 既存マシンで動いたことを根拠に「検証済み」と報告すること
  • ステージにファイルが残ったまま流すこと。8 節の結果が信用できなくなる
  • PRIVATE_PASSPHRASE を手作業で使うこと。検証専用で、ps とシェル履歴に残る
  • ~/.gnupg が偽 HOME に作られるのを異常として扱うこと。gpg が復号時に自分で作る
  • ダミーの資格情報をリテラルで書くこと。スクリプト自身が pre-commit に引っかかる。組み立てる形にする