All repos under a parent directory emptied to skeleton dirs during session resume; Claude-process provenance on residue; no session command responsible
Title: All repos under a parent directory emptied to skeleton dirs during session resume;
Claude-process provenance on the residue; no session command responsible
Summary. On 2026-07-18 between 08:47 and 08:56 MDT, every git repository under/Users/vikas/code (~20 repos) was reduced to skeleton directories: .git left with onlyconfig + hooks/ (original timestamps), all objects/refs/HEAD/index and working files gone;
surviving structure limited to node_modules remnants, .vscode, .claude, and freshly created.claude/.cc-writes markers. The window coincides exactly with multiple Claude Code sessions
resuming (SessionStart:resume) in the desktop app, including sessions anchored at the parent
directory and at one child repo.
Key evidence.
com.apple.provenancexattrs on the newly created skeleton dirs match files created by the
Claude process family on this machine (identical ID), and .cc-writes markers were created in
the damage window.
- A sweep of every session transcript active in the window found no destructive command at any
scope broader than /tmp files — the deletion did not go through any session's Bash tool.
- Ruled out independently: iCloud Drive (unused), third-party sync/cleaner apps (none installed),
macOS update (staged but never applied; no reboot since Jun 16), Time Machine (no accessible
backups; only OS snapshots).
- Environment: macOS 26.5.1 (25F80), Claude desktop app 1.22209.0, Claude Code CLI ≥2.1.211-era,
sandbox enabled (macOS Seatbelt) with git */gh * in excludedCommands, auto mode default,
multiple concurrent local sessions + worktree usage. Notable app feature flags active:
coworkLocalSessionProjects, coworkRemoteSessionSpaces, coworkBranchSession.
Impact. Local-only data destroyed: git object stores (reflogs unrecoverable), gitignored env
files, any unpushed work. Pushed state recoverable by re-clone (done). No secrets exposed —
purely destructive.
Suspicion (unproven). Session-space / per-session-worktree provisioning at resume acting on
the real checkouts instead of an isolated copy — the survivor set resembles worktree-provisioning
artifacts (symlink-directory names, env-copy targets, write-tracking markers).
Asks. (1) Does resume-time session-space provisioning ever mutate the original project
directory? (2) What logs (app-side) would confirm/refute for this window? (3) If confirmed, a
guard: provisioning must never operate destructively on a directory containing a real .git
object store.
Available on request: full incident doc, timeline with mtimes, transcript-sweep script and
output, skeleton directory listings (53 preserved as *.incident-skeleton/).
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