49 / HUMAN-IN-THE-LOOP / EXECUTIVE CONTROLLER + QUALITY ENGINE
49 / PRODUCTION CONTROL / APPROVAL · REVIEW · HANDOFF · RESUME

HUMAN
IN THE LOOP.

Human-in-the-Loop (HITL) — управляемое включение человека в AI-процесс в конкретной точке, где системе нужен approval, экспертное решение, обработка исключения, takeover или дополнительная ответственность.

Главный принцип: человек не должен быть обязательным этапом каждого запроса. HITL — условный control mechanism: система должна знать когда остановиться, что показать человеку, кто имеет право решить и как безопасно продолжить после решения.
00. ARCHITECTURAL STATUS

ЧЕЛОВЕК — УСЛОВНАЯ ТОЧКА КОНТРОЛЯ, НЕ ПОСТОЯННЫЙ МОДУЛЬ

HITL живёт внутри Executive Controller + Quality Engine и использует state/workflow infrastructure для ожидания и возобновления. Отдельный «human agent service» не обязателен.
TYPEPRODUCTIONProduction control / accountability.
DEFAULTCONDITIONALТолько по risk/uncertainty/policy/exception.
ENABLE WHENGATE / EXCEPTIONApproval, high risk, ambiguity, unresolved conflict.
SEPARATE COMPONENTNOМеханизм внутри controller/quality; UI/queue могут быть отдельными.
LIVES INR01 + R08Executive Controller + Quality Engine.
COMPLEXITYLOW → HIGHНачать с approval queue + persisted wait state.
IMPLEMENT: YES / CONDITIONAL
Минимум 80% ценности: policy-triggered approval, immutable review package, persisted WAITING state, named approver/role, exact decision contract, timeout/escalation, idempotent resume и audit trail. Не нужен обязательный ручной review всех ответов.
01A. ARCHITECTURE BOUNDARIES & OPERATIONS

EXPLICIT SYSTEM CONTRACT

A. BOUNDARY WITH NEIGHBORS

№48 Guardrails & Policies решает, когда действие требует человека; №49 реализует сам approval/review/wait/resume lifecycle. №45 Verification машинно проверяет результат; HITL подключает человека там, где автоматической проверки недостаточно или нужна accountability. №42 Events & Triggers может доставить событие о human decision. №50 Contracts формализует payload решения. №51 Permissions определяет, имеет ли конкретный человек право approve. №68 Durable Workflow позже углубит persistence/replay/timers.

B. PREREQUISITES / CROSS-REFERENCES

Prerequisites: №10 State Management, №41 Cognitive Architecture, №42 Events, №45 Verification, №46 Observability, №48 Guardrails & Policies. Forward references: №50 contracts, №51 permissions, №57 queues/workers, №58 scheduler, №68 durable execution, №76 governance/privacy.

C. PLANE PLACEMENT

REQUEST-TIME: CONDITIONAL — процесс может остановиться на gate. CONTROL PLANE: YES — reviewer roles, routing, SLA, escalation policy. DATA PLANE: INDIRECT — review package/evidence проходит через human interface. OFFLINE: YES — sampling review, calibration, audit, feedback analysis.

D. FAILURE & OPERATIONS CONTRACT

Success: authorized decision связан с exact review version и корректно resumes process. Retryable: notification/UI/API delivery failure. Business terminal: REJECT, EXPIRE, CANCEL. Idempotency: повтор decision/resume не создаёт двойной side effect. Persist: task, review package hash/version, actor, decision, timestamps, expiry, reason, state transition. Trace: request → wait → decision → resume/outcome.

E. WHAT THIS TOPIC DOES NOT OWN

№49 не владеет policy definitions, human identity system, permissions engine, workflow engine целиком, queue infrastructure, final verification или business governance. Она владеет HUMAN DECISION LIFECYCLE: HANDOFF → WAIT → DECIDE → RESUME.

01. WHY HITL EXISTS

АВТОНОМНОСТЬ НЕ РАВНА ОТСУТСТВИЮ ЧЕЛОВЕКА

RISK

Irreversible action

Публикация, деньги, удаление, privileged change, юридически значимое действие.

UNCERTAINTY

Ambiguous intent

