# Как это работает (/docs/guide/how-it-works)



## От события к проверяемому решению [#от-события-к-проверяемому-решению]

Представим сервисную заявку. Она находится в состоянии «Новая». Сотрудник
хочет принять её в работу. Тяпкин проверяет допустимость такого перехода
относительно контракта; приложение решает, как хранить заявку и что делать дальше.

### 1. Опишите правила на Capkin [#1-опишите-правила-на-capkin]

В сценарии укажите участника, полномочие, Input, Guard и допустимый Transition.
Компилятор принимает закрытый набор конструкций. Неизвестная фраза становится
ошибкой, а не неявным правилом.

### 2. Передайте Input [#2-передайте-input]

Приложение передаёт проверенный контракт, текущий checkpoint, Input и claims.
Principal обозначает участника, Capability — его допустимое действие.
Проверка внешней личности и источников доверия принадлежит приложению.

### 3. Проверьте условия [#3-проверьте-условия]

Guard задаёт условие перехода. CAP проверяет решение в рамках контракта и
предоставленных evidence. Он не превращает внешний факт в истину: за
происхождение и достоверность факта отвечает выбранный источник доверия.

### 4. Получите State и Output [#4-получите-state-и-output]

Если переход допустим, формируются новый State, Output intentions и
Commitment. Приложение сохраняет своё состояние и организует исполнение.
При недопустимом входе успешный переход не должен появиться.

### 5. Проверьте Trace [#5-проверьте-trace]

Trace связывает последовательность Commitment. Проверка сверяет историю с
контрактом и доверенным checkpoint. Это позволяет воспроизвести решение и
обнаружить нарушение цепочки.

## Кто за что отвечает [#кто-за-что-отвечает]

| Тяпкин                                         | Ваше приложение                                         |
| ---------------------------------------------- | ------------------------------------------------------- |
| Capkin compiler и проверенный Machine contract | Пользователи, интерфейс и предметные данные             |
| Детерминированное решение CAP                  | Выбор версии контракта и авторизация внешнего участника |
| Commitment и проверка Trace                    | Хранение State, транзакции и recovery                   |
| Явное Output intention                         | Адаптер, повтор, фактический результат и его receipt    |

Связать несколько Machine можно отдельным Flow. Каждая Machine всё равно
принимает собственный Input и имеет самостоятельную историю.

## От объяснения к первому запуску [#от-объяснения-к-первому-запуску]

[Откройте быстрый старт](/guide/quickstart), чтобы скомпилировать готовый пример.
Для деталей используйте [границу малого ядра](/docs/architecture/small-core-extensions)
и [описание Rust runtime](/docs/runtime/rust-core).
