{ "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~~