Система не может безопасно выбрать между materially different actions.

EXPERTISE

Domain judgment

Нужна ответственность или знание, которое нельзя надёжно автоматизировать.

EXCEPTION

Automation failed

Tool/retrieval/verifier не смогли завершить задачу в допустимом budget.

ANTI-PATTERN
«Пусть человек всегда проверяет» превращает AI в дорогой draft generator и маскирует слабую архитектуру. Правильная цель — автоматически обрабатывать безопасное и понятное, а человеку показывать только действительно ценные decision points.
02. MASTER PIPELINE

HANDOFF → WAIT → DECIDE → RESUME

TASKExecutive Controller runs normal path.
TRIGGERRisk, policy, uncertainty, exception or sampling rule.
FREEZEExact proposal/artifact/action/evidence version.
REVIEW PACKAGECompact context, risk, diff, evidence, options.
WAITINGPersist state; do not hold process/thread.
HUMAN DECISIONApprove / reject / edit / request info / escalate.
AUTH + VALIDATERight reviewer, fresh version, unexpired decision.
RESUMEContinue idempotently from checkpoint.
Нельзя держать worker/model call открытым часами в ожидании человека. HITL требует persisted waiting state и event-driven resume.
03. HITL MODES

ЧЕЛОВЕК МОЖЕТ ВХОДИТЬ В ЦИКЛ ПО-РАЗНОМУ

01 / APPROVAL

Gate before action

Человек разрешает или запрещает exact side effect. Самый важный production pattern.

02 / REVIEW

Quality review

Оценивает output/evidence, когда automated verifier недостаточен.

03 / EDIT

Human correction

Исправляет draft/artifact; correction может стать feedback/eval case.

04 / EXCEPTION

Fallback takeover

Автоматизация исчерпала retry/replan/escalation budget.

05 / EXPERT DECISION

Judgment authority

Специалист выбирает вариант, который нельзя формализовать только моделью.

06 / SAMPLING AUDIT

Offline/online sample

Человек проверяет долю автоматически завершённых случаев для calibration и learning.

04. TRIGGER POLICY

КОГДА ИМЕННО ЗОВЁМ ЧЕЛОВЕКА

СигналПримерДействие
High irreversible riskПубликация, платеж, delete, privileged write.REQUIRE_APPROVAL.
Policy requirementДля определённого resource обязательна подпись владельца.Route to authorized approver.
Material ambiguityДва допустимых решения ведут к разным business outcomes.Clarify or human decision.
Verifier uncertaintyCritical claim cannot be verified automatically.Expert review.
Automation exhaustedRetries/replans/model escalation не помогли.Exception handoff.
Sampling rule1–5% low/medium-risk cases for quality audit.Async review; не обязательно блокировать user path.
HITL trigger должен быть measurable. Если approval rate ≈ 100%, система либо слишком консервативна, либо реальная задача пока плохо автоматизирована.
05. REVIEW PACKAGE

ЧЕЛОВЕКУ НУЖЕН НЕ ВЕСЬ TRACE, А РЕШЕНИЕ В КОНТЕКСТЕ

{
  "review_id": "REV-...",
  "task_id": "TASK-...",
  "review_type": "APPROVAL",
  "risk": "HIGH",
  "proposed_action": {
    "type": "publish_post",
    "resource": "channel:brand_A",
    "payload_hash": "sha256:..."
  },
  "summary": "...",
  "evidence_refs": ["..."],
  "policy_reason": "EXTERNAL_PUBLICATION",
  "options": [
    "APPROVE",
    "REJECT",
    "REQUEST_CHANGES"
  ],
  "expires_at": "..."
}
GOOD REVIEW UX

Decision-ready context

  • Коротко: что произошло и почему нужен человек.
  • Какое exact действие предлагается.
  • Что изменится после approval.
  • Risk / irreversibility / destination.
  • Evidence refs и conflict markers.
  • Diff относительно последней approved version.
  • Ясные structured options.
  • Expiry и последствия timeout.

Не заставлять reviewer читать 100k tokens raw trace.

06. HUMAN DECISION CONTRACT

РЕШЕНИЕ ЧЕЛОВЕКА ТОЖЕ ДОЛЖНО БЫТЬ СТРУКТУРИРОВАНО

