Галоўная / Артыкулы

Практычныя нататкі: ад патэрна да канвеера — рэалізацыя Agentic Cortex

Практычны разбор тэмы «ад патэрна да канвеера: рэалізацыя Agentic Cortex»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.

Выдавец: REACTAPP.TOP12 хв чытання2695 слоў

Крыніцы: From Pattern to Pipeline: Implementing the Agentic Cortex with LangGraph and OPA

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

Агляванне архітэктуры:

Этап адміністрацыі архітэктуры працюе наявнасць калі яго розглядаць як вімерную плошчу. Запісаце адна ідэальная версія, адзін случай неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты працы графа павінны быць простымі і з адазначанням тыпа. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць працу пасля перэрываў.

Ланцюг задач: шасць вузлаў, адны StateGraph

Этап «Pipeline Six Nodes» працюе найкрашча, калі яго розглядаць як вімерную паверхню. Зафіксавце адзін ідэальны прымер, адзін прыклад неудачы і запіс працэў павернення да пачатковага стану пры расшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задачы. Храніце стан графа ў простам і тыпаваным фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакойваюць працу пасля перарываў.

class CortexState(TypedDict, total=False):
    domain_outputs: Dict[str, DomainOutput]
    normalized_recommendations: List[NormalizedRecommendation]
    cross_domain_conflicts: List[CrossDomainConflict]
    policy_decisions: List[PolicyDecision]
    resolved_conflicts: List[CrossDomainConflict]
    sentinel_check: Optional[SentinelCheckResult]
    final_recommendations: List[NormalizedRecommendation]
workflow = SateGraph(CortexState)
workflow.add_node("collect_domains", domain_collector_agent)
workflow.add_node("evaluate_mesh", mesh_evaluator_agent)
workflow.add_node("apply_policies", policy_engine_agent)
workflow.add_node("resolve_conflicts", conflict_resolver_agent)
workflow.add_node("sentinel_check", sentinel_loop_agent)
workflow.add_node("generate_report", report_generator_agent)workflow.set_entry_point("collect_domains")
workflow.add_conditional_edges("collect_domains",
    should_continue_after_collection,
    {"evaluate_mesh": "evaluate_mesh", "end": END})

Node 1: Збірчык домэнаў

Этап Node 1 The Domain працюе найкрашча, калі яго спрыяваць як мерыемую паверхню. Зберагучы адна ідэальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць масштабы. Запісвайце часы выканання і вартасць токенаў або запытак па боку ад функцыйнальных рэзультатаў. Візуабельнасць вартасцей з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульную. Храніце стан графа у простам і тыпаваным фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакштуюць продовжэнне працы пасля перэрываў. Этап Node 1 The Domain працюе найкрашча, калі яго спрыяваць як мерыемую паверхню. Зберагучы адна ідэальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць масштабы. Документавайце як успішны, так і вярнэчы паты. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

AGENT_A_URL = "http://localhost:8001"
AGENT_B_URL = "http://localhost:8002"

Node 2: Апрацоўкавальнік сеткі, дзе выявляюцца канфлікты

Для этапу Node 2 The Mesh неабходна пазначыць вхідныя даны, адпаведальнага за выкананне кроку і крытэрыя завершэння прычым змінам у кодзе. Аперацыйныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не прабуючы спадарацца пра схованы стан. Валідзіце маленькія, тэставаныя елементы замест амаль неконтрольваных скрыптав. Калі крок не выконваецца, прычына нехацякавага рэзультата павінна вказываць на адзін конкрэтны аспект, а не на заплутаны ланцюг задач. Заставляйце людзей апрацоўваць тыя крокі, якія ведуць да вітрачання грошаў або змены продакцыйных дадзеных. Компіляцыйна наладка не ёсць гарантыяюю цэліснасі бізнес-працэсаў.

{
    "conflict_type": "budget_reliability_tradeoff",
    "severity": "HIGH",
    "resource_id": "resource-x",
    "recommendation_a": {"domain": "domain_a",
        "title": "Decommission idle resource-x"},
    "recommendation_b": {"domain": "domain_b",
        "title": "Enable redundancy for resource-x"}
}

Рэйтынг сеткі = (Доверлівасць × 100) + Бонус за адзёртнасць — Штрафы за канфлікты

Для стадзіі Доверлівасць × у рэйтынгу сеткі неабяжна практычна апранава інпутаў, вялікага кантролера этапу і крэатарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымае перадзеўсці этап з вядомага пункту контролю без адгадванняя схованага стану. Спрыятлівае ставленне да гэтай стадзіі як да кантракту межа імпутамі і пасвярджанымі аўтадатамі. Называйце артыфакты, практычная апранава крэатарыяў успеху і адмовляйцеся ад тых падчасконечных рэшэнняў, якія не адзначаюцца. Забезпечыце людскія апраўдкі для тых кантэкстаў, дзе выдвайуцца грошы або змінююцыся даныя працы. Компіляцыйныя наладкі не ўзроўнаваліся з практычная апранаваю бізнесу.

