{ "id": "ShariXKnowledgeSTRequestInProcessBPMN", "page": "sharixopen:knowledge:scenarios:st_request_inprocess", "area": "open", "type": "procedure", "title": "ST_REQUEST в работе: обычное обращение и профильная проверка", "status": "review", "schema_version": 1, "relations": { "related_to": [ "ShariXKnowledgeSTRequestAssignedBPMN", "ShariXKnowledgeSTRequestWaitingBPMN", "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_integrator", "audience_support", "audience_reviewer", "audience_ai", "product_sharix_open", "material_scenario", "topic_handlers_support", "topic_security_requirements", "topic_handlers_blockly", "st_request", "ticket_in_process", "verification_workflow", "bpmn", "ticket", "blockly", "generated_python", "provenance", "requirements" ] }, "diagram": { "format": "bpmn", "executable": false }, "source_evidence": [ { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313" }, { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d" }, { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31" }, { "repository": "sharix-open-handlers-examples", "commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03" }, { "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": "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": "views/ticket_detail.py", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59" }, { "repository": "sharix-open-tickets", "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5" }, { "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-tickets", "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368" }, { "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/verification_algorithms.py", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e" }, { "repository": "sharix-open-backend", "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4" }, { "repository": "sharix-open-backend", "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c" }, { "repository": "sharix-open-backend", "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066" }, { "repository": "sharix-open-tickets", "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "models/ticket.py", "sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43" } ], "handler_process": { "handler_id": "open_st_request_inprocess", "source_kind": "git_builtin", "canonical_python_verified": true, "reviewed_on": "2026-10-28", "generator": "tools/generate_handler_bpmn.py", "generator_sha256": "ca837a7b9e55bf58184bdf408a8035d25667ed9c5d3068ca52380b2ff5682f95", "models": { "logic": "3b0b6e129600124d7b1b11d0bae99e7f4d173d101d4695bb36597272ce5519c3", "verification": "83e3add11cccb5abc695995ed7168405b22a79471fba00ea0b0236df8862710a", "external": "3e5e98157d24f8d5033e64a74ed0b80e9f1d04b5ef996b83dd4b4f5ff822f114" } }, "diagram_view_bounds": { "reviewed_on": "2026-10-29", "models": [ "logic" ], "semantics_unchanged": true, "utility": "tools/expand_bpmn_view_bounds.py", "utility_sha256": "f878658b0115773e34f6c3eec72eba5984d873e60d8e2a4336b3dfb2a8026d87" }, "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_in_process", "verification_workflow", "bpmn", "ticket", "blockly", "generated_python", "provenance", "requirements" ], "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": "Все исходные commits и SHA-256 повторно совпали после git fetch; дополнительные функциональные источники включены в source_evidence", "canonical_regeneration": { "both_python_copies_match": true, "generator_sources_verified": 11, "handler_executed": false }, "runtime_checked": false } }, "content_sha256": "82b312aaaadefb1e5d8f9d650327088b0327bfd6489c4ad6fee60c61cb29d93f", "schema": 1 } ====== ST_REQUEST в работе: обычное обращение и профильная проверка ====== ~~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_inprocess'', тип ''ST_REQUEST'' (1), рабочий статус ''IN_PROCESS''. 31.10.2026 исходники повторно получены из Git: обе Python-копии совпали с новой канонической генерацией Blockly, проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранная серверная версия, её настройки и работающие API/XMPP проверяются отдельно. ===== Назначение и границы ===== Обработчик сопровождает обращение на стадии выполнения. Порядок выбора ветви: - Проверить, что локальный снимок имеет рабочий статус IN_PROCESS. - Прочитать стабильный контракт из Ticket.json: document-verification-v1 или requirement-check-v1. - Для профильного контракта вызвать организацию проверки и advance; до STREQ_AUTOACCEPT эта ветвь не доходит. - Для обычного обращения использовать STREQ_AUTOACCEPT: ожидать действия пользователя либо запросить DONE. В REST-снимке контракт читается непосредственно из metadata, в первоначальном XMPP-конверте учитывается вложенное поле json. Заголовок обращения не определяет контракт. Результат зависит от вида обращения: * **Обычное, STREQ_AUTOACCEPT выключен:** ожидание работы пользователя. * **Обычное, STREQ_AUTOACCEPT включён:** запрос DONE; содержание обращения при этом не исполняется и исправление проблемы не доказывается. * **Профильная проверка:** решение определяется состоянием документа/попытки проверки и доменными правилами; autoaccept не заменяет проверяющего. End event на схемах завершает показанный проход или операцию. Все процессы помечены ''isExecutable=false'': просмотрщик Wiki их не запускает. Runtime исполняет выбранный проверенный Python, полученный из Blockly; XML BPMN служит описанием реализации. ===== Алгоритм одного прохода и ожидание (BPMN) ===== {"notes": ["Опубликованный Git built-in; не подтверждение выбранной версии на любом сервере.", "Процессы не исполняются просмотрщиком. End event завершает показанную операцию, не всю заявку.", "deferred_until — символ локального срока, не имя параметра конфигурации."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "repository": "sharix-open-handlers-examples", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "repository": "sharix-open-handlers-examples", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"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": "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": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"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": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"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/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}]} ip_start ip_status ip_contract ip_organize ip_advance ip_special_end ip_stale ip_stale_end ip_auto ip_manual ip_transition ip_confirmed ip_remove ip_done ip_not_found ip_api_error ip_workflow_error ip_notify_error ip_retry ip_wait ip_timer ip_revision ip_ready ip_Flow_0 ip_Flow_0 ip_Flow_23 ip_Flow_1 ip_Flow_2 ip_Flow_1 ip_Flow_4 ip_Flow_7 Только requirement-check-v1; документ — no-op. Ошибка API/JSON логируется, затем advance всё равно вызывается. ip_Flow_4 ip_Flow_5 Scoped verification API, уведомления, ожидание либо DONE/WONTFIX. Подробно — на следующей схеме. ip_Flow_5 ip_Flow_6 ip_Flow_6 ip_Flow_2 ip_Flow_3 ip_Flow_3 ip_Flow_7 ip_Flow_8 ip_Flow_9 ST_REQUEST_IN_PROCESS_RECHECK_SECONDS. В журнале defer: st_request_in_process. Содержание обращения не выполняется. ip_Flow_8 ip_Flow_14 Без явного send_to_handler: новый владелец получает backend wakeup, с periodic fallback. ip_Flow_9 ip_Flow_10 ip_Flow_10 ip_Flow_11 ip_Flow_13 ip_Flow_11 ip_Flow_12 ip_Flow_12 ip_Flow_13 ip_Flow_15 ip_Flow_16 ip_Flow_17 DEFERRED_TICKET_RECHECK_SECONDS; исключение не откатывает уже committed доменные изменения или статус. ip_Flow_15 ip_Flow_16 ip_Flow_17 ip_Flow_18 ip_Flow_14 ip_Flow_18 ip_Flow_19 ip_Flow_20 ip_Flow_19 ip_Flow_21 deferred_until ip_Flow_20 ip_Flow_22 Дубликат ревизии не снимает ожидание. Запуск при готовом XMPP и свободном worker. ip_Flow_21 ip_Flow_22 ip_Flow_23 * Снимок уже не в ''IN_PROCESS'' — запросить удаление Ticket из локальной очереди и удаление комнаты. * Профильный контракт — явно вызвать подготовку организации, затем ''advance_verification_workflow'' и завершить этот проход. * Обычное обращение, autoaccept отключён — записать локальную причину ''support_execution'', назначить повтор по ''ST_REQUEST_IN_PROCESS_RECHECK_SECONDS'' и освободить worker. Строка ''st_request_in_process'' передаётся как причина для журнала defer; она не подменяет сохранённую локальную ''support_execution'' и не является комментарием Ticket. * Обычное обращение, autoaccept включён — запросить ''DONE'' через scoped Ticket API. При подтверждённом переходе удалить локальный Ticket и комнату. В этой ветви **нет явного** ''send_to_handler'': новый владелец получает backend wakeup; periodic reconciliation восстанавливает очередь при потере сообщения. 404 при scoped смене статуса означает, что текущий контекст больше не может продолжать работу с Ticket: runtime запрашивает очистку. Остальные ошибки перехода, отправки либо неожиданные исключения передаются общему восстановлению ''processing_error'' и ''DEFERRED_TICKET_RECHECK_SECONDS''. Уже committed статус или доменный результат от этого не откатывается. ===== Профильный workflow: backend и ответ обработчику (BPMN) ===== {"notes": ["Опубликованный Git built-in; не подтверждение выбранной версии на любом сервере.", "Процессы не исполняются просмотрщиком. End event завершает показанную операцию, не всю заявку.", "deferred_until — символ локального срока, не имя параметра конфигурации.", "Это раскрытие примитива advance и backend-контракта. Ошибки organize не подавляют advance.", "60/300 секунд — текущие константы Python, а не обещание точного времени запуска."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "repository": "sharix-open-handlers-examples", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "repository": "sharix-open-handlers-examples", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"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": "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": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"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": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"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/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}]} backend_request backend_acl backend_doc backend_manual backend_check backend_terminal backend_pending backend_algorithm backend_outcome backend_completed backend_other backend_waiting backend_missing backend_Flow_0 backend_Flow_0 backend_Flow_1 backend_Flow_1 backend_Flow_2 backend_Flow_3 DocumentVersion здесь не создаётся. backend_Flow_2 backend_Flow_3 backend_Flow_4 backend_Flow_4 backend_Flow_5 backend_Flow_6 backend_Flow_6 backend_Flow_7 backend_Flow_8 Ручной режим/нет алгоритма/ответственного/исполнителя → manual_required. Нетерминальный результат → pending. Доменные правила могут отклонить результат. backend_Flow_7 backend_Flow_9 backend_Flow_9 backend_Flow_10 backend_Flow_11 backend_Flow_5 backend_Flow_10 Не-PENDING и не PASSED/FAILED не превращается автоматически в отрицательный результат. backend_Flow_8 backend_Flow_11 {"notes": ["Опубликованный Git built-in; не подтверждение выбранной версии на любом сервере.", "Процессы не исполняются просмотрщиком. End event завершает показанную операцию, не всю заявку.", "deferred_until — символ локального срока, не имя параметра конфигурации.", "Это раскрытие примитива advance и backend-контракта. Ошибки organize не подавляют advance.", "60/300 секунд — текущие константы Python, а не обещание точного времени запуска."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "repository": "sharix-open-handlers-examples", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "repository": "sharix-open-handlers-examples", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"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": "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": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"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": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"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/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}]} runtime_receive runtime_notify runtime_complete runtime_status runtime_ok runtime_handoff runtime_remove runtime_end runtime_defer runtime_wait_end runtime_false runtime_api_error runtime_retry runtime_error_end runtime_Flow_0 Подробно в тексте: ack не подтверждает прочтение человеком. runtime_Flow_0 runtime_Flow_1 runtime_Flow_1 runtime_Flow_2 runtime_Flow_3 runtime_Flow_2 runtime_Flow_5 runtime_Flow_5 runtime_Flow_6 runtime_Flow_7 runtime_Flow_6 runtime_Flow_8 runtime_Flow_8 runtime_Flow_9 runtime_Flow_9 Причина журнала verification_<state>, пустое состояние → verification_waiting. completed без target_status тоже ждёт 300 с. runtime_Flow_3 runtime_Flow_4 runtime_Flow_4 runtime_Flow_7 runtime_Flow_10 runtime_Flow_10 runtime_Flow_11 runtime_Flow_11 Схема раскрывает ''advance''; подготовка организации предшествует ему и описана ниже. Внешний вызов проходит через ''dbsynce/api/handler/ticket/{ticket_id}/verification/''. Backend требует handler identity, capability ''verification.workflow'' и доступ к конкретному Ticket в scope обработчика; состояние хранится на стороне backend. Доверенный ключ не означает произвольный доступ ко всем Ticket. ==== Проверка документа ==== Для document-verification-v1: * advance возвращает manual_required и первоначальные уведомления; * новая DocumentVersion не создаётся этим вызовом; * проверяющий вносит решение через доступный интерфейс; * ожидаемая редакция документа и применение результата проверяются отдельным DONE/WONTFIX workflow. Наличие уведомления или статус IN_PROCESS не означают, что документ подтверждён. ==== Проверка требования ==== Для ''requirement-check-v1'' backend загружает конкретную попытку ''RequirementCheck'' по стабильному public id из Ticket. Отсутствующая попытка — ошибка, а не положительный результат. * Уже ''PASSED'' или ''FAILED'' — вернуть ''completed'', outcome и целевой статус соответственно ''DONE'' или ''WONTFIX''. * ''PENDING'' — вызвать зарегистрированный алгоритм подтверждения. Ручной режим, отсутствующий/недоступный алгоритм, необходимый неназначенный ответственный либо неподключённый executor ведут к ''manual_required''. Ответственный, когда он требуется политикой, должен быть активным пользователем. * Нетерминальный результат алгоритма оставляет ожидание. При терминальном результате backend применяет доменные правила: баллы и порог, ответственного, допустимость завершения попытки. Ошибка валидации не становится успехом: возвращается ожидание с ошибкой. Фактически сохранённый ''PASSED''/''FAILED'' имеет приоритет над одним словом outcome, полученным от алгоритма. * Иное уже сохранённое состояние попытки возвращается как состояние ожидания; оно не приравнивается автоматически к ''FAILED''. Runtime сначала доставляет возвращённые уведомления. При ''state=completed'' и непустом ''target_status'' он запрашивает указанный переход, затем явно передаёт Ticket: ''outcome=passed'' — в ''open_st_request_done'', остальные outcome — в ''open_st_request_wontfix''. После успешной передачи Ticket удаляется из текущей очереди с сохранением комнаты. Backend текущего контракта возвращает согласованные пары ''passed/DONE'' и ''failed/WONTFIX''; схема не вводит дополнительного ручного решения по статусу. Если ''completed'' пришёл без ''target_status'', переход не выполняется: остаётся повторная проверка. Не следует по одному слову ''completed'' считать заявку окончательно закрытой. ===== Организация встречи не является результатом проверки ===== Подготовка организации проверки выполняется явно перед advance: * **document-verification-v1:** примитив ничего не меняет. * **requirement-check-v1:** вызывается organize и публичный интеграционный порт подготовки встречи. * **Провайдер не подключён либо available=false:** advance всё равно продолжается; это не отрицательный результат проверки. При доступной организации сохраняются: * booking в RequirementCheck.organization_data; * организационные данные в Ticket.json.organization; * при отсутствии активной записи — уведомление автору о self-booking URL, если оно предусмотрено; * уведомление проверяющим об assignment URL, если оно предусмотрено. Это организация встречи, а не изменение результата RequirementCheck. Ссылка не доказывает запись, состоявшуюся встречу или успешную проверку. Ошибка HTTP/разбора ответа ''organize'' логируется; проход продолжается с ''advance''. Ошибка отправки уведомления вне этого локального catch может попасть в общий retry. Внутреннее устройство необязательного провайдера встреч здесь не описывается: закреплён именно публичный порт backend. ===== Внешнее решение и смена владельца (BPMN) ===== {"notes": ["Опубликованный Git built-in; не подтверждение выбранной версии на любом сервере.", "Процессы не исполняются просмотрщиком. End event завершает показанную операцию, не всю заявку.", "deferred_until — символ локального срока, не имя параметра конфигурации.", "XMPP — best effort; acknowledge означает сохранение ключа после send, не прочтение.", "Два wakeup-события публикуются после commit. Потерю доставки восстанавливает scoped periodic reconciliation."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "repository": "sharix-open-handlers-examples", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "repository": "sharix-open-handlers-examples", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"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": "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": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"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": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"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/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}]} reviewer_start reviewer_form reviewer_send reviewer_end reviewer_Flow_0 В форме специализированной проверки — комментарий и применимые баллы. Авторство Ticket само по себе не даёт право менять статус. reviewer_Flow_0 reviewer_Flow_1 reviewer_Flow_1 reviewer_Flow_2 reviewer_Flow_2 {"notes": ["Опубликованный Git built-in; не подтверждение выбранной версии на любом сервере.", "Процессы не исполняются просмотрщиком. End event завершает показанную операцию, не всю заявку.", "deferred_until — символ локального срока, не имя параметра конфигурации.", "XMPP — best effort; acknowledge означает сохранение ключа после send, не прочтение.", "Два wakeup-события публикуются после commit. Потерю доставки восстанавливает scoped periodic reconciliation."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_inprocess.json", "repository": "sharix-open-handlers-examples", "sha256": "aedf573066b509bc1d7177d08530ae2ed1a5e896c8745e02edaed27e3d561313"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_inprocess.py", "repository": "sharix-open-handlers-examples", "sha256": "7dc2424c827ba4dc04971a8691d0e624566c6b4cb409cffec2e552dcad2aca4d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_done.py", "repository": "sharix-open-handlers-examples", "sha256": "b6ae4733904d9ba8e691f43235d4836d201ac019ff99982d532816bfdc89bf31"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_wontfix.py", "repository": "sharix-open-handlers-examples", "sha256": "ece9fb7e09ee0e401e91d5d274d6b151b51d1364ba698b835c929e6416f90f03"}, {"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": "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": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"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": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"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/verification_algorithms.py", "repository": "sharix-open-backend", "sha256": "9e55e4119051847bb3596c3563b9b151ee92b660e89c39c533b16ed6b4a2099e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/verification_responsibility.py", "repository": "sharix-open-backend", "sha256": "7919b83c89cb4214545ea2c2db0cffac09af892b190ce3af72348d688abb9cf4"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/requirement_checks.py", "repository": "sharix-open-backend", "sha256": "5a73a6e71307e734f0c0e480fd14a825a7a22242811e2523b7f25157224cf34c"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}]} ticket_request ticket_acl ticket_allowed ticket_save ticket_publish ticket_end ticket_denied ticket_Flow_0 ticket_Flow_0 ticket_Flow_1 ticket_Flow_1 ticket_Flow_2 ticket_Flow_3 В одной atomic-секции; это ещё не применение доменного результата проверки. ticket_Flow_2 ticket_Flow_4 ticket_Flow_4 ticket_Flow_5 ticket_Flow_5 ticket_Flow_3 Ручной результат вносится через карточку Ticket: - Пользователь выбирает доступный DONE либо WONTFIX. - Передаёт комментарий; для requirement-check-v1 при необходимости указывает применимые баллы. - View проверяет разрешение перехода и в atomic-секции сохраняет metadata результата вместе со сменой статуса. - Следующий профильный handler применяет доменный результат. Форма Tickets не импортирует dbsynce и не подтверждает проверку сама. Произвольный API-клиент может не сохранять поля результата так же, как эта форма. Чтение Ticket и право менять его статус проверяются отдельно. Авторство само по себе не даёт право менять статус; учитываются права управления Ticket и доступные переходы. Связанные с заказом Ticket не должны обходить lifecycle заказа через универсальную форму. Наличие API для смены статуса не доказывает, что произвольный API-клиент сохраняет все поля ручной проверки так же, как эта форма. После commit канонический backend направляет ''ticket.changed'' новому владельцу и ''ticket.moved'' прежнему ''IN_PROCESS''. Прежний runtime исключает локальный снимок; для in-flight worker удаление откладывается до его завершения. Потеря XMPP-события восстанавливается периодическим scoped списком. Действие пользователя и доставка wakeup — разные операции: сохранённый статус не означает мгновенного запуска следующего worker. Следующий ''DONE''/''WONTFIX'' handler для профильного контракта вызывает ''complete'': применяет/сверяет доменный результат, переоценивает связанные требования и при успешном завершении переводит Ticket в ''CLOSED''. Для обычного обращения эти стадии имеют другое поведение. Поэтому переход из ''IN_PROCESS'' в ''DONE'' нельзя трактовать как безусловное завершение всех связанных проверок и активаций. ===== Уведомления и подтверждение отправки ===== Для уведомления backend возвращает audience, текст и ключ: * **creator:** runtime получает JID автора через защищённый API. * **reviewers:** JID активных участников группы списка Ticket возвращает отдельный защищённый endpoint; повторяющиеся адреса исключаются. * **Подтверждение:** после фактической попытки отправки runtime вызывает ack_notification для ключа; подтверждённые ключи backend больше не возвращает. Если получателя нет, доставка не подтверждается. Членство в списке получателей не выдаёт прав на Ticket. Это защита от обычных повторных отправок, а не гарантия exactly-once или прочтения человеком. Ошибка сохранения ack после отправки может привести к повтору уведомления. Отсутствие получателя не превращается в подтверждённую доставку. Сообщение проверяющему не выдаёт ему права на Ticket и не заменяет его решение. ===== Таймеры и восстановление ===== ^ Ситуация ^ Повтор / причина ^ | Обычное обращение в ручном режиме | ''ST_REQUEST_IN_PROCESS_RECHECK_SECONDS''; локальная ''support_execution'', журнал defer ''st_request_in_process'' | | Ошибка HTTP/разбора ''advance'' | 60 секунд; ''verification_backend_error'' | | Ответ ''pending'' | 60 секунд; ''verification_pending'' | | ''manual_required'' и другие нетерминальные состояния | 300 секунд; ''verification_''; при пустом state — ''verification_waiting'' | | ''completed'' без target_status | 300 секунд; ''verification_completed'' | | Необработанное локальными catch исключение | ''DEFERRED_TICKET_RECHECK_SECONDS''; ''processing_error'' | | Сверка состава очереди | ''INTERVAL_TIME_BD_REQ''; scoped список текущего владельца | 60 и 300 секунд — константы изученной версии Python, а не отдельные настройки окружения. Все интервалы задают момент готовности к новому проходу; свободный worker, соединение XMPP и доступность backend влияют на фактический запуск. Defer хранится в памяти процесса. После рестарта runtime заново получает актуальное состояние. Новая authoritative revision может снять прежний defer, повтор того же снимка — нет. Ошибка scoped списка не должна очищать локальную очередь как будто backend вернул пустой результат. ===== Что проверить при зависшем IN_PROCESS ===== * Какая опубликованная/локальная версия действительно выбрана, совпадают ли её workspace и сгенерированный Python. * Верно ли указан стабильный контракт, существует ли связанный документ или попытка RequirementCheck. * Для обычного обращения — режим autoaccept и значение именованного интервала; для профильного — состояние проверки, алгоритм, ответственный и необходимость ручного решения. * Для встречи — подключён ли провайдер и есть ли реальная запись; наличие организации не считать результатом проверки. * Успешны ли scoped API, отправка и ack, получает ли runtime новые снимки и wakeup-события. Уже committed результат после сетевой ошибки сначала перечитать, не принимать повторное бизнес-решение вслепую. * После DONE/WONTFIX — завершился ли отдельный ''complete'' и прошли ли доменные проверки. Статус Ticket и факт закрытия workflow различать. ===== Проверенные источники ===== Версии и SHA-256 файлов сохранены в metadata страницы и documentation BPMN. Алгоритм сверяется по workspace и каноническому Python, внешние действия — по view/API/ACL, runtime и доменным операциям. При изменении источников требуется повторный анализ; изменение одних хешей не доказывает актуальность схемы. * [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_st_request_inprocess.json|sharix-open-handlers-examples / generated_handler_blocks/open_st_request_inprocess.json]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb. * [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_st_request_inprocess.py|sharix-open-handlers-examples / handlers/open_st_request_inprocess.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb. * [[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/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/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/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/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/utils.py|sharix-open-tickets / utils.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-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-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/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/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/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/integration_ports.py|sharix-open-backend / lib/integration_ports.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093. ===== Связанные материалы ===== * [[sharixopen:knowledge:scenarios:st_request_assigned|Предыдущая стадия ASSIGNED]] * [[sharixopen:knowledge:modules:handlers|Обработчики и граница исполнения Blockly/Python]] * [[sharixopen:knowledge:operations:runtime_health|Диагностика runtime]] * [[sharixopen:knowledge:scenarios:start|Все сценарии]] ~~SHARIX_KNOWLEDGE_RELATED~~