{
  "decision_id": "DEC-...",
  "review_id": "REV-...",
  "actor": "user:123",
  "role": "brand_owner",
  "decision": "APPROVE",
  "review_version": 4,
  "payload_hash": "sha256:...",
  "reason_code": "CONTENT_APPROVED",
  "comment": "...",
  "decided_at": "...",
  "expires_at": "..."
}
DECISION ENUM

Минимальный набор

APPROVE — продолжить exact version.

REJECT — terminate/narrow path.

REQUEST_CHANGES — вернуть в controlled repair loop.

REQUEST_INFO — собрать недостающие данные и повторно представить.

ESCALATE — передать reviewer с большей authority/expertise.

CANCEL — закрыть задачу без side effect.

Free-text комментарий полезен как контекст, но state transition должен определяться structured decision code.
07. STATE MACHINE

HITL — ЭТО ПРЕЖДЕ ВСЕГО WAITING STATE

RUNNING

Система выполняет обычный task path.

REVIEW_REQUIRED

Trigger сработал; proposal frozen.

WAITING_HUMAN

State persisted; reviewer notified.

DECISION_RECEIVED

Decision записан, но ещё не применён.

VALIDATED

Authority/version/expiry/hash confirmed.

RESUMED

Workflow продолжен idempotently.

TERMINAL

Completed / rejected / expired / cancelled.

RUNNING
   │
   ├─ no human needed ─────────────→ CONTINUE
   │
   └─ trigger
         ↓
REVIEW_REQUIRED
         ↓ freeze exact review version
WAITING_HUMAN
   ├─ APPROVE ─────────→ VALIDATE AUTH/VERSION → RESUME
   ├─ REJECT ──────────→ TERMINAL / REJECTED
   ├─ REQUEST_CHANGES ─→ REPAIR → NEW REVIEW VERSION
   ├─ REQUEST_INFO ────→ GATHER → NEW REVIEW VERSION
   ├─ ESCALATE ────────→ NEW REVIEWER / SLA
   └─ TIMEOUT ─────────→ EXPIRE / ESCALATE / SAFE CANCEL
08. VERSION BINDING

APPROVAL ДЕЙСТВУЕТ ТОЛЬКО НА ТО, ЧТО ЧЕЛОВЕК ВИДЕЛ

REVIEW V4

Text/action/evidence frozen. Hash = ABC.

Reviewer sees exactly this version.

APPROVE V4

Decision contains review_version=4 and payload_hash=ABC.

EXECUTE

PEP confirms current payload hash still ABC. If changed → old approval invalid.

CRITICAL RULE
После человеческого approval нельзя незаметно перегенерировать content или изменить параметры action. Любое material change создаёт новую review version и требует нового решения, если policy этого требует.
09. REVIEW QUEUE

ЧЕЛОВЕЧЕСКОЕ ВНИМАНИЕ — ОГРАНИЧЕННЫЙ РЕСУРС

HIGH
External payment · irreversible · owner approval
02m
HIGH
Public publish · legal-sensitive claim
06m
MEDIUM
Ambiguous customer response · reviewer needed
18m
SAMPLE
Quality audit · non-blocking sample
1h
PRIORITY FUNCTION

Risk × age × SLA × authority

Queue ranking должна учитывать не только FIFO. Critical irreversible action с коротким SLA важнее non-blocking sampling review.

Reviewer eligibility фильтруется до назначения: expertise, tenant, permission, conflict-of-interest, workload.

10. SLA, TIMEOUT & ESCALATION

WAITING НЕ ДОЛЖЕН БЫТЬ БЕСКОНЕЧНЫМ

СобытиеБезопасное поведениеНельзя делать автоматически
SLA approachingReminder / re-route / raise priority.Не снижать risk, чтобы ускорить.
Reviewer unavailableRoute to equivalent authorized role.Не назначать случайного пользователя без authority.
Timeout high-risk approvalEXPIRE / SAFE CANCEL / escalate.Не auto-approve.
Timeout low-risk reviewПо заранее заданной policy: continue/cancel/escalate.Не импровизировать runtime behavior.
Decision arrives after expiryReject stale decision; issue new review if still relevant.Не resurrect старый action silently.
Timeout — это state transition, а не exception, который нужно бесконечно retry.
11. AUTHORITY

