# Backup Main Branch Skill

**Description**: Smart backup of main branches across repositories with duplicate detection.

**Script**: `scripts/backup-main.sh`

## What It Does

For each of the 3 repositories:

1. Switches to `main` and pulls latest
2. **Pushes any unpushed main commits** to origin
3. Fetches latest remote backup refs
4. **Skips backup** if HEAD matches the latest `backup/main-*` branch (smart duplicate detection)
5. Creates timestamped `backup/main-YYYY-MM-DD-HHMMSS` branch and pushes it
6. Cleans up old backups (keeps last 7)
7. Prints a **summary table** with: repo name, backup status, total commits, push status, last commit message

## Repositories Covered

- `learning_ai_common_plat`
- `learning_voice_ai_agent`
- `learning_multimodal_memory_agents`

## Quick Start

```bash
# From the learning_ai_common_plat root:
bash scripts/backup-main.sh
```

Or via Windsurf workflow: `/backup-main-branch`

## Example Output

```
━━━ learning_ai_common_plat ━━━
  Pulling latest...
  Pushing 2 unpushed commit(s) on main...
  ✅ Main pushed
  Creating: backup/main-2026-02-12-201500
  ✅ Pushed to remote

━━━ learning_voice_ai_agent ━━━
  Pulling latest...
  ✅ Already backed up → backup/main-2026-02-12-201500

┌─────────────────────────────────────────────────────────────────────────────────┐
│  BACKUP SUMMARY  2026-02-12 20:15                                              │
├──────────────────────────┬──────────────────┬─────────┬────────────┬────────────┤
│ Repository               │ Backup Status    │ Commits │ Main Push  │ Last Commit│
├──────────────────────────┼──────────────────┼─────────┼────────────┼────────────┤
│ learning_ai_common_plat  │ ✅ New backup    │     142 │ ✅ 2 pushed│ feat(docs) │
│ learning_voice_ai_agent  │ ✅ Already backed│     387 │ up to date │ fix(blob)  │
│ learning_multimodal_...  │ ✅ New backup    │      98 │ ✅ 4 pushed│ feat(azure)│
└──────────────────────────┴──────────────────┴─────────┴────────────┴────────────┘
```

## Restoration

```bash
# List available backups
git branch -r | grep "backup/main-"

# Restore from a specific backup
git checkout -b restore-from-backup origin/backup/main-2026-02-12-201500
git switch main
git merge restore-from-backup
```

## Customization

- **Add repos**: Edit `REPOS` array in `scripts/backup-main.sh`
- **Change retention**: Modify `tail -n +8` (keep last N) in the cleanup section
- **Cron**: `0 18 * * * bash $HOME/code/mygh/learning_ai_common_plat/scripts/backup-main.sh`

## Related Skills

- [Debug Service](./debug-service.md) — Backup before major changes
- [Production Readiness](./production-readiness.md) — Backup before releases
