feat: harden community production foundation through story 1.5

This commit is contained in:
2026-08-14 00:21:59 +03:00
parent c30461cc92
commit f6fc2e5c9b
161 changed files with 16758 additions and 2515 deletions
+20 -12
View File
@@ -15,6 +15,7 @@
"target": "admin_api::request_context",
"event": "admin.request.completed",
"request_id": "019...",
"trace_id": "0af7651916cd43dd8448eb211c80319c",
"fields": {
"method": "GET",
"route": "/api/operations",
@@ -38,14 +39,14 @@ Admin API и MCP принимают `x-request-id` как непрозрачны
отсутствует или содержит пробелы, управляющие символы, `,`, `;`, не-ASCII
символы либо больше 128 байт, Crank создаёт UUIDv7.
Один идентификатор:
Request ID и отдельный Trace ID:
- возвращается в `x-request-id` успешного или ошибочного ответа;
- записывается в корневой span входного запроса;
- передаётся в runtime;
- возвращаются в `x-request-id`/`x-trace-id` успешного или ошибочного ответа;
- записываются в корневой span входного запроса;
- типизированно передаются в runtime;
- заменяет статические или полученные из mapping значения
`x-request-id` и `x-correlation-id` перед исходящим REST-запросом;
- сохраняется в прикладной истории вызова.
- сохраняются в прикладной истории вызова.
`request id` не является `trace id` и не подменяет распределённую
трассировку.
@@ -214,15 +215,22 @@ series и расход памяти измеряются в истории 1.8;
## Распределённые трассы
Crank принимает и передаёт стандартный W3C `traceparent` на границах Admin
API, MCP и исходящих REST-вызовов. `x-request-id` остаётся отдельным
идентификатором запроса. Baggage не извлекается и не передаётся.
API, MCP и исходящих REST-вызовов. Ровно один canonical parent принимается;
duplicate, malformed, uppercase и zero-ID значения заменяются новым local
trace без echo входа. `x-request-id` остаётся отдельным идентификатором
запроса, а `x-trace-id` — безопасным локальным support ID. Caller
`tracestate` ограничен 512 байтами/32 members, baggage — 8192 байтами/64
members; Community allowlist пуста, поэтому они не извлекаются и не
передаются.
Экспорт отключён по умолчанию: при пустых
`OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` и `OTEL_EXPORTER_OTLP_ENDPOINT`
provider, batch processor и фоновый поток не создаются. После включения
используется только OTLP/HTTP binary protobuf. Community Compose не включает
Collector или хранилище трасс: оператор подключает внешний совместимый
приёмник.
`OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` и `OTEL_EXPORTER_OTLP_ENDPOINT` local
provider сохраняет span topology и Trace ID, но exporter, batch processor,
фоновая очередь и сетевой трафик не создаются. Поэтому response, runtime и
Invocation History получают Trace ID независимо от sampling/export. После
включения используется только OTLP/HTTP binary protobuf. Community Compose
не включает Collector или хранилище трасс: оператор подключает внешний
совместимый приёмник.
Уровень эксплуатационных журналов не отключает трассы. В OTLP попадают
только явно отмеченные spans с внутренней целью `crank::trace`; события