НЕ КАЖДЫЙ ЧЕЛОВЕК МОЖЕТ APPROVE ЛЮБОЕ ДЕЙСТВИЕ

ROLE

Approver

Имеет право принять binding decision для конкретного resource/action/risk class.

EXPERTISE

Reviewer

Может оценить качество/содержание, но не обязательно имеет permission на side effect.

OPERATOR

Executor

Может выполнить действие после approval, но не обязательно имеет право его одобрять.

Разделение reviewer / approver / executor особенно важно для high-risk процессов. №51 Permissions & Secrets детализирует техническое enforcement этих полномочий.
12. HUMAN ≠ GROUND TRUTH

ЧЕЛОВЕКА ТОЖЕ НУЖНО КАЛИБРОВАТЬ

FAILURE SOURCES

Human error

  • Rubber-stamping: approve without reading.
  • Reviewer fatigue.
  • Inconsistent standards.
  • Bias / preference drift.
  • Insufficient expertise.
  • Outdated context.
CONTROLS

Calibration

  • Clear rubric / decision options.
  • Blind duplicate cases for agreement.
  • Gold/reference cases where possible.
  • Reviewer-specific disagreement metrics.
  • Escalation on uncertain reviewer.
  • Sample post-decision audits.
IMPORTANT
Human label не становится автоматически «истиной» для Learning Engine. Для high-impact feedback нужно хранить provenance, reviewer role, confidence/decision reason и при необходимости adjudication.
13. HUMAN FEEDBACK → LEARNING

РЕШЕНИЯ ЛЮДЕЙ МОГУТ УЛУЧШАТЬ СИСТЕМУ

DECISIONApprove/reject/edit + reason.
CLASSIFYPolicy issue? quality? routing? knowledge gap?
VERIFY SIGNALWas human correction actually better?
PROMOTERegression case / Skill / rule / memory / prompt candidate.
EVALMeasure improvement before release.
Не превращать каждую human edit в permanent rule. Сначала понять тип ошибки и проверить переносимость correction.
14. SYNCHRONOUS VS ASYNCHRONOUS

НЕ ВСЯ HUMAN REVIEW ДОЛЖНА БЛОКИРОВАТЬ ПОЛЬЗОВАТЕЛЯ

РежимКогдаАрхитектура
Synchronous blockingHigh-risk side effect должен ждать approval.User/task waits; action not executed.
Asynchronous blockingDecision может занять минуты/часы.Persist wait state, notify, resume by event.
Asynchronous non-blockingQuality sampling / audit уже завершённых low-risk cases.User path completes; feedback enters eval/learning.
Post-action auditOnly where policy permits side effect before human check.Human can flag/rollback/escalate, but not substitute required pre-gate.
15. IDEMPOTENT RESUME

ОДНО РЕШЕНИЕ НЕ ДОЛЖНО ВЫПОЛНЯТЬСЯ ДВАЖДЫ

resume(review_id, decision_id):
    if decision_id already_applied:
        return previous_result

    load task_state
    verify review_version
    verify payload_hash
    verify actor_authority
    verify not_expired

    transition WAITING -> RESUMING
    execute_or_continue_with_idempotency_key()
    persist outcome
    mark decision_id applied
    transition -> RUNNING / TERMINAL
WHY

Double click is a distributed systems problem

Human UI может повторно отправить request. Notification webhook может прийти дважды. Worker может упасть после side effect, но до записи результата.

Поэтому decision ingestion и downstream action должны иметь idempotency semantics.

16. OBSERVABILITY

TRACE ДОЛЖЕН ОБЪЯСНЯТЬ, ПОЧЕМУ ПРОЦЕСС ЖДАЛ ЧЕЛОВЕКА

TRIGGER

Why

Policy/risk/verifier/exception reason code.

WAIT

How long

Queue age, SLA, reminders, reassignment.

DECISION

Who / what

Actor, role, version, choice, reason.

OUTCOME

Then what

Resume path, actual side effect, final verification.

17. EVALS FOR HITL

НУЖНО ИЗМЕРЯТЬ НЕ ТОЛЬКО КАЧЕСТВО, НО И ЦЕНУ ЧЕЛОВЕЧЕСКОГО ВНИМАНИЯ

