Читайте diff, прежде чем принять
Вы узнаете
Как читать diff агента рядом с вашей просьбой и замечать правку, о которой никто не просил.
Агент говорит готово и показывает diff: строки, которые он убрал, и строки, которые добавил. Читайте его рядом с просьбой. Если вы просили изменить строки с 10 по 20, а diff задевает ещё и строку 40, это правка, о которой никто не просил, и теперь её надо прочитать. Принимайте diff, где каждая тронутая строка есть в просьбе. Остальные возвращайте или спросите, зачем. Даже чистый diff всё равно проходит через тесты.
Попробуйте
Прочитайте два diff рядом с просьбой про строки с 10 по 20, отметьте строки вне её, затем примите один diff и верните другой. В спецификации найдите номер строки, которую неряшливый diff задевает вне просьбы.
Two diffs, one request: see which touched lines fall outside what you asked for, and accept one diff and send the other back. Lesson 18 of the vibecoding course.
specs/vibecoding/read_diff.t27
// SPDX-License-Identifier: Apache-2.0
; specs/vibecoding/read_diff.t27 -- vibecoding lesson: read the diff before you accept it
; An agent was asked to change lines 10 to 20 of a file. Its diff lists the lines it touched.
; Before you accept, look for touched lines outside the ask: each one is a change you did
; not request and now have to read. A clean diff has none. outside_the_ask is the check
; written as code; the tests walk the two diffs below line by line.
; phi^2 + 1/phi^2 = 3 | TRINITY
module vibecoding_read_diff;
pub const ASK_FROM : u8 = 10;
pub const ASK_TO : u8 = 20;
pub const CLEAN_DIFF : [4]u8 = [10, 12, 15, 20];
pub const SPRAWLING_DIFF : [4]u8 = [12, 13, 14, 40];
pub fn outside_the_ask(line: u8) -> u8 {
if (line < ASK_FROM) {
return 1;
}
if (line > ASK_TO) {
return 1;
}
return 0;
}
test a_clean_diff_stays_inside_the_ask {
assert CLEAN_DIFF[0] >= ASK_FROM;
assert CLEAN_DIFF[3] <= ASK_TO;
assert CLEAN_DIFF[1] >= ASK_FROM;
assert CLEAN_DIFF[2] <= ASK_TO;
}
test the_edges_of_the_ask_are_inside {
assert ASK_FROM >= ASK_FROM;
assert ASK_TO <= ASK_TO;
assert ASK_FROM - 1 < ASK_FROM;
assert ASK_TO + 1 > ASK_TO;
}
test negative_control_a_sprawling_diff_is_flagged {
assert SPRAWLING_DIFF[3] > ASK_TO;
assert SPRAWLING_DIFF[0] <= ASK_TO;
}
Все уроки
Модуль 1 · Что такое вайбкодинг
Вы описываете, агент пишет, вы запускаете и проверяете. Что такое программа, и пять мифов, проверенных тестом.
Модуль 2 · Ваш рабочий стол
Редактор с агентом рядом, десять команд терминала и чтение сообщения об ошибке.
Модуль 3 · Точки сохранения в git
Коммит это точка сохранения, ветка это безопасная проба, а ключ это пара, одна половина которой остаётся приватной.
Модуль 4 · Промптинг
Части промпта, пример вместо прилагательного и один маленький шаг за раз.
Модуль 5 · Рабочий цикл
Четыре фазы от идеи до выпуска, цикл из четырёх шагов и что делать, когда вы застряли.
Модуль 6 · Тест как судья
Тест говорит да или нет, подложенная ошибка показывает, что тест работает, а дифф читают до того, как принять.
Модуль 7 · Из чего состоит агент
Чем агент отвечает, что он умеет делать с инструментами и что хранит между сообщениями.
Модуль 8 · Начальный бот
Бот это цикл сообщений, бот строится из спеки, а секрет остаётся вне репозитория и промпта.
Модуль 9 · Ваш собственный проект
Спека для вашей идеи, одна величина, измеренная после запуска, и честный план на следующий месяц.