What was done

Investigated dirty-tree / reconcile failures across local repos, session history (354 sessions, incl. the daily repo-health check), and the SAIL KB. Confirmed the model the Repos/README + SAIL Runbook already intend, and where reality drifted from it. Drafted a proposal + governance files. Nothing was applied to a live repo.

Deliverables (in ~/Documents/_Repo-System-Proposal-2026-06-14/): SAIL-Repo-System-Proposal.md, Projects-Repos-CLAUDE.md, per-repo-CLAUDE.md.template, sail-googleads-CLAUDE.md (worked example), .gitignore.baseline.

Root causes found (evidence-based)

  1. Projects/ is repo sail-projects-root and physically contains the Repos/sail-* child repos (repo-inside-repo).
  2. Repos/sail-googleads/ has NO .git → git ops bubble up to sail-projects-root (matches 2026-04-24 health check). It holds 3 separate sub-repos instead.
  3. Nested repo inside a leaf: sail-templates/Template-Refresh_project (detached HEAD, 0 commits, 2,533 untracked).
  4. Duplicate clones: google-ads-mcp (root), google_ads_mcp (root), sail-googleads/google_ads_mcp — 3 copies. Claude/Scheduled + Scheduled-backup both point at sail-scheduled-tasks.
  5. Weak .gitignore: SAIL-RingCentral/mcp-server 3,782 dirty (3,726 = node_modules).
  6. Long-lived agent/* branches never merged: sail-litify (agent/attorney-hub-birthdays, +10/449 dirty), sail-marketing, sail-seo, sail-knowledge, sail-templates, sail-infrastructure.
  7. Snapshots committed as in-tree repos (Codex/daily-snapshots/*, litisail-vault copy).
  8. Repos outside canonical tree: open-design (152 dirty), SAIL-RingCentral, Litify Repo, google_ads_mcp, Claude/Scheduled.

Proposed system (3 tiers)

Tier 0: ~/Documents/ = plain folder, never a repo. Tier 1: Projects/ = sail-projects-root, tracks only Skills/ + orchestration, gitignores Repos/*. Tier 2: Projects/Repos/sail-* = independent leaf repos, one domain/one remote, no .git below a leaf.

Six invariants: one remote→one path; no repo inside a repo below tier 1; every domain folder is a real repo; trunk-based same-session merges (no parked agent/* branches); real .gitignore everywhere; no backups/snapshots inside repos.

CLAUDE.md layered at Projects/ (governance), Projects/Repos/ ("never git here, cd into a leaf first"), and each leaf. Per-repo files reference Notion canonical pages instead of hardcoding (skills-hygiene).

Missing CLAUDE.md today: ha-law, sail-dashboard, sail-googleads, sail-knowledge.

Why the session ended

Proposal stage complete and delivered. Migration is destructive on live repos that other agents touch, so execution is gated on Sam's approval (inline multiple-choice in chat).

Recommended next actions