Инструменты пользователя

Инструменты сайта


sharixopen:knowledge:scenarios:st_request_reopened

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
sharixopen:knowledge:scenarios:st_request_reopened [2026/10/28 19:26] – [sharixknowledge] approved package sx_knowledge_api_opensharixopen:knowledge:scenarios:st_request_reopened [2026/10/31 11:50] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open
Строка 16: Строка 16:
             "ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",             "ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",
             "ShariXKnowledgeScenarios"             "ShariXKnowledgeScenarios"
 +        ],
 +        "depends_on": [
 +            "ShariXKnowledgeOpenKnowledgeModulesHandlers"
 +        ],
 +        "verified_by": [
 +            "ShariXKnowledgeVerification"
         ]         ]
     },     },
Строка 22: Строка 28:
             "domain": "business_processes",             "domain": "business_processes",
             "lifecycle": "implemented",             "lifecycle": "implemented",
-            "component": "handlers",+            "component": "handlers_examples, handlers_backend, tickets",
             "parents": [             "parents": [
                 "ShariXKnowledgeScenarios"                 "ShariXKnowledgeScenarios"
             ],             ],
             "terms": [             "terms": [
-                "ST_REQUEST", +                "audience_developer", 
-                "REOPENED", +                "audience_support", 
-                "BPMN"+                "audience_reviewer", 
 +                "audience_ai", 
 +                "product_sharix_open", 
 +                "material_scenario", 
 +                "topic_handlers_support", 
 +                "topic_handlers_runtime", 
 +                "st_request", 
 +                "ticket_reopened", 
 +                "bpmn", 
 +                "ticket", 
 +                "blockly", 
 +                "generated_python", 
 +                "verification_workflow"
             ]             ]
         },         },
Строка 114: Строка 132:
                 "path": "services/handler_wakeup.py",                 "path": "services/handler_wakeup.py",
                 "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"                 "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"
 +            },
 +            {
 +                "repository": "sharix-open-tickets",
 +                "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
 +                "path": "models/ticket.py",
 +                "sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
             }             }
         ],         ],
Строка 129: Строка 153:
                 "external": "f5dd71cdd8149681caab5d859438910353ee09d5348808565a33da5ff234db44"                 "external": "f5dd71cdd8149681caab5d859438910353ee09d5348808565a33da5ff234db44"
             }             }
 +        },
 +        "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",
 +                "support",
 +                "reviewer",
 +                "ai"
 +            ],
 +            "material": "scenario",
 +            "topics": [
 +                "handlers/support",
 +                "handlers/runtime"
 +            ],
 +            "tag_terms": [
 +                "audience_developer",
 +                "audience_support",
 +                "audience_reviewer",
 +                "audience_ai",
 +                "product_sharix_open",
 +                "material_scenario",
 +                "topic_handlers_support",
 +                "topic_handlers_runtime",
 +                "st_request",
 +                "ticket_reopened",
 +                "bpmn",
 +                "ticket",
 +                "blockly",
 +                "generated_python",
 +                "verification_workflow"
 +            ],
 +            "registry_document": "ShariXKnowledgeClassification",
 +            "state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
 +        },
 +        "editorial_review": {
 +            "date": "2026-10-31",
 +            "scope": "Конкретизация шагов, участников, условий, результатов и диагностики; перечисления; BPMN сохранены побайтово",
 +            "current_source_records_verified": 14,
 +            "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": "9f1e760fc0cd02c778184e14d5ed6b5d61224ddeaca02f78811f7fca069608db",+    "content_sha256": "04b9c674b51b830ef0fa6361d62385b1930428591c919b2e4082fc983eb9b5e4",
     "schema": 1     "schema": 1
 } }
Строка 138: Строка 219:
 ~~NOCACHE~~ ~~NOCACHE~~
  
