agent-control-center/agents/antigravity/inbox/2026-08-18-консолидация-рабочего-пространства.md
Ochenstarik e96343882e task(antigravity): консолидация проектов на второй машине
Задание повторяет разбор, выполненный на основной машине 2026-08-18:
опись всех папок, проверка каждой локальной ветки против GitHub, спасение
незапушенного, единая структура agents/, карантин вместо удаления.

Отдельно записаны грабли, на которые разбор уже наступил: длинные пути
Windows, занятые процессом папки, чужая работа в той же копии, CRLF,
валидатор документации, ветка master вместо main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:30:44 +07:00

170 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Консолидация проектов в единое рабочее пространство
- **Кому:** antigravity
- **Дата:** 2026-08-18
- **От кого:** владелец проекта (через Claude)
- **Ветка:** `antigravity/workspace-consolidation`
- **Файл отчёта:** `../done/2026-08-18-консолидация-рабочего-пространства.md`
## Зачем это делается
На машине владельца проекты расползлись: десятки клонов одного репозитория в
разных папках, задания и отчёты агентов вперемешку с бинарниками, и часть
работы существовала только на диске — ни в одном репозитории её не было.
Найти, кто что сделал, было нельзя.
На основной машине разбор уже выполнен. Нужно сделать то же самое на этой.
Результат: один каталог `Agent_projects` с клонами всех репозиториев, единая
структура `agents/` внутри каждого, и ничего ценного за пределами git.
## Что нужно сделать
Порядок обязателен: сначала опись, потом спасение, и только потом уборка.
Обратный порядок уничтожает данные.
### 1. Опись
Найти все папки проектов: домашний каталог пользователя, `~/projects`,
рабочий стол, и любые другие места, где агенты создавали клоны. Для каждой
папки записать: git это или нет, remote, текущая ветка, число незакоммиченных
изменений, число файлов.
Опись сохранить в отчёт целиком. Она — доказательство, что ничего не пропущено.
### 2. Проверка, что работа есть на GitHub
Для **каждой** папки с git проверить **все локальные ветки**, а не только
текущую. Одной проверки HEAD недостаточно: в брошенных клонах лежат ветки,
которых нет ни на GitHub, ни в других копиях.
Метод, который работает:
```bash
# один свежий клон репозитория как эталон
git fetch origin '+refs/heads/*:refs/remotes/origin/*'
git rev-list --remotes | sort -u > /tmp/remote-shas.txt
# в каждой проверяемой папке
git for-each-ref refs/heads --format='%(objectname) %(refname:short)'
```
Тип ветки, чей tip отсутствует в списке, проверить вторым способом — ветка
могла быть удалена на GitHub после мержа, но коммит в репозитории остаётся:
```bash
gh api "repos/<owner>/<repo>/commits/<sha>" --jq .sha
```
Если оба способа говорят «нет» — работа существует только на этом диске.
Отдельно проверить, что удалённый репозиторий вообще существует:
`gh api repos/<owner>/<repo>`. На основной машине нашлась папка с 163 файлами,
чей remote отвечал 404 — репозитория не было вовсе.
### 3. Спасение
- **Незапушенные ветки** — запушить под их собственными именами.
В `main` не пушить: приёмку делает главный агент.
- **Код без существующего репозитория** — создать приватный репозиторий
(`gh repo create <owner>/<name> --private`) и залить туда все ветки.
Перед заливкой проверить на секреты: `.env`, `*.pem`, `*.key`, присвоения
вида `TOKEN=...`, и убедиться, что `.gitignore` закрывает `.venv` и `.env`.
- **Незакоммиченные правки** — сохранить патчем `git diff HEAD > имя.patch`
в `agents/<агент>/notes/salvage-<дата>/` того проекта, к которому они
относятся. Неотслеживаемые файлы скопировать туда же, кроме мусора
(`.venv`, `node_modules`, `*.exe`, `*.zip`).
- Прежде чем считать правки ценными, посмотреть на них. На основной машине
папка с 3870 «изменениями» оказалась сломанным индексом: `git rm` без
коммита, содержимое совпадает с GitHub. Спасать там было нечего.
### 4. Клоны и структура agents/
Склонировать все репозитории владельца в `Agent_projects` (список —
`gh repo list <owner> --limit 100`). В каждом создать:
```
agents/
README.md TASK-TEMPLATE.md REPORT-TEMPLATE.md
claude/ codex/ antigravity/ hermes/ grok/ opencode/
inbox/ done/ notes/ (в каждой .gitkeep)
_accepted/
```
Тексты `README.md` и шаблонов взять из любого уже разобранного репозитория —
они одинаковы во всех. В `AGENTS.md` дописать раздел со ссылкой на
`agents/README.md`; если `AGENTS.md` нет — создать.
### 5. Раскладка заданий и отчётов
Папки с заданиями и отчётами агентов разложить по `agents/` нужного проекта.
Агента определять по имени файла или пути: `antigravity`, `codex`, `hermes`,
`claude`/`клод`, `grok`, `opencode`. Файлы со словом `task`/`задач` — в
`inbox/`, остальные — в `done/`. Что не опознаётся — в
`agents/_salvage-<дата>/`, разбирается вручную потом.
Тяжёлое в git не класть. Архивы, инсталляторы, бинарники и файлы больше 5 МБ —
в `Agent_projects/_archive/<дата>/`, наборы данных — в `Agent_projects/_data/`.
Обе папки вне репозиториев.
### 6. Уборка
Папки, чьё содержимое доказано лежит на GitHub, переместить в
`_trash_<дата>/` рядом с домашним каталогом. **Не удалять.** Удаление —
решение владельца, он сотрёт карантин сам, когда проверит.
### 7. Публикация
В каждом репозитории — ветка `chore/agents-workspace`, один коммит структуры,
второй коммит разбора, PR. В `main` не мержить.
## Границы
- Ничего не удалять безвозвратно. Только карантин.
- Не пушить в `main` и не мержить PR.
- Не трогать клоны чужих репозиториев (владелец != владелец проектов), даже
если в них есть локальные правки. Записать их в отчёт и оставить на месте.
- Не трогать пользовательские файлы: фотографии, книги, документы, бэкапы.
- Не менять глобальный `git config`. Подпись ставить локально в репозитории,
ту же, что в истории коммитов (`git log --format='%an <%ae>'`).
## Что здесь ломается
Проверено на основной машине, повторится и тут:
- **Длинные пути Windows.** Cherry-pick и checkout падают с `Filename too
long`. Лечится `git config core.longpaths true` и коротким путём рабочей
копии.
- **Занятые файлы.** Часть папок не переместится: их держит работающий
процесс другого агента. Это не ошибка — записать в отчёт и оставить.
- **Чужая работа в той же копии.** В клоне может параллельно работать другой
агент: проверять `git branch --show-current` перед каждым коммитом, иначе
свой коммит ляжет на чужую ветку. Если это уже случилось — переносить
коммит через `git worktree`, а не переключать ветку под чужой работой.
- **CRLF.** При `core.autocrlf=true` рабочая копия получает CRLF, в git
уходит LF. Проверять надо содержимое коммита, а не файл на диске.
- **Валидаторы документации.** В `business-platform` есть
`node scripts/check-docs.mjs`: он считает все `.md` в репозитории и
требует обновления статистики после добавления файлов
(`node scripts/check-docs.mjs --write-stats`). Прогнать до коммита.
- **Ветка по умолчанию.** Не везде `main`; у части репозиториев `master`.
PR создавать с явным `--base`.
## Как проверить результат
Считается сделанным, когда одновременно:
1. `Agent_projects` содержит клоны всех репозиториев владельца, у каждого
`agents/` с полным набором папок;
2. для каждой папки из описи в отчёте сказано, что с ней стало: перенесена,
в карантине, оставлена и почему;
3. ни одна ветка ни в одной папке не осталась незапушенной — доказать
повторным прогоном проверки из пункта 2 и приложить её вывод;
4. в каждом репозитории открыт PR, `main` не тронут;
5. карантин на месте, ничего не удалено.
## Контекст
Как выглядит результат на основной машине — в этом же репозитории:
`agents/README.md` описывает схему, `Agent_projects/README.md` (у владельца)
— карту рабочего пространства. Если структура папок на этой машине окажется
принципиально другой — не подгонять её под описание, а сообщить в отчёте.