verify-restore
バックアップ → リストアを偽の HOME で通しで流し、新規マシンでリストアが成立するかを実測する。scripts/ や置き場の構成を変更した直後に使う。ユーザーが「リストアを検証して」「新規マシンで動くか確かめて」「/verify-restore」等を指示したときに使う。
SKILL.md.claude/skills/verify-restore/SKILL.md
GitHubscripts/restore_dotfiles.sh は何も無いマシンで走るのが本番。既存マシンでは ln が File exists で黙って失敗して素通りするため、壊れる経路を通らない。詳細は .claude/rules/restore-verification.md。
進め方
ステージを空にする:
git diff --cached --name-onlyが空であること。フックの検査はステージ済みの全ファイルを見るため、残っていると結果が変わる流す
./scripts/verify_restore.sh偽の HOME を
mktemp -dに作り、終わったら消す。実機の~には触らない。 実リポジトリに対しては読み取りとステージ操作しか行わない失敗した項目を読む:
期待 [...] 実際 [...]の形で出る。空の結果を「該当なし」と読まない(verify_before_asserting.md)直したら再実行する。全項目が通るまで繰り返す
何を見ているか
| 節 | 観点 |
|---|---|
| 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に引っかかる。組み立てる形にする