-**Область:** ShariX Open. **Обработчик:** ''open_st_request_reopened'', тип ''ST_REQUEST'' (1), рабочий статус ''REOPENED'' (110). Опубликованная встроенная реализация изучена на 28.10.2026; Python побайтово совпадает с канонической генерацией из Blockly. Выбранная версия на сервере проверяется отдельно.+**Назначение:** [[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#runtime|Обработчики → Runtime]]. 
 + 
 + 
 + 
 +**Область:** ShariX Open. **Обработчик:** ''open_st_request_reopened'', тип ''ST_REQUEST'' (1), рабочий статус ''REOPENED'' (110). 31.10.2026 исходники повторно получены из Git: обе Python-копии совпали с новой канонической генерацией Blockly, проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранная серверная версия, её настройки и работающие API/XMPP проверяются отдельно.
  
 ===== Назначение и границы ===== ===== Назначение и границы =====
-Обработчик сопровождает уже переоткрытое обращение и ждёт повторного назначения. Он не выбирает человека, не меняет ''assigned_to'', не возвращает Ticket в ''ASSIGNED'' самостоятельно и не возобновляет автоматически исполнение содержания заявки. ''STREQ_AUTOACCEPT'' здесь не используется.+Вход — уже переоткрытое обращение. Обработчик:
  
-Переход в ''REOPENED'' и новое доменное решение — разные факты. Для профильной проверки переоткрытие само по себе не создаёт новую попытку RequirementCheck, не меняет редакцию документа и не очищает прежний marker ''verification_runtime.completed''. Повторное подтверждение следует оформлять с учётом доменной попытки/редакции; нельзя ожидать нового результата лишь от повторного прохождения старого Ticket. Граница marker описана в сценариях [[sharixopen:knowledge:scenarios:st_request_done|DONE]] и [[sharixopen:knowledge:scenarios:st_request_wontfix|WONTFIX]].+  * ждёт повторного назначения; 
 +  * не выбирает человека и не заполняет assigned_to; 
 +  * не переводит Ticket в ASSIGNED самостоятельно; 
 +  * не возобновляет автоматически исполнение содержания заявки. 
 + 
 +STREQ_AUTOACCEPT в этой ветви не используется. 
 + 
 +Для профильной проверки само переоткрытие не создаёт: 
 + 
 +  * новую попытку RequirementCheck; 
 +  * новую редакцию документа; 
 +  * очистку прежнего verification_runtime.completed. 
 + 
 +Повторное подтверждение оформляют с учётом доменной попытки и редакции. Прохождение старого Ticket ещё раз не гарантирует нового результата. Граница marker описана в [[sharixopen:knowledge:scenarios:st_request_done|DONE]] и [[sharixopen:knowledge:scenarios:st_request_wontfix|WONTFIX]].
  
 ===== Проход и локальное ожидание (BPMN) ===== ===== Проход и локальное ожидание (BPMN) =====
 <sharix-bpmn> <sharix-bpmn>
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_st_reopened_logic" targetNamespace="urn:sharix:knowledge:handlers">+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:ns2="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:ns3="http://www.omg.org/spec/DD/20100524/DC" xmlns:ns4="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_st_reopened_logic" targetNamespace="urn:sharix:knowledge:handlers">
   <bpmn:process id="reopened_Process_reopened" name="open_st_request_reopened: ожидание внешнего решения" isExecutable="false">   <bpmn:process id="reopened_Process_reopened" name="open_st_request_reopened: ожидание внешнего решения" isExecutable="false">
     <bpmn:documentation>{"notes": ["Опубликованная встроенная реализация; не доказательство выбранной версии на сервере.", "Процесс isExecutable=false, никакой handler при генерации не исполняется.", "deferred_until — символ локального срока, не имя параметра окружения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_reopened.py", "repository": "sharix-open-handlers-examples", "sha256": "3a90597fd04397c49f5c801ce2a37a882bcc17269768d90e59db5121359f327d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_reopened.json", "repository": "sharix-open-handlers-examples", "sha256": "09edcb4f5451c480c96ce22822e5cd22dd158db0d7e30189dab947d7ba0df77a"}, {"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": "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"}]}</bpmn:documentation>     <bpmn:documentation>{"notes": ["Опубликованная встроенная реализация; не доказательство выбранной версии на сервере.", "Процесс isExecutable=false, никакой handler при генерации не исполняется.", "deferred_until — символ локального срока, не имя параметра окружения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_reopened.py", "repository": "sharix-open-handlers-examples", "sha256": "3a90597fd04397c49f5c801ce2a37a882bcc17269768d90e59db5121359f327d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_reopened.json", "repository": "sharix-open-handlers-examples", "sha256": "09edcb4f5451c480c96ce22822e5cd22dd158db0d7e30189dab947d7ba0df77a"}, {"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": "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"}]}</bpmn:documentation>
