Галоўная / Артыкулы / Практычныя прытамулкі: ваш Terraform Agent, верагацельна, паловы часы працюе некалькі.

Практычныя прытамулкі: ваш Terraform Agent, верагацельна, паловы часы працюе некалькі.

Практычныя прыказкі: ваш Terraform Agent, верагацей, памыліваеся паловы час: контракты, перакантрольваннія та месцы для коду для команд, якіе викорыстоўваюць гэты патэрн.

3334 слоў

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

agent/       the deepagents Terraform agent, its tools, prompts, and skills
eval/        the verifier, 38 tasks with Rego policies, and the benchmark
optimizer/   the DSPy program, metric, and GEPA compile

Агент, з якім мы прычыняемся

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

from deepagents import create_deep_agent

agent = create_deep_agent(
    model="openrouter:openai/gpt-5.6-luna",
    tools=[provider_schema, write_terraform, validate_config],
    system_prompt=SYSTEM_PROMPT,
    skills=["./agent/skills"],     # SKILL.md — the thing we'll optimize
)

Як на самай працоўвае неудача

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

  encryption {
    kms_key_name = var.encryption_key_name
  }

  lifecycle_rules {
    ...
$ tofu validate

Error: Missing required argument
  on main.tf line 18, in resource "google_storage_bucket" "terraform_state":
The argument "default_kms_key_name" is required, but no definition was found.

Error: Unsupported argument
  on main.tf line 19, in resource "google_storage_bucket" "terraform_state":
An argument named "kms_key_name" is not expected here.

Error: Unsupported block type
  on main.tf line 22, in resource "google_storage_bucket" "terraform_state":
Blocks of type "lifecycle_rules" are not expected here. Did you mean
"lifecycle_rule"?
$ uv run python -m agent.run --task eval/tasks/backend-var-interpolation.json

task      backend-var-interpolation (opentofu)
model     openai/gpt-5.6-luna  engine=deepagents
files     main.tf, variables.tf
tools     {'write_terraform': 2, 'validate_config': 1, 'validate_pass': 1}
elapsed   56602ms

Оценяльны прыемлік да фрэймворку: Terraform сама оцінюе свою роботу

The A Scorer Before a stage работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Дакументаваць трэба як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дорабачання. Стаўкі графа трэба залічваць у простым формате. Вярнутыя блокі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перарываў. The A Scorer Before a stage работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Спрыявайце гэты ўрадок як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падтрымвайце беззвучнае частковае завершэння роботы.

package main
import rego.v1

deny contains "bucket must use a customer-managed KMS key" if {
    some name
    bucket := input.resource.google_storage_bucket[name][_]
    not bucket.encryption
}
$ cd eval/tasks && ./check_policies.sh
  ...
  ✓ vpc-subnet-firewall              good=0 bad=2

✅ 38/38 policies verified in both directions

Адпрацоўка DSPy

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

uv add dspy
uv sync

Фаза 1: Програмаванне

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

import dspy

class AuthorConfiguration(dspy.Signature):
    """Write a complete, valid Infrastructure-as-Code configuration."""

    request: str = dspy.InputField(
        desc="What the user wants built, in natural language."
    )
    target: str = dspy.InputField(
        desc="Which dialect to target: 'terraform' or 'opentofu'. These have "
             "diverged — code targeting the wrong one will fail validation."
    )
    config: str = dspy.OutputField(
        desc="The complete configuration as fenced HCL blocks. Start each block "
             "with a comment naming its file, e.g. '# main.tf'."
    )
dspy.inspect_history(n=1)
System message:

Your input fields are:
1. `request` (str): What the user wants built, in natural language.
2. `target` (str): Which dialect to target: 'terraform' or 'opentofu'. ...
Your output fields are:
1. `config` (str): The complete configuration as fenced HCL blocks. ...

[[ ## request ## ]]
{request}

[[ ## target ## ]]
{target}

[[ ## config ## ]]
{config}

In adhering to this structure, your objective is:
        Write a complete, valid Infrastructure-as-Code configuration ...
generate = dspy.Predict(AuthorConfiguration)             # one shot
generate = dspy.ChainOfThought(AuthorConfiguration)      # reason first
generate = dspy.ReAct(AuthorConfiguration, tools=[...])  # run a tool loop
from agent.tools import make_tools            # the deployed agent's tools

class TerraformAuthoringAgent(dspy.Module):
    def __init__(self, seed_instruction: str):
        super().__init__()
        # Seed the SIGNATURE before constructing ReAct, so DSPy appends its
        # tool protocol to your instruction instead of replacing it.
        seeded = AuthorConfiguration.with_instructions(seed_instruction)
        lc_tools = make_tools(work_dir, binary="terraform", stats={})
        self.react = dspy.ReAct(
            seeded,
            tools=[dspy.Tool(t.func, name=t.name, desc=t.description)
                   for t in lc_tools.values()],
            max_iters=10,
        )

    def forward(self, request: str, target: str = "terraform"):
        return self.react(request=request, target=target)

Паўторны этап: Ацэнка

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

dataset = [
    dspy.Example(
        task_id=t["id"],
        request=t["prompt"],
        target=t["target"],
        rego=t["rego"],                # path to this task's policy
    ).with_inputs("request", "target")
    for t in tasks
]
def verify_metric(example, prediction, trace=None, pred_name=None, pred_trace=None):
    """Score with the SAME verifier that produces our benchmark numbers."""
    result = verify(
        config_dir=materialise(prediction.config),
        policy_dir=example.rego,
        target=example.target,
    )

    # Job 1 — bootstrapping (trace is set): a strict bool. Only outputs that
    # FULLY pass may become worked examples.
    if trace is not None:
        return result.passed

    # Job 2 — reflective optimization (pred_name is set): score AND feedback.
    # GEPA reads the text to understand *why* a candidate failed.
    if pred_name is not None:
        return dspy.Prediction(score=result.score, feedback=format_failures(result))

    # Job 3 — plain evaluation: a float.
    return result.score
evaluate = dspy.Evaluate(devset=valset, metric=verify_metric,
                         num_threads=8, display_table=True)
evaluate(program)
Average Metric: 0.59 / 3 (19.6%): 100%|██████████| 3/3 [01:16<00:00, 25.60s/it]
INFO dspy.evaluate.evaluate: Average Metric: 0.5882 / 3 (19.6%)
WARNING dspy.evaluate.evaluate: Skipping table display since `pandas` is not installed.

Фаза 3: Оптымізацыя

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

gepa = dspy.GEPA(
    metric=verify_metric,
    max_metric_calls=150,
    reflection_lm=dspy.LM("openrouter/openai/gpt-5.6-luna", max_tokens=16000),
    num_threads=8,
    track_stats=True,
)

compiled = gepa.compile(student=program, trainset=trainset, valset=valset)
compiled.save("compiled_state.json", save_program=False)

Рабочы процес продовжае плаціць пасля оптымізацыі

Калі працуеце з етапамі «The workflow keeps paying», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўвае чыстасць пазнейшых змян у кодзе. Зберагаюце настройкі паза кодам прыемлі. Файлы серавыску, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры. Стварайце контрольныя пункты пасля дорогіх крокаў. Функцыя вярнення роботы не должна занова ставіць плату за той самы вызыв LLM, калі аператар перапрыяўляе роботу да пазнейшага вузла.

robust = dspy.Refine(module=program, N=3, reward_fn=verify_metric, threshold=1.0)
program.set_lm(dspy.LM("openrouter/qwen/qwen3-coder-30b-a3b-instruct"))
evaluate(program)

Чысты рэзультат

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

Заключанне

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

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

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

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

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

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

Спрацавваце гэты этап як кантракт межа вхіднымі дадзеннямі і апраўнанымі выходнымі. Даце назвы артыфактам, зададзіце крэтыры успеху і адмовіцеся ад моўчаннага частковага завершэння.

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

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

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

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

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

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

Дзеянне прыцеленняя ў зміцнэнне 1/880: вимерыце час выканання, класію памылак і колькасць выкорыстоўваных токенав для гэтага запісу, а потым вырашыце, чы рашыцца застаўляць змяну, стварываючыся на адной фіксаванай сэтце пытанняў, а не на анекдотах.

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

Дзеянні гэрмавання 2/880: змяроўваць час выконання, класы каштоўкаў і витраты токенаў для гэтага пункту, а потым вырашыць, чы робіцца змяна на адной падставе фіксаванага набора пытанняў, а не на адной личнай думцы.

Калі працуеце над 3-й стадзіяю прыемкі з паўнейшага захавання, спачатку запісайце угоду: неабходныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі.

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

Дзялей 3/880 прыемкі з паўнейшага захавання: вымерайце час выконання, класыя ошибакі і витрату токенав для гэтай прыемкі, а потым выберайце, чы робіць змены на адной пазначанай сэткі пытанняў, а не на адной толькі прымітцы.

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

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

Дзеянне паўжасткі 4/880: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьязку, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рашыцца застаўіць змяну.

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

Дзеянне паўжасткі 5/880: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьязку, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рашыцца застаўіць змяну.

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

Дзялянка забезпечэння безпекі 6/880: замерайце час выканання, класію каштоўкаў і колькасць токенаў, якія былі выкарыстаны для гэтай стадзіі, а пасля выберайце, чы робіць змены на адной фіксаванай базе пытанняў, а не на адной лічбе прыкладаў.

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

Дзеянне паўжчання 7/880: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.

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

Дзеянне паўжчання 8/880: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.

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

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

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

Дзеянне паўжчання 10/880: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы рэшацца застаўляць змяну.

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

Дзеянне паўжчання 11/880: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы рэшацца застаўляць змяну.

Калі працуеце над 12-ю стадзіяй ударожэння, спачатку запісайце шаблон кантракта: неабяжныя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такі список контроля дапамагае заліцвачваць пазнейшыя змены коду.

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

Дакладнасць ударожэння 12/880: звярніце увагу на час выканання, класы абяканняў і витраты токена для гэтай стадзіі, а пасля выберыце, чы застаўляць змену на адной фіксаванай сэтке пытанняў, а не на адной лічбе прыкладаў.

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

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

Дзеянне паўжырання 13/880: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, якія былі выкарыстоўаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазыраннях, выявіце, чы хачаце застаўіць змяну.

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

Дзеянне паўжырання 14/880: звярніце увагу на час выканання, класыя ошибак і колькасць токенаў, якія былі выкарыстоўаны для гэтага зазначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазыраннях, выявіце, чы хачаце застаўіць змяну.