{ "id": "ShariXKnowledgeSTRequestWontfixBPMN", "page": "sharixopen:knowledge:scenarios:st_request_wontfix", "area": "open", "type": "procedure", "title": "ST_REQUEST в WONTFIX: отрицательный результат и решение о закрытии", "status": "review", "schema_version": 1, "relations": { "related_to": [ "ShariXKnowledgeSTRequestInProcessBPMN", "ShariXKnowledgeSTRequestDoneBPMN", "ShariXKnowledgeOpenKnowledgeModulesHandlers", "ShariXKnowledgeOpenKnowledgeDomainStrequest", "ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth", "ShariXKnowledgeScenarios" ], "depends_on": [ "ShariXKnowledgeOpenKnowledgeModulesHandlers" ], "verified_by": [ "ShariXKnowledgeVerification" ] }, "extensions": { "taxonomy": { "domain": "business_processes", "lifecycle": "implemented", "component": "handlers_examples, handlers_backend, tickets, dbsynce", "parents": [ "ShariXKnowledgeScenarios" ], "terms": [ "audience_developer", "audience_support", "audience_reviewer", "audience_ai", "product_sharix_open", "material_scenario", "topic_handlers_support", "topic_security_requirements", "topic_handlers_blockly", "st_request", "ticket_wontfix", "requirement_check", "verification_workflow", "bpmn", "ticket", "blockly", "generated_python" ] }, "diagram": { "format": "bpmn", "executable": false }, "source_evidence": [ { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03" }, { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_wontfix.json", "sha256": "7958fd121808a70fa27191b81222906f326d5ec8b5a2653f88436c7b19a08d6a" }, { "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" } ], "handler_process": { "handler_id": "open_st_request_wontfix", "source_kind": "git_builtin", "canonical_python_verified": true, "reviewed_on": "2026-10-28", "generator": "tools/generate_handler_bpmn.py", "generator_sha256": "ca837a7b9e55bf58184bdf408a8035d25667ed9c5d3068ca52380b2ff5682f95", "models": { "logic": "33213870ee653c96b28dc0af5dc41bb7566b123e28b2f7e26fb491b9902281f6", "complete": "64e14afe814c90d92e630b6a861ee915caacf371934eff683996c2fa0aeea502" } }, "classification": { "schema": "sharix.knowledge.classification.v1", "products": [ "sharix_open" ], "audiences": [ "developer", "support", "reviewer", "ai" ], "material": "scenario", "topics": [ "handlers/support", "security/requirements", "handlers/blockly" ], "tag_terms": [ "audience_developer", "audience_support", "audience_reviewer", "audience_ai", "product_sharix_open", "material_scenario", "topic_handlers_support", "topic_security_requirements", "topic_handlers_blockly", "st_request", "ticket_wontfix", "requirement_check", "verification_workflow", "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": 22, "original_source_evidence_recheck": "После git fetch все исходные SHA-256 совпали; source_evidence содержит текущие проверенные commits", "canonical_regeneration": { "kind": "ticket", "compared_python_paths": [ "handlers/open_st_request_wontfix.py", "generated_handlers/open_st_request_wontfix.py" ], "generator_sources_verified": 11, "handler_executed": false }, "runtime_checked": false } }, "content_sha256": "ac76d35524d99e33e2cc9f664186a8b7fdf8802b4d7d3eb449844a8464519b91", "schema": 1 } ====== ST_REQUEST в WONTFIX: отрицательный результат и решение о закрытии ====== ~~NOCACHE~~ **Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]]. **Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[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_wontfix'', тип ''ST_REQUEST'' (1), рабочий статус ''WONTFIX'' (149). 31.10.2026 исходники повторно получены из Git. Обе Python-копии совпали с новой канонической генерацией Blockly. Сам обработчик и его внешние действия при анализе не запускались. Выбранная версия, настройки и работоспособность конкретной установки проверяются отдельно. ===== Назначение и границы ===== Для обычной заявки WONTFIX: * фиксирует уже принятое решение «не будет исправлено»; * ожидает отдельного решения о закрытии; * не выбирает основание отказа и не добавляет объяснение в карточку; * не закрывает заявку по таймеру. STREQ_AUTOACCEPT здесь не используется. Для document-verification-v1 и requirement-check-v1 действует профильное завершение: - Backend фиксирует отрицательный результат конкретной проверки. - Пересчитывает связанных потребителей. - Runtime отправляет итоговое уведомление. - Отдельно запрашивает CLOSED. Это не глобальное удаление документов, отзыв всех прежних подтверждений или деактивация связанных объектов. Оба BPMN-процесса имеют ''isExecutable=false''. Это описание реализации, а не исполняемый workflow Wiki. 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_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_wontfix.json", "repository": "sharix-open-handlers-examples", "sha256": "7958fd121808a70fa27191b81222906f326d5ec8b5a2653f88436c7b19a08d6a"}, {"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"}]} wontfix_start wontfix_status wontfix_special wontfix_complete wontfix_notify wontfix_close wontfix_confirmed wontfix_remove wontfix_end wontfix_stale wontfix_stale_end wontfix_manual wontfix_missing wontfix_complete_error wontfix_completion_retry wontfix_notify_error wontfix_close_error wontfix_generic wontfix_wait wontfix_timer wontfix_revision wontfix_ready wontfix_Flow_0 wontfix_Flow_0 wontfix_Flow_22 wontfix_Flow_1 wontfix_Flow_2 wontfix_Flow_1 wontfix_Flow_4 wontfix_Flow_5 Доменный результат + marker completed + consumer_evaluations. Разбор — на отдельной схеме. wontfix_Flow_4 wontfix_Flow_6 wontfix_Flow_6 wontfix_Flow_7 В текущем runtime после успешного ответа complete. Не требует consumer_evaluations=all ok. wontfix_Flow_7 wontfix_Flow_8 wontfix_Flow_8 wontfix_Flow_9 wontfix_Flow_11 wontfix_Flow_9 wontfix_Flow_10 wontfix_Flow_10 wontfix_Flow_2 wontfix_Flow_3 wontfix_Flow_3 ST_REQUEST_WONTFIX_RECHECK_SECONDS, журнал st_request_wontfix; autoaccept здесь не проверяется. wontfix_Flow_5 wontfix_Flow_12 wontfix_Flow_11 wontfix_Flow_13 wontfix_Flow_13 wontfix_Flow_14 wontfix_Flow_15 wontfix_Flow_16 DEFERRED_TICKET_RECHECK_SECONDS. Завершённый backend complete не откатывается. wontfix_Flow_15 wontfix_Flow_16 wontfix_Flow_17 wontfix_Flow_12 wontfix_Flow_14 wontfix_Flow_17 wontfix_Flow_18 wontfix_Flow_19 wontfix_Flow_18 wontfix_Flow_20 deferred_until wontfix_Flow_19 wontfix_Flow_21 При смене владельца убрать локальный снимок; при той же стадии повторить проход. wontfix_Flow_20 wontfix_Flow_21 wontfix_Flow_22 * Снимок уже не в ''WONTFIX'' — запросить удаление Ticket из локальной очереди и удаление комнаты. * Обычный Ticket — записать локальную причину ''support_closure_decision'', назначить defer по ''ST_REQUEST_WONTFIX_RECHECK_SECONDS'' и освободить worker. Причина в журнале defer — ''st_request_wontfix''; сохранённая локальная причина остаётся ''support_closure_decision''. * Профильный контракт — вызвать ''complete_verification_workflow''. Scoped backend API требует handler identity, capability ''verification.workflow'' и доступ к данному Ticket. Успешный ответ обрабатывается отдельно от смены статуса: уведомления, журнал, затем запрос ''CLOSED'' через scoped Ticket API. 404 при переходе в ''CLOSED'' запрашивает локальную очистку как для устаревшего контекста. Ошибки отправки/перехода вне локального catch приводят к общему ''processing_error'' и ''DEFERRED_TICKET_RECHECK_SECONDS''; уже committed доменный результат не откатывается. ===== Отрицательное завершение в backend (BPMN) ===== {"notes": ["Показана ветвь первого complete для WONTFIX, а не для DONE.", "Процесс isExecutable=false. Источники закреплены по Git SHA и SHA-256.", "Отрицательная проверка не аннулирует автоматически предыдущие DocumentVersion и не отменяет чужие одобрения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_wontfix.json", "repository": "sharix-open-handlers-examples", "sha256": "7958fd121808a70fa27191b81222906f326d5ec8b5a2653f88436c7b19a08d6a"}, {"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_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 В WONTFIX не создаётся DocumentVersion, существующая проверенная версия этим вызовом не удаляется. Ветвь не проверяет draft_revision как положительная проверка. complete_Flow_6 complete_Flow_8 complete_Flow_7 complete_Flow_9 complete_Flow_9 complete_Flow_10 complete_Flow_11 passed=False: отрицательный результат не превращается в успех из-за высокого балла. Требуются допустимая попытка и обязательный ответственный. 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_16 complete_Flow_17 complete_Flow_18 Complete на dbsynce/api/handler/ticket/{ticket_id}/verification/: - Прочитать marker verification_runtime.completed. - Если результата ещё нет — потребовать DONE либо WONTFIX. Для WONTFIX выбрать отрицательный результат. - Определить actor: явный аргумент, затем reviewer_user_id ручного результата, затем assigned_to. - Применить соответствующий контракт документа либо RequirementCheck. Handler API явный actor не передаёт. Повтор с marker имеет отдельное поведение, описанное ниже. ==== Отказ в проверке документа ==== Для ''document-verification-v1'' отрицательная ветвь сохраняет ''outcome=failed'' и комментарий результата. Она не создаёт ''DocumentVersion'', не удаляет существующую проверенную версию и не меняет её на «отрицательную версию». Проверки актуальности ''draft_revision'', которые выполняются при положительном создании версии, в этой отрицательной ветви не запускаются. Отказ по новой заявке не следует трактовать как автоматическое аннулирование старого проверенного документа. Если нужен отзыв прежнего подтверждения или замена документа, это отдельное доменное действие; текущий обработчик не выполняет его скрыто. ==== Отказ по RequirementCheck ==== Для requirement-check-v1: * связанная попытка должна существовать; * у PENDING применяется passed=False, actor, комментарий и применимые поля баллов через доменную операцию; * проверяются связь с Ticket, допустимость завершения попытки и обязательный ответственный. Высокий балл не превращает явный отрицательный результат в положительный. Если попытка уже завершена: * **FAILED:** совместимо с WONTFIX. * **PASSED или иное несовместимое состояние:** ошибка, прежний результат не перезаписывается. * **Попытка отсутствует:** ошибка связи. Нужно сверить Ticket и фактическую попытку, а не считать complete успешным по самому запуску handler. ==== Пересчёт потребителей ==== После отрицательного результата backend всё равно вызывает ''reevaluate_ticket_consumers'': собирает найденных потребителей, вычисляет требования, при ''ok=true'' вызывает ''resume_approved_activation''. Это не отмена отказа. Другие действительные подтверждения и требования могут сохраняться, поэтому итог ''ok'' не выводится только из одного ''WONTFIX''. Возобновление следует канонической границе ранее одобренной активации. Для ''ACCESS_REQUEST''/''NEG_REQUEST'' будится текущий handler; для исторического ''ST_REQUEST'' проверяется соответствующий gate. Отрицательная проверка не выдаёт новое одобрение, не обходит требования и не означает автоматическую деактивацию. Backend сохраняет marker, outcome и ''consumer_evaluations'', возвращает итоговое сообщение автору. Runtime после успешного ответа запрашивает ''CLOSED''; он не требует положительного outcome или успеха всех consumer evaluations перед закрытием Ticket. Закрытие отрицательной проверки является штатным поведением. ===== Повтор и частично выполненная последовательность ===== Повторный ''complete'' при сохранённом marker возвращает прежние outcome/details и ещё не подтверждённое уведомление. Результат и consumer evaluations заново не вычисляются. Поэтому marker — граница идемпотентности этого Ticket, а не команда пересмотреть ранее сохранённое решение после переоткрытия. Частично выполненную последовательность разбирать по отдельным фактам: * результат сохранён в backend, но ответ мог потеряться; * уведомление отправлено, но ack мог не сохраниться; * CLOSED мог ещё не сохраниться после успешного доменного результата. Сначала перечитать эти состояния. Стирание marker или повтор отрицательного решения вслепую не исправляют транспортную ошибку. ===== Внешнее решение для обычной заявки ===== Обычный Ticket в ''WONTFIX'' остаётся на ожидании. Пользователь с доступом и правом смены статуса может выбрать ''CLOSED'' либо ''REOPENED'' согласно текущему lifecycle. Авторство само по себе не разрешает переход. Ветка autoaccept и автоматический таймер закрытия отсутствуют; очередной срок defer лишь разрешает новый проход. После commit канонический backend направляет события смены владельца; прежний handler исключает локальный снимок по ''ticket.moved''. При переоткрытии новый владелец — ''open_st_request_reopened''. Отдельного ''open_st_request_closed'' в текущем каталоге нет. При потере события scoped periodic reconciliation восстанавливает состав очереди. Внешний пользовательский переход, commit и best-effort доставка XMPP разобраны также в [[sharixopen:knowledge:scenarios:st_request_inprocess|сценарии IN_PROCESS]]. ===== Уведомления и интервалы ===== Итоговое уведомление получает автор через защищённый API получателей. Подтверждение ключа ''ack_notification'' сохраняется после попытки отправки; оно не доказывает прочтение человеком. Потеря ack может вызвать повтор сообщения, но не должна создавать второй доменный результат при сохранённом marker. ^ Ситуация ^ Ожидание / причина ^ | Обычная заявка | ''ST_REQUEST_WONTFIX_RECHECK_SECONDS''; ''support_closure_decision'', журнал ''st_request_wontfix'' | | Ошибка HTTP/разбора ''complete'' | 300 секунд; ''verification_completion_error'' | | Иное исключение отправки/перехода | ''DEFERRED_TICKET_RECHECK_SECONDS''; ''processing_error'' | | Периодическая сверка | ''INTERVAL_TIME_BD_REQ''; scoped список | 300 секунд — текущая константа Python. Defer находится в памяти и не занимает worker. Новая authoritative revision может снять ожидание; дубликат того же снимка — нет. После рестарта runtime заново сверяется с backend. Фактический запуск зависит также от соединения и свободного worker. ===== Что различать при диагностике ===== При диагностике сверить: - Контракт и выбранную версию handler. - Статус Ticket и состояние связанной попытки/документа. - Marker completed, outcome и consumer_evaluations. - Ключ ack уведомления. - Отдельный результат перехода CLOSED. Для обычной заявки ожидание решения штатно. Для профильной несовместимый терминальный результат требует разбора решения, а не только сетевой проверки. ===== Проверенные источники ===== Git SHA и SHA-256 закреплены в metadata и documentation BPMN. Изменение источников требует повторного сопоставления алгоритма и внешних контрактов. * [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_st_request_wontfix.py|sharix-open-handlers-examples / handlers/open_st_request_wontfix.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb. * [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_st_request_wontfix.json|sharix-open-handlers-examples / generated_handler_blocks/open_st_request_wontfix.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:scenarios:st_request_done|DONE: положительная ветвь и подтверждение закрытия]] * [[sharixopen:knowledge:modules:handlers|Обработчики и канонический Python]] * [[sharixopen:knowledge:scenarios:start|Все сценарии]] ~~SHARIX_KNOWLEDGE_RELATED~~