Перейти к содержанию

Схема языка процессов

Справочник полей языка пакетов процессов: вид каталога Process, производственный календарь Calendar и тесты пакета *.test.yaml. Таблицы построены из JSON Schema packages/schema/v1 и повторяют её поле в поле. Статья для авторов пакетов; как этим пользоваться, объясняют Процессы, Выражения и Тесты пакета.

Схема — первая ступень проверки

Схема проверяет форму описания. Вторую ступень — типы выражений, неизвестные поля данных, достижимость шагов, ссылки на типы задач и скиллы, пробелы таблиц решений — выполняет ядро при проверке пакета (см. Тесты пакета).

Процесс (kind: Process)

Раздел генерируется make docs-gen из кода — не правьте его руками.

Источник: packages/schema/v1/object.schema.json.

processSpec

Процесс (TAI-ADR-0054, CP-ADR-0074): кейс со стадиями и блоками исполнения, данные по схеме, выражения CEL, проекция в память. Исполняет ядро

Поле Тип Обязательно Описание
version integer да Версия определения: опубликованная версия неизменяема
displayName displayName да
description string
workspaceId string
identity объект От чьего имени действует процесс: описание агента вида service или agent
owner assignChain Владелец процесса — ему адресуются задачи о процессе: расхождение с регламентом, ошибки экземпляров (TAI-ADR-0054 п.5, амендмент 2026-09-27). Не обязателен; проверка пакета предупреждает, если его нет
calendar typeKey Календарь по умолчанию для cal.*
data jsonSchema да JSON Schema данных экземпляра; {$ref: <файл пакета>} раскрывает cp_packages
start объект да
correlate array of объект
stages array of processStage да
onEvent array of объект
timers processTimers
decisions array of decisionTable
governedBy governedBy
memory memoryProjection
retrospective объект Разбор закрытого дела: агент предлагает уроки, человек подтверждает (TAI-ADR-0054 Р18)
migrations array of объект

processSpec.identity

От чьего имени действует процесс: описание агента вида service или agent

Поле Тип Обязательно Описание
agent slug да

processSpec.start

Поле Тип Обязательно Описание
on processTrigger да
key cel да Ключ экземпляра: повтор события с тем же ключом — correlate, а не новый экземпляр
set celMap

processSpec.correlate[]

Поле Тип Обязательно Описание
on processTrigger да
key cel да
set celMap
do blocks

processSpec.onEvent[]

Поле Тип Обязательно Описание
on processTrigger да
do blocks да

processSpec.retrospective

Разбор закрытого дела: агент предлагает уроки, человек подтверждает (TAI-ADR-0054 Р18)

Поле Тип Обязательно Описание
skill string По умолчанию process.retrospective@1.
taskType typeKey да
assign assignChain да
appliesTo array of string Виды сущностей, к которым привязываются уроки
when cel

processSpec.migrations[]

Поле Тип Обязательно Описание
from integer да
to integer да
policy pin | migrate да
map map → processElementId

processStage

Стадия кейса (CMMN): вход и выход по сторожам, вехи, обязательная и необязательная работа

Поле Тип Обязательно Описание
id processElementId да
displayName displayName
entry cel Сторож входа; stage.<id>.completed, milestone.<id> и data доступны в выражении
exit cel
repeatable boolean
governedBy governedBy
steps blocks да
discretionary array of processStep Работа, которую человек добавляет по решению
milestones array of объект
timers processTimers

processStage.milestones[]

Поле Тип Обязательно Описание
id processElementId да
when cel да

processStep

Шаг процесса: ровно один вид (human, approve, call, decide, recall, remember, listen, wait, set, raise, compensate, fork, try, do, suspend, resume, complete) плюс общие поля

