Why
offload-v1 is merged. The code is sound and the test suite (unit + integration with fakes) is green, but nothing has run the full chain against the real backends from the NAS design (Hetzner Storage Box over SFTP, S3 Glacier Deep Archive, local kopia mirror). Because squirrel offload deletes the only local copy based on recorded durability, the first real use should be a deliberate, dry-run-first shakedown on a throwaway volume — not pointed at anything irreplaceable.
This issue is the acceptance checklist for that shakedown. It gates trusting offload with real data; it does not block the merge (already done).
Depends on / coordinate with:
Checklist (throwaway volume, real backends)
Operational notes to confirm during the run
- kopia first use requires
squirrel sync --init once (the agent/scheduler never sets it) — confirm the bootstrap step and that the README/flag help match the actual behavior.
offload deletes for real by default (no confirmation prompt; --dry-run is opt-in) — confirm this is the intended ergonomics for the agent/scripted path.
- A destination's layout (mirror vs content-addressed) is fixed at first use and switching is refused — confirm the refusal fires as documented.
Done when
The checklist passes against the real backends and the multipart-fingerprint question (#118) is resolved, at which point offload can be pointed at real volumes with confidence.
Why
offload-v1is merged. The code is sound and the test suite (unit + integration with fakes) is green, but nothing has run the full chain against the real backends from the NAS design (Hetzner Storage Box over SFTP, S3 Glacier Deep Archive, local kopia mirror). Becausesquirrel offloaddeletes the only local copy based on recorded durability, the first real use should be a deliberate, dry-run-first shakedown on a throwaway volume — not pointed at anything irreplaceable.This issue is the acceptance checklist for that shakedown. It gates trusting offload with real data; it does not block the merge (already done).
Depends on / coordinate with:
mbertschler/infra#18— the realnas.toml/squirrel.tomlfor kreisel (still draft; this is the live exercise of it).Checklist (throwaway volume, real backends)
contents/filesrows look right (squirrel query).offload_requires— NAS (peer), Hetzner (crypt content-addressed), S3 Glacier (crypt content-addressed), kopia mirror. Note the kopia first-use--initrequirement (see below).squirrel verify <dest>records/matches a checksum for each object on the content-addressed offsites — and specifically that a multipart object gets a usable fingerprint (this is the [medium] Confirm/repair S3 multipart ETag capture for scan-back fingerprints #118 dependency; record whatlsjson --hashactually returns for the large object).squirrel peer-sync pull-durabilityand confirm the relayed offsite components land for the targets only the NAS pushes to.offload --dry-run: confirm the per-file gate decisions match expectations — every fileOutcomeOffloaded, no surpriseNotDurable, and the reasons read sensibly for any held-back file.offload: run it; confirm local bytes are unlinked, rows flippresent → offloaded, and akind='offload'run is recorded.offloadrefuses that file with a clear per-target reason rather than deleting.Operational notes to confirm during the run
squirrel sync --initonce (the agent/scheduler never sets it) — confirm the bootstrap step and that the README/flag help match the actual behavior.offloaddeletes for real by default (no confirmation prompt;--dry-runis opt-in) — confirm this is the intended ergonomics for the agent/scripted path.Done when
The checklist passes against the real backends and the multipart-fingerprint question (#118) is resolved, at which point
offloadcan be pointed at real volumes with confidence.