Галоўная / Артыкулы / Практычныя прытамулкі: Чаму ніхто не говорыць пра LangChain, LangGraph чыста AutoAgent

Практычныя прытамулкі: Чаму ніхто не говорыць пра LangChain, LangGraph чыста AutoAgent

Практычныя прыказкі: чаму ніхто не говорыць пра LangChain, LangGraph чыста AutoAgent: контракты, перакантрольваннія і спецыяльныя слоты для коду, якія можна выкарыстоўваць командам, якія реалізуюць гэты патэрн.

2911 слоў

У гэтым керавану практычна перакладзена схема працы, яка практычна ад вялікага колькасці сыр'ёў да готовай системы для тэмы: «Чаму ніхто не гаворыць пра 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: калі роботу нельга разбіць

  1. Режым 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. Матэматычная рэальнасць обох режымаў

  1. Матэматычная рэальнасць обох режымаў работае наякша, калі яе спрыяваць як вимерную паверхню. Зберажыце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відкрытыя данні пра косты з’являюцца рана, таму не будзе неспакою, калі процес перейдзе з дэмаверсіі ў спяльныя среды. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры дакументаў маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продовжэнне роботы пасля перарываў.
  2. Матэматычная рэальнасць обох режымаў работае наякша, калі яе спрыяваць як вимерную паверхню. Зберажыце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як успешны, так і вярнучыся паты. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

Режым канвею: Закон масштабавання часу інферэнцыі

Для режыма «Пайплайн»: Закон масштабавання часу аналізу павінен быць прыменены для вялікання або зменшэння часу вычыслення. Перад змянайом кода неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага крока і крэтарыяў завершэння. Аперацыйныя працовнікі павінны магчымаецца перзапускаць крок з вядомага пункта контролю, не спрабоўваючы з’ясаваць стан, які залишыўся непазначаным. Лепей выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнай роботы павінна вказываць на адной-едзінай адпавядальнасці, а не на заплутаны пайплайн. Неабходна людская апрацоўка тых крокаў, якія выкорыстоўваюць грошы або зміняюць даны, якія викорыстоўваюцца у працэсе вырабніцтва. Компіляцыйныя налашчэння не є падставай для стверджэння, што процес ўсё завершаны.

Режым «Харнесс»: Крывая заніжэння кантэксту

Для режыма 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 года

  1. Слоўнасклад: Адкрыты стандарт 2026 года працюе наякшым чынам, калі яго розглядаюць як вимерную паверхню. Зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і прыметку па адвярненню змян перш чым расширваць сферу дзеяння. Запісвайце часы виконання і вартасць токеноў або запытак па боку ад рэзультатаў функцыяналізму. Візуабельнасць вартасцей з самага пачатку запобегае неспакою з боку расчытанняў, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўысы. Зберагуйце стан графа простым і з усіма неабходнымі типамі дадзеных. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продовжэнне роботы пасля перерываў.
  2. Слоўнасклад: Адкрыты стандарт 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: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенав на сесію і зберагачыце транскрыпты празаўседы ў фіксаты для ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.