Поле Тип Обязательно Описание
id processElementId да
displayName displayName
when cel Сторож: шаг выполняется, только если истинно
input объект
output объект Запись результата шага (step.result) в данные экземпляра
export объект
governedBy governedBy
onCompensate blocks Компенсация сделанного шага: выполняется при compensate в обратном порядке
human объект
approve объект
call объект
decide объект
recall объект Запрос к памяти через ядро; ответ — событие журнала (детерминированный replay)
remember объект Запись в память наблюдением ядра от identity процесса, со ссылкой на дело
listen объект Ожидание первого из событий (отложенный выбор); timeout — таймер
wait durationOrCel
set celMap
raise processError
compensate = all или array of processElementId Выполнить onCompensate сделанных шагов в обратном порядке
fork объект
try объект
do blocks
suspend объект
resume объект
complete объект

Ровно одно из: human, approve, call, decide, recall, remember, listen, wait, set, raise, compensate, fork, try, do, suspend, resume, complete.

processStep.input

Поле Тип Обязательно Описание
from cel

processStep.output

Запись результата шага (step.result) в данные экземпляра

Поле Тип Обязательно Описание
as celMap

processStep.export

Поле Тип Обязательно Описание
as celMap

processStep.human

Поле Тип Обязательно Описание
taskType typeKey да
title cel
form processForm
assign assignChain да
due durationOrCel
escalations array of escalation
context stepContext

processStep.approve

Поле Тип Обязательно Описание
taskType typeKey
approvers assignChain да
mode parallel | sequential По умолчанию parallel.
quorum all | any или объект {atLeast} или объект {percent} да
earlyDecision boolean По умолчанию true.
separationOfDuties cel CEL → список principal, которым голосовать нельзя; проверяет ядро при решении
due durationOrCel
onDue approve | reject | escalate
escalations array of escalation
context stepContext

processStep.call

Поле Тип Обязательно Описание
skill string
agent slug
process typeKey
input celMap
timeout durationOrCel
context stepContext

Ровно одно из: skill, agent, process.

processStep.decide

Поле Тип Обязательно Описание
table processElementId да
input celMap

processStep.recall

Запрос к памяти через ядро; ответ — событие журнала (детерминированный replay)

Поле Тип Обязательно Описание
anchors array of memoryAnchor да
traverse memoryTraverse
query cel Текст смыслового добора
kinds array of string
limit integer
timeout duration
onTimeout blocks

processStep.remember

Запись в память наблюдением ядра от identity процесса, со ссылкой на дело

Поле Тип Обязательно Описание
entity объект
facts celMap Имя факта дела → значение

Ровно одно из: facts, entity.

processStep.remember.entity

Поле Тип Обязательно Описание
kind string да
key cel да
name cel
text cel
links array of объект
Поле Тип Обязательно Описание
rel string да
kind string да
key cel да

processStep.listen

Ожидание первого из событий (отложенный выбор); timeout — таймер

Поле Тип Обязательно Описание
any array of объект да
timeout durationOrCel
onTimeout blocks

processStep.listen.any[]

Поле Тип Обязательно Описание
on processTrigger да
do blocks

processStep.fork

Поле Тип Обязательно Описание
mode all | compete По умолчанию all.
branches array of объект да

processStep.fork.branches[]

Поле Тип Обязательно Описание
id processElementId да
do blocks да

processStep.try

Поле Тип Обязательно Описание
do blocks да
retry объект
catch array of объект

processStep.try.retry

Поле Тип Обязательно Описание
limit integer да
delay duration
backoff constant | exponential
maxDelay duration
on array of string Типы ошибок для повтора; по умолчанию все

processStep.try.catch[]

Поле Тип Обязательно Описание
errors объект
as string
do blocks да

processStep.try.catch[].errors

Поле Тип Обязательно Описание
type string
status integer

processStep.suspend

Поле Тип Обязательно Описание
reason cel

processStep.resume

Поле Тип Обязательно Описание
reason cel

processStep.complete

Поле Тип Обязательно Описание
outcome string да

processTimers

Граничные таймеры: срабатывают, пока стадия (процесс) открыта; at от данных пересчитывается при их изменении

Значение: array of объект.

processTimers[]

Поле Тип Обязательно Описание
id processElementId да
at durationOrCel да
interrupting boolean По умолчанию false.
do blocks да

decisionTable

Таблица решений (DMN по смыслу). Ячейка условия: '-' (любое), литерал, список 'a,b', диапазон '[a..b)'

