38 lines
2.5 KiB
Markdown
38 lines
2.5 KiB
Markdown
# Единая граница выполнения REST Operation
|
||
|
||
Admin Draft Test и MCP `tools/call` используют один путь:
|
||
|
||
`RuntimeExecutionRequest → crank-runtime → ProtocolAdapter → crank-adapter-rest`.
|
||
|
||
До mapping и сетевого dispatch envelope фиксирует workspace, origin, точную
|
||
Operation/version, Agent для immutable snapshot, authorization, resolved auth,
|
||
correlation context и монотонный deadline. Runtime не создаёт fallback Request ID
|
||
или Trace ID. `admin_draft` не принимает Agent ID, а `agent_snapshot` требует его.
|
||
|
||
## Результат и ошибки
|
||
|
||
Успешный результат — нормализованный JSON output. Ошибка один раз преобразуется
|
||
в закрытый `ExecutionFailure`: `error_code`, `stage`, `retryability`,
|
||
`outcome_certainty`, безопасные Request/Trace IDs и ограниченный typed context.
|
||
Admin и MCP лишь проецируют этот descriptor в свои wire-ответы.
|
||
|
||
`retryability` принимает `never`, `safe`, `after_delay`, `manual_reconcile` или
|
||
`requires_confirmation`. При timeout/transport cancellation после возможного
|
||
dispatch возвращается `manual_reconcile + outcome_unknown`; автоматически
|
||
повторять такой вызов нельзя. HTTP/MCP status и текст ошибки не меняют это решение.
|
||
|
||
Raw URL, upstream body/headers, parser/Reqwest/SQLx error и секреты не входят в
|
||
ответ или Invocation History. Resolved auth и confirmation token имеют redacted
|
||
`Debug` и не сериализуются как execution envelope.
|
||
|
||
## История и совместимость
|
||
|
||
Migration v5 (`execution-outcome-v5`) добавляет nullable поля exact Operation
|
||
version, stage, stable error code, retryability и certainty. Для legacy v4 строк
|
||
они остаются `NULL`; значения не фабрикуются. Новые Admin/MCP записи сохраняют
|
||
их вместе с Request ID и Trace ID независимо от telemetry sampling.
|
||
|
||
Пути Admin API, MCP methods и успешные response fields не изменены. Поля ошибки
|
||
добавлены обратно совместимо. Outbound DNS/redirect/retry/SSRF policy принадлежит
|
||
Story 1.9 и этой границей не считается завершённой.
|