{
"id": "ShariXKnowledgeSTRequestDoneBPMN",
"page": "sharixopen:knowledge:scenarios:st_request_done",
"area": "open",
"type": "procedure",
"title": "ST_REQUEST в DONE: подтверждение закрытия и завершение проверки",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeSTRequestInProcessBPMN",
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeDomainStrequest",
"ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",
"ShariXKnowledgeScenarios"
],
"depends_on": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeModulesBackenddbsynce"
],
"verified_by": [
"ShariXKnowledgeVerification"
]
},
"extensions": {
"taxonomy": {
"domain": "business_processes",
"lifecycle": "implemented",
"component": "handlers_examples, handlers_backend, tickets, dbsynce",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_integrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_handlers_support",
"topic_security_requirements",
"topic_handlers_blockly",
"st_request",
"ticket_done",
"verification_workflow",
"requirement_check",
"document_version",
"verification_completed",
"notification_ack",
"bpmn",
"ticket",
"blockly",
"generated_python"
]
},
"diagram": {
"format": "bpmn",
"executable": false
},
"source_evidence": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_st_request_done.py",
"sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_st_request_done.json",
"sha256": "dda48f4655ad0478a020114a31d7e1cb89547416a69ad2a99fdced1daee5db3c"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "catalog.py",
"sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/blockly_runtime.py",
"sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/requesters.py",
"sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_blockly_codegen.py",
"sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_codegen_contract.json",
"sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "lib/tickets.py",
"sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "services/verification_results.py",
"sha256": "682c5f6869373e649d6d62f44e63e8fb3bb34cf6bfc85d0187b26b2c96984e91"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "services/st_request_contracts.py",
"sha256": "9c1553437dbff63c608504ee000fa67a9be6e9887b1df0599552aa4d9141276c"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "utils.py",
"sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "views/ticket_detail.py",
"sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/views/handler_workflow.py",
"sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "services/handler_wakeup.py",
"sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/handler_workflow.py",
"sha256": "0f699a4e16760cbbdd09d894093c685ba69073fedf0522852cb1fdc9811636e3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/verification_workflow.py",
"sha256": "9fe62f8344d7fd78e5af0ce025c82ba4f7d21759e71f518df1186a1d6a4a0644"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/document_verification.py",
"sha256": "1692ec40fb8503368a38e154dc4c53644c25a825efc91a87b34bde8065b387bb"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/verification_responsibility.py",
"sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/verification_algorithms.py",
"sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/requirement_checks.py",
"sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/activation.py",
"sha256": "f78d4e219a5b83c7952bd366a4e7a711589b1d382af653a0c453c0524e4220f7"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "models/ticket.py",
"sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
}
],
"handler_process": {
"handler_id": "open_st_request_done",
"source_kind": "git_builtin",
"canonical_python_verified": true,
"reviewed_on": "2026-10-28",
"generator": "tools/generate_handler_bpmn.py",
"generator_sha256": "ca837a7b9e55bf58184bdf408a8035d25667ed9c5d3068ca52380b2ff5682f95",
"models": {
"logic": "4e91102aaf470e24e42573637b3187e7c463c7c3c0d4343330e3802581a0e03b",
"complete": "2a776584735b60aa745eec11fbb27260dec2907abce0de21221a9dbdb0fd6385"
}
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open"
],
"audiences": [
"developer",
"integrator",
"support",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"handlers/support",
"security/requirements",
"handlers/blockly"
],
"tag_terms": [
"audience_developer",
"audience_integrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_handlers_support",
"topic_security_requirements",
"topic_handlers_blockly",
"st_request",
"ticket_done",
"verification_workflow",
"requirement_check",
"document_version",
"verification_completed",
"notification_ack",
"bpmn",
"ticket",
"blockly",
"generated_python"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
},
"editorial_review": {
"date": "2026-10-31",
"scope": "Конкретизация действий, условий, результатов и диагностики; перечисления; исходные BPMN сохранены",
"current_source_records_verified": 23,
"original_source_evidence_recheck": "После git fetch все исходные commits/SHA-256 совпали; дополнительные функциональные источники включены в source_evidence",
"canonical_regeneration": {
"kind": "ticket",
"compared_python_paths": [
"handlers/open_st_request_done.py",
"generated_handlers/open_st_request_done.py"
],
"generator_sources_verified": 11,
"handler_executed": false
},
"runtime_checked": false
}
},
"content_sha256": "6f3ca23bd4a1e1d21027e966364d3e3a2d67d4101f56aeb0146a87093d4f33dd",
"schema": 1
}
====== ST_REQUEST в DONE: подтверждение закрытия и завершение проверки ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#integrator|Интегратор]] · [[sharixopen:knowledge:classification:audiences#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#st_request|Обработчики → ST_REQUEST]] · [[sharixopen:knowledge:classification:topics#trebovanija|Доступ → Требования]] · [[sharixopen:knowledge:classification:topics#blockly|Обработчики → Blockly]].
**Область:** ShariX Open. **Обработчик:** ''open_st_request_done'', тип ''ST_REQUEST'' (1), рабочий статус ''DONE'' (141). 31.10.2026 исходники повторно получены из Git. Обе Python-копии совпали с новой канонической генерацией Blockly; проверены 11 исходников генераторов. Сам обработчик и его внешние действия не запускались. Выбранная версия и работающая установка проверяются отдельно.
===== Назначение и границы =====
DONE — стадия Ticket. Дальнейшее поведение зависит от контракта:
* **Обычное обращение:** ждать отдельного подтверждения закрытия.
* **document-verification-v1 / requirement-check-v1:** вызвать backend complete, отправить итоговое уведомление и запросить CLOSED.
STREQ_AUTOACCEPT здесь не используется; таймер обычной заявки не выбирает решение за пользователя.
Просмотрщик Wiki показывает описание, а не исполняет обработчик. Схемы помечены ''isExecutable=false''; runtime исполняет выбранный проверенный Python, сгенерированный из Blockly. End event завершает конкретный проход, а не объявляет успех всех связанных требований.
===== Один проход, ожидание и закрытие (BPMN) =====
{"notes": ["Только опубликованный Git built-in. Никакой код обработчика при генерации не исполняется.", "End event — конец показанной операции; процесс isExecutable=false.", "deferred_until — символ срока в локальной памяти runtime."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_done.json", "repository": "sharix-open-handlers-examples", "sha256": "dda48f4655ad0478a020114a31d7e1cb89547416a69ad2a99fdced1daee5db3c"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/verification_results.py", "repository": "sharix-open-tickets", "sha256": "682c5f6869373e649d6d62f44e63e8fb3bb34cf6bfc85d0187b26b2c96984e91"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/st_request_contracts.py", "repository": "sharix-open-tickets", "sha256": "9c1553437dbff63c608504ee000fa67a9be6e9887b1df0599552aa4d9141276c"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_workflow.py", "repository": "sharix-open-backend", "sha256": "0f699a4e16760cbbdd09d894093c685ba69073fedf0522852cb1fdc9811636e3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_workflow.py", "repository": "sharix-open-backend", "sha256": "9fe62f8344d7fd78e5af0ce025c82ba4f7d21759e71f518df1186a1d6a4a0644"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/document_verification.py", "repository": "sharix-open-backend", "sha256": "1692ec40fb8503368a38e154dc4c53644c25a825efc91a87b34bde8065b387bb"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/activation.py", "repository": "sharix-open-backend", "sha256": "f78d4e219a5b83c7952bd366a4e7a711589b1d382af653a0c453c0524e4220f7"}]}
done_start
done_status
done_special
done_complete
done_notify
done_close
done_confirmed
done_remove
done_end
done_stale
done_stale_end
done_manual
done_missing
done_complete_error
done_completion_retry
done_notify_error
done_close_error
done_generic
done_wait
done_timer
done_revision
done_ready
done_Flow_0
done_Flow_0
done_Flow_22
done_Flow_1
done_Flow_2
done_Flow_1
done_Flow_4
done_Flow_5
Доменный результат + marker completed + consumer_evaluations. Разбор — на отдельной схеме.
done_Flow_4
done_Flow_6
done_Flow_6
done_Flow_7
В текущем runtime после успешного ответа complete. Не требует consumer_evaluations=all ok.
done_Flow_7
done_Flow_8
done_Flow_8
done_Flow_9
done_Flow_11
done_Flow_9
done_Flow_10
done_Flow_10
done_Flow_2
done_Flow_3
done_Flow_3
ST_REQUEST_DONE_RECHECK_SECONDS, журнал st_request_done; autoaccept здесь не проверяется.
done_Flow_5
done_Flow_12
done_Flow_11
done_Flow_13
done_Flow_13
done_Flow_14
done_Flow_15
done_Flow_16
DEFERRED_TICKET_RECHECK_SECONDS. Завершённый backend complete не откатывается.
done_Flow_15
done_Flow_16
done_Flow_17
done_Flow_12
done_Flow_14
done_Flow_17
done_Flow_18
done_Flow_19
done_Flow_18
done_Flow_20
deferred_until
done_Flow_19
done_Flow_21
При смене владельца убрать локальный снимок; при той же стадии повторить проход.
done_Flow_20
done_Flow_21
done_Flow_22
Сначала runtime проверяет свой рабочий статус. Чужой статус означает очистку локального Ticket и комнаты. В своём статусе профильный контракт идёт в ''complete_verification_workflow''; остальные обращения получают локальную причину ''support_closure_confirmation'' и defer по ''ST_REQUEST_DONE_RECHECK_SECONDS''. Строка ''st_request_done'' используется в журнале defer и не заменяет сохранённую локальную причину.
Профильная ветвь вызывает scoped ''dbsynce/api/handler/ticket/{ticket_id}/verification/'' с действием ''complete''. Backend проверяет handler identity, capability ''verification.workflow'' и scope конкретного Ticket. При успешном HTTP/JSON-ответе runtime отправляет возвращённые уведомления, пишет message ответа в журнал и запрашивает ''CLOSED'' через scoped Ticket API. В изученном runtime нет дополнительного условия «все consumer_evaluations имеют ok» перед ''CLOSED''.
404 при переходе в ''CLOSED'' запрашивает локальную очистку как для устаревшего scope. Остальные ошибки перехода или отправки идут в общий ''processing_error'' и defer по ''DEFERRED_TICKET_RECHECK_SECONDS''. Успешно сохранённый backend-результат от этого не откатывается.
===== Применение результата в backend (BPMN) =====
{"notes": ["Только опубликованный Git built-in. Никакой код обработчика при генерации не исполняется.", "End event — конец показанной операции; процесс isExecutable=false.", "deferred_until — символ срока в локальной памяти runtime.", "Здесь показана ветвь первого complete для DONE. WONTFIX имеет другой результат документа.", "consumer_evaluations не являются условием CLOSED; успешная проверка не означает успех всех требований."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_done.json", "repository": "sharix-open-handlers-examples", "sha256": "dda48f4655ad0478a020114a31d7e1cb89547416a69ad2a99fdced1daee5db3c"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/verification_results.py", "repository": "sharix-open-tickets", "sha256": "682c5f6869373e649d6d62f44e63e8fb3bb34cf6bfc85d0187b26b2c96984e91"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/st_request_contracts.py", "repository": "sharix-open-tickets", "sha256": "9c1553437dbff63c608504ee000fa67a9be6e9887b1df0599552aa4d9141276c"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_workflow.py", "repository": "sharix-open-backend", "sha256": "0f699a4e16760cbbdd09d894093c685ba69073fedf0522852cb1fdc9811636e3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_workflow.py", "repository": "sharix-open-backend", "sha256": "9fe62f8344d7fd78e5af0ce025c82ba4f7d21759e71f518df1186a1d6a4a0644"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/document_verification.py", "repository": "sharix-open-backend", "sha256": "1692ec40fb8503368a38e154dc4c53644c25a825efc91a87b34bde8065b387bb"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/activation.py", "repository": "sharix-open-backend", "sha256": "f78d4e219a5b83c7952bd366a4e7a711589b1d382af653a0c453c0524e4220f7"}]}
complete_start
complete_acl
complete_seen
complete_cached
complete_cached_end
complete_check_status
complete_doc
complete_document
complete_check
complete_pending
complete_apply
complete_existing
complete_consumers
complete_mark
complete_response
complete_doc_error
complete_check_error
complete_apply_error
complete_mismatch
complete_error
complete_Flow_0
complete_Flow_0
complete_Flow_1
complete_Flow_1
complete_Flow_2
complete_Flow_4
Без повторного применения результата и пересчёта потребителей.
complete_Flow_2
complete_Flow_3
complete_Flow_3
Явный actor → reviewer_user_id → assigned_to. В handler API actor не передаётся.
complete_Flow_4
complete_Flow_5
complete_Flow_5
complete_Flow_6
complete_Flow_7
Документ и Ticket должны совпадать; stale draft отклоняется. Копируются файлы снимка, обновляется current verified version.
complete_Flow_6
complete_Flow_8
complete_Flow_7
complete_Flow_9
complete_Flow_9
complete_Flow_10
complete_Flow_11
passed=True для DONE, но score-based порог может сохранить FAILED. Требуются допустимые actor/ответственный и поля результата.
complete_Flow_10
complete_Flow_12
complete_Flow_11
complete_Flow_13
evaluate_requirements; при ok вызвать resume_approved_activation. Нет новой выдачи прав или отмены прежних отказов.
complete_Flow_8
complete_Flow_12
complete_Flow_13
complete_Flow_14
complete_Flow_14
complete_Flow_15
complete_Flow_15
complete_Flow_16
complete_Flow_17
complete_Flow_18
complete_Flow_19
complete_Flow_16
complete_Flow_17
complete_Flow_18
complete_Flow_19
Первое профильное завершение в backend:
- Проверить DONE либо WONTFIX.
- Получить metadata ручного результата.
- Определить actor: явный аргумент, затем существующий reviewer_user_id, затем assigned_to.
- Применить доменный результат отдельно от статуса Ticket.
Handler API явный actor не передаёт. Атрибуция результата не выдаёт новые права.
==== Документ ====
Для ''document-verification-v1'' в ''DONE'' backend находит документ по public id и создаёт проверенную ''DocumentVersion''. Проверяются соответствие документа Ticket, точная ''draft_revision'' и совместимость identity с уже проверенной версией. Изменившийся после запроса черновик отклоняется: требуется новая заявка проверки, а не подтверждение старой редакции.
В проверенную DocumentVersion входят:
* структурированные данные и снимки файлов;
* срок действия;
* уровень и источник проверки;
* actor и ссылка на Ticket.
Затем обновляется указатель текущей проверенной версии и планируется синхронизация документа. Сохранение формы Ticket само этого не делает.
==== RequirementCheck ====
Для requirement-check-v1:
* загрузить связанную попытку;
* у PENDING применить passed=True, actor, комментарий и применимые баллы через доменную операцию;
* проверить связь, допустимость завершения, обязательного ответственного и правила результата;
* для уже завершённой попытки требовать PASSED, иначе вернуть ошибку.
Есть существенная граница текущей реализации: у автоматического алгоритма, использующего баллы и минимальный порог, положительное ''passed=True'' не отменяет порог. Низкий результат может сохранить ''FAILED'', хотя Ticket пришёл в ''DONE''. После первого применения backend возвращает фактический outcome; runtime всё равно переходит к ''CLOSED'' после успешного ответа. Поэтому надпись ''DONE'' или ''CLOSED'' не заменяет проверку outcome и состояния ''RequirementCheck''. В схеме это отражено как доменная политика результата, а не как безусловное «DONE → PASSED».
==== Потребители и активация ====
Пересчёт потребителей:
- Собрать найденных потребителей из reason проверки либо области документа.
- Исключить повторы.
- Вызвать evaluate_requirements для каждого.
- При ok=true вызвать resume_approved_activation.
Это возобновление ранее одобренного процесса; выполнение одной проверки не отменяет остальные требования.
Это возобновление ранее одобренного процесса. Для ''ACCESS_REQUEST''/''NEG_REQUEST'' оно будит текущий handler, оставляя решение в его Blockly-алгоритме. Для исторической активации через ''ST_REQUEST'' допускается повтор канонического gate при ''DONE''/''CLOSED''. Завершение одной проверки не выдаёт новое одобрение и не обходит оставшиеся обязательные требования.
Backend сохраняет ''verification_runtime.completed'', outcome, details и ''consumer_evaluations''. Успех отдельной проверки не означает, что все потребители готовы к активации. Даже при отрицательных consumer evaluations операция ''complete'' может успешно закончиться, а Ticket — закрыться; состояние требований и активации нужно смотреть отдельно.
===== Повторный вызов и неопределённый сетевой результат =====
Если marker ''verification_runtime.completed'' уже сохранён, backend возвращает записанные outcome/details и ещё не подтверждённое итоговое уведомление. Повторное создание версии документа, применение результата и пересчёт потребителей в этой ветви не выполняются. Это идемпотентность по marker конкретного Ticket, а не разрешение автоматически пересмотреть прежнее решение после переоткрытия.
При неопределённом результате различать:
* backend уже мог сохранить complete и marker;
* Ticket ещё может оставаться DONE;
* уведомление могло уйти без сохранённого ack;
* CLOSED — отдельный запрос.
Общей транзакции этой последовательности нет. Сначала перечитать состояние; HTTP-ошибка не доказывает отсутствие результата. Для новой проверки оформляют доменную попытку/редакцию, а не стирают marker.
===== Внешнее действие для обычного обращения =====
Обычный Ticket в ''DONE'' ждёт решения пользователя с доступом и правом смены статуса. Текущий lifecycle разрешает ''CLOSED'', ''REOPENED'' или ''WONTFIX''; view/API проверяют доступ и допустимость перехода. Авторство само по себе не даёт права закрыть собственную заявку. Таймер лишь повторяет проверку состояния и не выбирает решение за пользователя.
Канонический backend после commit публикует wakeup-события; прежний handler исключает свой снимок по ''ticket.moved''. В каталоге нет отдельного ''open_st_request_closed'': после ''CLOSED'' не следует ждать ещё одной бизнес-стадии с таким именем. При переходе в ''REOPENED'' или ''WONTFIX'' работает соответствующий владелец. Подробная схема внешнего решения и доставки событий приведена в [[sharixopen:knowledge:scenarios:st_request_inprocess|сценарии IN_PROCESS]]; потерю доставки восстанавливает periodic reconciliation.
===== Уведомления и интервалы =====
Итоговое сообщение направляется автору через защищённый API получателей. Backend возвращает ключ; runtime после отправки пытается сохранить ack. Ack означает учёт попытки отправки, а не прочтение человеком; потеря ack допускает повтор сообщения. Неполученное уведомление не отменяет уже сохранённый результат.
^ Ситуация ^ Ожидание / причина ^
| Обычное обращение | ''ST_REQUEST_DONE_RECHECK_SECONDS''; ''support_closure_confirmation'', журнал ''st_request_done'' |
| Ошибка HTTP/разбора ''complete'' | 300 секунд; ''verification_completion_error'' |
| Ошибка уведомления/перехода вне локального catch | ''DEFERRED_TICKET_RECHECK_SECONDS''; ''processing_error'' |
| Сверка состава очереди | ''INTERVAL_TIME_BD_REQ''; scoped список |
300 секунд — константа изученной версии runtime. Defer хранится в памяти и освобождает worker; срок означает готовность, а не гарантию точного запуска. Новая authoritative revision может снять defer, повтор того же снимка — нет. После рестарта состояние берётся из backend заново.
===== Диагностика =====
Диагностика профильного DONE:
- Сверить статус Ticket и состояние документа/попытки.
- Проверить draft_revision и совместимость терминального состояния.
- Прочитать marker completed, outcome и consumer_evaluations.
- Сверить ответственного, применимые баллы и scoped API.
- Отдельно проверить ack и переход CLOSED.
Для обычного обращения ожидание подтверждения закрытия штатно. Для профильного DONE/CLOSED сами по себе не доказывают положительный outcome или готовность всех потребителей.
===== Проверенные источники =====
SHA-256 и параметры моделей сохранены в metadata страницы и documentation BPMN. Источники меняются — повторяется анализ, а не только обновление хешей.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_st_request_done.py|sharix-open-handlers-examples / handlers/open_st_request_done.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_st_request_done.json|sharix-open-handlers-examples / generated_handler_blocks/open_st_request_done.json]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/catalog.py|sharix-open-handlers-examples / catalog.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/blockly_runtime.py|sharix-open-handlers-backend / core/blockly_runtime.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/requesters.py|sharix-open-handlers-backend / core/requesters.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/ticket_blockly_codegen.py|sharix-open-handlers-backend / ticket_blockly_codegen.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/ticket_codegen_contract.json|sharix-open-handlers-backend / ticket_codegen_contract.json]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/lib/tickets.py|sharix-open-tickets / lib/tickets.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/services/verification_results.py|sharix-open-tickets / services/verification_results.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/services/st_request_contracts.py|sharix-open-tickets / services/st_request_contracts.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/utils.py|sharix-open-tickets / utils.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/views/ticket_detail.py|sharix-open-tickets / views/ticket_detail.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/api/views/handler_workflow.py|sharix-open-tickets / api/views/handler_workflow.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets / signals.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/services/handler_wakeup.py|sharix-open-tickets / services/handler_wakeup.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/handler_workflow.py|sharix-open-backend / apiviews/handler_workflow.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/verification_workflow.py|sharix-open-backend / lib/verification_workflow.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/document_verification.py|sharix-open-backend / lib/document_verification.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/verification_responsibility.py|sharix-open-backend / lib/verification_responsibility.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/verification_algorithms.py|sharix-open-backend / lib/verification_algorithms.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/requirement_checks.py|sharix-open-backend / lib/requirement_checks.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/activation.py|sharix-open-backend / lib/activation.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
===== Связанные материалы =====
* [[sharixopen:knowledge:scenarios:st_request_inprocess|Предыдущая стадия IN_PROCESS]]
* [[sharixopen:knowledge:modules:handlers|Обработчики и канонический Python]]
* [[sharixopen:knowledge:operations:runtime_health|Диагностика runtime]]
* [[sharixopen:knowledge:scenarios:start|Все сценарии]]
~~SHARIX_KNOWLEDGE_RELATED~~