f9849c43a2
`hermes backup` already skips `backups/` so a full zip never re-ships earlier pre-update zips. `state-snapshots/` (written by `hermes backup --quick`, `/snapshot create`, and the pre-update safety net) has the same shape — every retained snapshot holds its own copy of state.db — but was not in `_EXCLUDED_DIRS`, so a full backup shipped the DB once per retained snapshot on top of the live one. Two places hit this in practice: - `hermes update` in `full` mode takes the quick snapshot *before* the full zip, so the pre-update zip always nests the snapshot it just made (state.db twice in every pre-update-*.zip). - Any recurring `hermes backup --quick` (default keep=20) makes a daily `hermes backup` grow by roughly one compressed state.db per retained snapshot; a 750 MB state.db with two snapshots on disk pushed a daily zip from 1.8 GB to 2.3 GB. Add `_QUICK_SNAPSHOTS_DIR` to `_EXCLUDED_DIRS` (moving the constant up next to the exclusion rules so there is one source of truth). Both walk sites and `_should_exclude` share the set, so `hermes backup`, the pre-update zip and the auto-backup path all pick it up. Restoring snapshots after a machine move was never the point of the full backup — `profiles.py` already excludes `state-snapshots/` from `--clone-all` for the same reason. Tests: unit case next to the `backups/` one, plus two end-to-end cases that use the real `create_quick_snapshot` producer and assert the zip carries exactly one state.db (full backup and pre-update-order).