Практычныя нататкі: чаму ніхто не гаворыць пра LangChain, LangGraph ці AutoAgent
Практычны разбор тэмы «чаму пра LangChain, LangGraph і AutoAgent гавораць менш, чым варта»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.
Крыніцы: Why No One Talks About LangChain, LangGraph Or AutoAgent
У гэтым керавану практычна перакладзена схема працы, якая практычна ад вялікага колькасці сыр'ёў да готовай сістэмы для тэмы: «Чаму ніхто не гаворыць пра LangChain, LangGraph чы AutoAgent». Акцэнт ставіцца на практычныя крокі, чыстае перакананне ў правільнасці дзействаў і код, які можна проста дадаць у рэпазітарый без падозроў на некальканоснае разуменне меты. Для загальнага адгледзення, перш чым зменіць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыёныя працавікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозроўваючы пра схованы стан. Неабходна аддакументаваць як правільны, так і альтэрнатыўны шляхы працы. Практыка перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай самага продукту, а не пасляднім элементам яго дапрацоўкі.
┌────────────────────────────────────────┐
│ POST-FRAMEWORK PARADIGM │
└──────────────────┬─────────────────────┘
│
┌─────────────┴─────────────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ PIPELINE │ │ HARNESS │
│ MODE │ │ MODE │
├──────────────┤ ├──────────────┤
│ • Bounded │ │ • Unbounded │
│ • Code-Run │ │ • Model-Run │
│ • Compute │ │ • Context │
│ Bound │ │ Bound │
└──────────────┘ └──────────────┘
Спіс зместу
Калі працуеце з таблыцай зместу, спачатку запісацеце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі спіс пераконтролюе чыстасць пазнейшых змян у кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неяксамоства должны вказываць на адну адпаведную адпавядальнасць, а не на заплутаны ланцужок задач. Зробіце пераконтроль пасля дорогіх крокаў. Сістэма вярнення праблем не должна зноў ставіць плату за той самы вызов LLM, калі аператар праканае пазнейшы вузел.
1. Класіфікацыя работ, якую ніхто не выканае
Калі працуеце над раздзелам 1. «Класыфікацыя работ, якіх ніхто не выконвае», спачатку запісайце умовы контракту: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэты этап як контракт межа данымі і перакананымі рэзультатамі. Дайце назвы элементам, задаце крытэрыі успеху і не падзволяйце частковаму завершэнню без паведамлення. Зробіце перапытку пасля дорогіх крокаў. Програма не должна зноў выклікаць той самы LLM-званак, калі аператар праказвае пазнейшы вузел.
Is the work decomposable into a finite set of
named states with deterministic transitions?
[ YES ] ──► PIPELINE MODE
• Invoice Extraction
• Document Classification
• Approval Routing
• KYC Verification
• Data Enrichment
[ NO ] ──► HARNESS MODE
• Coding Agents
• Research Agents
• Ephemeral Tool/Shell Use
• Legacy Code Migrations
• Open-Ended Investigation
2. Рэжым канвею: Калі работа можа быць разбітая
Калі працуеце з роздзелам 2. Рэжым каналу: калі задача можа быць раскладзена на часты, спачатку запісайце умовы выканання: неабяжлівыя даны, сігнал працэздання і тое, што выходзіць на частыя неудачы. Такі спіс дапамагае заліцварваць пазнейшыя змены ў кодзе. Запісвайце час выканання і кост токеноў або запытаў праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Зробіце контрольную пазнаку пасля дорогіх крокаў. Функцыя вярнення не должна зноў нарахоўваць косты той самай вызову LLM, калі аператар праканае пазнейшы вузел. Калі працуеце з роздзелам 2. Рэжым каналу: калі задача можа быць раскладзена на часты, спачатку запісайце умовы выканання: неабяжлівыя даны, сігнал працэздання і тое, што выходзіць на частыя неудачы. Такі спіс дапамагае заліцварваць пазнейшыя змены ў кодзе. Аддокументавайце як шлях успеху, так і шлях вярнення да нормы. Пракананні, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
[Input Data payload]
│
▼
┌──────────────┐
│ State 1 │ ──► [Structured LLM Call]
└──────┬───────┘ │
│ ▼
│ ┌──────────────┐
│ │ Validation │ ──► [Fail] ──► [Error State]
│ └──────┬───────┘
│ │ [Pass]
▼ ▼
┌──────────────┐
│ State 2 │ ──► [Structured LLM Call]
└──────┬───────┘ │
│ ▼
│ ┌──────────────┐
│ │ Validation │ ──► [Fail] ──► [Error State]
│ └──────┬───────┘
│ │ [Pass]
▼ ▼
[Final Success Output]
3. Рэжым Harness: калі працу нельга разбіць
- Рэжым Harness: калі працу нельга разбіць працюе наяўнейша, калі яго рассматрываць як вімерную паверхню. Запісайце адна ідэальная версія, адзін прыклад неудачы і прыметку па адкату перш чым расшырваць масштаб. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Адкройце інструменты з вузкімі схемамі і чысткімі пазначэннямі побачных наследкаў. Адпаведальныя за эксплуатацыю людзі павінны ведаць, якія вызовы мутуюць стан, перш чым автаматычна схваліць іх.
┌──────────────────────────────────────────────┐
│ HARNESS LAYER │
│ Executes container limits & system safety │
├──────────────────────────────────────────────┤
│ [Safety Hooks] [Budgets] [Time Constraints] │
├──────────────────────────────────────────────┤
│ ┌────────────────────────────────────────┐ │
│ │ MODEL OWNS LOOP │ │
│ │ Plan ──► Execute ──► Observe ──► Plan │ │
│ │ │ │
│ │ Native capabilities: │ │
│ │ • File / Sandboxed Shell access │ │
│ │ • Context-isolated subagent spawning │ │
│ │ • Skill discovery & loading │ │
│ └────────────────────────────────────────┘ │
└──────────────────────┬───────────────────────┘
▼
Result, Partial State, or Escalation
Формы неудач у рэжыме Harness
Рэжым «Harness Mode» працюе наяўнейша, калі яго розглядаць як вімерную паверхню. Зафіксавайце адна ідэальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу дзеяння. Разглядайце гэты этап як кантракт межа вхіднымі данымі і паверыжанымі выхіднымі рэзультатамі. Дайце назвы артыфактам, задаць крытэрыя успеху і не падзеўляйцеся частым, непূরным выкананням задач. Адкройце інструменты з вузкімі схемамі і чысткімі пазначэннямі побачных эфектаў. Адпаведальныя за эксплуатацыю должны ведаць, якія вызовы мутуюць стан, перш чым автаматычна схваліць іх.
4. Матэматычная рэальнасць обох рэжымаў
- Матэматычная рэальнасць обох рэжымаў работае наякша, калі яе спрыяваць як вімерную паверхню. Зберажыце адны ідэальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відкрытыя даныя пра косты з’являюцца рана, таму не будзе неспакою, калі працэс перэйдзе з дэмаверсіі ў спяльныя асяроддзя. Храніце стан графа ў простам і тыпаваным фармаце. Вярнутыя структуры дакументаў маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакшваюць продовжэнне працы пасля перарываў.
- Матэматычная рэальнасць обох рэжымаў работае наякша, калі яе спрыяваць як вімерную паверхню. Зберажыце адны ідэальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як успешны, так і вярнучыся паты. Перапрыбуткі, людзкія контрольны пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Рэжым канвею: Закон масштабавання часу інферэнцыі
Для рэжыма «Пайплайн»: Закон масштабавання часу аналізу павінен быць прыменены для вялікання або зменшэння часу вычыслення. Перад змянайом кода неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага крока і крэтарыяў завершэння. Аперацыйныя працовнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы з’ясаваць стан, які залішыўся непазначаным. Лепей выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнай працы павінна вказываць на адной-едзінай адпавядальнасці, а не на заплутаны пайплайн. Неабходна людская апрацоўка тых крокаў, якія выкорыстоўваюць грошы або зміняюць даны, якія вікорыстоўваюцца у працэсе вырабніцтва. Компіляцыйныя налашчэння не ёсць падставай для стверджэння, што працэс ўсё завершаны.
Рэжым «Харнесс»: Крывая заніжэння кантэксту
Для рэжыма Harness: у графіку занепаду якасці кантэкста неабяжна пазначыць вхідныя даны, адпаведальнага за крок і крытэрыі завершэння пры змяне коду. Аперацыйныя сістэмы должны магчымаць перзапуск кроку з вядомай точкі контролю без неабяжнага вычыслення скрытых станоў. Спрэцьвачыце гэты этап як кантракт межа вхіднымі данымі і падтверджанымі выходнымі рэзультатамі. Даць назвы артыфактам, пазначыць крытэрыі успеху і не прымаць тыхню частковую рэалізацыю. Автэнтыфікуйцеся на в’язку і парадэкстрыруйце правы пры апрацоўцы дадзеных. Толькі токэн-носільцы не ўтварае межы тэнанты.
P(Success)
▲
1.0├───────────┐
│ │
│ └───┐
0.5│ │
│ └─────────────► Context Size (Tokens)
0└───────────┬───┬─────────────
50k 100k
5. Форма Harness у 2026 году (план рэалізацыі)
Для пункта 5. Форма прыжка 2026 года (план рэалізацыі) неабяжна праказаць вхідныя даны, адміністратара крока і крэтэрыя завершэння пры зміне коду. Аперацыйныя спецыялісты должны магчымаць перзапуск крока з вядомай точкі контролю без неабяжнага вычыслення захаваных станоў. Запісваць часы выканання і вартасць токенаў або запытак праза функцыйнае рэзультат. Відкрытая візуабілізацыя вартасцей запобегае неспакоўным рахункам, калі траекторыя пераходзіць з дэмавай версіі ў спяльныя асяроддзя. Автэнтыфікацыя выканаць у шлюзе, а практычная автарызацыя — у плане дадзеных. Толькі токен-носіцель не ёсць межай арэндаванага прыемку. Для пункта 5. Форма прыжка 2026 года (план рэалізацыі) неабяжна праказаць вхідныя даны, адміністратара крока і крэтэрыя завершэння пры зміне коду. Аперацыйныя спецыялісты должны магчымаць перзапуск крока з вядомай точкі контролю без неабяжнага вычыслення захаваных станоў. Неабяжна задокументаваць як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай професыянальнага падходу.
канал, пазней не поліруваць.import logging
import os
from typing import Dict, Any, List
from pydantic import BaseModel, Field
# 2026 SDK abstractions (analogous across major provider frameworks)
from modern_agent_sdk import Agent, Skill, SubAgent
from modern_agent_sdk.hooks import PreToolUse, PostToolUse
from modern_agent_sdk.budgets import TokenBudget, StepBudget, WallTimeBudgetlogger = logging.getLogger("EnterpriseHarness")# 1. Skills are dynamically loaded from disk, not declared inline.
# Each skill is an isolated directory containing metadata (SKILL.md),
# runtime scripts, and specialized sandbox requirements.
SKILLS_DIR = "./skills"
all_skills = Skill.load_directory(SKILLS_DIR)# 2. Safety Hooks: Gateway controls running in the host environment.
# These run on the host *before* any action is committed inside the sandbox.
def pre_tool_execution_hook(context: Dict[str, Any], tool_call: BaseModel) -> PreToolUse:
"""
Validates security boundaries and consumption limits before the model executes a tool.
"""
# Hard safety boundary: Prevent destructive shell operations
if tool_call.name == "execute_shell":
command = tool_call.args.get("command", "")
if any(bad_cmd in command for bad_cmd in ["rm -rf", "chmod", "wget"]):
logger.error(f"Execution blocked: Blocked command detected: '{command}'")
return PreToolUse.deny("Destructive shell operations are prohibited in this sandbox.")
# Budget check: Halt network tools if API budget is running low
if tool_call.name == "network_request":
if context["budget"].remaining_tokens < 15_000:
return PreToolUse.deny("Insufficient remaining token budget to execute external network calls.")
logger.info(f"Approved tool call: {tool_call.name}")
return PreToolUse.allow()def post_tool_execution_hook(context: Dict[str, Any], tool_call: BaseModel, result: Any) -> PostToolUse:
"""
Evaluates tool execution outcomes to detect systemic failure loops.
"""
# Detect repeating error patterns to prevent infinite execution loops
if result.is_error and context["consecutive_failures"] >= 3:
logger.warning("System detected a repeating error loop. Forcing escalation.")
return PostToolUse.escalate("Agent is stuck in an execution failure loop.")
return PostToolUse.continue_loop()# 3. Context Isolation via Subagents
# To prevent context poisoning, the parent agent never sees the child's
# scratchpad or intermediate execution steps—only the final verified output.
def spawn_research_subagent(target_query: str) -> str:
"""
Spawns a specialized subagent in a separate context window to perform a task,
keeping the parent's working context completely clean.
"""
logger.info(f"Spawning isolated subagent for query: '{target_query}'")
subagent = SubAgent(
model="claude-sonnet-4-5",
skills=all_skills.filter_by_tag("research"),
budgets=[
TokenBudget(max_input_tokens=40_000, max_output_tokens=8_000),
StepBudget(max_steps=12)
]
)
# Run task and return only the clean, compiled summary
output = subagent.execute(task=target_query)
return output.summary# 4. Assembling the Harness Container
# The harness manages the execution sandbox, enforces constraints, and handles state.
agent_harness = Agent(
model="claude-opus-4-7",
skills=all_skills,
subagent_factories={
"researcher": spawn_research_subagent
},
hooks={
"pre_tool_use": pre_tool_execution_hook,
"post_tool_use": post_tool_execution_hook
},
budgets=[
TokenBudget(max_total_tokens=600_000),
StepBudget(max_steps=100),
WallTimeBudget(max_seconds=1800) # 30-minute hard cap
],
persistence_store="./.agent_state_db", # State is persisted per step to survive restarts
escalation_handler=lambda issue: open_human_review_ticket(issue)
)# 5. Execution
if __name__ == "__main__":
task_input = "Migrate this legacy Django 4.2 codebase to FastAPI with 100% endpoint parity."
try:
# The agent loop is entirely internal to the model.
# There is no manual 'while True' in our orchestration code.
result = agent_harness.run(task=task_input)
logger.info(f"Task completed. Result: {result.status}")
except Exception as e:
logger.critical(f"Harness terminated execution: {e}")
Ключовыя разлікі з фрэймворкамі Legacy 2024:
Калі працуеце над Ключовымі разлікамі з фрэймворкамі Legacy 2024:, спачатку запісайце умовы контракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс контролю дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына невыпання павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не павінна знову сцягваць плата за той самы вызов LLM, калі аператар праказвае пазнейшы вузел.
6. Архітэктурныя суперсечанні: застосаванне непадходзячага падходу да непадходзячай проблемы
Калі працюеце над раздзелам 6. «Архітэктурныя каліцтва: падзеўканне няправільнага фармата на неправільную проблему», спачатку запісайце контракт: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэты этап як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць правіла пераканання успеху і адмовіцеся ад мовчазнага частковага завершэння. Зробіце пераконтроўку пасля дорогіх крокаў. Програма не должна занова ставіць плату за той самы вызыв LLM, калі аператар праказвае пазнейшы вузел.
┌─────────────────────────────────────────────────────┐
│ ARCHITECTURAL MATCH │
├──────────────────────────┬──────────────────────────┤
│ PIPELINE WORKLOAD │ HARNESS WORKLOAD │
├──────────────────────────┼──────────────────────────┤
│ • Goal: Exact Extraction │ • Goal: Code Refactoring,│
│ & Routing │ Agent Tasks, Migration │
│ │ │
│ • WRONG: Harness │ • WRONG: Pipeline │
│ (High latency, costly, │ (FSM State explosion, │
│ non-deterministic) │ inflexible schema) │
│ │ │
│ • RIGHT: Pipeline FSM │ • RIGHT: Sandbox Harness │
│ (Predictable transitions)│ (Dynamic loop execution)│
└──────────────────────────┴──────────────────────────┘
Случай 1: Канфлікт у паіплайне (занадта сложная архітэктура)
Калі працуеце над Кэсам 1: Адказка «Harness-on-Pipeline» (Занадта сложная рэалізацыя)), спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковы адказ. Такі чарт дапамагае заліцвачыць пазнейшыя змены ў кодзе. Запісвайце час выканання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Запішыце назву інструмента, хэш аргументаў, час затрымкі і рэзултат кожнага вызову. Без такога лёгкага следу дэбагаванне агента губіць гады часу. Калі працуеце над Кэсам 1: Адказка «Harness-on-Pipeline» (Занадта сложная рэалізацыя)), спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковы адказ. Такі чарт дапамагае заліцвачыць пазнейшыя змены ў кодзе. Аддокументавайце як «шчаслівы» шлях, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам.
Случай 2: Памылка «Pipeline-on-Harness» (недастатковая інжынерыя)
Случай 2: Памылка «Pipeline-on-Harness» (недастатковая інжынерыя» лепша аналізаваць як вімерную характэрыстыку. Перш чым расшырваць масштабы, зафіксавайце адны ідэальны прыклад працы, адны прыклад неудачы і запіс пра неабяцковыя дзеяння. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, неудача должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Іспользуйце інструменты з вузкімі схемамі і чысткімі пазначэннямі побачных наследкаў. Адпаведальныя за эксплуатацыю людзі павінны ведаць, якія вызовы моцна зменяюць стан сістэмы, перш чым автаматычна ўзяць рашэнне.
Як выбраць правільную архітэктуру
Як выбраць правільную архітэктуру — гэта практыка працюе найкрашча, калі яе рассматрываць як вімерную плошчу. Запісайце адны ідэальны прыклад працы, адны прыклад неудачы і прыметку па поверненню да пачатковага стану пры розшырэнні масштаба. Рассматрывайце гэты этап як кантракт межа вхіднымі данымі і пераканаленымі выходнымі рэзультатамі. Дайце назвы всім элементам, задаце крытэрыя успеху і не падзейвайце частковае завершэння задання без паведамлення. Храніце стан графа ў простым і тыпаванам фармаце. Вкладаныя структуры даных маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакоююць продовжэнне выканання пасля перэрываў.
7. Слой навыкаў: адкрыты стандарт 2026 года
- Слоўнасклад: Адкрыты стандарт 2026 года працюе наякшым чынам, калі яго розглядаюць як вімерную паверхню. Зафіксавайце адны ідэальны прыклад працы, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расшырваць сферу дзеяння. Запісвайце часы выканання і вартасць токеноў або запытак па боку ад рэзультатаў функцыяналізму. Візуабельнасць вартасцей з самага пачатку запобегае неспакою з боку расчытанняў, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўысы. Зберагуйце стан графа простым і з усіма неабходнымі тыпамі дадзеных. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакшваюць продовжэнне працы пасля перэрываў.
- Слоўнасклад: Адкрыты стандарт 2026 года працюе наякшым чынам, калі яго розглядаюць як вімерную паверхню. Зафіксавайце адны ідэальны прыклад працы, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расшырваць сферу дзеяння. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не етапамі далейшай доўнелівання.
skills/
├── document_parser/
│ ├── SKILL.md <-- Human/Model readable metadata & capabilities
│ ├── run.py <-- The execution logic running inside the sandbox
│ └── reference_rules.pdf <-- Domain-specific constraints and edge-cases
8. Заключэнне: Новая інжынерная праця
8. Заключэнне: Для новай інжынерскай працы пярэд змінайцем код неабходна ясная дэфініцыя вхідных даных, адпаведальнага за кожны крок і крэтарыяў завершэння. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан сістэмы. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнага рэзультата должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Неабходна людская апраўда для тых крокаў, якія выкалічваюць грошы або зменяюць даны пра вырабніцтва. Компіляцыйныя налашчэнні не ўзроўнаўцяюцься з пачатковай цэласнасцю бізнес-процэсаў.
Чэк-ліст для аперацый
Чэк-ліст для аперацый работае наўзям лепш, калі яго спрыймаюць як мерыемую структуру. Перш чым расшырваць сферу дзеяння, неабходна зафіксаваць адны ідэальны прыклад працы, адну сітуацыю нехарактэрнага рэзультата і прыметкі па адкатаванню.
Зберагаюце канфігурацыю пазначкай за межамі коду прыемліка. Файлы сяродавішчыны, храненні секрэтных дадзей і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аўдыт без неабяжнага чытання всей структуры.
Зберагаюце стан графа ў простам і тыпаваным фармаце. Вярнутыя блокі маскуюць інфармацыю пра тое, які вузел запісаў якое поле, і спакоююць працэс пасля перарываў.
Калі дозволяе бюджэт, дадзейце тэст на пераверканне крытычнага маршруту ў сістэме CI з вікорыстанням фіксатываў, а не рэальных платных API.
Документаваць трэба як штатны, так і патроныя маршруты. Перапрыбуткі, людзкія контралі і обработка некорэктных дадзей ёсць часткай продукту, а не пасляднім дапрацоўкам.
Зберагаюце стан графа ў простам і тыпаваным фармаце. Вярнутыя блокі маскуюць інфармацыю пра тое, які вузел запісаў якое поле, і спакоююць працэс пасля перарываў.
Перш чым запускаць стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для крытычнага шляху і паказвце способы абяроны. У спільных срэдах неабходны ліміты частоты запытанняў, пераконтроўкі прав на выкарыстоўванне рэсурсаў і чысткі власнік для змены секрэтных даных. Валіце простую надзейнасць працы над крэатывнымі, адзінразовымі дамах.
Прыметкі для 9f921d978495: не кладзіце ключы прадаўцаў у рэпазітарый, задаце верхнюю межу токенав на сесію і зберагачыце транскрыпты празаўседы ў фіксаты для ацэнкі, каб пазнейшыя замены мадэляў заставаліся пораўнанымі.