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
+38 -3
View File
@@ -318,6 +318,17 @@ Crank сохраняет в PostgreSQL данные о тестовых запу
опубликованных MCP-инструментов. Это отдельная прикладная история, а не
копия stdout.
Новые записи сохраняют точную Operation version и закрытую классификацию
`execution_stage`, `execution_error_code`, `retryability` и
`outcome_certainty`. Admin Draft Test и MCP используют одну taxonomy; transport
может отличаться, но не смысл результата. Legacy-записи до migration v5 имеют
`NULL` в этих полях — Crank не выдумывает исторические исходы.
`outcome_unknown` означает, что внешний side effect мог произойти до timeout
или transport failure. Такой исход требует ручной сверки и никогда не является
сигналом для автоматического повтора. Request ID и Trace ID остаются полями
корреляции и не используются как Prometheus labels.
Если внешнее действие завершилось, но PostgreSQL отклонил запись истории,
Crank не меняет фактический результат и не повторяет действие. Вместо
синтетической записи создаётся эксплуатационный инцидент `DC-08`:
@@ -337,12 +348,25 @@ Crank не меняет фактический результат и не пов
- операция;
- агент, если вызов пришел через MCP;
- request id;
- Request ID и Trace ID;
- статус;
- HTTP status code внешнего API;
- время выполнения;
- краткий preview запроса и ответа;
- категория ошибки, если вызов завершился ошибкой.
- execution stage, error code, retryability и certainty, если вызов завершился
ошибкой.
Previews проходят единый redaction/size limit до записи в PostgreSQL, Admin API
и CSV. Raw credentials, arbitrary headers/body и неограниченный текст ошибки не
являются частью Invocation History. Legacy-записи могут иметь пустые typed
execution fields; новые записи должны содержать Request ID и Trace ID.
Admin Logs API поддерживает workspace-scoped фильтры `period`, `level`,
`status`, `source`, `operation_id`, `agent_id`, `search` и deterministic opaque
cursor pagination. Detail view показывает те же безопасные поля и не раскрывает
foreign-scope metadata через counts или разные формы ошибок. CSV export
использует те же filters/auth/redaction и дополнительно экранирует
spreadsheet-formula cells.
При обновлении опубликованного MCP-каталога событие `mcp.catalog.analyzed`
содержит `tool_count`, `serialized_bytes`, `estimated_context_tokens`,
@@ -359,7 +383,18 @@ Crank не меняет фактический результат и не пов
- успешные и ошибочные вызовы;
- долю ошибок;
- задержки p50, p95 и p99;
- распределение вызовов по операциям.
- распределение вызовов по операциям;
- распределение по Agent;
- outcome groups `success`, `upstream`, `client`, `schema`, `crank`.
Периоды считаются в UTC как half-open interval `[start, end)`, поэтому запись
на правой границе периода не дублируется в соседнем окне. Retention удаляет
только старые Invocation History rows по typed observable outcome. Cleanup
сохраняет публичный usage horizon последних 90 дней даже при более агрессивном
requested cutoff и возвращает typed policy/outcome (`requested_cutoff`,
`effective_cutoff`, deleted count, preserved window). Published Version audit,
Agent snapshots и immutable release evidence не являются объектами retention
cleanup.
## Для чего это нужно