Commit 0e7aa80
* docs(WORKAROUND_CATALOG): add durable-snapshot + touch-refresh operational recipe under CC#62272
Closes #364.
Adds a "Operational recipe: durable-snapshot + touch-refresh stack" subsection
inside the existing CC#62272 entry. Documents what the `tool`-depth "out-of-band
snapshot" row of that entry actually looks like when built and run for a week.
Four-piece stack: sane cleanupPeriodDays, hourly rsync-with-hardlink, daily
selective touch (`-mtime +20`), Persistent=true systemd-timers.
Five non-obvious behaviors documented, each one caught on live data 2026-09-01
through 2026-09-05:
- Blanket `find -exec touch` breaks `claude --continue`'s
most-recent-modified-JSONL heuristic; selective `-mtime +20` preserves it.
- `/rename <name>` writes both `~/.claude/sessions/<pid>.json` (runtime,
dies with process, tracks formerNames[]) and
`~/.claude/projects/<key>/<sid>/custom-title.json` (durable, what
`--resume <name>` reads at invocation).
- rsync `--link-dest` cannot cross filesystems; keep prev/new snapshots
on the same filesystem or switch to `cp --reflink` on Btrfs.
- `find -newer` on an rsync'd archive is not evidence of freshness —
source mtime is preserved. Use content hashes for reconciliation.
- Prune stale snapshots INSIDE the same cron, AFTER a successful snapshot
pass — never before, or a failing pass will delete history.
Restore workflow: `find`-for-orphaned-project-dirs, rsync-back additive,
touch to lift restored files above the retention cliff, verify with
`claude --resume <sid>` (bypasses the /resume picker).
Fallback: subagent tree under `<sid>/subagents/` plus `~/.claude/history.jsonl`
entries for the sessionId often survive when the main transcript doesn't —
enough to reconstruct a session-continuation brief.
Docs-only, not load-bearing. Extends the CC#62272 entry rather than adding
a new top-level entry since it's the same bug's mitigation, just spelled out.
Ref #218 (parent catalog).
* docs: Codex review artifact for PR #366 round 1
* docs(WORKAROUND_CATALOG): fix restore-command path mismatch (Codex R1)
The archive is documented as snapshotting whole ~/.claude/, so the archive
layout has projects/, file-history/, etc. as subdirs of snap-<ts>/. The R1
restore command wrote the source path as
<archive>/snap-<ts>/-home-manager-...
which skipped the projects/ component and would have missed the file at
restore time.
Fix: include projects/ in the source path. Also extends the invocation with
a sibling example for file-history/ so the "restore other subtrees the same
way" path is spelled out, matching the WSL2-blast-radius point earlier in
the entry.
Addresses Codex R1 blocker on #366.
---------
Co-authored-by: Proxy Builder Bot <vsits-proxy-builder-bot@users.noreply.github.com>
Co-authored-by: vsits-codex-review-agent[bot] <279008405+vsits-codex-review-agent[bot]@users.noreply.github.com>
1 parent 031d5e0 commit 0e7aa80
2 files changed
Lines changed: 65 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
103 | 131 | | |
104 | 132 | | |
105 | 133 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
0 commit comments