{
"id": "ShariXKnowledgeRepositoryUpdateWatchBPMN",
"page": "sharixopen:knowledge:scenarios:repository_update_watch",
"area": "open",
"type": "procedure",
"title": "Монитор обновлений repository_update_watch",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeScenarios"
],
"depends_on": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeModulesSysadmin"
],
"verified_by": [
"ShariXKnowledgeVerification"
]
},
"extensions": {
"taxonomy": {
"domain": "operations",
"lifecycle": "implemented",
"component": "sharix_sysadmin, handlers_backend, dbsynce",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_operator",
"audience_administrator",
"audience_developer",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"product_shared",
"material_scenario",
"topic_development_git",
"topic_operations_diagnostics",
"topic_handlers_blockly",
"sysadmin",
"repository_updates",
"optional_handler",
"source_snapshot",
"source_evidence",
"bpmn",
"blockly",
"generated_python"
]
},
"diagram": {
"format": "bpmn",
"executable": false
},
"source_evidence": [
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "handler_contributions.py",
"sha256": "96182d34efae36a2abf6b0ea81f61690f4d16d422a8e387a28ebf221eb520d82"
},
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "handlers/repository_update_watch.py",
"sha256": "4dae269db5f8a96b1d74aece1faae3a68a0378569c48a47535c012a4bf4de6d3"
},
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "handlers/blockly/repository_update_watch.json",
"sha256": "adaf5e5633e81617b525906621c226680744698187a3c4e31cae56f4fe5b71db"
},
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "services/repository_update_handler.py",
"sha256": "2e9ba086f017a1f4ba3c11b59ef0362d3a2039fb177cd54767f4b506eb2ae6b2"
},
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "services/repository_updates.py",
"sha256": "3f36c0ec4efdb07377be0e9b0c04d7557982f6c8ea6c7c98b1500053bc8e0689"
},
{
"repository": "sharix-open-sysadmin",
"commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"path": "services/source_provenance.py",
"sha256": "b89683e9a17d5d0202290f40cfa78d57aa6751691fb2a6ed0af06e2da75e477f"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "optional_blockly_codegen.py",
"sha256": "139b8250a40292fc756dca9f415ce2a474644bc4ebfd69270b71b29ea3c7047a"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/optional_handler_runtime.py",
"sha256": "de2c71b8b35bdd3ff81827a597c24cd87eb35441251012911d1ab2baacf38639"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/requesters.py",
"sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "main.py",
"sha256": "66b7df94fedbec931ed4cb2d4e1afd9cf0386e14ed0932e22b15eb301cd792d7"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/handler_optional.py",
"sha256": "0ff88578f68777a67fcf9624fabb580f829f3acbce041816b0c835495d6a3e2d"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/optional_handler_runtime.py",
"sha256": "fd4fd4cf0e2fd4b9d6c2a658f9acc7784e819306540a0995660e114a8e7bca72"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/handler_contributions.py",
"sha256": "98b32d6f8b27eb51dce8f767d5c45a42fd08cf5f8d749eff95da286183dda00f"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "urls.py",
"sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/handler_auth.py",
"sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"
}
],
"handler_process": {
"handler_id": "repository_update_watch",
"source_kind": "git_module_contribution",
"canonical_python_verified": true,
"reviewed_on": "2026-10-29",
"generator": "tools/generate_handler_bpmn.py",
"generator_sha256": "df8e4edc0deb91d2010aeeb481f2778de6a9dbbdc21ee1e210c6f07a9b24de2d",
"models": {
"cycle": "2651ce1764ac14b1feb73ebf9ddcad785ea438add6b4580311c2dfb5acda9927",
"evidence": "81cbfa7bc7552a90c5953ea46e1ad146220dbf06ebd6a8362f5638d0d2cd66a9"
},
"provider_code": "sharix_sysadmin",
"canonical_renderer": "handlers_backend/optional_blockly_codegen.py",
"typed_operations": [
"repository_updates.refresh_public"
]
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open",
"shared"
],
"audiences": [
"operator",
"administrator",
"developer",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"development/git",
"operations/diagnostics",
"handlers/blockly"
],
"tag_terms": [
"audience_operator",
"audience_administrator",
"audience_developer",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"product_shared",
"material_scenario",
"topic_development_git",
"topic_operations_diagnostics",
"topic_handlers_blockly",
"sysadmin",
"repository_updates",
"optional_handler",
"source_snapshot",
"source_evidence",
"bpmn",
"blockly",
"generated_python"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
},
"editorial_review": {
"date": "2026-10-31",
"scope": "Конкретизация действий, условий, результатов и диагностики; перечисления; исходные BPMN сохранены",
"current_source_records_verified": 15,
"original_source_evidence_recheck": "После git fetch все исходные SHA-256 совпали; source_evidence содержит текущие проверенные commits",
"canonical_regeneration": {
"kind": "optional",
"compared_python_paths": [
"handlers/repository_update_watch.py"
],
"generator_sources_verified": 11,
"handler_executed": false,
"paths_from_contribution": true
},
"runtime_checked": false,
"source_commit_update": {
"repository": "sharix-open-sysadmin",
"old_commit": "60e386e892793ffe37b8f0d842330c6e5635068e",
"new_commit": "a7e8b841f9a5a790df5d3adfcb265a7011bbabcb",
"rechecked_source_files": 6,
"all_bytes_equal": true,
"diagram_documentation": "Сохранена исходная редакция BPMN, хеши кода совпадают"
}
}
},
"content_sha256": "e4b4dfa50e1d5923d81b766d617b607794c8c48e6f6c3774a5bdd8389664015c",
"schema": 1
}
====== Монитор обновлений repository_update_watch ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]] · [[sharixopen:knowledge:classification:products#obschij_komponent|Общий компонент]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#operator_razvjortyvanija|Оператор развёртывания]] · [[sharixopen:knowledge:classification:audiences#administrator|Администратор]] · [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#git|Разработка → Git]] · [[sharixopen:knowledge:classification:topics#diagnostika|Эксплуатация → Диагностика]] · [[sharixopen:knowledge:classification:topics#blockly|Обработчики → Blockly]].
**Область:** публичный контракт ShariX Open/shared Sysadmin. **Обработчик:** ''repository_update_watch'', module contribution ''sharix_sysadmin'', без типа/статуса Ticket. 31.10.2026 исходники повторно получены из Git. Module-owned Python совпал с optional renderer; пути взяты из contribution, отдельно проверены callback и общий launcher. Сам обработчик и его внешние действия при анализе не запускались. Выбранная версия, настройки и работоспособность конкретной установки проверяются отдельно.
===== Назначение и границы =====
Монитор обновляет сведения об установленных управляемых repositories:
* configured deployment target — источник, настроенный для развёртывания;
* canonical upstream target — исходный upstream.
Он не выполняет git pull/merge, переключение рабочих веток, миграции, установку версии или restart. Найденное обновление — основание для решения оператора.
Contribution по умолчанию disabled, version builtin; это optional-возможность, не обязательная зависимость обычной установки. В текущем опубликованном модуле blockly_editable=true и есть module-owned workspace/generated Python. Blockly содержит typed operation repository_updates.refresh_public с интервалом 21600 секунд. Исполняется сгенерированный Python, а не Blockly JSON; BPMN isExecutable=false.
===== Интервал, API и повтор (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; optional Blockly Python побайтово проверен.", "requires_xmpp=False; Django-free process вызывает объявленную backend operation.", "21600 секунд — интервал после успешного завершения; первый запуск сразу, память теряется при рестарте.", "Проверка evidence не выполняет install/pull/merge/restart."], "sources": [{"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handler_contributions.py", "repository": "sharix-open-sysadmin", "sha256": "96182d34efae36a2abf6b0ea81f61690f4d16d422a8e387a28ebf221eb520d82"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/repository_update_watch.py", "repository": "sharix-open-sysadmin", "sha256": "4dae269db5f8a96b1d74aece1faae3a68a0378569c48a47535c012a4bf4de6d3"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/blockly/repository_update_watch.json", "repository": "sharix-open-sysadmin", "sha256": "adaf5e5633e81617b525906621c226680744698187a3c4e31cae56f4fe5b71db"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_update_handler.py", "repository": "sharix-open-sysadmin", "sha256": "2e9ba086f017a1f4ba3c11b59ef0362d3a2039fb177cd54767f4b506eb2ae6b2"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_updates.py", "repository": "sharix-open-sysadmin", "sha256": "3f36c0ec4efdb07377be0e9b0c04d7557982f6c8ea6c7c98b1500053bc8e0689"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/source_provenance.py", "repository": "sharix-open-sysadmin", "sha256": "b89683e9a17d5d0202290f40cfa78d57aa6751691fb2a6ed0af06e2da75e477f"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "optional_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "139b8250a40292fc756dca9f415ce2a474644bc4ebfd69270b71b29ea3c7047a"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/optional_handler_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "de2c71b8b35bdd3ff81827a597c24cd87eb35441251012911d1ab2baacf38639"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "main.py", "repository": "sharix-open-handlers-backend", "sha256": "66b7df94fedbec931ed4cb2d4e1afd9cf0386e14ed0932e22b15eb301cd792d7"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_optional.py", "repository": "sharix-open-backend", "sha256": "0ff88578f68777a67fcf9624fabb580f829f3acbce041816b0c835495d6a3e2d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/optional_handler_runtime.py", "repository": "sharix-open-backend", "sha256": "fd4fd4cf0e2fd4b9d6c2a658f9acc7784e819306540a0995660e114a8e7bca72"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_contributions.py", "repository": "sharix-open-backend", "sha256": "98b32d6f8b27eb51dce8f767d5c45a42fd08cf5f8d749eff95da286183dda00f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}]}
watch_start
watch_due
watch_call
watch_ok
watch_save
watch_wait
watch_repeat
watch_error
watch_Flow_0
watch_Flow_0
watch_Flow_1
watch_Flow_2
watch_Flow_1
watch_Flow_3
watch_Flow_3
watch_Flow_4
watch_Flow_6
watch_Flow_4
watch_Flow_5
watch_Flow_2
watch_Flow_5
watch_Flow_7
watch_Flow_8
base_optional_handler_interval
watch_Flow_8
watch_Flow_6
watch_Flow_7
OptionalHandlerContext не требует XMPP и выполняет общий identity preflight. Далее generated process_cycle вызывает run_operation_every с явным интервалом **21600 секунд (6 часов)**.
Поведение шестичасового интервала:
- Первый проход вызывает operation сразу.
- После успешного HTTP/JSON status=ok сохраняется monotonic-время завершения.
- До истечения 21600 секунд запрос пропускается.
- После рестарта первая проверка выполняется заново.
Таймер хранится в памяти; это не календарный cron с фиксированным временем суток.
Внешний процессный цикл ждёт INTERVAL_TIME через exit_event.wait, то есть остановка прерывает ожидание. При исключении operation last_run не обновляется; ошибка логируется, следующий базовый цикл может повторить запрос. Но SOURCE_UNAVAILABLE или PRIVATE_AUTH_REQUIRED в успешно возвращённом evidence не являются исключением API: такой status=ok начинает обычный шестичасовой интервал.
Узкий backend endpoint:
- Проверяет HasHandlerAPIKey и identity.
- Находит materialized contribution и объявленную operation этого handler.
- Требует capability repository.update.watch.
- Вызывает только зарегистрированный callback для объявленного operation code.
Текст и payload не становятся произвольными командами ОС.
===== Внешний Git и snapshot (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; optional Blockly Python побайтово проверен.", "requires_xmpp=False; Django-free process вызывает объявленную backend operation.", "21600 секунд — интервал после успешного завершения; первый запуск сразу, память теряется при рестарте.", "Проверка evidence не выполняет install/pull/merge/restart."], "sources": [{"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handler_contributions.py", "repository": "sharix-open-sysadmin", "sha256": "96182d34efae36a2abf6b0ea81f61690f4d16d422a8e387a28ebf221eb520d82"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/repository_update_watch.py", "repository": "sharix-open-sysadmin", "sha256": "4dae269db5f8a96b1d74aece1faae3a68a0378569c48a47535c012a4bf4de6d3"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/blockly/repository_update_watch.json", "repository": "sharix-open-sysadmin", "sha256": "adaf5e5633e81617b525906621c226680744698187a3c4e31cae56f4fe5b71db"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_update_handler.py", "repository": "sharix-open-sysadmin", "sha256": "2e9ba086f017a1f4ba3c11b59ef0362d3a2039fb177cd54767f4b506eb2ae6b2"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_updates.py", "repository": "sharix-open-sysadmin", "sha256": "3f36c0ec4efdb07377be0e9b0c04d7557982f6c8ea6c7c98b1500053bc8e0689"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/source_provenance.py", "repository": "sharix-open-sysadmin", "sha256": "b89683e9a17d5d0202290f40cfa78d57aa6751691fb2a6ed0af06e2da75e477f"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "optional_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "139b8250a40292fc756dca9f415ce2a474644bc4ebfd69270b71b29ea3c7047a"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/optional_handler_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "de2c71b8b35bdd3ff81827a597c24cd87eb35441251012911d1ab2baacf38639"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "main.py", "repository": "sharix-open-handlers-backend", "sha256": "66b7df94fedbec931ed4cb2d4e1afd9cf0386e14ed0932e22b15eb301cd792d7"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_optional.py", "repository": "sharix-open-backend", "sha256": "0ff88578f68777a67fcf9624fabb580f829f3acbce041816b0c835495d6a3e2d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/optional_handler_runtime.py", "repository": "sharix-open-backend", "sha256": "fd4fd4cf0e2fd4b9d6c2a658f9acc7784e819306540a0995660e114a8e7bca72"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_contributions.py", "repository": "sharix-open-backend", "sha256": "98b32d6f8b27eb51dce8f767d5c45a42fd08cf5f8d749eff95da286183dda00f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}]}
api_start
api_auth
api_inventory
api_visibility
api_private
api_git
api_cache
api_end
api_Flow_0
api_Flow_0
api_Flow_1
api_Flow_1
api_Flow_2
api_Flow_2
api_Flow_3
api_Flow_4
api_Flow_3
api_Flow_5
api_Flow_4
api_Flow_6
api_Flow_5
api_Flow_6
api_Flow_7
api_Flow_7
{"notes": ["Описательная BPMN, isExecutable=false; optional Blockly Python побайтово проверен.", "requires_xmpp=False; Django-free process вызывает объявленную backend operation.", "21600 секунд — интервал после успешного завершения; первый запуск сразу, память теряется при рестарте.", "Проверка evidence не выполняет install/pull/merge/restart."], "sources": [{"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handler_contributions.py", "repository": "sharix-open-sysadmin", "sha256": "96182d34efae36a2abf6b0ea81f61690f4d16d422a8e387a28ebf221eb520d82"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/repository_update_watch.py", "repository": "sharix-open-sysadmin", "sha256": "4dae269db5f8a96b1d74aece1faae3a68a0378569c48a47535c012a4bf4de6d3"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "handlers/blockly/repository_update_watch.json", "repository": "sharix-open-sysadmin", "sha256": "adaf5e5633e81617b525906621c226680744698187a3c4e31cae56f4fe5b71db"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_update_handler.py", "repository": "sharix-open-sysadmin", "sha256": "2e9ba086f017a1f4ba3c11b59ef0362d3a2039fb177cd54767f4b506eb2ae6b2"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/repository_updates.py", "repository": "sharix-open-sysadmin", "sha256": "3f36c0ec4efdb07377be0e9b0c04d7557982f6c8ea6c7c98b1500053bc8e0689"}, {"commit": "60e386e892793ffe37b8f0d842330c6e5635068e", "path": "services/source_provenance.py", "repository": "sharix-open-sysadmin", "sha256": "b89683e9a17d5d0202290f40cfa78d57aa6751691fb2a6ed0af06e2da75e477f"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "optional_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "139b8250a40292fc756dca9f415ce2a474644bc4ebfd69270b71b29ea3c7047a"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/optional_handler_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "de2c71b8b35bdd3ff81827a597c24cd87eb35441251012911d1ab2baacf38639"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "main.py", "repository": "sharix-open-handlers-backend", "sha256": "66b7df94fedbec931ed4cb2d4e1afd9cf0386e14ed0932e22b15eb301cd792d7"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_optional.py", "repository": "sharix-open-backend", "sha256": "0ff88578f68777a67fcf9624fabb580f829f3acbce041816b0c835495d6a3e2d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/optional_handler_runtime.py", "repository": "sharix-open-backend", "sha256": "fd4fd4cf0e2fd4b9d6c2a658f9acc7784e819306540a0995660e114a8e7bca72"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_contributions.py", "repository": "sharix-open-backend", "sha256": "98b32d6f8b27eb51dce8f767d5c45a42fd08cf5f8d749eff95da286183dda00f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}]}
view_start
view_identity
view_current
view_show
view_stale
view_Flow_0
view_Flow_0
view_Flow_1
view_Flow_1
view_Flow_2
view_Flow_3
view_Flow_2
view_Flow_3
Sysadmin собирает локальные source facts, отдельно определяет configured deployment target и canonical upstream target. Для public-целей выполняет anonymous ls-remote и при необходимости сравнение истории во временном repository. В рабочем checkout проверка не делает merge/reset/pull. Независимые repositories обрабатываются небольшим bounded worker pool, до четырёх workers, а не одной последовательной цепочкой всех сетевых тайм-аутов.
Состояние каждой цели имеет отдельный смысл:
* **CURRENT:** установленный commit совпадает с удалённой ref при согласованном чистом состоянии.
* **UPDATE_AVAILABLE:** удалённая ref содержит более новые commits.
* **LOCAL_AHEAD:** локальный commit опережает удалённую цель.
* **DIVERGED:** история разошлась либо в рабочем дереве есть локальные изменения.
* **SOURCE_UNAVAILABLE:** цель/ref временно недоступна.
* **PRIVATE_AUTH_REQUIRED:** нужна явная разовая проверка с авторизацией.
* **UNKNOWN:** отношение локального и удалённого состояния не доказано.
Совпадающие deployment/upstream-цели могут переиспользовать evidence; разные проверяются независимо. Публикационная проекция evidence не является криптографическим подтверждением всей установки.
Private-цель без разовых credentials возвращает PRIVATE_AUTH_REQUIRED. Фоновая operation не читает private credentials и не пытается автоматически использовать пользовательское хранилище. Public Git-вызовы отключают интерактивный prompt/askpass и credential helper. Отдельная ручная private-refresh операция существует в Sysadmin, но **не вызывается этим handler**, её credentials не сохраняются в snapshot. Копировать секрет в Blockly/Wiki/описание operation не требуется.
Результат проверки:
* нечувствительное evidence в managed conf-real/repository-update-status.json;
* summary по обработанным repositories;
* отдельный статус каждой deployment/upstream-цели.
Недоступность одной цели может быть штатным содержимым успешного ответа operation. Status=ok не означает CURRENT у всех repositories.
Обычное открытие страницы статусов:
- Читает сохранённый snapshot.
- Сопоставляет его identity с текущими source, branch, commit и worktree facts.
- Не выдаёт устаревшее CURRENT при несовпадении фактов.
Git network I/O выполняет refresh, а не этот read path.
===== Диагностика и эксплуатационный смысл =====
Порядок диагностики:
- Проверить enabled и выбранную runtime version.
- Сверить identity и capability.
- Найти момент последнего успешного operation.
- Разобрать состояние каждой deployment/upstream-цели.
- Проверить, соответствует ли snapshot текущей ветке, source URL, commit и рабочему дереву.
PRIVATE_AUTH_REQUIRED не означает общей сетевой недоступности сервера.
После изменения ветки, source URL, commit или рабочего дерева старый snapshot может стать неактуальным — это ожидаемая защита от ложного CURRENT. Решение применить обновление принимает оператор через штатный repository/deployment workflow; этот монитор не является его заменой.
===== Проверенные источники =====
31.10.2026 проверен новый Sysadmin commit a7e8b841f9a5a790df5d3adfcb265a7011bbabcb. Шесть ранее закреплённых файлов совпали по SHA-256. В documentation исходных BPMN сохранён прежний commit 60e386e892793ffe37b8f0d842330c6e5635068e; он описывает те же побайтовые исходники. Ссылки ниже и metadata указывают актуальный проверенный commit.
Git SHA/SHA-256 и модели закреплены в metadata/BPMN; перед упаковкой они повторно сверены. Сама operation, локальные installation facts и её сетевые Git-проверки при анализе не запускались. Для анализа прочитан только опубликованный source Git. Общий автоматический hook обновлений Wiki пока не завершён.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/handler_contributions.py|sharix-open-sysadmin / handler_contributions.py]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/handlers/repository_update_watch.py|sharix-open-sysadmin / handlers/repository_update_watch.py]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/handlers/blockly/repository_update_watch.json|sharix-open-sysadmin / handlers/blockly/repository_update_watch.json]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/services/repository_update_handler.py|sharix-open-sysadmin / services/repository_update_handler.py]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/services/repository_updates.py|sharix-open-sysadmin / services/repository_updates.py]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-sysadmin/src/commit/a7e8b841f9a5a790df5d3adfcb265a7011bbabcb/services/source_provenance.py|sharix-open-sysadmin / services/source_provenance.py]] — Git a7e8b841f9a5a790df5d3adfcb265a7011bbabcb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/optional_blockly_codegen.py|sharix-open-handlers-backend / optional_blockly_codegen.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/optional_handler_runtime.py|sharix-open-handlers-backend / core/optional_handler_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/main.py|sharix-open-handlers-backend / main.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/handler_optional.py|sharix-open-backend / apiviews/handler_optional.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/optional_handler_runtime.py|sharix-open-backend / lib/optional_handler_runtime.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/handler_contributions.py|sharix-open-backend / lib/handler_contributions.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/urls.py|sharix-open-backend / urls.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/api/handler_auth.py|sharix-open-tickets / api/handler_auth.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
===== Связанные материалы =====
* [[sharixopen:knowledge:modules:handlers|Модуль обработчиков]]
* [[sharixopen:knowledge:scenarios:start|Индекс сценариев]]
~~SHARIX_KNOWLEDGE_RELATED~~