Поле Тип Обязательно Описание
id processElementId да
displayName displayName
hitPolicy first | unique | collect да
governedBy governedBy
inputs array of объект да
outputs array of объект да
rules array of объект да

decisionTable.inputs[]

Поле Тип Обязательно Описание
id processElementId да
expr cel да
type string | number | boolean | date | timestamp

decisionTable.outputs[]

Поле Тип Обязательно Описание
id processElementId да
type string | number | boolean | date | duration | object | array

decisionTable.rules[]

Поле Тип Обязательно Описание
when map → string | number | boolean да
then object да
note string
governedBy governedBy

memoryProjection

Проекция дела в граф памяти (TAI-ADR-0054 Р15): доставляется событиями, в граф идут только объявленные поля

Поле Тип Обязательно Описание
case объект да
facts celMap Имя факта дела → значение; изменение закрывает прежний факт сроком действия
entities array of объект
documents объект

memoryProjection.case

Поле Тип Обязательно Описание
kind string По умолчанию case.
key cel да
title cel

memoryProjection.entities[]

Поле Тип Обязательно Описание
kind string да
key cel да
name cel
rel string да
when cel
many boolean key даёт список: по сущности на элемент

memoryProjection.documents

Поле Тип Обязательно Описание
artifacts array of typeKey

stepContext

Профиль контекста исполнителя шага из памяти (TAI-ADR-0054 Р16): явные связи первыми, смысловой добор с пометкой inferred

Поле Тип Обязательно Описание
anchors array of memoryAnchor да
traverse memoryTraverse
semantic boolean Добор по смыслу (inferred); по умолчанию true
budgetTokens integer

memoryAnchor

Якорь обхода графа: узел дела экземпляра или сущность по естественному ключу (CEL от данных)

Поле Тип Обязательно Описание
case = true
kind string
key cel
via string

Ровно одно из: case, key + kind.

memoryTraverse

Шаги обхода от якорей — та же форма, что traverse в contextSchema (CP-ADR-0064)

Значение: array of объект.

memoryTraverse[]

Поле Тип Обязательно Описание
relation string да
direction in | out | both
depth integer
limit integer
from anchors | previous

processTrigger

Источник события: событие журнала ядра или наблюдение. where — фильтр CEL над event

Поле Тип Обязательно Описание
event string
observation string
source string
where cel

Ровно одно из: event, observation.

assignee

Поле Тип Обязательно Описание
principal envOrUuid
role slug
agent slug
expr cel CEL → id principal, agent:<key> или role:<slug>

Ровно одно из: principal, role, agent, expr.

assignChain

Кандидаты по порядку: берётся первый разрешимый

Значение: array of assignee.

escalation

Поле Тип Обязательно Описание
after = due или durationOrCel да due — в момент срока; длительность — после срока
action remind | reassign | notify | raise да
to assignChain
error processError

processError

Ошибка в форме RFC 7807

Поле Тип Обязательно Описание
type string да
status integer
detail cel

processForm

Форма шага: JSON Schema данных и uischema JSON Forms представления

Поле Тип Обязательно Описание
schema jsonSchema да
uischema object

governedBy

Регламенты базы знаний, которым подчиняется элемент (TAI-ADR-0054 Р17): естественный ключ документа памяти и, при необходимости, пункт

Значение: array of объект.

governedBy[]

Поле Тип Обязательно Описание
document string да
section string

blocks

Последовательность шагов (блок do)

Значение: array of processStep.

durationOrCel

Длительность ISO 8601 или выражение CEL, дающее момент времени (timestamp) или длительность

Значение: duration или объект {at}.

duration

Длительность ISO 8601, например P3D, PT4H

Значение: string.

cel

Выражение CEL в профиле taimen/1 (CP-ADR-0075): переменные data, event, step, task, instance; функции cal.*; без текущего времени. Типы и лимит стоимости проверяет ядро

Значение: string.

celMap

Путь в данных экземпляра → выражение CEL

Значение: map → cel.

processElementId