Eval questionКак проверить
Правильно ли система escalates?Representative set с expected HUMAN_REQUIRED / AUTO_OK.
Есть ли unnecessary HITL?False escalation rate на low-risk cases.
Пропускаем ли risky cases?Missed-gate rate / high-risk escape.
Полезен ли reviewer?Paired quality before/after human decision; downstream incident rate.
Согласны ли reviewers?Inter-reviewer agreement на duplicated cases.
Сколько стоит HITL?Human minutes / successful task, queue latency, cost per reviewed case.
18. MVP IMPLEMENTATION

POSTGRES + WAIT STATE + NOTIFICATION УЖЕ ДОСТАТОЧНО

hitl/
├── trigger.py
├── review_package.py
├── decisions.py
├── resume.py
├── timeout.py
├── routing.py
└── tests/

tables:
  tasks
  reviews
  review_decisions
  state_transitions
  notifications

review fields:
  review_id
  task_id
  review_type
  review_version
  payload_hash
  required_role
  status
  requested_at
  expires_at

decision fields:
  decision_id
  review_id
  actor_id
  decision
  reason_code
  decided_at
  applied_at
80% VALUE MVP

Без отдельного HITL-сервиса

  • Trigger из №48 policy/risk/verifier.
  • Persisted task checkpoint.
  • Review package + exact version/hash.
  • Review queue в PostgreSQL.
  • Telegram/web/email/internal UI notification.
  • Authorized structured decision.
  • Expiry + reminder/escalation rule.
  • Idempotent resume.
  • Trace + metrics.

Отдельный queue/workflow service добавляется позже при реальной нагрузке и durability requirements.

19. FAILURE MODES

КАК HITL ЛОМАЕТСЯ

HUMAN EVERYWHERE
Каждый task требует review, autonomy исчезает.
RISK-BASED TRIGGERS
NO WAIT STATE
Worker/thread висит, process теряется после restart.
PERSIST + RESUME
VAGUE REVIEW
Reviewer не понимает, что именно изменится.
DECISION-READY PACKAGE
STALE APPROVAL
Content изменился после approval.
VERSION/HASH BINDING
WRONG APPROVER
Решение принял человек без authority.
ROLE/PERMISSION CHECK
AUTO-APPROVE ON TIMEOUT
High-risk action проходит из-за отсутствия ответа.
EXPIRE / ESCALATE
DOUBLE RESUME
Повторное решение создаёт второй side effect.
IDEMPOTENCY
HUMAN = TRUTH
Ошибочный human feedback без проверки попадает в learning.
PROVENANCE + CALIBRATION
QUEUE BLINDNESS
Все reviews FIFO, critical cases ждут за low-risk audit.
RISK/SLA PRIORITY
20. METRICS

ЧТО ИЗМЕРЯТЬ

IR

Intervention Rate

% tasks, где реально понадобился человек.

LAT

Approval Latency

Median/p95 time in WAITING_HUMAN.

FE

False Escalation

Cases, которые человек считает безопасно автоматизируемыми.

MG

Missed Gate

Cases, где human gate должен был сработать, но не сработал.

OVR

Override Rate

Как часто human меняет предложение AI.

AGR

Reviewer Agreement

Согласие нескольких reviewers на одинаковых cases.

AGE

Queue Age

Backlog / SLA breach по risk tiers.

INC

Post-Approval Incident

Ошибки/инциденты после human-approved actions.

Цель HITL — не минимальный Intervention Rate любой ценой. Цель — минимально достаточное человеческое участие при нулевых/допустимых critical escapes и приемлемой latency.
21. PRACTICAL DECISION

СТОИТ ЛИ ДЕЛАТЬ ОТДЕЛЬНЫЙ КОМПОНЕНТ?

