t27.aiEnglish

Четыре фазы: идея, сборка, проверка, выпуск

Вы узнаете

Почему работа проходит четыре фазы по порядку и почему упавший тест возвращает её к сборке, а не вперёд к выпуску.

У любой работы с агентом одни и те же четыре фазы. Идея: вы одним предложением говорите, чего хотите. Сборка: агент пишет один небольшой кусок. Проверка: вы запускаете его, и тест отвечает да или нет. Выпуск: вы сохраняете результат и кладёте его туда, где им пользуются. Фазы идут не по прямой. Когда тест говорит нет, работа возвращается к сборке, а не идёт вперёд к выпуску, и круг начинается снова. В спеке этого урока две таблицы: куда переходит каждая фаза, когда тесты прошли, и куда, когда они упали. Плеер запускает её 4 теста. Измените одну запись таблицы падения так, чтобы упавший тест вёл к выпуску, и ровно один тест покраснеет.

Попробуйте

Откройте виджет и проведите идею до выпуска с одним упавшим тестом по пути; посчитайте шаги. Затем в спеке найдите запись таблицы падения, которая возвращает упавший тест к сборке, замените её на 3 и прочитайте, какой тест покраснел.

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

Four phases: idea, build, test, ship ↗

Walk one idea through four phases. At the test phase press pass or fail: a pass ships it, a fail sends it back to build. Nothing ships past a red test.

specs/vibecoding/four_phases.t27

// SPDX-License-Identifier: Apache-2.0
; specs/vibecoding/four_phases.t27 -- vibecoding lesson: the four phases, idea, build, test, ship
; One idea: work moves through four phases in order, and a failed test sends it back to build,
; never forward to ship. A phase is a number: 0 idea, 1 build, 2 test, 3 ship. The two tables
; below say where each phase goes next, one when the tests pass and one when they fail.
; Run it in the player, then change FAIL_NEXT[2] from 1 to 3 (a failed test goes on to ship) and
; read which test goes red.
; ASCII only, English only.
; phi^2 + 1/phi^2 = 3 | TRINITY

module vibecoding_four_phases;

pub const PHASE_IDEA : u8 = 0;
pub const PHASE_BUILD : u8 = 1;
pub const PHASE_TEST : u8 = 2;
pub const PHASE_SHIP : u8 = 3;
pub const PHASE_COUNT : u8 = 4;

; Next phase, indexed by the phase you are in.
pub const PASS_NEXT : [4]u8 = [1, 2, 3, 3];
pub const FAIL_NEXT : [4]u8 = [1, 2, 1, 3];

test the_phases_run_in_order {
    assert PASS_NEXT[0] == PHASE_BUILD;
    assert PASS_NEXT[1] == PHASE_TEST;
    assert PASS_NEXT[2] == PHASE_SHIP;
}

test a_failed_test_goes_back_to_build {
    assert FAIL_NEXT[2] == PHASE_BUILD;
    assert FAIL_NEXT[2] != PHASE_SHIP;
}

test shipped_stays_shipped {
    assert PASS_NEXT[3] == PHASE_SHIP;
    assert FAIL_NEXT[3] == PHASE_SHIP;
}

test three_steps_from_idea_to_ship {
    assert PASS_NEXT[PASS_NEXT[PASS_NEXT[0]]] == PHASE_SHIP;
    assert PHASE_COUNT == PHASE_SHIP + 1;
}

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

Все уроки