Строка 244: Строка 346:
     <bpmn:participant id="reopened_Pool_reopened" name="open_st_request_reopened: ожидание внешнего решения" processRef="reopened_Process_reopened" />     <bpmn:participant id="reopened_Pool_reopened" name="open_st_request_reopened: ожидание внешнего решения" processRef="reopened_Process_reopened" />
   </bpmn:collaboration>   </bpmn:collaboration>
-  <bpmndi:BPMNDiagram id="Diagram_st_reopened_logic"> +  <ns2:BPMNDiagram id="Diagram_st_reopened_logic"> 
-    <bpmndi:BPMNPlane id="Plane_st_reopened_logic" bpmnElement="Collaboration_st_reopened_logic"> +    <ns2:BPMNPlane id="Plane_st_reopened_logic" bpmnElement="Collaboration_st_reopened_logic"> 
-      <bpmndi:BPMNShape id="reopened_DI_Pool_reopened" bpmnElement="reopened_Pool_reopened" isHorizontal="true"> +      <ns2:BPMNShape id="reopened_DI_Pool_reopened" bpmnElement="reopened_Pool_reopened" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="0.0" width="1590" height="770" /> +        <ns3:Bounds x="0.0" y="0.0" width="1690.0" height="770.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_Lane_worker" bpmnElement="reopened_Lane_worker" isHorizontal="true"> +      <ns2:BPMNShape id="reopened_DI_Lane_worker" bpmnElement="reopened_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="0.0" width="1560" height="385.0" /> +        <ns3:Bounds x="30.0" y="0.0" width="1660.0" height="385.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_Lane_queue" bpmnElement="reopened_Lane_queue" isHorizontal="true"> +      <ns2:BPMNShape id="reopened_DI_Lane_queue" bpmnElement="reopened_Lane_queue" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="385.0" width="1560" height="385.0" /> +        <ns3:Bounds x="30.0" y="385.0" width="1660.0" height="385.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_start" bpmnElement="reopened_start"> +      <ns2:BPMNShape id="reopened_DI_start" bpmnElement="reopened_start"> 
-        <dc:Bounds x="132.0" y="92.0" width="36" height="36" /> +        <ns3:Bounds x="132.0" y="92.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_status" bpmnElement="reopened_status"> +      <ns2:BPMNShape id="reopened_DI_status" bpmnElement="reopened_status"> 
-        <dc:Bounds x="365.0" y="85.0" width="50" height="50" /> +        <ns3:Bounds x="365.0" y="85.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_reason" bpmnElement="reopened_reason"> +      <ns2:BPMNShape id="reopened_DI_reason" bpmnElement="reopened_reason"> 
-        <dc:Bounds x="575.0" y="75.0" width="150" height="70" /> +        <ns3:Bounds x="575.0" y="75.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_defer" bpmnElement="reopened_defer"> +      <ns2:BPMNShape id="reopened_DI_defer" bpmnElement="reopened_defer"> 
-        <dc:Bounds x="835.0" y="75.0" width="150" height="70" /> +        <ns3:Bounds x="835.0" y="75.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_cleanup" bpmnElement="reopened_cleanup"> +      <ns2:BPMNShape id="reopened_DI_cleanup" bpmnElement="reopened_cleanup"> 
-        <dc:Bounds x="315.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="315.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_end" bpmnElement="reopened_end"> +      <ns2:BPMNShape id="reopened_DI_end" bpmnElement="reopened_end"> 
-        <dc:Bounds x="632.0" y="282.0" width="36" height="36" /> +        <ns3:Bounds x="632.0" y="282.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_defer_error" bpmnElement="reopened_defer_error"> +      <ns2:BPMNShape id="reopened_DI_defer_error" bpmnElement="reopened_defer_error"> 
-        <dc:Bounds x="942.0" y="127.0" width="36" height="36" /> +        <ns3:Bounds x="942.0" y="127.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_error" bpmnElement="reopened_error"> +      <ns2:BPMNShape id="reopened_DI_error" bpmnElement="reopened_error"> 
-        <dc:Bounds x="1095.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="1095.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_wait" bpmnElement="reopened_wait"> +      <ns2:BPMNShape id="reopened_DI_wait" bpmnElement="reopened_wait"> 
-        <dc:Bounds x="885.0" y="515.0" width="50" height="50" /> +        <ns3:Bounds x="885.0" y="515.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_timer" bpmnElement="reopened_timer"> +      <ns2:BPMNShape id="reopened_DI_timer" bpmnElement="reopened_timer"> 
-        <dc:Bounds x="1152.0" y="452.0" width="36" height="36" /> +        <ns3:Bounds x="1152.0" y="452.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_revision" bpmnElement="reopened_revision"> +      <ns2:BPMNShape id="reopened_DI_revision" bpmnElement="reopened_revision"> 
-        <dc:Bounds x="1152.0" y="652.0" width="36" height="36" /> +        <ns3:Bounds x="1152.0" y="652.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="reopened_DI_ready" bpmnElement="reopened_ready"> +      <ns2:BPMNShape id="reopened_DI_ready" bpmnElement="reopened_ready"> 
-        <dc:Bounds x="1355.0" y="505.0" width="150" height="70" /> +        <ns3:Bounds x="1355.0" y="505.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_0" bpmnElement="reopened_Flow_0"> +      <ns2:BPMNEdge id="reopened_DI_Flow_0" bpmnElement="reopened_Flow_0"> 
-        <di:waypoint x="168.0" y="110.0" /> +        <ns4:waypoint x="168.0" y="110.0" /> 
-        <di:waypoint x="365.0" y="110.0" /> +        <ns4:waypoint x="365.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_1" bpmnElement="reopened_Flow_1"> +      <ns2:BPMNEdge id="reopened_DI_Flow_1" bpmnElement="reopened_Flow_1"> 
-        <di:waypoint x="415.0" y="110.0" /> +        <ns4:waypoint x="415.0" y="110.0" /> 
-        <di:waypoint x="575.0" y="110.0" /> +        <ns4:waypoint x="575.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_2" bpmnElement="reopened_Flow_2"> +      <ns2:BPMNEdge id="reopened_DI_Flow_2" bpmnElement="reopened_Flow_2"> 
-        <di:waypoint x="390.0" y="135.0" /> +        <ns4:waypoint x="390.0" y="135.0" /> 
-        <di:waypoint x="390.0" y="265.0" /> +        <ns4:waypoint x="390.0" y="265.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_3" bpmnElement="reopened_Flow_3"> +      <ns2:BPMNEdge id="reopened_DI_Flow_3" bpmnElement="reopened_Flow_3"> 
-        <di:waypoint x="465.0" y="300.0" /> +        <ns4:waypoint x="465.0" y="300.0" /> 
-        <di:waypoint x="632.0" y="300.0" /> +        <ns4:waypoint x="632.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_4" bpmnElement="reopened_Flow_4"> +      <ns2:BPMNEdge id="reopened_DI_Flow_4" bpmnElement="reopened_Flow_4"> 
-        <di:waypoint x="725.0" y="110.0" /> +        <ns4:waypoint x="725.0" y="110.0" /> 
-        <di:waypoint x="835.0" y="110.0" /> +        <ns4:waypoint x="835.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_5" bpmnElement="reopened_Flow_5"> +      <ns2:BPMNEdge id="reopened_DI_Flow_5" bpmnElement="reopened_Flow_5"> 
-        <di:waypoint x="910.0" y="145.0" /> +        <ns4:waypoint x="910.0" y="145.0" /> 
-        <di:waypoint x="910.0" y="515.0" /> +        <ns4:waypoint x="910.0" y="515.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_6" bpmnElement="reopened_Flow_6"> +      <ns2:BPMNEdge id="reopened_DI_Flow_6" bpmnElement="reopened_Flow_6"> 
-        <di:waypoint x="978.0" y="145.0" /> +        <ns4:waypoint x="978.0" y="145.0" /> 
-        <di:waypoint x="1020.0" y="145.0" /> +        <ns4:waypoint x="1020.0" y="145.0" /> 
-        <di:waypoint x="1170.0" y="145.0" /> +        <ns4:waypoint x="1170.0" y="145.0" /> 
-        <di:waypoint x="1170.0" y="265.0" /> +        <ns4:waypoint x="1170.0" y="265.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_7" bpmnElement="reopened_Flow_7"> +      <ns2:BPMNEdge id="reopened_DI_Flow_7" bpmnElement="reopened_Flow_7"> 
-        <di:waypoint x="1245.0" y="300.0" /> +        <ns4:waypoint x="1245.0" y="300.0" /> 
-        <di:waypoint x="1290.0" y="300.0" /> +        <ns4:waypoint x="1290.0" y="300.0" /> 
-        <di:waypoint x="1290.0" y="410.0" /> +        <ns4:waypoint x="1290.0" y="410.0" /> 
-        <di:waypoint x="910.0" y="410.0" /> +        <ns4:waypoint x="910.0" y="410.0" /> 
-        <di:waypoint x="910.0" y="515.0" /> +        <ns4:waypoint x="910.0" y="515.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_8" bpmnElement="reopened_Flow_8"> +      <ns2:BPMNEdge id="reopened_DI_Flow_8" bpmnElement="reopened_Flow_8"> 
-        <di:waypoint x="935.0" y="540.0" /> +        <ns4:waypoint x="935.0" y="540.0" /> 
-        <di:waypoint x="1043.5" y="540.0" /> +        <ns4:waypoint x="1043.5" y="540.0" /> 
-        <di:waypoint x="1043.5" y="470.0" /> +        <ns4:waypoint x="1043.5" y="470.0" /> 
-        <di:waypoint x="1152.0" y="470.0" /> +        <ns4:waypoint x="1152.0" y="470.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_9" bpmnElement="reopened_Flow_9"> +      <ns2:BPMNEdge id="reopened_DI_Flow_9" bpmnElement="reopened_Flow_9"> 
-        <di:waypoint x="935.0" y="540.0" /> +        <ns4:waypoint x="935.0" y="540.0" /> 
-        <di:waypoint x="1043.5" y="540.0" /> +        <ns4:waypoint x="1043.5" y="540.0" /> 
-        <di:waypoint x="1043.5" y="670.0" /> +        <ns4:waypoint x="1043.5" y="670.0" /> 
-        <di:waypoint x="1152.0" y="670.0" /> +        <ns4:waypoint x="1152.0" y="670.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_10" bpmnElement="reopened_Flow_10"> +      <ns2:BPMNEdge id="reopened_DI_Flow_10" bpmnElement="reopened_Flow_10"> 
-        <di:waypoint x="1188.0" y="470.0" /> +        <ns4:waypoint x="1188.0" y="470.0" /> 
-        <di:waypoint x="1271.5" y="470.0" /> +        <ns4:waypoint x="1271.5" y="470.0" /> 
-        <di:waypoint x="1271.5" y="540.0" /> +        <ns4:waypoint x="1271.5" y="540.0" /> 
-        <di:waypoint x="1355.0" y="540.0" /> +        <ns4:waypoint x="1355.0" y="540.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_11" bpmnElement="reopened_Flow_11"> +      <ns2:BPMNEdge id="reopened_DI_Flow_11" bpmnElement="reopened_Flow_11"> 
-        <di:waypoint x="1188.0" y="670.0" /> +        <ns4:waypoint x="1188.0" y="670.0" /> 
-        <di:waypoint x="1271.5" y="670.0" /> +        <ns4:waypoint x="1271.5" y="670.0" /> 
-        <di:waypoint x="1271.5" y="540.0" /> +        <ns4:waypoint x="1271.5" y="540.0" /> 
-        <di:waypoint x="1355.0" y="540.0" /> +        <ns4:waypoint x="1355.0" y="540.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="reopened_DI_Flow_12" bpmnElement="reopened_Flow_12"> +      <ns2:BPMNEdge id="reopened_DI_Flow_12" bpmnElement="reopened_Flow_12"> 
-        <di:waypoint x="1505.0" y="540.0" /> +        <ns4:waypoint x="1505.0" y="540.0" /> 
-        <di:waypoint x="1650.0" y="540.0" /> +        <ns4:waypoint x="1650.0" y="540.0" /> 
-        <di:waypoint x="1650.0" y="25.0" /> +        <ns4:waypoint x="1650.0" y="25.0" /> 
-        <di:waypoint x="390.0" y="25.0" /> +        <ns4:waypoint x="390.0" y="25.0" /> 
-        <di:waypoint x="390.0" y="85.0" /> +        <ns4:waypoint x="390.0" y="85.0" /> 
-        <bpmndi:BPMNLabel> +        <ns2:BPMNLabel> 
-          <dc:Bounds x="1330.0" y="5.0" width="180" height="26" /> +          <ns3:Bounds x="1330.0" y="5.0" width="180" height="26" /> 
-        </bpmndi:BPMNLabel> +        </ns2:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-    </bpmndi:BPMNPlane> +    </ns2:BPMNPlane> 
-  </bpmndi:BPMNDiagram>+  </ns2:BPMNDiagram>
 </bpmn:definitions> </bpmn:definitions>
 </sharix-bpmn> </sharix-bpmn>
  
