feat: complete Epic 1 production foundation

This commit is contained in:
2026-08-25 01:24:11 +03:00
parent 767428436d
commit 182bde8ac0
298 changed files with 35719 additions and 5299 deletions
+37
View File
@@ -0,0 +1,37 @@
# Единая граница выполнения 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 и этой границей не считается завершённой.