Практычныя прытамулкі: Стварэнне → Тэставанне → Выправленне → Паўтарэнне: Автоматызацыя разработкі на Laravel
Практычныя прыказкі: Стварэнне → Тэставанне → Вылечэнне → Паўтарэнне: Автоматызацыя разработкі на Laravel: контракты, перакананні та спецыяльныя месца для коду для команд, якія выкарыстоўваюць гэты патэрн.
У гэтым карыце парадкульны спосаб перадбудавання пацеку ад сыр'ёў да рабочай системы для: Стварэнне → Тэставанне → Вылечэнне → Паўтарэнне: Автоматызацыя разработкі Laravel за дапамогою AI-агентаў. Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабяснення меты. У стадзіі агульнага відгледу неабходна праказаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння прычымоў перад зменай коду. Аператары должны магчымае перадзначыць крок з вядомай точкі контролю без неабяснення схованага стану. Неабходна аддакументаваць як успішны, так і варыянт вяснавання. Праказы, людзкія перакананні і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Калькі тэрмінаў, прытаму што будзем продаваць далей
Калі працюеце над этапам «Калькі тэрмінаў», спачатку запісайце угоду: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага неудачы. Такі список контроля дапамагае залічваць змяны ў кодзе чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не должна зноў ставіць плату за той самы вызов LLM, калі аператар прабуе зноў выконаць пазнейшы вузел.
Чаму «Можа лі Штучны Інтэлект пісаць код» больш не ёсць цікавым пытаннем
Калі працюеце над этапам «Чаму AI можа пісаць», спачатку запішыце кантракт: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі список контроля дапамагае заліцварыць пазнейшыя змены ў кодзе. Спрыймайце гэты этап як кантракт межа даннімі і перакананымі выходамі. Дайце назву рэзультатам, задаце критэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Стварыце контрольныя точкі пасля дорогіх крокаў. Програма не должна зноў ставіць плата за той самы вызов LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.
Developer → AI → Developer → Test → Developer → AI → Developer → Test → ...
Developer → Orchestrator → Build → Test → (failed? → Fix → Test again) → Review → Done
Пазнайоміцеся з двума галоўнымі інструментамі
Калі працуеце над этапам «Пазнаймо два галоўныя элементы», спачатку запісайце угоду: неабходныя даны, сигнал успеху і тое, што выканаецца у разы ў частковай нявыполненасці. Такі список контроля дапамагае залічыцца з пазнейшымі змянамі ў кодзе.
Laravel Boost — перакладчык межу AI і нашай прыемлі
Калі працуеце з этапам перакладу ў Laravel Boost, спачатку запісайце умовы: неабяжныя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список дапамагае заліцвачам правдзіва працаваць з пазнейшымі змянамі коду. Зберагаеце настройкі паза кодам прыемлі. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды оператары можаць аудытаваць іх без неабяжнага чытання всіх элементаў. Стварайце контрольныя пункты пасля дорогіх крокаў. Система вярнення не должна занова ставіць плату за той самы вызов LLM, калі оператар перапрыяўляе роботу да наступнага элемента.
composer require laravel/boost --dev
php artisan boost:install
OpenCode — там, дзе агент фактычна выканаў работу
Калі працуеце з OpenCode, дзе ёсць стадія агента, спачатку запішыце кантракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкі дапамагае заліцварыць пазнейшыя змены ў кодзе. Документавацыя успішнага і восстанавліваючага падходу трэба выконваць разам. Перапрыявы, людзкі контроль і обработка некоректных паведамленняў ёсцю часткая продукту, а не пазнейшая доработка. Ствараць контрольныя пункты пасля дорогіх крокаў. Програма для продакцыі не должна занова ставіць плату за той самы вызыв LLM, калі аператар перапрыявае роботу да наступнага вузла.
Практычная робота: падключэнне Boost да OpenCode
Калі працуеце над проектам «Hands-On Wiring Boost into stage», спачатку запісайце неабяжлівыя элементы: трэбаваныя вхідныя даны, сигнал успеху і тое, што выходзіць у разе частковага абякання. Такі список дапамагае заліцвачваць змяны ў кодзе. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптов. Калі якісь крок абякае, прычына абякання павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Зрабіце перагляд пасля дорогіх крокаў. Програма не павінна зноў ставіць плату за той самы вызов LLM, калі аператар праказвае спробу на болей пазнім элементе.
1. Праўяце OpenCode да Boost
Калі працюеце над пунктам 1 «Connect OpenCode да стэйдж», спачатку запісайце контракт: неабяцковыя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконтроўваець дапамагае залічыцца з пазнейшымі змянамі ў кодзе. Спрыймайце гэты стэйдж як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Зробіце пераконтроль пасля дорогіх крокаў. Система вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"laravel-boost": {
"type": "local",
"command": ["php", "artisan", "boost:mcp"],
"enabled": true
}
}
}
opencode mcp list
2. Стварыце агентаў з конкрэтнымі абавясценнямі
Калі працуеце над заданнем «Стварыць агентаў з стэйджамі», спачатку запісайце умовы викорыстоўвання: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага невясковасці. Такі список дапамагае залічваць пазнейшыя змены ў кодзе чыста і адкрыта. Запісвайце час выканання задач і кост токенаў або запытаў разам з рэзультатамі ўжывання. Відразлівае паказанне костаў з’являецца перашкоду неспакойным рахункам, калі працэс пераходзіць з дэмовай среды ў спяльнаныя сераўеры. Зробіце перапаказ пасля дорогіх крокаў. Система вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар прабуе зноў выканаць пазнейшы крок. Калі працуеце над заданнем «Стварыць агентаў з стэйджамі», спачатку запісайце умовы викорыстоўвання: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага невясковасці. Такі список дапамагае залічваць пазнейшыя змены ў кодзе чыста і адкрыта. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Прабавы, людзкі контроль і обработка некоректных запытаў є частью продукту, а не пазнейшым дапрацоўкам.
---
description: Build Agent for new features
mode: primary
tools:
write: true
edit: true
---
You are the Build Agent.
Use Laravel Boost tools to understand the application structure
before writing any code. Never assume the database structure -
always check the schema first. Write tests for every new behavior.
At the end of your work, return ONLY JSON in this format:
{"status": "success", "files_changed": [...], "summary": "..."}
opencode agent list
3. Спачатку спробуйце запускань яго ручна
Этап «Спробуйце запускань яго» працюе найэфектывней, калі яго рассматрываць як меравальную плошчу. Запісайце адна ідеальная версія роботы, адзин случай неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Вядзейце вялікімі, тэставанымі елементамі замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты роботы графа павінны быць простымі та з адначытаемымі датамі. Вкладзеныя блокі маскуюць інфармацыю пра тое, канея вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
opencode run --agent builder "Add a task assignment feature to TaskFlow according to the requirements in TASK.md"
Рэальны прыклад: функцыя прадзелення задач у «TaskFlow»
Этап «Рэйл Кейс А» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і запіс пра вярнэнне да поперадньага стану пры перадачы на наступны этап. Спрыяйце гэты этап як даговор между вхіднымі даннымі і пераканаўцамі выходных рэзультатаў. Дайце назвы всім элементам, задаце критэрыя успеху і не падтрымайце частковае завершэння без адпаведных запісаў. Зберагачыце стан графа ў простам і типаванам формате. Вкладзеныя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць продажчэнне роботы пасля перарываў.
1. A task has an assignee column (belongs to a User).
2. A user can only assign tasks within a project they're a member of.
3. A user must not assign or access tasks from other projects.
4. All of the above must be covered by automated tests.
Чаму нам патрэбна «Журнал-кніга» (база дадзеных) для гэтага процесу
Метод «Прычыны, за якія нам патрэбна стадія» працуе наўпершыя, калі яго розглядаць як вимерную плошчу. Зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць масштабы. Запісвайце час выконання і вартасьць токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Візуабельнае прадставлення вартасцей з самага пачатку запобегае неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы. Храніце стан графа як плоскі і з адзінаковым типам дадзеных. Вкладаныя блокі дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перарываў. Метод «Прычыны, за якія нам патрэбна стадія» працуе наўпершыя, калі яго розглядаць як вимерную плошчу. Зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не етапамі далейшай доўнеробкі.
Schema::create('ai_tasks', function (Blueprint $table) {
$table->id();
$table->string('type');
$table->string('status')->default('pending');
$table->text('prompt');
$table->json('result')->nullable();
$table->unsignedTinyInteger('iteration')->default(0);
$table->timestamps();
});
class AiTask extends Model
{
protected $fillable = [
'type', 'status', 'prompt', 'result', 'iteration',
];
protected function casts(): array
{
return ['result' => 'array'];
}
}
pending → building → testing → (fixing → testing)* → reviewing → completed / failed
Інтеграцыя OpenCode у наш код на PHP
Для інтеграцыя OpenCode у нашу сістэму неабходна пазначэнне вхідных дадзеных, адпаведальнага за практыку і крэтэрыяў завершэння перад зменым коду. Аператары должны магчымае перайсці на гэтую практыку з вядомага контрольнага пункту, не прыпускаючы стану, які залишаецца незрозумелым. Лепей выкорыстоўваць маленькія, тэставаныя елементы замест большых скрыптов. Калі практыка не выйшла, прычына нехацякавага рэзультата должна быць адночыннаю, а не наследкам заплутанай логікі. Неабходна людская апрацоўка тых крокаў, якія выконваюць грошовыя операцыі чысткі зменяюць данні ў працоўным режыме. Компіляцыйныя налашчэнні не ўзроўнаўцяюцься з пачатковай цэласнасцю бізнес-процэсаў.
interface AgentRunner
{
public function run(string $agent, string $prompt): array;
}
class OpenCodeAgentRunner implements AgentRunner
{
public function run(string $agent, string $prompt): array
{
$result = Process::timeout(600)->run([
'opencode', 'run',
'--agent', $agent,
'--format', 'json',
$prompt,
]);
if (! $result->successful()) {
return [
'status' => 'error',
'error' => $result->errorOutput(),
];
}
return json_decode($result->output(), true) ?? [
'status' => 'error',
'error' => 'Agent output was not valid JSON',
];
}
}
$this->app->bind(AgentRunner::class, OpenCodeAgentRunner::class);
Заданне для кожнага этапу
Для процэсу «Робота для кожнага этапу» неабяжна ясная прызначэння вхідных дадзеных, адпавядаючага адпаведальнага за шаг і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымаецца перазапускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цэму этапу як кантракту межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, прызначыце крэтарыяў успеху і не прымайце тыхню частковую завершэннасць. Заставіце людзкую апраўдку на тых этапах, дзе выкорыстоўваюцца грошы чы зміняюцыся даныя для працы. Компіляцыйныя налашчэння не ўзроўнаўцуюцца з абсягам выканання бізнес-задач.
Стварэнне роботы
Для стадіі Build Job неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавайнага режыма ў спяльныя сервісы. Заставьце людзкую апраўдку для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Компіляцыйныя налашчэння не ўзначаюць павнасці продукту з точкы зору бізнеса.
class BuildFeature implements ShouldQueue
{
public function __construct(protected AiTask $task) {}
public function handle(AgentRunner $agent): void
{
$result = $agent->run(
agent: 'builder',
prompt: $this->task->prompt,
);
$this->task->update([
'status' => 'testing',
'result' => $result,
]);
RunTests::dispatch($this->task);
}
}
Для стадіі Build Job неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных запытаў є часткай продукту, а не чымсь, што дадаецца пазней.
Тэставанне задачы
Калі працуеце на стадзіі тэставання задачы, спачатку запісайце умовы контракту: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказваць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Зробіце пераконтроль пасля дорогіх крокаў. Система не павінна зноў выклікаць той самы LLM-званак, калі аператар пракушае выконанне наступнага элемента.
class RunTests implements ShouldQueue
{
public function __construct(protected AiTask $task) {}
public function handle(): void
{
$result = Process::timeout(300)->run('php artisan test --compact');
if ($result->successful()) {
$this->task->update(['status' => 'reviewing']);
ReviewFeature::dispatch($this->task);
return;
}
$this->task->update(['status' => 'failed']);
AnalyzeFailure::dispatch($this->task, $result->output());
}
}
Test
├── passed → move to Review
└── failed → move to Analyze
Не давайце неапранутых адзінакоў агенту
Калі працюеце над стадзіяй «Не давайце сырые даннэ», спачатку запісаце кантракт: неабяжлівыя вхідныя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Спрыятлівае ставленне да гэтай стадзіі як да кантракта межа вхіднымі даннэмі і перакананымі выходнымі результатамі. Даць назвы артыфактам, задаць правіла пераканання успеху і не падтрымляць тыхя частковых завершэнняў. Ствараць контрольныя пункты пасля дорогіх крокаў. Програма не должна зноў выклікаць той самы календар LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.
{
"status": "failed",
"failed_tests": [
{
"name": "user_cannot_assign_task_from_other_project",
"error": "Expected response status code [403] but received 200."
}
]
}
You are the Debug Agent.
Analyze the failed tests below. DO NOT modify any files.
Inspect: relevant models, policies, migrations, and tests.
Return JSON with:
- root_cause
- affected_files
- recommended_fix
- risk_of_regression
{
"status": "analyzed",
"root_cause": "TaskPolicy does not verify project membership before allowing assignment",
"affected_files": ["app/Policies/TaskPolicy.php"],
"recommended_fix": "Add a project membership check inside the assign() method",
"next_action": "fix"
}
Вылечыце, а потым зноў працаваце — не вылечыце, а потым заканчыце
Калі працуеце на стадыі «Вылечыць, потым зноў працаваць», спачатку запісайце умовы викорыстання: неабходныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Запісвайце час выконання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразувая візуабельнае прадставлення костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Зробіце контрольную пазнаку пасля дорогіх крокаў. Система вярнення не должна зноў нараховваць косты за той самы вызыв LLM, калі аператар праканае пазнейшы вузел.
class FixFeature implements ShouldQueue
{
public function __construct(protected AiTask $task, protected array $analysis) {}
public function handle(AgentRunner $agent): void
{
$result = $agent->run(
agent: 'fixer',
prompt: json_encode($this->analysis),
);
$this->task->increment('iteration');
$this->task->update([
'status' => 'testing',
'result' => $result,
]);
RunTests::dispatch($this->task);
}
}
Калі працуеце на стадыі «Вылечыць, потым зноў працаваць», спачатку запісайце умовы викорыстання: неабходныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Дакументавайце як «шчаслівы» шлях, так і шлях вярнення да нормальнасці. Праканы, людзкія контрольныя пункты і обработка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней.
Оркестрабіст: «Кантролер руху», яны выбирае, што далей
Этап «Оркестрабіст, кантролер руху» працюе найкраща, калі яго спрыяваць як до меркавання. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню роботы, прычаму расшырваць масштаб. Волійце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць крок не выйшла, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Дзержыце стан графа простым і з адазначэнням типу. Вкладаныя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакоююць продажчыку роботы пасля перарываў.
Bus::chain([
new BuildFeature($task),
new RunTests($task),
new ReviewFeature($task),
])->dispatch();
class AgentOrchestrator
{
public function next(AiTask $task): void
{
match ($task->status) {
'pending' => BuildFeature::dispatch($task),
'testing' => RunTests::dispatch($task),
'failed' => AnalyzeFailure::dispatch($task),
'fixing' => RunTests::dispatch($task),
'reviewing' => ReviewFeature::dispatch($task),
'completed', 'stopped' => null,
default => throw new LogicException("Unknown status: {$task->status}"),
};
}
}
Ліміт праказаў — каб не цягнулася безканечна
Этап «Апекс рэйты» працюе наякраўжы, калі яго спрыяваць як меруючую плошчу. Зафіксавайце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Спрыяйце гэтам этапу як кантракту межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад тыхняй частковай роботы без паведамлення. Зберагаюце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакоююць продовжэнне роботы пасля перарываў.
Fix → Test fails → Fix → Test fails → Fix → Test fails → ...
class RunTests implements ShouldQueue
{
protected const MAX_ITERATIONS = 5;
public function handle(): void
{
if ($this->task->iteration >= self::MAX_ITERATIONS) {
$this->task->update(['status' => 'needs_human_review']);
return;
}
// ... run tests as usual
}
}
Зеленыя тэсты ≠ Завершаная функцыя
Этап «Функцыя завершана» ў фічары Green Tests працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньего стану перш чым расширваць сферу дзеяння. Запісвайце часы выканання і вартасць токена або запиту паляўкі ўжо разам з функцыональнымі рэзултатамі. Візуабельнасць вартасцей з самага пачатку запобегае неспакою з боку расчыткаў, калі процес пераходзіць з дэмовай среды ў спакульную. Храніце стан графаў у простам і типаваным формате. Вярнутыя структуры данных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць продыржанне выканання пасля перарываў. Этап «Функцыя завершана» ў фічары Green Tests працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньего стану перш чым расширваць сферу дзеяння. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней.
public function assign(User $user, Task $task): bool
{
return $user->isAdmin();
}
Build → Tests pass → Deploy immediately
Build → Test → (if failed: Debug → Fix → Test again) → Human review → Deploy
Якщо калькуляторы працуюць паралельна, стараюцца уважваць конфлікты файлаў
У стадыі «Якщо калькуляторы працуюць паралельна» неабходна пазначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымае перайсці крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына нехацкага рэзультата должна быць адночыннаю, а не наследкам заплутанага ланцоўка задач. Заставляйце людзей апрацоўваць тыя крокі, якія выкалічуюць грошы або зменяюць даны для працы. Компіляцыйныя налашчэнні не ўзначаюць повнасці бізнес-процэса.
Agent A → writes Task.php
Agent B → reads Task.php (nearly at the same time)
Agent A → writes Task.php again
Research Agent → read-only
Review Agent → read-only
Security Agent → read-only
Build Agent → write access
Fix Agent → write access
Не прыкладвайце да аднаго калькулятора ўсю роботу
Для стадіі «Не стварыць адна» неабяжна падзець ваказкамі, адпаведнымі для вхідных дадзеных, адпаведнай особе, якая керуе цым крокам, і крэтэрыям завершэння перад зменой коду. Аперацыяныя працавнікі павінны магчымаецца перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межаў вхідных дадзеных і перакананых выходных рэзультатаў. Дайце назвы артыфактам, ваказаць крэтэрыяў успеху і адмовіцеся ад тыхняе частковага завершэння без паведамлення. Забезпечыце людскія апраўдкі для тых крокаў, якія выкарыстоўваюць грошы або зменяюць данні ў працэсе вырабніцтва. Прыєднанне элементаў у час компілявання не ўзначае повнайсткавасці бізнес-процэса.
Planner → designs the approach
Builder → writes the new feature's code
Tester → runs the test suite
Debugger → diagnoses failures (read-only)
Fixer → executes the fix
Reviewer → final quality check (read-only)
Мінімальны список пераконтраўкі пры пачатку выкарыстоўвання
Для стадіі «Мінімальны список пераконтроўкі перед» неабходна прадзефінавацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перапрацаваць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Заставьце людзкія апраўданні на тых этапах, дзе выконваюцца витраты або зміняюцыся даныя у працэйным серавере. Працэўнае підключэнне ў час компілявання не абавесць цэлыснасцю бізнес-процеса. Для стадіі «Мінімальны список пераконтроўкі перед» неабходна прадзефінавацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перапрацаваць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Документавайце як «шчаслівы» шлях, так і шлях вяснавання ситуацыі. Перапрыбуткі, людзкія апраўданні і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
/p>
Какая жа асалівая роля Laravel Boost у всім гэтым?
Калі працуеце над этапам «So What s Laravel», спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага няўспэху. Такі список контроля дапамагае заліцваліваць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, няўспэх павінен вказваць на адну конкретную адпаведальнасць, а не на заплутаны ланцужок задач. Робіце контрольныя пункты пасля дорогіх крокаў. Система не павинна зноў ставіць плату за той самы вызов LLM, калі аператар прабуе зноў выконаць пазнейшы элемент.
Developer (us)
│
▼
Orchestrator (traffic controller, running on Laravel Queue)
│
├── Build Agent
├── Test Agent
├── Debug Agent
└── Fix Agent
│
▼
OpenCode (where the agent does its work)
│
▼
Laravel Boost (context translator, via MCP)
│
▼
Our Laravel application
Вывад: Запыт змяніўся
Калі працюеце над стадзіяй «Заключнэ пытанне: Якое пытанне?», спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадзію як контракт межа даннэмі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні на успех і адмовіцеся ад мовчкавага частковага завершэння. Зробіце пераконтроўку пасля дорогіх крокаў. Система вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.
Чек-ліст для эксплуатацыі
Стадзія чек-ліста для эксплуатацыі працюе найкраща, калі яе спрыймаюць як мерыемую паверхню. Запісайце адна ідеальная транскрыпцыя, адзін прыклад нявыпання і прыметку па адкату перш чым расширваце сферу дзейнасці.
Зберагаўце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў аднам месцы, якое аператары можаць пераканаць без чытання всіх элементаў структуры.
Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакошуюць працю пасля перерываў.
Калі дозволяе бюджет, дадзіце тэст на перакананне, які працюе над критычным шляхам у CI з викорыстаннем фіксатываў, а не рэальных платных API.
Документаваць трэба як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не етапамі далейшага доўнелення.
Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакошуюць працю пасля перерываў.
Перш чым апранаваць стак, заморозьце версіі, зафіксаваце ідеальны транскрыпт для критычнага шляху і паказваце крокі для вярнення да пачатковага стану. У спільных средах неабходны ліміты швайнаў, перакананні пра належнасць і чысткі власнік для змены секрэтных даных. Лепш аддаўаць надзею на надзейную надзяйнасць, чым прадставляць крэатывныя, але едыноразовыя дэманстраціі.
Запіска параграфу 815696fa9b90: не трэба кантрацеўваць ключы прадастоўніка ў репазітары, задаць максімальную кантроль на токен за сесыю, а таксама зберагчы транскрыпціі празаўсюды з фікстурамі ацэнкі, каб пазнейшыя замены моделей заставаліся порównанымі.