-В своём рабочем статусе handler записывает локальную причину ''support_reassignment'' и назначает повтор по ''ST_REQUEST_REOPENED_RECHECK_SECONDS''. Пустой reason в Blockly-примитиве defer использует уже сохранённую причину. Это состояние runtime и запись журнала, а не комментарий в Ticket и не уведомление пользователю.+Один проход в своём рабочем статусе: 
 + 
 +  - Записать локальную причину support_reassignment. 
 +  - Назначить defer по ST_REQUEST_REOPENED_RECHECK_SECONDS. Пустой reason использует ранее сохранённую причину. 
 +  - Завершить проход и освободить worker. 
 + 
 +Причина относится к runtime и журналу. Она не добавляет комментарий в Ticket и не уведомляет пользователя.
  
 Worker после прохода освобождается. Когда срок ''deferred_until'' наступает либо получена новая authoritative revision, Ticket становится готов к повторной проверке; одинаковый снимок не сбрасывает ожидание. Фактический запуск зависит от свободного worker и соединения XMPP. Defer хранится в памяти; после рестарта состав очереди сверяется с backend заново. Worker после прохода освобождается. Когда срок ''deferred_until'' наступает либо получена новая authoritative revision, Ticket становится готов к повторной проверке; одинаковый снимок не сбрасывает ожидание. Фактический запуск зависит от свободного worker и соединения XMPP. Defer хранится в памяти; после рестарта состав очереди сверяется с backend заново.
