Spin-off from daily-repo-health-check P13 (nested vendored git repos = drift risk). Read-only run — no .git was stripped, deleted, converted, or moved. Full find scan + per-repo characterization (remote, submodule/gitlink status, gitignore status, last commit, size, dirty state).
Report: ~/Documents/Codex/repo-health/nested-git-investigation-2026-05-31.md
.git directories, 42 MB combined (P13 note's ~3+~6 estimate was wrong; rediscovered)..gitmodules anywhere and zero gitlinks (160000). No broken-submodule state to repair.Documents/Projects/ is itself the umbrella repo (sail-projects-root); sail-googleads is a plain folder inside it; sail-infrastructure, sail-litify, sail-templates are independent nested repos.sail-templates/Template-Refresh_project is neither tracked nor ignored (shows ??) and its .git is broken (0 reachable commits, unborn HEAD, stray index 2 artifact). Highest priority.ringcentral-mcp-2026-complete, Template-Refresh_project) — local changes must be preserved before any strip.google_ads_mcp (nested) is an empty init (0 commits, no files). The two mcp-Salesforce clones share identical HEAD 02e99fa — a true duplicate.| Repo | Class | Action |
|---|---|---|
| ads-monitor | should-become-submodule | submodule (Sam's upstream) |
| google-ads-api-developer-assistant | vendored snapshot | archive+strip (official Google ref) |
| google_ads_mcp (nested) | strip (empty) | strip, no archive |
| infra/mcp-Salesforce | should-become-submodule | submodule |
| playwright-mcp | should-become-submodule | submodule |
| ringcentral-mcp-2026-complete | should-become-submodule | preserve dirty, then submodule |
| litify/claude-skills | vendored / relocate | archive+strip (scratch clone) |
| litify/mcp-Salesforce- | strip (exact dup of infra) | archive optional, strip |
| Template-Refresh_project | vendored / cleanup | gitignore now + archive+strip; broken |
Completed the investigate-and-report scope. Destructive cleanup is intentionally deferred to a follow-up run after Sam approves the path below.
Approve a cleanup path (see Pending Approval). A follow-up run executes with tarball-to-_archive/ and rollback notes. Note: ~/Documents/Projects/admin/_archive/ does not exist yet — the cleanup run should mkdir -p it first.
Everything needed is in the report. The investigation is non-destructive and idempotent — safe to re-run. If Sam picked a path, start with Tier 1 (zero-risk strips: empty google_ads_mcp, duplicate litify mcp-Salesforce-), capture the 2 dirty repos before touching them, and create _archive/ before any tarball. No agent has acted on these since this run, so the report is current.