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.
Projects/ is repo sail-projects-root and physically contains the Repos/sail-* child repos (repo-inside-repo).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.sail-templates/Template-Refresh_project (detached HEAD, 0 commits, 2,533 untracked).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.
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).