Вопрос, который кажется пустяковым, пока не попробуешь ответить на него в масштабе парка: если ИИ-ассистент помог написать коммит, чьё имя на нём стоит?
За многие команды ответ по умолчанию выбрали за них. Claude Code по умолчанию
дописывал в коммиты Co-Authored-By: Claude <noreply@anthropic.com>. Разработчики это заметили, и восторг был далеко не всеобщим. Один тред Ask HN
— маленький памятник этому раздражению: «Я же не указываю в соавторах VS Code, клавиатуру или мышь». Кто-то пошёл дальше и написал инструмент, весь смысл которого
— менять трейлер Claude на случайных вымышленных персонажей. Tell HN
сформулировал резче: трейлер — по сути бесплатная реклама, въезжающая в вашу историю на вашей же работе.
В этом месяце по всему парку Forge мы приняли на этот счёт осознанное решение. Дальше — честный разбор.
Что мы изменили
Вместе выехали две вещи (парк Forge, неделя 30 июня — 2 июля):
- Мы убрали
Co-Authored-By: Claude <noreply@anthropic.com>везде. Движок процессов, воркер облачного исполнения и путь «Claude через Bash» перестали его добавлять. На стороне рантайма это означалоincludeCoAuthoredBy: false— тот самый запасной выход, который всплыл в треде HN , — так что ни один агент Forge не втащит тихо имя вендора модели в вашу историю. - Там, где мы действительно фиксируем помощь ИИ, теперь стоит
Assisted-By:, а неCo-Authored-By:. Это не косметическое переименование. Это утверждение о том, что на самом деле произошло.
Потому что эти два слова означают по-настоящему разные вещи, и весь смысл — сказать правильное.
Co-Authored-By: — утверждение о людях. Assisted-By: — утверждение об инструментах
Co-Authored-By: — реальное давнее соглашение git: GitHub его показывает, инструменты вокруг git blame его читают, и оно утверждает, что названный человек разделяет авторство и, неявно, ответственность за изменение. Вписывая туда модель, вы тихо перегружаете поле, созданное для атрибуции людей. Это размывает вопрос, кто на самом деле отвечает за строку кода, — а ответственность лучше не оставлять неоднозначной, когда кто-то в два часа ночи бисектит регрессию.
Assisted-By: сохраняет честность без перегрузки. Он фиксирует, что в контуре был ассистент — полезное, проверяемое происхождение, — оставляя авторство и ответственность там, где им место: у человека (или у явно названного агента-персонажа), который владеет изменением. Это совпадает с направлением, куда дрейфует экосистема: ядро Linux, Fedora и сообщество LLVM сходятся на трейлерах в духе «помощи», а не соавторства для инструментов. Мы эту идею не придумали. Мы выбрали ту, что говорит правду.
Правило, которое важнее всего: внешние PR следуют вашей политике, а не нашей
Этой частью мы гордимся больше всего, потому что она признаёт: трейлер коммита — не наше решение в чужом репозитории.
Когда агент Forge открывает pull request во внешний проект, он не навязывает наш домашний стиль. Он следует политике целевого проекта. Если проект вообще не хочет ИИ-трейлеров — Kubernetes, например, их запрещает , — то PR от Forge приезжает без них. Ваш репозиторий — ваши правила. Автоматический контрибьютор, игнорирующий заявленные соглашения проекта по коммитам, не помогает, а ведёт себя как плохой гость.
Эта дисциплина и есть разница между «мы выбрали хороший дефолт» и «мы признаём, что происхождение — вопрос политики, и у этой политики есть владелец».
Почему это вопрос цепочки поставок, а не тщеславия
Соблазнительно списать всё это на мелочный спор о вкусах. Не выйдет. Метаданные коммита — часть вашей цепочки поставок ПО. Их читает аудитор, им доверяет тот, кто разбирает инцидент, и всё чаще их разбирают инструменты дальше по цепочке. Когда эти метаданные утверждают ложь — что модель «соавторствовала» в изменении, которому лишь помогала, или что вендор причастен к вашей истории, хотя вы его не звали, — вы вносите маленькую тихую неточность в запись, на точность которой полагаются другие системы и другие люди.
Forge уже относится к следу агента как к первоклассному свидетельству происхождения: каждый ход сохраняет настоящую запись вызовов инструментов и их результатов, так что ревьюер читает, что произошло, а не пересказ, которому приходится верить. Правильный трейлер коммита — тот же принцип на границе, где наша работа встречается с вашей историей git. Если мы просим доверять автономной разработке, минимум, что мы можем сделать, — не врать в логе коммитов о том, кто что сделал.
Что из этого следует
Спор про атрибуцию ИИ ещё продолжится — он действительно не решён, и разумные люди расходятся. Но «не решён» — не повод позволять дефолту вендора решать за вас. Наша позиция: фиксировать помощь честно (Assisted-By:), никогда не перегружать поле, созданное для человеческой ответственности (Co-Authored-By:), а в чужом репозитории следовать его политике. Три маленьких правила, благодаря которым лог коммитов означает ровно то, что в нём написано.
Попробовать
Посмотрите, как Forge устроил происхождение и ворота с человеком в автономной разработке , почитайте про изолированные стенды, удерживающие работу агентов , или напишите нам на support@simple-container.com , если хотите ИИ-парк разработки, истории коммитов которого можно доверять.