Строка 583: Строка 691:
 </sharix-bpmn> </sharix-bpmn>
  
-Пользователь должен иметь доступ к конкретному Ticket и право смены статуса. Авторство само по себе такого права не даёт. Канонические view/API проверяют объектный доступ и разрешённый переход lifecycle до сохранения; связанные с заказом Ticket не должны обходить жизненный цикл заказа через общую форму.+Для внешнего решения проверяются отдельно:
  
-Из ''REOPENED'' текущий lifecycle разрешает ''ASSIGNED'', ''WONTFIX'' либо ''DUPLICATE''. Выбор ''ASSIGNED'' меняет стадию, но не является автоматическим заполнением ''assigned_to'': назначенного человека и решение о дальнейшей работе нужно проверить отдельно. Handler REOPENED не выполняет этот выбор за пользователя.+  * право чтения конкретного Ticket; 
 +  * право менять его статус; 
 +  * разрешённый переход текущего lifecycle; 
 +  * доменная граница: связанный заказ должен изменяться через действия заказа.
  
-После commit backend публикует события изменения владельца. ''ticket.moved'' направляется прежнему handler и исключает локальный снимок; если worker уже выполняется, применяется pending discard до его завершения. Для новой стадии с зарегистрированным handler предназначен ''ticket.changed''. Для ''CLOSED'' отдельного ''open_st_request_closed'' в каталоге нет.+Авторство обращения само по себе не даёт права смены статуса. 
 + 
 +Из REOPENED допустимы: 
 + 
 +  * **ASSIGNED:** вернуть обращение на стадию назначения; выбранного человека проверить отдельно. 
 +  * **WONTFIX:** зафиксировать отказ от выполнения, далее действует соответствующий сценарий. 
 +  * **DUPLICATE:** признать обращение дубликатом, далее действует сценарий ожидания закрытия. 
 + 
 +Переход в ASSIGNED сам по себе не заполняет assigned_to. Handler REOPENED не выбирает исход за пользователя. 
 + 
 +После commit backend направляет: 
 + 
 +  * **ticket.moved прежнему handler:** локальный снимок исключается; для выполняющегося worker удаление откладывается до завершения прохода. 
 +  * **ticket.changed новому зарегистрированному handler:** новое состояние ставится в его очередь. 
 + 
 +У CLOSED нет отдельного open_st_request_closed в каталоге. Сохранение статуса и доставка события — разные операции.
  
 XMPP-доставка best effort и не является частью транзакции сохранения Ticket. Потерю сообщения восстанавливает scoped periodic reconciliation по ''INTERVAL_TIME_BD_REQ''. Успешный список без Ticket позволяет убрать прежний снимок; ошибка списка не должна трактоваться как пустая очередь. Новый локальный проход не заменяет проверку актуального backend-состояния. XMPP-доставка best effort и не является частью транзакции сохранения Ticket. Потерю сообщения восстанавливает scoped periodic reconciliation по ''INTERVAL_TIME_BD_REQ''. Успешный список без Ticket позволяет убрать прежний снимок; ошибка списка не должна трактоваться как пустая очередь. Новый локальный проход не заменяет проверку актуального backend-состояния.
