Практычныя нататкі: адмяніць лёгка, а паўтарыць — вось дзе агенты для кода адрозніваюцца
Практычны разбор тэмы «чаму адмяніць змены лёгка, а паўтарыць — там, дзе агенты для кода адрозніваюцца»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.
Наступныя прытамлівкі восстанавляюць практычны падход да тэмы «Анульванне — гэта проста. Павторныя дзеяння — тут і выражаюцца разлікі між кодавальскімі агентамі». Акцэнт ставяцца на кантракты, пераконтроўкі і месца для коду, які можна легка заменіць, а не на мотывацыйныя аспекты. Калі працуеце на стадыі агледжэння, спачатку запісайце кантракт: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца у разы частковай нявыполненасці. Такі спіс пераконтроўкі дапамагае заставаць пазнейшыя змены коду чыстымі. Зберагаюце настройкі праза код аплікацыі. Файлы сераўнавання, храненні секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можу працаваць без неабяжнага чытання всіх элементаў структуры.
Анкеры версій
Этап версійнага кантролю працуе наяўнасцю, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню працы перш чым расшырваць масштаб. Дакументаваце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Храніце стан графа ў простым і тыпаваным фармаце. Вкладзеныя блокі маскуюць, канферы яны поле было запісана, і спакоююць продовжэнне працы пасля перарываў.
Короткая версія
Этап кароткай версіі працуе наяўнасцю, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню працы перш чым расшырваць масштаб. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Храніце стан графа ў простым і тыпаваным фармаце. Вкладзеныя блокі маскуюць, канферы яны поле было запісана, і спакоююць продовжэнне працы пасля перарываў.
1. Claude Code — DAG, у якому адмініструванне прыемлена палова частка
Этап 1 Claude Code працюе найэфектывней, калі яго спрыяваць як меравальную плошчу. Запісаўце адна ідэальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштаб. Спрыявайце гэты этап як кантракт межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зберагачыце стан графа ў простам і тыпаванам фармаце. Вкладзеныя блокі маскуюць, які вузел запісаў кожны поле, і спакшваюць продажчэнне пасля перарываў.
На дыску [документы + мераваныя даныя]
Дакументы на дыске, які відображаюць этапы працы, найкрашча працуюць, калі іх розглядаць як віміроўваную паверхню. Запісаце адна ідэальная версія, адзін прыклад неудачы і прыметку па поверненню да попярэдня стану пры расшырэнні масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакою, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўы. Храніце стан графаў у простам і тыпаваным фармаце. Вкладаныя блокі маскуюць інфармацыю пра тое, які вузел запісаў які поле, і спакшваюць продажчэй вярнуцца да працы пасля перарываў.
~/.claude/projects/<encoded-cwd>/<session-id>.jsonl
~/.claude/projects/-home-claude/
├── e2252c61-0ac1-5c73-b84f-b452a0553da2.jsonl main transcript
├── e2252c61-….ccr-tip.json {"eventId":…,"updatedAt":…}
└── e2252c61-…/
├── subagents/agent-<id>.jsonl + agent-<id>.meta.json subagent transcripts
└── tool-results/toolu_<id>.txt large tool results, externalized
Структура, якая мае значэнне [віміроўваная + выведзена]
Структура, якая мае значэнне, працуе наяўней, калі яе спрыяваць як мерыемую паверхню. Запісаце адна «золатая» версія, адын прыклад неудачы і прыметку па вярнэнню да поперадньага стану пры розшырэнні масштаба. Храніце настройкі пазырочна ад коду прыемліка. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Храніце стан графа у простам і тыпаваным фармаце. Вярнутыя блокі дадзеных маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць продажчыку працы пасля перэрываў.
{"type":"last-prompt",
"lastPrompt":"…",
"leafUuid":"219c7d72-e88f-4111-a3fe-b431cabcbdaf",
"sessionId":"e2252c61-…"}
/branch [docs]
Этап документавання галузі працюе найэфектывней, калі яго спрыявае можласць вімеры рэзультатаў. Зафіксавайце адны ідэальны прыклад працы, адзін прыклад неудачы і запіс пра абратку змян перш чым расшырваць сферу даследжэння. Документавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контрольны пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не элементамі пазнейшай дапрацоўкі. Храніце стан графа ў простам і тыпаваным фармаце. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, калькі вузел запісаў калькія поля, і спакшваюць продовжэнне працы пасля перарываў.
Тачкі контролю [даследжанні + вімеры]
Дакументацыя Checkpoints лепша працуе для аналізу стадый, калі яе спрыяваць як мерыяе паверхне. Зберагачыце адна ідэальная версія, адзін прыклад неудачы і запіс пра вярнэнне да поперадней версіі, прычаму расшыроўваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Рэгулюйце стан графа так, каб ён быў простым і з адзінаковым тыпам дадзеных. Вярсткаваныя блокі маскуюць інфармацыю пра тое, канферы які вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
2. Codex CLI — Esc Esc больш не ёсць спосабам вярнэння да поперадней версіі
Этап 2 Codex CLI Esc працюе найкрашча, калі яго розглядаць як вімерную паверхню. Зафіксавце адна «золатая» копія дадзеных, адзін прыклад неудачы і запіс пра поверненне да пярвоначальнага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі дадзенымі і пераканаленымі выхіднымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і не прабуйце прымусіваць завершэнне працы без паведамлення пра частковыя наследкі. Храніце стан графа як просты і з адначытаемымі дадзенымі. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакоююць возобнавленне працы пасля перэрываў.
Корэкцыя
Этап карэкцыі працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідэальная версія, адзін прыклад неудачы і запіс пра вярнэнне да поперадней версіі перш чым расшырваць масштабы. Запісвайце часы выканання і кост токеноў або запытаў праза функцыйнае рэзультат. Відкрытыя даныя пра косцы з’являюцца рана, таму не будзе неспакою з рахункамі, калі праця перэйдзе з дэмовай асяроддзя ў спакульную. Храніце стан графа як плоскі і з адначынным тыпам. Вярстакаваныя блокі маскуюць, які вузел запісаў канкрэтны поле, і спакшваюць продажчыку працу пасля перарываў.
{"timestamp":"…","type":"event_msg","payload":{"type":"thread_rolled_back","num_turns":N}}
RolloutItem::EventMsg(EventMsg::ThreadRolledBack(rollback)) => {
history.drop_last_n_user_turns(rollback.num_turns);
}
На дыску [src] rollout/src/recorder.rs:1549
Этап розгортання src на дыске працюе найэфектывней, калі яго спрыяваць як до мерыемагучай паверхні. Зберажыце адна ідэальная копія даных, адзін прыклад неудачы і запіс працэў па анулюванню розгортання пры расшырэнні масштаба. Храніце настройкі пазырочна ад коду прыемленае. Файлы сэраўнавання, базы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Храніце стан графа ў простам і тыпаваным фармаце. Вярнутыя блокі дадзеных маскуюць інфармацыю пра тое, канфігурацыйны вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
$CODEX_HOME/sessions/YYYY/MM/DD/rollout-YYYY-MM-DDThh-mm-ss-<uuid>.jsonl
Два рэжыму форка з абсалютна разнымі правіламі фізыкі [src]
Два рэжыма фаркінгу з стэйджамі працуюць найкрашча, калі іх розглядаць як вімерную паверхню. Зафіксавайце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Документавайце як шлях успеху, так і шлях вярнэння разам. Перапрыбуткі, людзкія контралініі і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней. Храніце стан графа у простаму і тыпаваны фармат. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць продовжэнне працы пасля перэрываў.
3. Pi — ўжоўно едыні бесплатны двунаправае навігатор
3 Pi – едын стадыя – працуе наўсёрэйш, калі яго спрыяваць як мерымабельную паверхню. Зафіксавайце адны «золаты» прыклад, адну справу з бягам і прымітку па адварцыю, перш чым расшырваць масштаб. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок збягае, прычына бягу должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты працы графа трэба зберагаць у простай форме з адначытаемымі дадзеннямі. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, каней вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.
Две рэалізацыі сесый, адна падключаная [src]
Два варыянта рэалізацыі сесій у адной стадзіі працуюць найкрашча, калі іх спрыяглядаць як мерыемую паверхню. Запісаце адны ідэальны прыклад працы, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыяглядзіце гэтую стадзію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння. Рэгулюйце стан графа так, каб ён быў плоскім і з адначыным тыпам дадзеных. Вкладаныя блокі маскуюць, які вузел запісаў канкрэтны поле, і спакшуюць возобнавленне працы пасля перарываў. Два варыянты рэалізацыі сесій у адной стадзіі працуюць найкрашча, калі іх спрыяглядаць як мерыемую паверхню. Запісаце адны ідэальны прыклад працы, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Зберагачыце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всего графа.
На дыску [src + measured]
Для этапы «On disk src measured» неабяжна прадзефінавацыя вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння перад зменым коду. Аперацыяныя працавнікі павінны магчымае перапрацаваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія пераказы і обработка некорэктных паведамленняў ёсць часткай продукту, а не элементамі пазнейшага дапрацоўвання. Неабяжна атрымаць пашчаткованне чалавека для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны пра вырабніцтва. Кампайляванне коду не ўзроўнаважваецца з повнасцю бізнес-функцый.
~/.pi/agent/sessions/--<cwd, leading slash stripped, / : \ → - >--/<ISO-timestamp>_<sessionId>.jsonl
const safePath = `--${resolvedCwd.replace(/^[/\\]/, "").replace(/[/\\:]/g, "-")}--`;
id 019fe5b5-8da6-707e-b29e-7940aca8ca25
file /tmp/fakehome/.pi/agent/sessions/--tmp-proj--/2026-08-09T08-48-28-582Z_019fe5b5-….jsonl
Дрэва [src + measured]
Для этапы вычыслення параметра дрэва src неабяжна прадзеўначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны працэс. Неабяжна ўключыць людзкія пераказы для тых крокоў, якія ведуць да выдаткаў грошэй або зміняюць даны ў працоўным рэжыме. Компіляцыйныя налашчэння не ўзроўнаўцуюцься з пачатковым станом бізнес-процэсаў.
{"type":"session","version":3,"id":"019fe5b5-…","timestamp":"…","cwd":"/tmp/proj"}
{"type":"message","id":"14700d42","parentId":null,…}
{"type":"message","id":"bc58a399","parentId":"14700d42",…}
{"type":"session_info","id":"a263a229","parentId":"bc58a399","name":"demo"}
/tree — самая цікавая частка
Для этапы «Цікавая частка дрэва» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрацавляйце з гэтай стадыяй як з кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, узначыце перакананні на успех і адмовіцеся ад тыхняга частковага завершэння без паведамлення. Заставьце людзкія апраўды на тых элементах, якія вітрачаюць грошы або зменяюць даны для працы. Компіляцыйныя налашчэння не ўзначаюць павнае завершэння бізнес-процэсу. Для этапы «Цікавая частка дрэва» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Зберагайце налашчэнні параду ўнутры коду прыкладнага програма. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцый павінны знаходзіцца ў аднам месцы, якое працавнікі можуць аўдытаваць, не чытаючы весь код.
aph.
/fork і /clone [src + measured]
Калі працуеце зэтапам fork і clone src, спачатку запісайце умовы: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцвачыць пазнейшыя змены коду. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткаю продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Функцыя продажу не павінна занова вырахоўваць кашты за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
{"type":"session","version":3,"id":"019fe5b5-b4cf-…","cwd":"/tmp/proj",
"parentSession":"/tmp/fakehome/.pi/agent/sessions/--tmp-proj--/2026-08-09T08-48-28-582Z_019fe5b5-8da6-….jsonl"}
Натыўнае архіваванне файлаў: падтверджана яго відсутнасць [src]
Калі працуеце з фазай паверакання файлоў Native, спачатку запішыце умовы: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпання. Такі спіс контролю дапамагае залічваць пазнейшыя змены ў кодзе чыстаюча.
Пашырэнне, якое заполняе празора, і што з яго не так
Калі працуеце над стадзіяй «Пашырэнне, якое запоўняе», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі спіс пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрацаввайце гэтую стадзію як контракт межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце пераконтроўку пасля дорогіх крокаў. Сістэма вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар праканае пазнейшы вузел. Калі працуеце над стадзіяй «Пашырэнне, якое запоўняе», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі спіс пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Зберагачыце настройкі параду ўнутры коду прыемленае. Файлы сераў, хранільнікі секрэтных дадзеных і флагі функцый павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры.
await performRestore(state, ctx, undoRef, "files"); // internally pushes a NEW before-restore
state.redoStack.pop(); // pops the one just pushed; undoRef stays on top
matchesKey('\x1b','escape') → true
matchesKey('\x1b','escape escape') → false
4. opencode — лінейная історыя і ўсё, што можна перадзрабатваць
Этап лінейной історыі 4 opencode працюе найкрашча, калі яго розглядаць як вімерную плошчу. Запісаўце адна ідэальная версія, адзін прыклад неудачы і прыметку па аброшчанні перад расшырэнням масштаба. Дакументавайце як успішны, так і варыянт вярнення да нормальнасці. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не наступным этапам дорабачання. Храніце стан графа ў простаму і тыпаванаму фармаце. Вкладаныя блокі маскуюць, які вузел запісаў кожны поле, і спакоююць продовжэнне працы пасля перэрываў.
Цяпер гэта SQLite [src]
Этап «It s SQLite now» працюе найкрашча, калі яго розглядаць як меркавыя паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі па абяцуванні перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзервавайце стан графа ў простаму і тыпізаванаму фармаце. Вкладныя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць продовжэнне выканання пасля перэрываў.
~/.local/share/opencode/opencode.db (+ -wal / -shm)
ID-ы не ў фармаце ULIDs [src] packages/schema/src/identifier.ts
Ідэнтыфікаторы не ўскладняюць працу на даным этапе, калі іх спрыяваць як мерыемую паверхню. Зафіксавайце адны ідэальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыявайце гэты этап як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць крытэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння. Зберагачыце стан графа у простаму і тыпаванаму фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спаказваюць працу пасля перэрываў.
length 26 = 12 hex time prefix + 14 base62 random
current = BigInt(Date.now()) * 0x1000n + counter // ms << 12 | monotonic counter
value = descending ? ~current : current // descending = bitwise NOT
Ідэнтыфікаторы не ўскладняюць працу на даным этапе, калі іх спрыяваць як мерыемую паверхню. Зафіксавайце адны ідэальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Зберагачыце настройкі паза кодам прыемліка. Файлы сераўнавання, хранільнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всего графа.
Історыя ў лінейным фармаце [src] packages/core/src/session/sql.ts
Для лінейнага этапу src у гісторыі неабяжна прадзеўначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перадзеўжваць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія пераказы і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней. Неабяжна атрымваць людзкую згоду для тых крокоў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Працэс кампілявання не ўзроўнаважваецца з повнасцю бізнес-функцыяў.
revert() = анулюванне [src] packages/opencode/src/session/revert.ts
Для параграфу «выканаленне змян у пакетах src» неабяжна ўзначыць вхідныя даны, адпаведальнага за этап і крэтыяры завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць этап з вядомай точкі контролю, не прабуючы спадарваць схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі этап не выйшае, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны працэс. Неабяжна ўключыць людзкія апраўленні для тых крокоў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе віробніцтва. Компіляцыйныя налашчэнні не ёсць гарантыяй полнай адпаведнасці працэсу выканання задач.
unrevert() = перадзрабаткаць [src]
Для стадыі redo src, калібруемай пры нявозможнае вярненне, паказваць неабходныя даны, адпаведальнага за крок і крэтырыя для завершэння перад змінайом коду. Аперацыяныя працавнікі павінны магчымае перадзягнуць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяць гэтай этапы як даговору межа данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, паказваць перакананні на успех і адмовіцца ад тыхоўскага частковага завершэння. Заставіць людзкую апраўду на тых кроках, дзе вітыкаюць грошы або змінююцыся даны для працы. Кампайляванне на час не ўзроўнаваліся з пачатковай цэласнасцю бізнес-процэса.
if (session.revert.snapshot) yield* snap.restore(session.revert.snapshot)
yield* sessions.clearRevert(sessionID)
Для параграфу «redo src» без адаптавання неабяжна практычная візначэнне інпутаў, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аператары должны магчымаць паўтарную запуск кроку з вядомага пункту контролю, не прымуджаючыся вычысляць скрыты стан. Конфігурацыю трэба заставляць параду ўнутры коду аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.
Калі параграф «redo» не працуе [src]
Калі працуеце над стадзіяй src, калі аператываецца працэс, спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконваець у тым, што пазнейшыя змены коду будуць чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Зрабіце контрольную пазнаку пасля дорогіх крокаў. Сістэма вярнення не павінна зноў выклікаць той самы калленд LLM, калі аператар перапрыбуе пазнейшы вузел.
const remove = msgs.slice(index + (session.revert.partID ? 1 : 0))
for (const msg of remove) yield* sessions.removeMessage({sessionID, messageID: msg.info.id})
yield* sessions.clearRevert(sessionID)
Snapshots: shadow git з дрэвамі і без комітаванняў [src]
Калі працуеце з функцыяй «Snapshots shadow git with stage», спачатку запісайце умовы выканання: неабяцковыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцвачваць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына нявыпання павінна вказываць на адну конкрэтную абавязак, а не на заплутаны ланцужок задач. Стварайце контрольныя пункты пасля дорогіх крокаў. Програма для продакцыі не павінна зноў сцягваць плата за той самы вызов LLM, калі аператар праканае выконанне наступнага элемента.
yield* add()
const result = yield* git(args(["write-tree"]))
return result.text.trim()
Fork [src + docs]
Калі працуеце над стадзіяй Fork src docs, спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс перакладоў заходзіць пазнейшыя змены коду ў правільным напрамку. Спрыймайце гэтую стадзію як контракт межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце правіла пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зрабіце перапытаку пасля дорогіх крокаў. Функцыя адновлення не должна зноў выклікаць той самы калленд LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам. Калі працуеце над стадзіяй Fork src docs, спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс перакладоў заходзіць пазнейшыя змены коду ў правільным напрамку. Зберагачыце настройкі параду ўнутры коду аплікацыі. Файлы сераў, сховішчы секрэтных даных і флагі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць без неабяжлівага чытання всей структуры.
5. qwen-code — без тэневага рэпазітарыю, а адкатванне ёсць разрушальным
5-й код qwen без этапы “цэнт” працюе наяўнасты, калі яго розглядаць як вімерную паверхню. Запісаўце адна “золатая” транскрыпцыю, адзін прыклад неудачы і прыметку па адвярненню працы перш чым расшырваць масштаб. Дакументаваце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Храніце стан графа як плоскі і з адначытаемым тыпам. Вярнутыя блокі маскуюць, які вузел запісаў канкрэтны поле, і спакшваюць продыранне пасля перарываў.
Корэкцыя [src]
Этап карэкцыі src работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідэальная версія, адзін прыклад неудачы і запіс пра вярнэнне да поперадней становішчы пры расшырэнні масштаба. Валіце малыя, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты працы графа павінны быць простымі і з адначыя тыпамі дадзеных. Вкладаныя структуры дадзеных маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць продовжэнне працы пасля перэрываў.
Тры незв’язаныя схемы зберагачэння [src] packages/core/src/config/storage.ts
Этап трохіцых незв’язаных схэмаў зберагачвання працюе найкрашча, калі яго розглядаць як віміроўваную паверхню. Зафіксуйце адна ідэальная версія, адын прыклад неудачы і запіс про відкатанне перш чым расшырваць масштаб. Разглядайце этап як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Паказвайце назвы артыфактаў, задаюце крытэрыя успеху і не падтрымайце тыхія частковыя завершэння. Раздзеляйце політыку часткавага абробкі дадзеных і політыку ўтрымання іх. Змена адной з яных не должна прымусваць перапісванне другой, калі зменяюцца паказнікі якасці. Этап трохіцых незв’язаных схэмаў зберагачвання працюе найкрашча, калі яго розглядаць як віміроўваную паверхню. Зафіксуйце адна ідэальная версія, адын прыклад неудачы і запіс про відкатанне перш чым расшырваць масштаб. Зберагайце настройкі параду ад коду прыемлівача. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры.
getProjectHash(root) = sha256(win32 ? root.toLowerCase() : root) // full 64 hex, for tmp/
sanitizeCwd(cwd) = cwd.replace(/[^a-zA-Z0-9]/g, '-') // for projects/
FileHistoryService [src]
Для стадыі src у FileHistoryService неабяжна практыка задаць вхідныя даны, адміністратара крока і крытэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна практыка аддако задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней. Неабяжна практыка аддаць людзкую затверджэнняе для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Працэс складання коду не ўзроўнаважваецца з повнасцю бізнес-функцый.
this.fileCheckpointingEnabled =
params.fileCheckpointingEnabled ?? (!params.sdkMode && (params.interactive ?? false));
/rewind вычышае вашы будучы [src]
Для адміністрацыі павертання зносіцца ваша будучая стадыя, таму перш чым зменшваць код, неабходна ясная нараджэння ўводных дадзеных, власніка крока і крэтарыяў выходу. Аператары должны магчымае перзапускнуць крок з вядомай точкі контролю, не падозрываючы схованы стан. Валіце маленькія, тэставальныя елементы працы над велікімі скрыптамі. Калі крок не выйшаў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Заставьце людзкія апраўды на тых этапах, дзе відбываецца выдатак грошэй або зміняюцыся даныя для працы. Компіляцыйны механізм не ёсць гарантыяю цэласнасці бізнес-процэсаў.
const removed = this.state.snapshots.slice(targetIdx + 1);
this.state.snapshots = this.state.snapshots.slice(0, targetIdx + 1);
await this.cleanupOrphanedBackups(removed); // ← physically deletes the backup files
Forks несу свае рэзервныя копіі [src]
Для этапы адміністрування рэзервных копій у Forks неабямо прадзеўляць вхідныя даны, абавесцелювальніка крока і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрацавляйце гэтую стадыю як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, прадзеўляць перагледы успеху і адмовіцеся ад тыхнай частковай завершэння без паведамлення. Заставіце людзкую апраўду на тых кроках, дзе выкорыстоўваюцца грошы або зміняюцыся даны для працы. Компіляцыйныя налашчэння не ўзроўнаўваюцца з павнай завершанасцю бізнес-процэсаў. Для этапы адміністрування рэзервных копій у Forks неабямо прадзеўляць вхідныя даны, абавесцелювальніка крока і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Зберагачыце налашчэнні параду ад коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцый павінны знаходзіцца ў аднам месцы, якое працавнікі можуць перагледзець, не чытаючы весь код.
aph.
6. Разам
Калі працуеце над этапам 6 «Разам», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконтроўвае чыстасць пазнейшых змян у кодзе. Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Сістэма вярнення не павінна зноў ставіць плату за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
Храненне
Калі працюеце над стадзіяй Storage, спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі спіс пераканаець у тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок неяксамоства, гэтае неяксамоства павінна адначасова паказваць адную адпаведнасць, а не заплутаны ланцужок задач. Перад налаштаваннем запітоў пераканайце рэкалі на фіксаваным наборы пытанняў. Частае змена запітоў рэдка калі лечыць слабую спроможнасць выкарыстоўвання інформацыі.
Структура размовы і ўздвоенне
Калі працуеце з структурой кансэрвацыі і стадзіяй форкінгу, спачатку запісайце кантракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі чэк-ліст дапамагае захаваць чыстасць пазнейшых змян у кодзе. Спрытывайце гэту стадзію як кантракт межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце перакананні на успех і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце чэкпоінт пасля дорогіх крокаў. Сістэма адновлення не должна зноў выклікаць той самы калл LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.
Адкруцьце і зробіце занова
Калі працюеце з этапамі адкручвання і павторнага выкарыстання, спачатку запісайце умовы кантракта: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Запісвайце час выкарыстання і кост токена або запытку пад функцыйнальнымі рэзултатамі. Відразы коста з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Зробіце контрольную паўзу пасля дорогіх крокаў. Функцыя адновлення не должна зноў нарахоўваць кост той самай вызову LLM, калі аператар прабуюць зноў выконаць пазнейшы вузел.
7. Тры лініі дыяграмы праекта
Калі працуеце з 7 стадзяміяй дыяграмы Three design lineages, спачатку запісайце умовы: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі спіс контролю дапамагае заліцвачыць змяны ў кодзе пасля таго. Зберагаюце настройкі за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аўдыт без неабяжлівага чытання всей структуры. Ставяйце контрольныя пункты пасля дорогіх крокаў. Програма для продакцыі не должна занова ставіць плату за той самы вызов LLM, калі аператар перазапускае пазнейшы вузел.
8. Што насправды трэба рабіць
Калі працюеце над 8 пунктамі «Што насправды трэба рэалізаваць», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Сістэма вярнення не должна занова ставіць плату за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
9. Што вы не пераканалі
Калі працуеце над 9-ю стадзіяй «Што вы зрабілі», спачатку запісайце умовы контракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не павінна зноў сцягваць плата за той самы вызов LLM, калі аператар праканае пазнейшы вузел.
Справакі
Калі працюеце на стадыі Рэферэнсаў, спачатку запішыце кантракт: неабходныя даныя, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі. Спрыятлівае ставленне да гэтай стадыі як да кантракту межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаць тэсты на успех і не падзеўляйцеся частым, непрыканальным завершэнням. Зробіце чэкпоінт пасля дорогіх крокаў. Сістэма адновлення не должна зноў выклікаць той самы калл LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працюеце на стадыі Рэферэнсаў, спачатку запішыце кантракт: неабходныя даныя, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі. Зберагаеце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всіх элементаў.
Чэк-ліст для аператараў
У стадыі перагляду крокаваў эксплуатацыі неабходна праказаць вхідныя даны, адпаведальнага за кожны крок і крэтарыя для завершэння працы перад змінайом коду. Аператары должны магчымае запускаваць крок з вядомай точкі контролю, не прабуючы спадарожваць схованы стан.
Запісвайце час выканання і вартасьць токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае праказаванне вартасцей запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульную.
Заставьце людзкія апраўды для тых крокав, якія вітрачаюць грошы або зменяюць даны ў працэсе віробніцтва. Конфігурацыя, створаная ў часе компіляцыі, не гарантуе полнай адпаведнасьці з бізнес-трэбованнямі.
Напісце кароткі посібнік: як зменяць клучы, як спрачыслаць чэргу запытаў, як анулюваць пярэдніе змены.
Зберагаўце настройкі праза код аплікацыі. Файлы асяроддзя, хранільнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь код аплікацыі.
Неабяжна людская празначэнне для тых элементаў, якія выдвайуць грошы або зменяюць даныя праработкі. Працаванне ў часе компілявання не абяжаецца пачынкамі бізнес-процэсаў.
Перш чым пераводзіць стэк, заморажуйце версіі, зафіксавайце «золаты» транскрыпты для крытычных ліній працы і паказвайце крокі для адвярнення змян. У спадзеленых срэдах неабходны ліміты частоты, перакананні ў правах на вікорыстоўванне і чысты власнік для ротацыі секрэтных даных. Валіце надзейнасць, а не крэатыўныя разовыя дамэстрацыі.
Запіс для 413b940c57b7: не кладзіце ключы прадаўцаў у рэпазітарый, задаце верхнюю межу токенаў на сесію і зберагаце транскрыпты праз адносна да фіксатуў для евалюацыі, каб пазнейшыя замены модэляў заставаліся парабяльнымі.