From 47877134ea43a17f5106ba968e33bf9a145f536e Mon Sep 17 00:00:00 2001 From: "Doucette, Jarrod S" Date: Mon, 20 Jul 2026 10:22:02 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20note=20investigation=20order=20?= =?UTF-8?q?=E2=80=94=20logs/manifest=20before=20a=20direct=20Fortress=20ls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diagnosing a target's shipped-object shape (e.g. why it landed as many solo tars) should start from the nightly run report, per-target job stdout, and the _vault manifest — hsi ls against tape is a live HPSS call and should be the last-resort confirmation, not the first check. Co-Authored-By: Claude Sonnet 5 --- CLAUDE.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 9f9bd8e..77dcdc8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -435,6 +435,20 @@ archives byte-for-byte as before. Authoritative design: `docs/RFC_incremental_v2 by the legacy per-log `verify()`. - **Reship-monitor**: a run re-shipping > 25% of shards emails `[RESHIP-WATCH]` — the Phase-3 (leveled engine) trigger. Pure append trips ~0%. +- **Investigating what shipped (e.g. "why did this target land as hundreds of + solo tars?") — check logs/manifests before querying Fortress directly.** + `hsi ls` is a live HPSS/tape call; the answer is almost always already + recorded by the run that did the archiving. Order: + 1. The caller's nightly run report (e.g. florasense-tools' + `repo_backup_reports/*.txt`) — which targets archived/deferred/skipped and + why (first backup vs. incremental, concurrency-cap deferrals, etc.). + 2. The per-target job stdout (e.g. `repo_backup_jobs/*.out`) — the + `SIZE-ROUTING COMPLETE` block this module prints: `T_small`, badge, K, + object count, solo/shard split, reship %. + 3. The manifest at `{log_dir}/_vault/{badge}.manifest.json` — durable + per-object ground truth (arcnames per slot, fingerprints). + 4. Only then, a direct Fortress listing (`hsi ls /group/...`) to confirm + against tape — last resort, not the first move. - **Restore** (`restore.py`, LOCAL, operator-invoked): full or selective restore into an **empty** dest. Gates, in order, each aborting the whole restore: completeness (every selected object tar on tape BEFORE any transfer), empty