Скил finishing-a-development-branch — четыре варианта, никаких догадок
Как Datarim закрывает разрыв между «тесты прошли» и «работа завершена» — через структурированное меню из четырёх вариантов, умную очистку воркдеревьев и верификацию пуша, которая не зависит от текста stdout.
«Реализация завершена» и «ветка готова к отправке» — разные вещи. Скил finishing-a-development-branch закрывает шаг между ними: проверяет тесты, определяет состояние рабочего пространства, предлагает ровно нужные варианты, выполняет выбранный и корректно убирает за собой — не оставляя осиротевших воркдеревьев или слитых веток.
Скил запускается, когда разработчик сигнализирует о завершении реализации. Основная последовательность: проверить тесты, определить окружение, установить базовую ветку, предложить варианты, выполнить выбор, убрать рабочее пространство.
Меню из четырёх вариантов
Для обычного репозитория и воркдерева с именованной веткой скил предлагает ровно четыре варианта: слить обратно в базовую ветку локально, запушить и создать pull request, оставить ветку как есть для последующей обработки или удалить работу. Для воркдерева с detached HEAD — которым управляет внешний harness — вариант локального слияния убирается и предлагаются три варианта.
Меню намеренно лаконично. Добавлять объяснения и оговорки — антипаттерн; сама структура несёт в себе пространство решений. Запрос на удаление требует ввода слова «discard» в качестве подтверждения; обходных путей нет.
Верификация пуша по SHA, а не по stdout
После git push каноническая строка вывода со ссылкой на удалённую ветку нередко переписывается или обрезается hook-обёртками — сжатиями токенов, lint-фильтрами, терминальными мультиплексорами. Ожидание на основе этого текста приводило к тому, что агенты зависали на 15 минут над уже выполненными пушами. Скил проверяет успех пуша, сравнивая SHA локального HEAD с SHA upstream tracking ref напрямую: совпадают — пуш подтверждён; нет — пуш не удался, процесс останавливается.
Та же проверка равенства SHA применяется к операциям pull и fetch. Когда upstream tracking ref ещё не настроен — при первом пуше новой ветки — скил использует git ls-remote для чтения удалённого SHA и сравнивает его с локальным HEAD.
Правила очистки воркдеревьев
Очистка выполняется только для вариантов 1 (слить локально) и 4 (удалить). Варианты 2 и 3 всегда оставляют воркдерево нетронутым — вариант 2, потому что оператору нужно воркдерево для итераций по обратной связи к pull request, вариант 3, потому что оператор явно решил разобраться позже.
Когда очистка всё же выполняется, скил проверяет происхождение воркдерева перед удалением. Созданные агентом scratch-воркдеревья живут в .worktrees/ или worktrees/ и безопасно удаляются. Пути worktree-менеджеров в ~/.config/ принадлежат соответствующим инструментам и не должны затрагиваться. Очистка всегда запускается из корня основного репозитория, а не из самого воркдерева, и завершается командой git worktree prune для удаления устаревших регистраций.
Ошибки тестов — жёсткая остановка
Если тестовый набор сообщает об ошибках, скил останавливается до показа любых вариантов. Показываются упавшие тесты и фиксируется, что слияние или пуш невозможны до их исправления. Это не рекомендация — скил не предлагает продолжить в любом случае. Логика в том, что предлагать варианты интеграции для сломанной ветки означает создавать выбор, которого не должно существовать.
Подробнее о пайплайне Datarim — в посте что такое Datarim, а о том, как убедиться, что работа соответствует исходному замыслу оператора, — в посте о скиле expectations-checklist.