# Migration Completeness Audit

**Date:** 2026-06-01
**Question this gates:** Is it safe to archive `~/Dropbox/CLAUDE_PROJECTS/` to SSD and DELETE it?
**Method:** COPY-ONLY. Nothing in the Dropbox tree was moved, renamed, or deleted. No clobbers — differing files were copied alongside with a `.FROM_DROPBOX` suffix.

---

## 1. HEADLINE RISKS — must relocate BEFORE deleting the Dropbox tree

Two items hold content that exists **ONLY** in `~/Dropbox/CLAUDE_PROJECTS` and is NOT in any new home or pushed to any remote:

1. **`~/Dropbox/CLAUDE_PROJECTS/starsend-tv/`** — git repo (`github.com/joeturnerlin/starsend-tv`), but it has **5 unpushed commits** AND **untracked, never-committed** content including the universe bibles:
   - `~/Dropbox/CLAUDE_PROJECTS/starsend-tv/universes/` (24K) — contains `the-afterimage/UNIVERSE_BIBLE.md`
   - `~/Dropbox/CLAUDE_PROJECTS/starsend-tv/format_micro/` (128K)
   - `~/Dropbox/CLAUDE_PROJECTS/starsend-tv/content_filter_log.md`
   - `~/Dropbox/CLAUDE_PROJECTS/starsend-tv/.claude/`
   → **The product dir with universe bibles is NOT safely backed up. Push commits + commit-or-relocate the untracked dirs before delete.**

2. **`~/Dropbox/CLAUDE_PROJECTS/recoil-website/`** — git repo (`github.com/joeturnerlin/recoilstudios`), 0 unpushed commits, but **untracked, never-committed** poster art and backup HTML lives only on disk:
   - `posters/RELIC_Poster*.png` (11 files: v2–v5f, final, fixed)
   - `index_v1_backup.html`, `index_v1_clean.html`
   → **Relocate or commit the RELIC posters + backup HTML before delete.**

**Borderline (committed to remote, but local working tree diverges — verify before delete):**
- **`~/Dropbox/CLAUDE_PROJECTS/OTF-Website-project/`** — git repo (`github.com/joeturnerlin/outsidetheframe`). Working tree shows **88 deletions + 1 modified + 12 untracked** vs HEAD. The full site lives in git HEAD/remote, so source is recoverable via `git clone`, but the **current on-disk working state is divergent** and is not reflected anywhere else. If that working state matters, capture it; otherwise the remote is authoritative.

Everything else is either MIGRATED, safely in git remotes, duplicated in `_evicted` staging, or regenerable CRUFT. See tables below.

---

## 2. TASK A — Recoil asset restoration results

Diffed OLD `~/Dropbox/CLAUDE_PROJECTS/projects/<proj>/` against NEW `~/Dropbox/CLAUDE_DATA/recoil/projects/<proj>/` for media (`.png .jpg .jpeg .webp .mp4 .mov .webm`) and adjacent JSON sidecars. Copied every media/sidecar present in Dropbox but absent in CLAUDE_DATA. Skipped `node_modules / .git / __pycache__ / .pytest_cache / .ruff_cache / .DS_Store / *.pyc` and any `_quarantine` / `_test_*` dir.

### Per-project (only projects with changes shown; all 28 project dirs exist identically-named on both sides)

| Project | Copied | Already present | Conflicts | Missing sidecars (copied) | Bytes copied |
|---|---|---|---|---|---|
| `afterimage` | 38 | 833 | 0 | 0 | 139,352,707 |
| `driver-beware` | 101 | 1,116 | 0 | 17 | 62,997,320 |
| `leviathan` | 1,217 | 2,200 | 0 | 0 | 2,036,235,600 |
| `ronin-drm` | 6 | 143 | 0 | 0 | 4,464,910 |
| `starsend-test` | 135 | 0 | 0 | 0 | 176,399,350 |
| `tartarus` | 145 | 296 | 243 | 70 | 211,102,292 |
| **TOTALS** | **1,642** | **4,901** | **243** | **87** | **2,630,552,179 (2.63 GB)** |

