Задание повторяет разбор, выполненный на основной машине 2026-08-18: опись всех папок, проверка каждой локальной ветки против GitHub, спасение незапушенного, единая структура agents/, карантин вместо удаления. Отдельно записаны грабли, на которые разбор уже наступил: длинные пути Windows, занятые процессом папки, чужая работа в той же копии, CRLF, валидатор документации, ветка master вместо main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
11 KiB
Консолидация проектов в единое рабочее пространство
- Кому: 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, ни в других копиях.
Метод, который работает:
# один свежий клон репозитория как эталон
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 после мержа, но коммит в репозитории остаётся:
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.
Как проверить результат
Считается сделанным, когда одновременно:
Agent_projectsсодержит клоны всех репозиториев владельца, у каждогоagents/с полным набором папок;- для каждой папки из описи в отчёте сказано, что с ней стало: перенесена, в карантине, оставлена и почему;
- ни одна ветка ни в одной папке не осталась незапушенной — доказать повторным прогоном проверки из пункта 2 и приложить её вывод;
- в каждом репозитории открыт PR,
mainне тронут; - карантин на месте, ничего не удалено.
Контекст
Как выглядит результат на основной машине — в этом же репозитории:
agents/README.md описывает схему, Agent_projects/README.md (у владельца)
— карту рабочего пространства. Если структура папок на этой машине окажется
принципиально другой — не подгонять её под описание, а сообщить в отчёте.