Строка 594: Строка 720:
 Именованный интервал — ''ST_REQUEST_REOPENED_RECHECK_SECONDS'', минимум одна секунда; реальное значение конкретного сервера здесь не предполагается. Обработчик не содержит фиксированного срока автоматического закрытия. Для общего восстановления используется ''DEFERRED_TICKET_RECHECK_SECONDS'', для сверки состава — ''INTERVAL_TIME_BD_REQ''. Именованный интервал — ''ST_REQUEST_REOPENED_RECHECK_SECONDS'', минимум одна секунда; реальное значение конкретного сервера здесь не предполагается. Обработчик не содержит фиксированного срока автоматического закрытия. Для общего восстановления используется ''DEFERRED_TICKET_RECHECK_SECONDS'', для сверки состава — ''INTERVAL_TIME_BD_REQ''.
  
-При долгом ожидании проверьте актуальный статус и ревизию Ticket, выбранную версию Python/workspace, настройку интервала, причину ожидания, наличие доступного внешнего действия и права пользователя. Затем — scoped API, ready/defer, XMPP и periodic reconciliation. Не считайте штатное ожидание внешнего решения зависанием только по тому, что Ticket не поменялся от очередного таймера.+Порядок диагностики долгого ожидания: 
 + 
 +  - Прочитать актуальные статус и ревизию Ticket. 
 +  - Сверить выбранные Python/workspace с канонической генерацией. 
 +  - Проверить именованный интервал, локальную причину и момент готовности defer. 
 +  - Проверить доступность внешнего действия и права принимающего решение. 
 +  - Проверить scoped API, ready-очередь, XMPP и periodic reconciliation. 
 + 
 +Повтор таймера без изменения статуса штатен, пока внешнее решение не принято. Неопределённый ответ записи требует чтения сохранённого состояния перед повтором.
  
 ===== Проверенные источники ===== ===== Проверенные источники =====
sharixopen/knowledge/scenarios/st_request_reopened.1793215618.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX