{
"id": "ShariXKnowledgeSTRequestWaitingBPMN",
"page": "sharixopen:knowledge:scenarios:st_request_waiting",
"area": "open",
"type": "procedure",
"title": "Новая ST_REQUEST: ожидание, очередь и переход в ASSIGNED",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeDomainStrequest",
"ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",
"ShariXKnowledgeScenarios",
"ShariXKnowledgeSTRequestAssignedBPMN"
]
},
"extensions": {
"taxonomy": {
"domain": "business_processes",
"lifecycle": "implemented",
"component": "handlers_examples, handlers_backend, tickets",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_handlers_support",
"topic_handlers_runtime",
"st_request",
"bpmn",
"ticket",
"blockly",
"generated_python"
]
},
"source_evidence": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_st_request_new.json",
"sha256": "6b76b94236e6257f1f13dff9f41bb48c47352d5c512c9add0c5e53153c2dd6ff"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_st_request_new.py",
"sha256": "f3cc74eccbc60431fff10e4989a4e499af85c7190b2e30cba8b097639cf1a23f"
},
{
"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-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": "utils.py",
"sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "views/ticket_detail.py",
"sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/views/handler_workflow.py",
"sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/views/ticket.py",
"sha256": "b25a66fc52790f11ba7aca48527a4a5b6640a05ffa377ab58f562955f2695499"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/permissions.py",
"sha256": "a0e12d188313ae1e6a9b1502ec48c2dd7f76fffa78ecf50b5b1b33b040b290a1"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "urls.py",
"sha256": "c41101b32eb1132d63bf62d5bd96d344a79fe34946dc1635dc090921beb6e3c9"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "lib/tickets.py",
"sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"
}
],
"diagram": {
"format": "bpmn",
"executable": false
},
"handler_process": {
"handler_id": "open_st_request_new",
"source_kind": "git_builtin",
"canonical_python_verified": true,
"reviewed_on": "2026-10-28",
"model_sha256": "ee647a94c3be9e60b66e8d9e35f2b44a0e2b3c3a0c6e4af8645c308e6caf9419"
},
"editorial_review": {
"date": "2026-10-31",
"scope": "rewrite",
"batch": 4,
"style": "Конкретные действия, источники, условия и ограничения; определения и проверки — списками."
},
"source_review_20261031": {
"kind": "source_analysis_not_runtime_acceptance",
"sources": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "catalog.py",
"sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_st_request_new.json",
"sha256": "6b76b94236e6257f1f13dff9f41bb48c47352d5c512c9add0c5e53153c2dd6ff"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_st_request_new.py",
"sha256": "f3cc74eccbc60431fff10e4989a4e499af85c7190b2e30cba8b097639cf1a23f"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handlers/open_st_request_new.py",
"sha256": "f3cc74eccbc60431fff10e4989a4e499af85c7190b2e30cba8b097639cf1a23f"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_blockly_codegen.py",
"sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/blockly_runtime.py",
"sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_codegen_contract.json",
"sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/views/handler_workflow.py",
"sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"
}
]
},
"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",
"bpmn",
"ticket",
"blockly",
"generated_python"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "lifecycle относится к описываемому коду, а status к редакции документа; implemented не означает успешный runtime тест"
},
"classification_review": {
"date": "2026-10-31",
"source": "Содержание текущей страницы и проверенный словарь классификации",
"body_scope": "classification_and_navigation_only"
}
},
"content_sha256": "aa1202a7e01025360978d122339b2e84ea37402dce1441d448f29ad878e56e1d",
"schema": 1
}
====== Новая ST_REQUEST: ожидание, очередь и переход в ASSIGNED ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#st_request|Обработчики → ST_REQUEST]] · [[sharixopen:knowledge:classification:topics#runtime|Обработчики → Runtime]].
Сценарий описывает open_st_request_new в ShariX Open. Его работа — обработать Ticket типа ST_REQUEST в статусе NEW: отложить локальную проверку либо запросить переход в ASSIGNED. Это анализ текущего кода; конфигурация и выбранная версия конкретного сервера проверяются отдельно.
===== Какие источники определяют поведение =====
* **Алгоритм:** handlers_examples/generated_handler_blocks/open_st_request_new.json.
* **Исполняемый Python:** handlers_examples/handlers/open_st_request_new.py.
* **Копия результата генерации:** handlers_examples/generated_handlers/open_st_request_new.py.
* **Генерация:** handlers_backend/ticket_blockly_codegen.py и ticket_codegen_contract.json.
* **Очередь, отсрочка и сетевые операции:** handlers_backend/core/blockly_runtime.py.
* **Проверка обработчика на стороне API:** tickets/api/views/handler_workflow.py и capabilities каталога.
31.10.2026 Python заново получен из workspace: обе поставляемые копии совпали с результатом побайтово. Проверены хеши 11 исходников генераторов, перечисленных в контракте. Сам handler при этой проверке не запускался; серверные настройки и XMPP не проверялись.
===== Ветви одного прохода =====
^ Условие ^ Что делает код ^ Что это означает ^
| Ticket имеет статус NEW, STREQ_AUTOACCEPT выключен | Записывает support_assignment и откладывает проверку на ST_REQUEST_NEW_RECHECK_SECONDS. | Ожидается внешнее назначение/изменение; worker не остаётся спать на этом Ticket. |
| Ticket имеет статус NEW, STREQ_AUTOACCEPT включён | Запрашивает ASSIGNED; после успеха отправляет Ticket open_st_request_assigned и удаляет из своей очереди с delete_room=False. | Передаётся обработка следующей стадии. Конкретного сотрудника эта ветвь не выбирает и assigned_to не заполняет. |
| На проверку пришёл Ticket уже с другим статусом | Убирает локальное состояние и запрашивает удаление комнаты уведомлений. | Данный handler прекращает обработку. Сам Ticket из backend не удаляется. |
| Scoped API перехода вернул 404 | change_status убирает локальный снимок и возвращает False. | Ticket больше не доступен в рабочей области этого handler; повторный переход в этом проходе не выполняется. |
| Переход или отправка завершились другой ошибкой | Ошибка передаётся общему runtime для его обработки отказа и повторов. | Передачу нельзя объявлять успешно завершённой по одному намерению отправки. |
STREQ_AUTOACCEPT — переключатель автоматической ветви. Его имя не означает успешной проверки документа, выдачи роли или выбора сотрудника. В данном алгоритме явно выполняется переход состояния и передача Ticket; дальнейшее решение относится к следующему сценарию.
===== Полный алгоритм и очередь (BPMN) =====
Схема описательная: isExecutable=false. Дорожки показывают worker и планировщик, а deferred_until обозначает вычисленный локальный срок, не отдельную настройку установки. Просмотр схемы не запускает процесс и не создаёт таймер.
{"notes": ["Описание Git built-in; реальные локальные версии сверяются отдельно.", "Worker не занят во время defer. Символ deferred_until означает текущий локальный срок.", "Граница ошибки включает ошибку API/отправки, но не отменяет уже зафиксированный переход."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_assigned.json", "repository": "sharix-open-handlers-examples", "sha256": "d49e943a8806c3130acf09f1e93cf6b4e4a7d6f7428a5d18844a8f64ff619fe6"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_assigned.py", "repository": "sharix-open-handlers-examples", "sha256": "2be4d63c70b8469e541346aa3185bb29d04af1a87fb64fb1df118bde3ebe3c42"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_st_request_new.json", "repository": "sharix-open-handlers-examples", "sha256": "6b76b94236e6257f1f13dff9f41bb48c47352d5c512c9add0c5e53153c2dd6ff"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_st_request_new.py", "repository": "sharix-open-handlers-examples", "sha256": "f3cc74eccbc60431fff10e4989a4e499af85c7190b2e30cba8b097639cf1a23f"}, {"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": "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": "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": "api/views/ticket.py", "repository": "sharix-open-tickets", "sha256": "b25a66fc52790f11ba7aca48527a4a5b6640a05ffa377ab58f562955f2695499"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/permissions.py", "repository": "sharix-open-tickets", "sha256": "a0e12d188313ae1e6a9b1502ec48c2dd7f76fffa78ecf50b5b1b33b040b290a1"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "urls.py", "repository": "sharix-open-tickets", "sha256": "c41101b32eb1132d63bf62d5bd96d344a79fe34946dc1635dc090921beb6e3c9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}]}
new_start
new_status
new_auto
new_reason
new_defer
new_cleanup
new_stale_end
new_transition
new_confirmed
new_false_end
new_handoff
new_remove
new_success
new_api_error
new_send_error
new_retry
new_waiting
new_due
new_revision
new_ready
new_Flow_0
new_Flow_0
new_Flow_20
new_Flow_1
new_Flow_2
new_Flow_1
new_Flow_4
new_Flow_7
Локальная причина ожидания, не комментарий Ticket.
new_Flow_4
new_Flow_5
ST_REQUEST_NEW_RECHECK_SECONDS; вернуть Ticket, освободив worker.
new_Flow_5
new_Flow_6
new_Flow_2
new_Flow_3
new_Flow_3
ticket.transition; 404 означает устаревший scope, другие ошибки — исключение.
new_Flow_7
new_Flow_8
new_Flow_8
new_Flow_9
new_Flow_10
new_Flow_9
open_st_request_assigned; попытка отправки XMPP, не завершение следующей стадии.
new_Flow_10
new_Flow_11
new_Flow_11
new_Flow_12
new_Flow_12
new_Flow_13
new_Flow_14
Общий runtime: DEFERRED_TICKET_RECHECK_SECONDS; уже committed status не откатывается.
new_Flow_13
new_Flow_14
new_Flow_15
new_Flow_6
new_Flow_15
new_Flow_16
new_Flow_17
new_Flow_16
new_Flow_18
deferred_until
Уже получен новый authoritative snapshot. Дубликат сам по себе не снимает defer.
new_Flow_17
new_Flow_19
Запуск возможен при готовом XMPP и свободном worker.
new_Flow_18
new_Flow_19
new_Flow_20
===== Как устроено ручное ожидание =====
- Handler сверяет текущий статус Ticket с NEW.
- При выключенном STREQ_AUTOACCEPT сохраняет в памяти причину support_assignment.
- defer_ticket_for_setting читает ST_REQUEST_NEW_RECHECK_SECONDS через конфигурацию handlers; требуется положительное целое значение, минимум одна секунда. Значение конкретного сервера по этой статье не определяется.
- Ticket получает локальный срок defer, текущий проход заканчивается, а очередь может выполнять другие готовые элементы.
- После срока планировщик возвращает элемент в готовую очередь. Фактическое начало зависит от доступного worker и готовности XMPP; это не обещание запуска ровно в момент срока.
- Распознанное внешнее событие может снять отсрочку раньше. request_ticket_ready очищает локальный defer и будит планировщик; обновлённое состояние заново участвует в решении.
Причина ожидания и срок находятся в памяти процесса. После restart они не восстанавливаются как долговечное бизнес-обязательство: очередь получает актуальные Ticket из backend и оценивает их заново. Такой defer не заменяет журнал решений сотрудника или сохранённый SLA-таймер.
===== Передача NEW → ASSIGNED =====
- Обработчик вызывает scoped transition API с capability ticket.transition.
- Backend ограничивает Ticket типом и рабочим статусом handler, проверяет допустимость перехода и сохраняет Event в транзакции.
- После commit ticket.changed адресуется новому handler, а ticket.moved — прежнему.
- Сама Python-ветвь NEW после успешного перехода также отправляет Ticket в open_st_request_assigned и убирает его из своей очереди, сохраняя комнату при этой передаче.
Смена Ticket.status, попытка XMPP-отправки и фактическая работа следующего handler — отдельные наблюдаемые результаты. Если отправка после смены статуса не удалась, уже сохранённый переход не становится автоматически отменённым. Подробности внешних участников и восстановления — [[sharixopen:knowledge:scenarios:st_request_assigned|сценарий ASSIGNED]].
===== Сверка очереди и ошибки =====
Runtime периодически сопоставляет локальный состав с backend. В результате он может:
* обновить снимок Ticket;
* сделать обновлённый элемент готовым;
* исключить Ticket, который больше не входит в рабочую область;
* восстановить состав после пропущенного события или перезапуска.
Поэтому изменение статуса не обязано доходить до ELSE на схеме: элемент может быть исключён раньше по событию или успешной сверке. Ошибка запроса сверки не доказывает исчезновения Ticket: runtime сохраняет локальный снимок и пишет диагностику. Ошибки загрузки, исчерпание попыток и остановка относятся к общему runtime; эта диаграмма не разворачивает все его аварийные ветви.
===== Что записать при разборе зависания =====
* ID Ticket, его тип и сохранённый статус в backend.
* Фактически выбранную версию handler, workspace и Python.
* Действующие значения STREQ_AUTOACCEPT и ST_REQUEST_NEW_RECHECK_SECONDS — без секретов конфигурации.
* Был ли Ticket принят в очередь и есть ли локальные причина ожидания/срок defer.
* Какое событие или успешная сверка поступили после этого.
* Готовность XMPP и наличие свободного worker.
* Последний restart процесса: после него старые локальные признаки не считаются сохранёнными.
* Результат transition API и отдельно результат отправки следующему handler, если выполнялась автоматическая ветвь.
Если статус уже ASSIGNED, разбирать его обработку нужно у следующего handler, а не повторно менять NEW по старому снимку. При 404 проверяют область и актуальный статус; права API-ключа не расширяют ради прохождения запроса.
===== Связанные материалы =====
* [[sharixopen:knowledge:modules:handlers|Устройство обработчиков и проверка Blockly]].
* [[sharixopen:knowledge:domain:st_request|Назначение ST_REQUEST]].
* [[sharixopen:knowledge:operations:runtime_health|Диагностика runtime]].
* [[sharixopen:knowledge:scenarios:start|Указатель сценариев]].
===== Исходники, сверенные 31.10.2026 =====
Проверены опубликованные исходники указанных commits. Это анализ кода, а не подтверждение версии, конфигурации или выполнения сценария на сервере.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/catalog.py|sharix-open-handlers-examples: catalog.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_st_request_new.json|sharix-open-handlers-examples: generated_handler_blocks/open_st_request_new.json]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_st_request_new.py|sharix-open-handlers-examples: handlers/open_st_request_new.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handlers/open_st_request_new.py|sharix-open-handlers-examples: generated_handlers/open_st_request_new.py]].
* [[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]].
* [[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]].
* [[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]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets: signals.py]].
* [[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]].
~~SHARIX_KNOWLEDGE_RELATED~~