Узел 3: Двігун політык OPA, дэтэрміністычная кантроль

Для этапы OPA у Node 3 неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў запобегае неспадзяваным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спадзеленую. Апавярнюйце людскія апраўды для тых крокаў, якія вітрачаюць грошы або зменяюць даны у працэсе. Працэс складання коду не ўзначае повнайшага адпрацоўвання продукту з точкі зору бізнеса. Для этапы OPA у Node 3 неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людскія апраўды і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не елементамі, якія дадаюцца пазней.

Архітэктура OPA Sidecar

Калі працюеце над стадзіяй архітэктуры OPA Sidecar, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі спіс пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок нявыпанае, прычына нявыпання павінна вказваць на адзіну абяжлівасць, а не на заплутаны ланцужок задач. Зрабіце перапактаванне пасля дорогіх крокаў. Програма для продакцыі не павінна зноў выклікаць той самы кал дзеяння LLM, калі аператар прабуе зноў выконаць пазнейшы вузел.

package cortex.recommendation
decision := result if {
    _is_destructive_action(input.recommendation.title)
    _is_critical_resource(input.recommendation.resource_id,
                          input.context)
    result := {
        "decision": "deny",
        "reason": "Policy prevents decommissioning
                   of critical resource",
        "rule_name": "protect_critical_resources"
    }
}
package cortex.conflict
# Budget vs Reliability on critical resources gets policy override
resolution := result if {
    input.conflict.conflict_type == "budget_reliability_tradeoff"
    _is_critical_resource(input.conflict.resource_id, input.context)
    result := {
        "strategy": "policy_override",
        "winner": _higher_ranked_domain(...),
        "rule_name": "budget_reliability_critical_resource"
    }
}# Resource Contention resolved by domain priority for unequal ranks
resolution := result if {
    input.conflict.conflict_type == "resource_contention"
    domain_rank[...] != domain_rank[...]
    result := {
        "strategy": "domain_priority",
        "winner": _higher_ranked_domain(...),
        "rule_name": "resource_contention_priority"
    }
}# Opposing Recommendations on critical resources are escalated
resolution := result if {
    input.conflict.conflict_type == "opposing_recommendations"
    _is_critical_resource(...)
    result := {
        "strategy": "escalate",
        "winner": "none",
        "rule_name": "opposing_critical_escalate"
    }
}
package cortex.priority
domain_rank := {
    "domain_a": 1,
    "domain_b": 2,
    "domain_c": 3,
    "domain_d": 4,
    "domain_e": 5
}
services:
  opa:
    image: openpolicyagent/opa:latest
    command: run --server --addr=0.0.0.0:8181 /policies
    volumes:
      - ./src/policies:/policies

Node 4: Распрацоўка суперсечак, чатырнаццае этапа

Калі працуеце над этапам Node 4 «Распрацоўка суперсечак», спачатку запішыце угоду: неабходныя даныя, сігнал пра успех і тое, што выходзіць у разе частковай нявыполненасці. Такі спіс контролю дапамагае залічыць пазнейшыя змены ў кодзе. Спрыймайце гэты этап як угоду між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы элементам, задаце крытэрыя успеху і не падтрымайце частковае завершэння без паведамлення. Зробіце перапытку пасля дорогіх крокаў. Сістэма вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар праказвае пазнейшы вузел.

Іерархія чатырнаццаеэтаповай распрацоўкі суперсечак

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

{
"winner": "a" | "b" | "both",
 "reasoning": "...",
 "confidence": 0.0-1.0
}

Node 5: The Sentinel Loop, Detecting Drift Between Cycles

Этап Node 5 The Sentinel працюе наякрашча, калі яго розглядаць як вімерную паверхню. Зафіксавце адна «золатая» копія даных, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць сферу дзеяння. Валіце малыя, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты працы графа павінны быць простымі і з адначытаемым тыпам. Вкладзеныя структуры даных маскуюць інфармацыю пра тое, кантакты які нод пісаў кожны поле, і спакоююць продовжэнне працы пасля перэрываў.

change_percent = (current - previous) / abs(previous) * 100
if abs(change_percent) > DRIFT_THRESHOLD_PERCENT:
    drift_status = "WORSENED" if change_percent < 0
                   else "DRIFTED"

Node 6: Генератор атласа