All other project dirs (`afterimage-anime`, `belfry`, `borders`, `client_utilityvideo`, `echo`, `generation-architecture`, `olympus`, `singularity`, `state`, `the-eye`, `the-hike`, `time-enough-for-love`, `tourniquet`, `test_project`, `test-project`, and `_archive _exec_test_r2 _phase14_gate_test _probes _shared _test_r5 _test_r5b _test_r5c _test_stratlib`) had **zero missing media/sidecars** — already fully present in CLAUDE_DATA.

### Sidecar verdict (JT believed these "already migrated")
**Mostly true, with exceptions.** 87 sidecars were present in Dropbox but MISSING in CLAUDE_DATA and have now been copied:
- **`driver-beware`: 17 missing sidecars** — all under `assets/prop/blue_car/` (e.g. `front.png.json`, `car_ref_sheet.jpg.json`, `regen_ref_frame_01..12.jpg.json`, `back.png.json`, `profile.png.json`, `three_quarter.png.json`).
- **`tartarus`: 70 missing sidecars** — copied alongside their media.
These were genuinely absent before this run; the "sidecars already migrated" assumption was incomplete.

### Conflicts (243 total — all in `tartarus`)
No file was overwritten. Each differing Dropbox file was written alongside as `*.FROM_DROPBOX.*`. **236 `.FROM_DROPBOX.*` files written** (243 conflicts minus 7 dangling-symlink errors below).

Breakdown:
- **229 sidecar JSON conflicts** — `tartarus` `.png.json` / `.json` sidecars whose content differs between the two trees (e.g. `assets/prop/salvage_hook/*.png.json`, `assets/prop/warden_drone/warden_drone_ref.png.json`, `assets/prop/cryo_pod/cryo_pod_hero.png.json`). Dropbox versions preserved as `.FROM_DROPBOX.json`.
- **7 media conflicts — TEST STUBS, not production art.** These 7 differ because the Dropbox file is a 1×1 placeholder PNG and the CLAUDE_DATA file is a symlink string pointing at `recoil/pipeline/tools/audit_fixtures/`. Both are audit fixtures, not real assets:
  - `tartarus/assets/identity/jade/jade_identity_{hero,profile,front,closeup,three-quarter,back}_v01.png`
  - `tartarus/assets/loc/corridor/corridor_loc_hero_v01.png`

### 7 "errors" = dangling symlinks (NOT data loss)
These `tartarus` entries are symlinks whose targets do not exist anywhere in the Dropbox tree, so there was no real file to copy. Listed for completeness; no action needed (broken links, not lost binaries):
- `assets/prop/CRYOPOD_PROBE/CRYOPOD_PROBE_prop_frontal_v01.png` → (missing) `output/refs/props/cryo_pod/cryo_pod_hero.png`
- `assets/identity/WREN_CLOSEUP_4K/WREN_CLOSEUP_4K_identity_frontal_v01.png` → (missing) `output/refs/_canonical/characters/wren/closeup.jpg`
- `assets/identity/WREN_FRONT_4K/WREN_FRONT_4K_identity_frontal_v01.png` → (missing) `.../wren/front.jpg`
- `assets/identity/JADE_CLOSEUP_4K/JADE_CLOSEUP_4K_identity_frontal_v01.png` → (missing) `.../jade/closeup.jpg`
- `assets/identity/JADE_FRONT_4K/JADE_FRONT_4K_identity_frontal_v01.png` → (missing) `.../jade/front.jpg`
- `assets/identity/jade/jade_identity_frontal_v01.jpeg` → (missing) `../jade_anime_v1.jpg`
- `assets/loc/SHAFT_PROBE/SHAFT_PROBE_loc_establishing_v01.png` → (missing) `output/refs/_canonical/locations/.../hero.png`

**Task A bottom line:** 1,642 files (2.63 GB) of real missing media + sidecars restored to CLAUDE_DATA. No clobbers. The only conflicts are stale tartarus sidecar JSONs and test-fixture stubs.

