{"schemaVersion":1,"state":"passed","startedAt":"2026-11-14T12:27:07.479Z","checks":[{"name":"Самостоятельная транскрипция и дедупликация трёх sinks","status":"PASS","durationMs":1246,"detail":"Повтор события сохранился один раз в архиве, чате и экспорте. Элли выключена.","evidence":{"archive":2,"chat":2,"export":2}},{"name":"Рестарт только процесса API сохраняет обработку встречи","status":"PASS","durationMs":2002,"detail":"Новый PID API; тот же PID runtime, физический/логический сеанс и generation.","evidence":{"oldApiPid":28,"apiPid":66,"runtimePid":40,"cursor":4}},{"name":"Второй runtime отклонён действующим владельцем","status":"PASS","durationMs":806,"detail":"Второй OS-процесс не получил ownership и не запустил обработку.","evidence":{"exitCode":1,"epoch":1}},{"name":"Настоящий HTTP вопрос и модель-заглушка","status":"PASS","durationMs":3633,"detail":"Вопрос прошёл ingest, очередь, provider adapter и fenced commit.","evidence":{"questionId":"ecac03b1-7ff9-4b5c-94cd-1da0a39bb1a4:question:tr-5de810437f25652671b2856d19fb8dd6392d7b7f18edd3f66f44b01652ac00b6","answerVersion":1}},{"name":"Рестарт API сохраняет начатую синтетическую озвучку","status":"PASS","durationMs":1718,"detail":"Тот же voice attempt продолжился и завершился после смены PID API.","evidence":{"requestId":"c0bb51c3-a566-4dc6-abe8-c8fe98b1d11c","runtimePid":40,"snapshotVoiceAvailable":true}},{"name":"Отмена вопроса запрещает поздний результат модели","status":"PASS","durationMs":5669,"detail":"Поздний ответ не заменил отменённую версию.","evidence":{"questionId":"ecac03b1-7ff9-4b5c-94cd-1da0a39bb1a4:question:tr-406dc5d2998fd0a4626875f5023de847039ca5102d13d4e1ba19886e9e4850cb","version":2}},{"name":"Runtime проверяет актуальные права и получает команду без NOTIFY","status":"PASS","durationMs":225,"detail":"Команда без notify была обработана через fallback; старая административная роль не дала доступ после изменения аккаунта.","evidence":{"notifySent":false}},{"name":"Crash runtime: takeover, продолжение ASR и запрет автоматического повторного запроса","status":"PASS","durationMs":95275,"detail":"Новый epoch сохранил ASR ID; неизвестная модельная попытка не повторена. Обычные права Call были доступны без runtime.","evidence":{"oldRuntimePid":40,"runtimePid":143,"oldEpoch":1,"epoch":2,"unknownCalls":1}},{"name":"Очистка и позднее событие не воскрешают текст","status":"PASS","durationMs":1348,"detail":"Checkpoint затомбстонен; архив, чат и экспорт остались пустыми.","evidence":{}},{"name":"Настоящий разрыв соединений тестовой БД имеет ограниченное ожидание","status":"PASS","durationMs":31,"detail":"Прокси разорвал только соединения отдельного стенда; API вернул 503 и восстановил соединение.","evidence":{"errorStatus":503,"elapsedMs":15}}],"logs":[{"at":"2026-11-14T12:27:07.639Z","process":"migration","message":"Applied database migration 001-initial-schema."},{"at":"2026-11-14T12:27:07.646Z","process":"migration","message":"Applied database migration 002-chat-user-backfill."},{"at":"2026-11-14T12:27:07.654Z","process":"migration","message":"Applied database migration 003-call-permissions."},{"at":"2026-11-14T12:27:07.673Z","process":"migration","message":"Applied database migration 004-meeting-materials."},{"at":"2026-11-14T12:27:07.676Z","process":"migration","message":"Applied database migration 005-live-transcription."},{"at":"2026-11-14T12:27:07.696Z","process":"migration","message":"Applied database migration 006-server-materials."},{"at":"2026-11-14T12:27:07.797Z","process":"migration","message":"Applied database migration 007-meeting-assistant."},{"at":"2026-11-14T12:27:07.808Z","process":"migration","message":"Applied database migration 008-assistant-diagnostics."},{"at":"2026-11-14T12:27:07.844Z","process":"migration","message":"Applied database migration 009-meeting-runtime."},{"at":"2026-11-14T12:27:07.879Z","process":"migration","message":"Applied database migration 010-runtime-rpc."},{"at":"2026-11-14T12:27:07.893Z","process":"migration","message":"Applied database migration 011-transcript-export."},{"at":"2026-11-14T12:27:08.026Z","process":"fakes","message":"Isolated synthetic peers ready."},{"at":"2026-11-14T12:27:09.045Z","process":"core","message":"Postgres storage is ready."},{"at":"2026-11-14T12:27:09.085Z","process":"core","message":"Rullem Call API: http://localhost:8082"},{"at":"2026-11-14T12:27:09.089Z","process":"core","message":"LiveKit: http://127.0.0.1:8081"},{"at":"2026-11-14T12:27:10.106Z","process":"runtime","message":"Rullem meeting runtime ready."},{"at":"2026-11-14T12:27:11.992Z","process":"core","message":"Exited: 0"},{"at":"2026-11-14T12:27:13.720Z","process":"core","message":"Postgres storage is ready."},{"at":"2026-11-14T12:27:13.746Z","process":"core","message":"Rullem Call API: http://localhost:8082"},{"at":"2026-11-14T12:27:13.746Z","process":"core","message":"LiveKit: http://127.0.0.1:8081"},{"at":"2026-11-14T12:27:14.678Z","process":"contender","message":"Call process initialization failed: PROCESSING_OWNER_BUSY"},{"at":"2026-11-14T12:27:14.686Z","process":"contender","message":"Exited: 1"},{"at":"2026-11-14T12:27:19.639Z","process":"runtime","message":"(node:40) DeprecationWarning: Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead."},{"at":"2026-11-14T12:27:19.639Z","process":"runtime","message":"(Use `node --trace-deprecation ...` to show where the warning was created)"},{"at":"2026-11-14T12:27:19.649Z","process":"runtime","message":"Ellie room speech: {"},{"at":"2026-11-14T12:27:19.650Z","process":"runtime","message":"  requestId: 'c0bb51c3-a566-4dc6-abe8-c8fe98b1d11c',"},{"at":"2026-11-14T12:27:19.650Z","process":"runtime","message":"  state: 'synthesizing',"},{"at":"2026-11-14T12:27:19.650Z","process":"runtime","message":"  elapsedMs: 5"},{"at":"2026-11-14T12:27:19.650Z","process":"runtime","message":"}"},{"at":"2026-11-14T12:27:20.089Z","process":"runtime","message":"Ellie room speech: {"},{"at":"2026-11-14T12:27:20.089Z","process":"runtime","message":"  requestId: 'c0bb51c3-a566-4dc6-abe8-c8fe98b1d11c',"},{"at":"2026-11-14T12:27:20.089Z","process":"runtime","message":"  state: 'synthesized',"},{"at":"2026-11-14T12:27:20.089Z","process":"runtime","message":"  elapsedMs: 445"},{"at":"2026-11-14T12:27:20.089Z","process":"runtime","message":"}"},{"at":"2026-11-14T12:27:20.113Z","process":"runtime","message":"Ellie room speech: {"},{"at":"2026-11-14T12:27:20.113Z","process":"runtime","message":"  requestId: 'c0bb51c3-a566-4dc6-abe8-c8fe98b1d11c',"},{"at":"2026-11-14T12:27:20.113Z","process":"runtime","message":"  state: 'speaking',"},{"at":"2026-11-14T12:27:20.113Z","process":"runtime","message":"  elapsedMs: 468"},{"at":"2026-11-14T12:27:20.113Z","process":"runtime","message":"}"},{"at":"2026-11-14T12:27:20.198Z","process":"core","message":"Exited: 0"},{"at":"2026-11-14T12:27:20.916Z","process":"core","message":"Postgres storage is ready."},{"at":"2026-11-14T12:27:20.942Z","process":"core","message":"Rullem Call API: http://localhost:8082"},{"at":"2026-11-14T12:27:20.942Z","process":"core","message":"LiveKit: http://127.0.0.1:8081"},{"at":"2026-11-14T12:27:21.088Z","process":"runtime","message":"Ellie room speech: {"},{"at":"2026-11-14T12:27:21.088Z","process":"runtime","message":"  requestId: 'c0bb51c3-a566-4dc6-abe8-c8fe98b1d11c',"},{"at":"2026-11-14T12:27:21.088Z","process":"runtime","message":"  state: 'finished',"},{"at":"2026-11-14T12:27:21.088Z","process":"runtime","message":"  elapsedMs: 1443"},{"at":"2026-11-14T12:27:21.088Z","process":"runtime","message":"}"},{"at":"2026-11-14T12:27:31.406Z","process":"runtime","message":"Exited: SIGKILL"},{"at":"2026-11-14T12:28:02.037Z","process":"runtime","message":"Rullem meeting runtime ready."},{"at":"2026-11-14T12:29:03.791Z","process":"core","message":"Meeting runtime command database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"core","message":"Meeting runtime command database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"core","message":"Call database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"core","message":"Call database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"runtime","message":"Call database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"runtime","message":"Call database connection unavailable."},{"at":"2026-11-14T12:29:03.791Z","process":"runtime","message":"Meeting runtime command database connection unavailable."}],"metrics":{"durationMs":116325,"commandLedger":{"rows":20,"bytes":"6399","pending":0},"parentRssBytes":101601280,"syntheticRoom":"ellie-lab-ceb20a86","database":"rullem_ellie_lab_stage02","actualPostgres":true,"actualOsChildren":true,"externalProviderCalls":0,"note":"Короткий функциональный прогон; rows/day, нагрузочная вместимость и настоящий медиазвонок этим прогоном не измерены."},"source":"stage02-independent-processes","paidModels":false,"finishedAt":"2026-11-14T12:29:03.821Z","scope":{"runId":"ceb20a86","roomName":"ellie-lab-ceb20a86","roomSid":"RM_LAB_ceb20a86","physicalId":"16f17c6a-9adc-4ead-968b-0f7102386265","logicalId":"ecac03b1-7ff9-4b5c-94cd-1da0a39bb1a4"},"processes":{"fakes":{"pid":20,"running":true,"exitCode":null,"signal":null},"core":{"pid":90,"running":true,"exitCode":null,"signal":null},"runtime":{"pid":143,"running":true,"exitCode":null,"signal":null},"contender":{"pid":78,"running":false,"exitCode":1,"signal":null}}}