Этап Node 6 «Генератор атласа» працюе найкрашча, калі яго розглядаць як меркавыя плошча. Запісайце адны ідэальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Разглядайце гэты этап як кантракт межа вхіднымі данымі і пераканаленымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і не прабуйце завершыць заданне часткова без адпаведнага падтверджэння. Храніце стан графа ў простам і тыпаваным фармаце. Вкладныя блокі маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакоююць працэс пасля перарываў.

Полны сцэнарый дамаў

Этап «Полная сцэнарыя дама» працюе найкрашча, калі яго спрыяваць як меравальную плошчу. Зберажыце адны ідэалны прыклад працы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваце сферу дзейнасці. Запісвайце часы выканання і вартасць токена або запіту разам з функцыональнымі рэзультатамі. Відразлівае прадстаўленне вартасцей запобегае неспакою з боку расчыткаў, калі працэс пераходзіць з дама-серэдавыша ў спяльныя серэдавышы. Храніце стан графаў у простам і тыпаваным фармаце. Вярнутыя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакшваюць продыранне далей пасля перарываў. Этап «Полная сцэнарыя дама» працюе найкрашча, калі яго спрыяваць як меравальную плошчу. Зберажыце адны ідэалны прыклад працы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваце сферу дзейнасці. Дакументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

Выкананне

Для этапы Running It неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры перадзеі коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрызуе адзін конкрэтны аспект, а не заплутаны працэс. Неабяжна людская апраўда для тых крокоў, якія выкарыстоўваюць грошы чы выконваюць змяны ў продакшн-даных. Компіляцыйныя налаадкі не ўзначаюць павноты бізнес-процэса.

git clone https://github.com/kyndryl-cto/agentic-cortex.git
cp .env.example .env
# Fill in Azure OpenAI credentials
docker-compose up
curl -X POST http://localhost:8000/assess \
  -H "Content-Type: application/json" \
  -d '{"subscription_ids": ["sub-001"],
       "tenant_id": "tenant-001"}'
{
"node": "evaluate_mesh", "status": "processing",
 "agent": "mesh_evaluator", "timestamp": "..."
}
{
"node": "apply_policies", "status": "processing",
 "agent": "policy_engine", "timestamp": "..."
}

Пераход на прымэтную експлуатацыю: дадзенне домэнаў без змены практыкы

У стадзіі дадзення домэнаў для пераходу на прымэтную експлуатацыю неабходна практычна апісаць вхідныя даны, адпаведальнага за кожны крок і крытэрыя завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перайсці гэты крок з вядомага пункта контролю, не прымушаныя здогадвацца пра схованы стан. Цю стадзію трэба спрыяць як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назваць всі ствароўваныя элементы, апісаць крытэрыя успеху і не падтрымляць тыхню частковую завершэннасць. Пры кроках, якія выкалічваюць грошы або зменяюць даны прымэтнай експлуатацыі, неабходна людская апраўда. Кампіляцыйныя наладкі не ёсць адпаведнікамі пачатковай цэлесапраўленасці працы.

Стварэнне спецыяльных правілаў Rego для адпаведнай карыстоўніцкай палітыкі

У стадыі создання спецыяльных правіл Rego неабходна прадзефінаванне вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю без неабходнасці адгадвання захаванага стану. Запісваюць час выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульнаныя сераверы. Апраўленне людзьмі неабходна для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Компіляцыйныя налашчанні не ўсега гарантуюць абдыяковасць продукту. У стадыі создання спецыяльных правіл Rego неабходна прадзефінаванне вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю без неабходнасці адгадвання захаванага стану. Неабходна аддзеўнаваць дакументацыю пра стандартны і варыянтны паты выканання. Перапрыбуткі, людзькія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

ш.

decision := result if {
    "database" in lower(input.recommendation.resource_type)
    _is_destructive_action(input.recommendation.title)
    not _has_recovery_plan(input.recommendation.resource_id,
                           input.context)
    result := {
        "decision": "deny",
        "reason": "Cannot decommission database without
                   verified recovery plan",
        "rule_name": "protect_databases"
    }
}
decision := result if {
    input.recommendation.estimated_savings > 10000
    result := {
        "decision": "escalate",
        "reason": sprintf("Projected savings $%.0f exceeds
                  threshold and requires approval",
                  [input.recommendation.estimated_savings]),
        "rule_name": "high_impact_approval"
    }
}

Актывацыя ціклу Sentinel за дапамою монітарынгу воблака