Стабильный id элемента процесса: на него ссылаются раскладка схемы, карты миграции, журнал и граф памяти. Переименование — только картой migrations

Значение: string.

Календарь (kind: Calendar)

Раздел генерируется make docs-gen из кода — не правьте его руками.

Источник: packages/schema/v1/object.schema.json.

calendarSpec

Производственный календарь (TAI-ADR-0054 Р6): выходные по умолчанию, праздники и переносы по годам

Поле Тип Обязательно Описание
displayName displayName да
timezone string да
weekend array of integer Дни недели ISO: 1 — понедельник. По умолчанию [6, 7].
years array of объект да

calendarSpec.years[]

Поле Тип Обязательно Описание
year integer да
provisional boolean Год ещё не утверждён: результаты cal.* помечаются «предварительно»
source string
holidays array of string (date)
workdays array of string (date) Перенесённые рабочие дни, выпавшие на выходные
shortDays array of string (date)

Тест пакета (tests/*.test.yaml)

Раздел генерируется make docs-gen из кода — не правьте его руками.

Источник: packages/schema/v1/test.schema.json.

test

Файл <имя>.test.yaml в каталоге tests/ пакета. Прогоняет ядро (POST /packages:test) тем же движком, что живой прогон, в песочнице: задачи, approvals и таймеры — в памяти, скиллы, агенты и память — заглушки, проверенные по схемам каталога, время виртуальное. Побочных эффектов нет.

Поле Тип Обязательно Описание
$schema string
process string да Ключ процесса пакета
version integer По умолчанию — версия в пакете
name string да
description string
given объект
mocks объект
steps array of testStep да
coverage объект

test.given

Поле Тип Обязательно Описание
clock string (date-time) Начальное виртуальное время
data object Начальные данные экземпляра (без события старта)
stage string Начать с открытой стадии
fromInstance string Только пробный прогон на стенде: состояние копируется из живого экземпляра
calendar string Ключ календаря вместо календаря процесса
principals map → array of string Роль → вымышленные principal теста (для назначений и разделения обязанностей)

test.mocks

Поле Тип Обязательно Описание
skills map → array of mockAnswer name@version → ответы по порядку вызовов (или по when); выход проверяется по схеме скилла из каталога
agents map → array of mockAnswer
recall array of mockAnswer Ответы памяти шагам recall; step — id шага, when — CEL над запросом

test.coverage

Поле Тип Обязательно Описание
minimum number Порог покрытия элементов процесса этим тестом, %

mockAnswer

Поле Тип Обязательно Описание
step string
when string CEL над input вызова
output любое
error объект
timeout = true

Ровно одно из: output, error, timeout.

mockAnswer.error

Поле Тип Обязательно Описание
type string да
status integer
detail string

testStep

Поле Тип Обязательно Описание
emit объект
advance string Сдвиг виртуального времени (ISO 8601, P3D) или до момента: until:<id таймера>
complete объект
approve объект
expect объект

Ровно одно из: emit, advance, complete, approve, expect.

testStep.emit

Поле Тип Обязательно Описание
event string
observation string
source string
payload object

Ровно одно из: event, observation.

testStep.complete

Поле Тип Обязательно Описание
step string да
by string principal теста или agent:<key>
output object Данные формы или результат агента; проверяются по схеме формы
cancel = true

testStep.approve

Поле Тип Обязательно Описание
step string да
by string да
decision approve | reject да
expectRefused string Код отказа ядра, например separation_of_duties_violation

testStep.expect

Поле Тип Обязательно Описание
stages map → open | completed | skipped | not_started
milestones array of string
tasks array of объект
timers array of объект
data object Путь в данных → ожидаемое значение
events array of string Типы событий process.* с последнего expect
memory объект
outcome string
status running | suspended | completed | failed | cancelled
error string
noSideEffects = true

testStep.expect.tasks[]

Поле Тип Обязательно Описание
step string
status string
assignee string
due string

testStep.expect.timers[]

Поле Тип Обязательно Описание
id string
at string
provisional boolean

testStep.expect.memory

Поле Тип Обязательно Описание
recalled array of string
remembered array of object

См. также