What was done

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

Key findings

Classification (9 repos)

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

Why the session ended

Completed the investigate-and-report scope. Destructive cleanup is intentionally deferred to a follow-up run after Sam approves the path below.

Recommended next actions

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.

Handoff for next agent

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.

QA Recommendations Pending Approval