ВопросОтвет
Стоит ли реализовывать?Да, как механизм. Особенно до появления внешних irreversible actions.
Separate Component?NO по архитектурному плану. HITL — responsibility внутри Executive Controller + Quality Engine. UI/queue/notification могут быть отдельной инфраструктурой.
Минимум 80% ценности?Trigger, exact review version, WAITING state, authorized decision, timeout/escalation, idempotent resume, audit.
Когда overkill?Когда human review добавлен даже для низкорисковых deterministic read tasks.
Trigger?High risk, policy gate, material uncertainty, unresolved verification, automation exception, sampling audit.
Как измерить uplift?Missed-gate, false escalation, post-review quality delta, incident rate, latency, reviewer minutes/task.
Можно ли rule/tool/code вместо LLM-agent?Да. Handoff state machine, queue, permissions и resume — обычный код. LLM может только помогать собрать review summary.
22. DESIGN RULES

ПРАВИЛА ДЛЯ РЕАЛЬНОЙ СИСТЕМЫ

RULE 01

Human by trigger

Не review-by-default. Trigger должен иметь reason code и measurable value.

RULE 02

Persist before wait

Сначала сохранить checkpoint/review, потом ждать человека.

RULE 03

Freeze what is reviewed

Approval связывается с exact version/hash.

RULE 04

Authority before decision

Reviewer eligibility и permissions проверяются системой.

RULE 05

Timeout is a state

EXPIRE / ESCALATE / CANCEL по policy. Не auto-approve high risk.

RULE 06

Resume idempotently

Повтор webhook/click не повторяет side effect.

RULE 07

Human is fallible

Хранить provenance и измерять reviewer disagreement.

RULE 08

Optimize reviewer UX

Показывать decision-ready package, а не raw context dump.

RULE 09

Learn carefully

Human correction → verified feedback → eval/regression/rule candidate.

23. FINAL MAP

HUMAN AS A CONTROLLED STATE TRANSITION

NORMAL AGENT LOOP
       ↓
RISK / POLICY / UNCERTAINTY / EXCEPTION
       ↓
IS HUMAN REQUIRED?
   ├─ NO ───────────────→ CONTINUE AUTOMATION
   │
   └─ YES
        ↓
FREEZE EXACT PROPOSAL / ACTION / ARTIFACT
        ↓
BUILD REVIEW PACKAGE
        ↓
PERSIST CHECKPOINT
        ↓
WAITING_HUMAN
        ↓
ROUTE TO AUTHORIZED REVIEWER
        ↓
APPROVE / REJECT / CHANGE / INFO / ESCALATE
        ↓
VALIDATE:
actor + permission + review_version + payload_hash + expiry
        ↓
IDEMPOTENT RESUME
        ↓
EXECUTE / REPAIR / TERMINATE
        ↓
VERIFY ACTUAL OUTCOME
        ↓
TRACE + METRICS + OPTIONAL LEARNING

CORE PRINCIPLE:

HUMAN-IN-THE-LOOP
IS NOT "A PERSON LOOKS AT THE ANSWER".

IT IS:
A FORMAL, PERSISTED, AUTHORIZED,
VERSION-BOUND DECISION POINT
INSIDE THE SYSTEM.

ECC RETROFIT / PRACTICAL HARNESS INTEGRATION

A. Related ECC ideas. Context-as-cache, scoped memory, lifecycle hooks, selective capabilities, feature flags, deterministic enforcement, provider-neutral adapters and eval-gated learning are applied only where relevant to №49 Human-in-the-Loop.

B–E. Existing boundary and placement. The existing conceptual boundary, class PRODUCTION, default CONDITIONAL and owner Executive Controller + Quality Engine remain authoritative. Runtime/control/data/offline placement is unchanged; durable state stays outside model context.

F–H. Hooks and contracts. Use bounded PRE_MODEL/POST_MODEL, PRE_TOOL/POST_TOOL, CHECKPOINT and TASK_COMPLETED events as applicable. Illustrative fields and canonical contracts are defined in NEW_CONTRACTS_SPEC.md; no universal schema is implied.

I–J. Security and evaluation. Host-side schema, permission, secret, budget, idempotency and audit checks take precedence over LLM output. Optional mechanisms require a feature flag and WITH/WITHOUT ablation; measure quality, acceptance, correction, latency, cost, escalations and severe errors.

K–L. Task profiles and cross-references. A TaskProfile selects the relevant skill, tool/context slice, memory scope and enforcement profile independently from FAST/STANDARD/DEEP. See cross-reference map, hook spec and ablation plan. Provider adapters remain outside the core.