30 KiB
30 KiB
Request Trace: req_c1a55e97a0aa45ce8c4c6c453a9ec080
- session_id: as_9d330fb7437341f18539f819dcace95f
- active_rag_session_id: 34007a57-cf69-45f1-a0cd-c6a39bd81d42
- process_version: v2
- created_at: 2026-03-26T20:17:51.253164+00:00
User Message
опиши сущность runtime health
Step bootstrap
{
"status": "started",
"details": {}
}
Event status
{
"source": "orchestrator",
"text": "Запрос принят и поставлен в обработку.",
"payload": {},
"created_at": "2026-03-26T20:17:51.255051+00:00"
}
Event status
{
"source": "orchestrator",
"text": "Запускаю процесс обработки v1.",
"payload": {
"process_version": "v2"
},
"created_at": "2026-03-26T20:17:51.255274+00:00"
}
Step bootstrap
{
"status": "completed",
"details": {}
}
Step intent_router
{
"status": "started",
"details": {}
}
Event status
{
"source": "intent_router",
"text": "Маршрутизирую запрос и определяю целевой workflow.",
"payload": {},
"created_at": "2026-03-26T20:17:51.255716+00:00"
}
Event status
{
"source": "intent_router",
"text": "Маршрут выбран: DOCUMENTATION_EXPLAIN / ENTITY_EXPLAIN.",
"payload": {
"intent": "DOCUMENTATION_EXPLAIN",
"sub_intent": "ENTITY_EXPLAIN",
"matched_intent_source": "deterministic"
},
"created_at": "2026-03-26T20:17:51.267550+00:00"
}
Step intent_router
{
"status": "completed",
"details": {
"intent": "DOCUMENTATION_EXPLAIN",
"sub_intent": "ENTITY_EXPLAIN",
"matched_intent_source": "deterministic"
}
}
Step workflow_documentation_explain
{
"status": "started",
"details": {}
}
Event status
{
"source": "task_workflow",
"text": "Запускаю workflow docs_qa.",
"payload": {
"intent": "DOCUMENTATION_EXPLAIN",
"sub_intent": "ENTITY_EXPLAIN"
},
"created_at": "2026-03-26T20:17:51.268352+00:00"
}
Event status
{
"source": "status.rag_retrieval",
"text": "RAG Retrieval",
"payload": {
"status_block": {
"id": "rag_retrieval",
"title": "RAG Retrieval",
"lines": [
"planned_layers: D3_ENTITY_CATALOG, D5_RELATION_GRAPH, D1_DOCUMENT_CATALOG, D0_DOC_CHUNKS",
"executed_layers: D3_ENTITY_CATALOG, D5_RELATION_GRAPH, D1_DOCUMENT_CATALOG, D0_DOC_CHUNKS",
"D3_ENTITY_CATALOG: 8 hits",
"D5_RELATION_GRAPH: 8 hits",
"D1_DOCUMENT_CATALOG: 4 hits",
"D0_DOC_CHUNKS: 4 hits"
],
"append": false
},
"kind": "task_progress"
},
"created_at": "2026-03-26T20:17:58.665245+00:00"
}
Event status
{
"source": "status.workflow",
"text": "Task Workflow",
"payload": {
"status_block": {
"id": "workflow",
"title": "Task Workflow",
"lines": [
"workflow_id: docs_qa",
"prompt: docs_explain_answer",
"answer_mode: answered"
],
"append": false
},
"kind": "task_progress"
},
"created_at": "2026-03-26T20:17:58.666116+00:00"
}
Event status
{
"source": "status.evidence_gate",
"text": "Evidence Gate",
"payload": {
"status_block": {
"id": "evidence_gate",
"title": "Evidence Gate",
"lines": [
"decision: allow",
"reason: evidence_sufficient",
"satisfied: retrieval_non_empty, exact_anchor_match"
],
"append": false
},
"kind": "task_progress"
},
"created_at": "2026-03-26T20:17:58.666391+00:00"
}
Event status
{
"source": "rag_retrieval",
"text": "RAG retrieval завершен.",
"payload": {
"planned_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"executed_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"non_empty_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
]
},
"created_at": "2026-03-26T20:17:58.666626+00:00"
}
Event status
{
"source": "evidence_gate",
"text": "Evidence gate оценен.",
"payload": {
"decision": "allow",
"reason": "evidence_sufficient",
"missing": [],
"satisfied": [
"retrieval_non_empty",
"exact_anchor_match"
]
},
"created_at": "2026-03-26T20:17:58.666964+00:00"
}
Event status
{
"source": "workflow_result",
"text": "Workflow docs_qa завершен.",
"payload": {
"workflow_id": "docs_qa",
"result_type": "answer",
"answer_length": 1619
},
"created_at": "2026-03-26T20:17:58.667219+00:00"
}
Step workflow_documentation_explain
{
"status": "completed",
"details": {
"workflow_id": "docs_qa",
"meta": {
"workflow_id": "docs_qa",
"intent": "DOCUMENTATION_EXPLAIN",
"diagnostics": {
"intent": "DOCUMENTATION_EXPLAIN",
"sub_intent": "ENTITY_EXPLAIN",
"layers_used": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"documents_found": 1,
"facts_found": 0,
"relations_found": 2,
"openapi_fields_extracted": 0,
"missing_required_fields": [],
"openapi_status": {
"has_path": false,
"has_method": false,
"has_request": false,
"has_response": false
},
"prompt_used": "docs_explain_answer",
"llm_mode": "prose",
"output_valid": true,
"matched_intent_source": "deterministic",
"matched_anchor_type": "entity",
"matched_anchor_value": "runtime health",
"exact_anchor_match": true,
"docs_layers_requested": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"docs_layers_with_hits": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"planned_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"executed_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"non_empty_layers": [
"D3_ENTITY_CATALOG",
"D5_RELATION_GRAPH",
"D1_DOCUMENT_CATALOG",
"D0_DOC_CHUNKS"
],
"layer_diagnostics": {
"D3_ENTITY_CATALOG": {
"hits": 8,
"top_ids": [
"architecture.telegram_notify_app",
"domain.runtime_health",
"logic.telegram_notification_loop"
],
"top_sections": [
"RuntimeManager",
"TelegramNotifyWorker",
"WorkerStatus",
"WorkerHealth"
]
},
"D5_RELATION_GRAPH": {
"hits": 8,
"top_ids": [
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
"79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
"4e0bbeb8e97e25091a30412d8631b1d9f6bb58b5694d8b7cc632af69a9262ea8"
],
"top_sections": [
"domain.runtime_health:related_logic",
"domain.runtime_health:used_by",
"domain.runtime_health:parent",
"domain.runtime_health:part_of",
"architecture.telegram_notify_app:child"
]
},
"D1_DOCUMENT_CATALOG": {
"hits": 4,
"top_ids": [
"domain.runtime_health",
"api.control_actions_endpoint",
"architecture.telegram_notify_app",
"logic.telegram_notification_loop"
],
"top_sections": [
"Сущность runtime health",
"HTTP API /actions/{action}",
"Архитектура Telegram Notify App",
"Цикл отправки уведомлений в Telegram"
]
},
"D0_DOC_CHUNKS": {
"hits": 4,
"top_ids": [
"domain.runtime_health",
"docs/README.md",
"api.control_actions_endpoint"
],
"top_sections": [
"domain.runtime_health:Details",
"domain.runtime_health:Summary",
"docs/README.md:Навигация",
"api.control_actions_endpoint:Summary"
]
}
},
"query_entity_candidates": [
"runtime health"
],
"resolved_entity_candidates": [],
"query_anchor_candidates": [],
"resolved_anchor_candidates": [
"domain.runtime_health",
"docs/documentation/domain/runtime-health-entity.md",
"docs/README.md"
],
"anchor_candidates": [],
"selected_anchor": null,
"anchor_selection_reason": "",
"anchor_match_type": "",
"doc_ids": [
"domain.runtime_health",
"docs/README.md"
],
"doc_paths": [
"docs/documentation/domain/runtime-health-entity.md",
"docs/README.md"
],
"doc_titles": [
"Сущность runtime health",
"domain.runtime_health:Details",
"domain.runtime_health:Summary",
"docs/README.md:Навигация",
"TelegramNotifyWorker",
"WorkerStatus",
"WorkerHealth",
"domain.runtime_health:related_logic",
"domain.runtime_health:used_by",
"domain.runtime_health:parent",
"domain.runtime_health:part_of"
],
"relation_hits_count": 2,
"relation_targets": [
"domain.runtime_health:related_logic",
"domain.runtime_health:used_by"
],
"selected_doc_ids": [
"domain.runtime_health"
],
"selected_fact_ids": [],
"selected_relation_ids": [
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4"
],
"selected_chunk_ids": [
"domain.runtime_health"
],
"selected_entity_ids": [
"domain.runtime_health"
],
"selected_workflow_ids": [],
"fallback_doc_hits_count": 2,
"fallback_used": false,
"fact_hits": 0,
"entity_hits": 0,
"evidence_summary": {
"documents": 1,
"facts": 0,
"entities": 2,
"workflows": 0,
"relations": 2,
"chunks": 1,
"selected_doc_ids": [
"domain.runtime_health"
],
"selected_fact_ids": [],
"selected_relation_ids": [
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4"
],
"selected_chunk_ids": [
"domain.runtime_health"
],
"entity_hits": 0,
"openapi_signals": {
"path_found": false,
"method_found": false,
"operation_semantics_found": false,
"request_payload_found": false,
"request_schema": false,
"request_fields_found": false,
"response_payload_found": false,
"response_schema": false,
"response_fields_found": false,
"status_codes": false,
"content_type_found": false,
"examples_found": false,
"payload_description": false
}
},
"gate_decision": "allow",
"gate_decision_reason": "evidence_sufficient",
"gate_missing_requirements": [],
"gate_satisfied_requirements": [
"retrieval_non_empty",
"exact_anchor_match"
],
"openapi_evidence": {
"path_found": false,
"method_found": false,
"operation_semantics_found": false,
"request_payload_found": false,
"request_schema": false,
"request_fields_found": false,
"response_payload_found": false,
"response_schema": false,
"response_fields_found": false,
"status_codes": false,
"content_type_found": false,
"examples_found": false,
"payload_description": false
},
"requested_fragment_type": null,
"fragment_evidence_found": [],
"fragment_missing_requirements": [],
"prompt": {
"prompt_name": "docs_explain_answer",
"system_prompt": "Ты объясняешь документацию системы.\n\nНа вход приходит JSON с полями:\n- question\n- intent\n- sub_intent\n- documents\n- facts\n- relations\n\nПравила:\n- Используй только предоставленные факты\n- Не додумывай\n- Если данных недостаточно, скажи это явно\n- Объясняй структурировано\n\nФормат ответа:\n1. Краткое описание\n2. Основные элементы\n3. Как это работает\n4. Связи с другими частями системы (если есть)",
"user_prompt": "{\n \"question\": \"опиши сущность runtime health\",\n \"intent\": \"DOCUMENTATION_EXPLAIN\",\n \"sub_intent\": \"ENTITY_EXPLAIN\",\n \"documents\": [\n {\n \"layer\": \"D1_DOCUMENT_CATALOG\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"Сущность runtime health\",\n \"content\": \"`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.\",\n \"metadata\": {\n \"name\": \"runtime_health\",\n \"tags\": [\n \"domain\",\n \"health\",\n \"observability\"\n ],\n \"type\": \"domain_entity\",\n \"layer\": \"domain\",\n \"links\": [\n {\n \"type\": \"part_of\",\n \"target\": \"architecture.telegram_notify_app\"\n },\n {\n \"type\": \"used_by\",\n \"target\": \"api.health_endpoint\"\n },\n {\n \"type\": \"related_logic\",\n \"target\": \"logic.telegram_notification_loop\"\n }\n ],\n \"owner\": null,\n \"title\": \"Сущность runtime health\",\n \"doc_id\": null,\n \"module\": \"telegram_notify_app\",\n \"parent\": \"architecture.telegram_notify_app\",\n \"status\": \"draft\",\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"children\": [],\n \"doc_kind\": \"misc\",\n \"entities\": [\n \"WorkerHealth\",\n \"WorkerStatus\",\n \"TelegramNotifyWorker\"\n ],\n \"updated_at\": \"2026-03-20\",\n \"doc_version\": null,\n \"document_id\": \"domain.runtime_health\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"summary_text\": \"`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.\",\n \"artifact_type\": null,\n \"last_modified\": null,\n \"staleness_score\": null,\n \"system_component\": null\n }\n }\n ],\n \"facts\": [],\n \"entities\": [\n {\n \"layer\": \"D3_ENTITY_CATALOG\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"TelegramNotifyWorker\",\n \"content\": \"TelegramNotifyWorker\",\n \"metadata\": {\n \"tags\": [\n \"domain\",\n \"health\",\n \"observability\"\n ],\n \"owner\": null,\n \"doc_id\": null,\n \"module\": \"telegram_notify_app\",\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"doc_version\": null,\n \"document_id\": \"domain.runtime_health\",\n \"entity_name\": \"TelegramNotifyWorker\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"artifact_type\": null,\n \"document_type\": \"domain_entity\",\n \"last_modified\": null,\n \"staleness_score\": null,\n \"system_component\": null\n }\n },\n {\n \"layer\": \"D3_ENTITY_CATALOG\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"WorkerStatus\",\n \"content\": \"WorkerStatus\",\n \"metadata\": {\n \"tags\": [\n \"domain\",\n \"health\",\n \"observability\"\n ],\n \"owner\": null,\n \"doc_id\": null,\n \"module\": \"telegram_notify_app\",\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"doc_version\": null,\n \"document_id\": \"domain.runtime_health\",\n \"entity_name\": \"WorkerStatus\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"artifact_type\": null,\n \"document_type\": \"domain_entity\",\n \"last_modified\": null,\n \"staleness_score\": null,\n \"system_component\": null\n }\n }\n ],\n \"workflows\": [],\n \"relations\": [\n {\n \"layer\": \"D5_RELATION_GRAPH\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"domain.runtime_health:related_logic\",\n \"content\": \"domain.runtime_health related_logic logic.telegram_notification_loop\",\n \"metadata\": {\n \"owner\": null,\n \"anchor\": \"frontmatter.links\",\n \"doc_id\": null,\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"source_id\": \"domain.runtime_health\",\n \"target_id\": \"logic.telegram_notification_loop\",\n \"doc_version\": null,\n \"relation_id\": \"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"artifact_type\": null,\n \"last_modified\": null,\n \"relation_type\": \"related_logic\",\n \"staleness_score\": null,\n \"system_component\": null\n }\n },\n {\n \"layer\": \"D5_RELATION_GRAPH\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"domain.runtime_health:used_by\",\n \"content\": \"domain.runtime_health used_by api.health_endpoint\",\n \"metadata\": {\n \"owner\": null,\n \"anchor\": \"frontmatter.links\",\n \"doc_id\": null,\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"source_id\": \"domain.runtime_health\",\n \"target_id\": \"api.health_endpoint\",\n \"doc_version\": null,\n \"relation_id\": \"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"artifact_type\": null,\n \"last_modified\": null,\n \"relation_type\": \"used_by\",\n \"staleness_score\": null,\n \"system_component\": null\n }\n }\n ],\n \"chunks\": [\n {\n \"layer\": \"D0_DOC_CHUNKS\",\n \"path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"title\": \"domain.runtime_health:Details\",\n \"content\": \"Health payload собирается runtime'ом и включает общий статус приложения и список компонентов. Для worker `telegram_notify` используются состояния `ok`, `degraded` и `unhealthy`, которые зависят от жизненного цикла фонового потока, наличия Telegram credentials и результата последней отправки.\\n\\nКлючевые metadata поля компонента — `app_started_at` и `notifications_sent`. Первое отражает UTC timestamp запуска worker'а, второе показывает число успешных доставок с момента старта runtime. Эти поля позволяют отделить реальный жизненный цикл worker'а от простого факта, что HTTP API отвечает.\\n\\nСущность `runtime health` связывает техническое состояние worker'а с операторским представлением сервиса. Через нее клиент `/health` получает не только общий статус процесса, но и диагностический контекст, достаточный для базового мониторинга и troubleshooting.\",\n \"metadata\": {\n \"tags\": [\n \"domain\",\n \"health\",\n \"observability\"\n ],\n \"type\": \"domain_entity\",\n \"order\": 2,\n \"owner\": null,\n \"doc_id\": null,\n \"module\": \"telegram_notify_app\",\n \"repo_id\": \"/Users/alex/Dev_projects_v2/apps/test_echo_app\",\n \"section\": null,\n \"blob_sha\": \"37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87\",\n \"doc_kind\": \"misc\",\n \"doc_version\": null,\n \"document_id\": \"domain.runtime_health\",\n \"source_path\": \"docs/documentation/domain/runtime-health-entity.md\",\n \"section_path\": \"Details\",\n \"artifact_type\": null,\n \"last_modified\": null,\n \"section_title\": \"Details\",\n \"staleness_score\": null,\n \"system_component\": null\n }\n }\n ]\n}",
"log_context": "graph.project_qa.docs.answer",
"prompt_stats": {
"system_chars": 393,
"user_chars": 8418,
"tokens_in_estimate": 2203
}
},
"answer_mode": "answered",
"degrade_reason": null,
"degraded_reason": null,
"code_intents_stubbed": false
}
}
}
}
Step finalize
{
"status": "started",
"details": {}
}
Event user
{
"source": "agent",
"text": "### Описание сущности Runtime Health\n\n**Runtime Health** - это доменная модель наблюдаемости сервиса, описывающая текущее состояние runtime и его компонентов. Она предназначена для использования в системах внешнего health-monitoring и внутренней диагностики.\n\n---\n\n### Основные элементы\n\n1. **Компоненты**: \n - Главный объект наблюдения - компонент `telegram_notify`.\n \n2. **Метрики и атрибуты**:\n - Статус (`ok`, `degraded`, `unhealthy`), зависящий от жизненного цикла worker'а и результатов работы.\n - Время старта (`app_started_at`) - UTC timestamp начала работы worker'а.\n - Количество успешных отправок (`notifications_sent`) - число успешно выполненных задач с момента старта.\n\n3. **Связанные сущности**:\n - `WorkerHealth`\n - `WorkerStatus`\n - `TelegramNotifyWorker`\n\n---\n\n### Как это работает\n\nМодель собирает данные о состоянии worker'ов во время выполнения и предоставляет их через endpoint `/health`. Данные включают текущий статус приложения и подробную информацию по каждому компоненту, позволяя пользователям проводить мониторинг и диагностику.\n\nДля worker'а `telegram_notify` учитывается статус, который зависит от таких факторов как наличие credentials и успешность последних операций. Ключевая информация помогает определить реальное состояние worker'а, а не просто факт доступности HTTP API.\n\n---\n\n### Связи с другими частями системы\n\n- **Используется логикой**: логика `telegram_notification_loop` использует эту модель для отслеживания состояния worker'а.\n- **Используемый API**: данные из модели передаются на endpoint `/health`, обеспечивая внешнее наблюдение за состоянием системы.",
"payload": {},
"created_at": "2026-03-26T20:17:58.668790+00:00"
}
Event status
{
"source": "orchestrator",
"text": "Обработка запроса завершена.",
"payload": {},
"created_at": "2026-03-26T20:17:58.671598+00:00"
}
Step finalize
{
"status": "completed",
"details": {}
}
Result
{
"status": "done",
"answer": "### Описание сущности Runtime Health\n\n**Runtime Health** - это доменная модель наблюдаемости сервиса, описывающая текущее состояние runtime и его компонентов. Она предназначена для использования в системах внешнего health-monitoring и внутренней диагностики.\n\n---\n\n### Основные элементы\n\n1. **Компоненты**: \n - Главный объект наблюдения - компонент `telegram_notify`.\n \n2. **Метрики и атрибуты**:\n - Статус (`ok`, `degraded`, `unhealthy`), зависящий от жизненного цикла worker'а и результатов работы.\n - Время старта (`app_started_at`) - UTC timestamp начала работы worker'а.\n - Количество успешных отправок (`notifications_sent`) - число успешно выполненных задач с момента старта.\n\n3. **Связанные сущности**:\n - `WorkerHealth`\n - `WorkerStatus`\n - `TelegramNotifyWorker`\n\n---\n\n### Как это работает\n\nМодель собирает данные о состоянии worker'ов во время выполнения и предоставляет их через endpoint `/health`. Данные включают текущий статус приложения и подробную информацию по каждому компоненту, позволяя пользователям проводить мониторинг и диагностику.\n\nДля worker'а `telegram_notify` учитывается статус, который зависит от таких факторов как наличие credentials и успешность последних операций. Ключевая информация помогает определить реальное состояние worker'а, а не просто факт доступности HTTP API.\n\n---\n\n### Связи с другими частями системы\n\n- **Используется логикой**: логика `telegram_notification_loop` использует эту модель для отслеживания состояния worker'а.\n- **Используемый API**: данные из модели передаются на endpoint `/health`, обеспечивая внешнее наблюдение за состоянием системы.",
"completed_at": "2026-03-26T20:17:58.672309+00:00"
}