---

## 3. TASK B — Migration-completeness table (every top-level entry)

New homes checked: `~/CLAUDE_PROJECTS` (code repo), `~/Dropbox/CLAUDE_DATA` (data), `~/Code` (sub-project repos), `~/.config` (installed tools).

### `~/Dropbox/CLAUDE_PROJECTS/` top-level

| Item | Class | Resolved new home / note |
|---|---|---|
| `_archive` | MIGRATED | `~/CLAUDE_PROJECTS/_archive` |
| `_phase_0/7a/7b/7c/8/9_manifest.yaml` | CRUFT | Build manifests; superseded set lives in `~/CLAUDE_PROJECTS` (`_phase_1..7`) |
| `_phase_1..6_manifest.yaml` | MIGRATED | `~/CLAUDE_PROJECTS/_phase_*_manifest.yaml` |
| `_scratch` (10 GB) | CRUFT | Single file: `pre_v2_migration_20260527T155022.tar.gz` — the pre-split backup tarball itself |
| `archive` (144 MB) | IN_EVICTED_STAGING | `~/Dropbox/CLAUDE_PROJECTS_DATA/_evicted/archive` |
| `audit-2026-04-25` | MIGRATED | `~/CLAUDE_PROJECTS/audit-2026-04-25` |
| `BUILD_MANIFEST.json` | CRUFT | Build artifact; not in CP |
| `build-log-*.md` (all) | MIGRATED / CRUFT | Most in `~/CLAUDE_PROJECTS`; `build-log-ep001-render-rootcause-fix.HUNG-2026-05-19.md` is a hung-build artifact (CRUFT) |
| `cine_cortex` | MIGRATED | `~/CLAUDE_PROJECTS/cine_cortex` |
| `cmo` | MIGRATED | `~/CLAUDE_PROJECTS/cmo` |
| `comfyui_setup` | MIGRATED | `~/CLAUDE_PROJECTS/comfyui_setup` |
| `consult-reader` | MIGRATED | `~/Code/consult-reader` (repo: `github.com/joeturnerlin/consult-reader`) |
| `consultations` | MIGRATED | `~/CLAUDE_PROJECTS/consultations` |
| `conversation-archive` (764 MB) | IN_EVICTED_STAGING | `~/Dropbox/CLAUDE_PROJECTS_DATA/_evicted/conversation-archive` (same size, duplicate) |
| `cortex` | MIGRATED | `~/CLAUDE_PROJECTS/cortex` |
| `cost-ledger` | MIGRATED | `~/CLAUDE_PROJECTS/cost-ledger` |
| `Culver-Driver` | MIGRATED | `~/CLAUDE_PROJECTS/Culver-Driver` (also in `_evicted`) |
| `data` | MIGRATED | `~/CLAUDE_PROJECTS/data` |
| `docs` | MIGRATED | `~/CLAUDE_PROJECTS/docs` (also in `_evicted`) |
| `entities.json` | MIGRATED | `~/CLAUDE_PROJECTS/entities.json` |
| `finance` | MIGRATED | `~/CLAUDE_PROJECTS/finance` |
| `flickr_scrape` | MIGRATED | `~/CLAUDE_PROJECTS/flickr_scrape` (also in `_evicted`) |
| `inbox` | MIGRATED | `~/CLAUDE_PROJECTS/inbox` |
| `jt-briefing` | CRUFT | Empty (0 B) |
| `Julian` | MIGRATED | `~/CLAUDE_PROJECTS/Julian` |
| `labs` | MIGRATED | `~/CLAUDE_PROJECTS/labs` (also in `_evicted`) |
| `morning-intel` | MIGRATED | `~/CLAUDE_PROJECTS/morning-intel` + `~/.config/morning-intel` |
| `morning-system` | MIGRATED | `~/CLAUDE_PROJECTS/morning-system` |
| `node_modules` | CRUFT | Regenerable |
| `OTF-Website-project` | **AT_RISK (working tree)** | Repo `github.com/joeturnerlin/outsidetheframe`; HEAD/remote authoritative, but on-disk working tree diverges (88 D, 1 M, 12 ??). NOT in any new home. Verify before delete. |
| `OTF-Website-project-OLD` | ONLY_IN_DROPBOX_AT_RISK | No `.git`. Contains `outsidetheframe/` static export. Not in any new home and also present in `_evicted/OTF-Website-project`. Decide keep/discard. |
| `output` (32 K) | CRUFT | Only stale `.mp4.json` sidecars + a `.lock` under `output/video/ep_001/`; the real mp4s live in `projects/`. Root-level `output/` is a legacy stub. |
| `personal-reader` | MIGRATED | `~/.config/personal-reader` |
| `PHASE_SUMMARY_*.md` | MIGRATED / CRUFT | 0–12, 8, 9 in `~/CLAUDE_PROJECTS`; `7a/7b/7c` are old-split artifacts (CRUFT) |
| `projects` (14 GB) | MIGRATED | `~/Dropbox/CLAUDE_DATA/recoil/projects` (Task A reconciled the deltas) |
| `recoil` | MIGRATED | `~/CLAUDE_PROJECTS/recoil` (code) + `~/Dropbox/CLAUDE_DATA/recoil` (data) |
| `recoil-website` | **ONLY_IN_DROPBOX_AT_RISK** | Repo `github.com/joeturnerlin/recoilstudios` (0 unpushed) BUT untracked RELIC posters + backup HTML are local-only. See Headline Risk #2. |
| `remotion-animations` | MIGRATED | `~/CLAUDE_PROJECTS/remotion-animations` |
| `roadmap` | MIGRATED | `~/CLAUDE_PROJECTS/roadmap` |
| `Safari Export 2026-01-27` | MIGRATED | `~/CLAUDE_PROJECTS/Safari Export 2026-01-27` |
| `scripts` | MIGRATED | `~/CLAUDE_PROJECTS/scripts` |
| `skill-audit` | MIGRATED | `~/CLAUDE_PROJECTS/skill-audit` |
| `skills` | MIGRATED | `~/CLAUDE_PROJECTS/skills` |
| `Speakeasy_Cinema` | MIGRATED | `~/CLAUDE_PROJECTS/Speakeasy_Cinema` |
| `starsend-tv` | **ONLY_IN_DROPBOX_AT_RISK** | Repo `github.com/joeturnerlin/starsend-tv` but 5 unpushed commits + untracked `universes/` (UNIVERSE_BIBLE.md), `format_micro/`, `content_filter_log.md`. See Headline Risk #1. |
| `Stork-website-project` | MIGRATED (in git) | Repo `github.com/joeturnerlin/storkfilms`, clean (only `tsconfig.tsbuildinfo` build-artifact modified, 0 unpushed). Safe via clone. Not on local disk outside Dropbox — re-clone after delete. |
| `tab-archiver` | MIGRATED | `~/.config/tab-archiver` |
| `viral-playbook` | MIGRATED | `~/CLAUDE_PROJECTS/viral-playbook` |
| `vo3-prompt-generator` | MIGRATED | `~/CLAUDE_PROJECTS/vo3-prompt-generator` |
| `writing-ingestion` | CRUFT | Only a `.pyc`; source migrated to `~/CLAUDE_PROJECTS/_archive/old-projects/writing-ingestion` |
| top-level loose files (`*.html`, `*.md`, `package*.json`, `pnpm-lock.yaml`, `mempalace.yaml`, `entities.json`, `generate_studio_map.py`, dotfiles `.claude .githooks .gitignore .mcp.json .superpowers` etc.) | MIGRATED / CRUFT | Tracked files present in `~/CLAUDE_PROJECTS`; caches (`.pytest_cache .ruff_cache .playwright-mcp .DS_Store`) are CRUFT |
| `RECOIL_STARSEND_PITCH_FRAMEWORK (1).md` | MIGRATED | `~/CLAUDE_PROJECTS/RECOIL_STARSEND_PITCH_FRAMEWORK (1).md` |
| `STARSEND_CREATIVE_BRIEF_v2.md` | MIGRATED | `~/CLAUDE_PROJECTS/STARSEND_CREATIVE_BRIEF_v2.md` |
| `MORNING_BRIEF*_2026-*.md` | MIGRATED | `~/CLAUDE_PROJECTS/MORNING_BRIEF*` |

### `~/Dropbox/CLAUDE_PROJECTS_DATA/_evicted/` top-level

All `_evicted` entries are still on Dropbox (this staging dir is NOT being deleted in this pass unless JT chooses). They duplicate content already evaluated above.

| Item | Class | Note |
|---|---|---|
| `archive` | IN_EVICTED_STAGING | Duplicate of `CLAUDE_PROJECTS/archive` (144 MB) — JT decision |
| `consultations` | MIGRATED | Also in `~/CLAUDE_PROJECTS/consultations` |
| `conversation-archive` | IN_EVICTED_STAGING | 764 MB; duplicate — JT decision (keep on SSD?) |
| `Culver-Driver` | MIGRATED | Also in `~/CLAUDE_PROJECTS/Culver-Driver` |
| `docs` | MIGRATED | Also in `~/CLAUDE_PROJECTS/docs` |
| `flickr_scrape` | MIGRATED | Also in `~/CLAUDE_PROJECTS/flickr_scrape` |
| `labs` | MIGRATED | Also in `~/CLAUDE_PROJECTS/labs` |
| `OTF-Website-project` | IN_EVICTED_STAGING | Duplicate of the AT_RISK OTF dir — JT decision |
| `projects` | MIGRATED | Recoil data → `~/Dropbox/CLAUDE_DATA/recoil/projects` |
| `recoil` | MIGRATED | Split into code (`~/CLAUDE_PROJECTS/recoil`) + data (`CLAUDE_DATA/recoil`) |
| `.playwright-mcp`, `.save_manifest.txt`, `.DS_Store` | CRUFT | Process artifacts |

---

## 4. RECOMMENDATIONS — before deleting `~/Dropbox/CLAUDE_PROJECTS`

**Must do (real data loss otherwise):**
1. **starsend-tv** — `cd ~/Dropbox/CLAUDE_PROJECTS/starsend-tv && git push` the 5 commits, then commit (or copy elsewhere) the untracked `universes/` (UNIVERSE_BIBLE.md), `format_micro/`, `content_filter_log.md`. Decide where the starsend-tv product dir should permanently live (it is not under `~/Code` or `~/CLAUDE_PROJECTS`).
2. **recoil-website** — commit or relocate the untracked `posters/RELIC_Poster*.png` (11 files) and `index_v1_backup.html` / `index_v1_clean.html`. Repo commits are already pushed.

**Should verify (remote authoritative, local diverges):**
3. **OTF-Website-project** — confirm the 88-file working-tree deletion + 12 untracked files are intentional / disposable. If the current on-disk state matters, capture it; otherwise rely on `git clone github.com/joeturnerlin/outsidetheframe`.
4. **OTF-Website-project-OLD** — no git, no new home. Decide keep (move to SSD) or discard.

**Decide on SSD vs discard (in `_evicted` staging, large):**
5. `_evicted/conversation-archive` (764 MB) and `_evicted/archive` (144 MB) — duplicated content; choose whether to keep on the SSD archive.
6. `_scratch/pre_v2_migration_20260527T155022.tar.gz` (10 GB) — this IS the pre-split backup. Keep on SSD if you want the snapshot; otherwise it's the largest single chunk of recoverable space.

**Re-clone after delete (safe, in git):** `Stork-website-project` (storkfilms), `recoil-website` (recoilstudios — after committing posters), `starsend-tv` (after push), `OTF-Website-project` (outsidetheframe). None currently live on local disk outside Dropbox.

**Everything else** is MIGRATED to `~/CLAUDE_PROJECTS`, `~/Dropbox/CLAUDE_DATA`, `~/Code`, or `~/.config`, or is regenerable CRUFT — safe to delete once 1–4 are handled.