Калі працюеце над стадзіяй актывацыі ціклу Sentinel, спачатку запісайце умовы: неабяжлівыя даныя, сігнал успеху і тое, што выканаецца у разе частковага абярэння. Такі спіс контролю дапамагае заліцвачыць змяны ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок абярэнняе, абярэнне павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Стварайце контрольныя пункты пасля дорогіх крокаў. Програма не павінна зноў выканаць той самы вызов LLM, калі аператар пракушае выкананне наступнага вузла.

Інтэграцыя ціклу Sentinel і монітарынгу воблака

Калі працюеце над этапамі Sentinel Loop і Cloud, спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс перакладзець пазнейшыя змены коду ў правільны направленні. Спрэцьвуйце да гэтага этапу як да угоды межа данымі і перакананымі выходамі. Дайце назвы элементам, задаце крытэрыі успеху і не падзволяйце частковаму завершэнню без паведамлення. Зробіце перапытку пасля дорогіх крокаў. Програма для продакцыі не должна зноў ставіць плату за той самы вызов LLM, калі аператар праказвае празбор пазнейшага вузла.

Візуабельнасць: Адстэпавае відстэжэнне пуцыку цэлага рашэння

Калі працуеце над стадзіяй «Observability Tracing the Full», спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі спіс дапамагае заліцварваць пазнейшыя змены ў кодзе. Запісвайце час выканання і кост токена або запыту разам з рэзультатамі функцыйнасці. Відразлівая ведамасць пра косты з’яўляецца перашкодай неспакою, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Зробіце контрольную паўзу пасля дорогіх крокаў. Функцыя вярнення не павінна знову стаўляць рахунак за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце над стадзіяй «Observability Tracing the Full», спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі спіс дапамагае заліцварваць пазнейшыя змены ў кодзе. Дакументавайце як «шчаслівы» шлях, так і шлях вяснавання. Прабулі запуску, людзкія контролы і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

{
    "decision_id": "pd-001",
    "recommendation_id": "rec-001",
    "policy_name": "protect_critical_resources",
    "result": "deny",
    "reason": "Policy prevents decommissioning
               of critical resource",
    "evaluated_at": "2026-03-12T14:23:01Z"
}
{
    "conflict_id": "cf-001",
    "resolution_strategy": "POLICY_OVERRIDE",
    "resolved_by": "policy",
    "resolution_outcome": "Resolved by policy:
        'protect_critical_resources'
        denied 'Decommission idle resource-x'"
}

Аптакты архітэктуры

Этап Аптактаў архітэктуры работае наяўней, калі яго спрацоўваюць як мерыемую паверхню. Запісаце адна «золатая» версія, адын прыклад неудачы і заўважэння па поверненню да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі які-небудзь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Рэзультаты графа павінны быць простымі і з адзінаковым тыпам дадзеных. Вярсткаваныя блакі маскуюць, калькі вузел запісаў калькі поль, і спакойнае продажчэнне працы зупіняецца пасля перарываў.

Чэк-ліст для эксплуатацыі

Для этапа Чэк-ліста для эксплуатацыі практычна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрэўчы ў схованым стане.

Зберагаеце настройкі зовні коду прыемліка. Файлы сераўнавання, сховішчы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аўдыт без неабяжнага чытання всіх элементаў сістэмы.

Неабяжна ўключыць людзкія празгляды для тых элементаў, якія вітрачаюць грошы або зменяюць даныя ў працэсе вырабоцтва. Падключэння на этапы компілявання не ўзначае повнайшага адпрацоўвання бізнес-функцыйяў.

Напісце кароткі посібнік: як зменяць кантрольныя ключы, як спрачыслаць чэргу заданняў, як вярнуць стан да пярэдніх настройкаў.

Дакументаваць трэба як шляхы правільнай працы, так і шляхі вярнення да нормальнага стану. Перапрыбуткі, людзкія празгляды і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не дадатковым элементам для пасляднейшага доўрабачання.

Неабяжна ўключыць людзкія празгляды для тых элементаў, якія вітрачаюць грошы або зменяюць даныя ў працэсе вырабоцтва. Падключэння на этапы компілявання не ўзначае повнайшага адпрацоўвання бізнес-функцыйяў.

Перш чым запускаць стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для крытычных ланцаў і паказваце спосабы атрыбуцыі. У спадзяльных срэдах неабходны ліміты частоты запытоў, пераканання ў належнасці тэнантам і чысткі власнік для ротацыі секрэтных даных. Валіце надзейнасць працы над красавімі разовымі дэманстрацыямі.

Прымечанне для 90ddb9951707: не кладзіце ключы прадаўцаў у рэпазітарый, задаце верхнюю межу токенаў на сесію і зберагачыце транскрыпты празаўседы ў фікстурах eval, каб пазнейшыя замены модэляў заставаліся порównанневымі.