t27.aiEnglish

Читайте diff, прежде чем принять

Вы узнаете

Как читать diff агента рядом с вашей просьбой и замечать правку, о которой никто не просил.

Агент говорит готово и показывает diff: строки, которые он убрал, и строки, которые добавил. Читайте его рядом с просьбой. Если вы просили изменить строки с 10 по 20, а diff задевает ещё и строку 40, это правка, о которой никто не просил, и теперь её надо прочитать. Принимайте diff, где каждая тронутая строка есть в просьбе. Остальные возвращайте или спросите, зачем. Даже чистый diff всё равно проходит через тесты.

Попробуйте

Прочитайте два diff рядом с просьбой про строки с 10 по 20, отметьте строки вне её, затем примите один diff и верните другой. В спецификации найдите номер строки, которую неряшливый diff задевает вне просьбы.

Открыть интерактивный урок →

Vibecoding 18: read the diff before you accept it ↗

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;
}

Открыть спеку урока в плеере ↗

Все уроки