Содержание
Registry обработчиков и доступность capabilities
Назначение: Контракт. Продукт: ShariX Open · Общий компонент.
Для кого: Разработчик · Интегратор · Оператор развёртывания · Администратор · Нейросеть.
Темы: Обработчики → Runtime · Обработчики → Blockly · Модули → Доступность.
Как собирается каталог ShariX Open
Готовые first-party handlers задаются каталогом handlers_examples.catalog. Optional-модули регистрируют contribution в Django; standalone runtime читает материализованный manifest и не должен импортировать их ORM ради discovery.
- App/provider registration — приложение действительно загрузило свой callback.
- HandlerContribution — проверенное описание handler и его narrow операций.
- Manifest — сохранённый каталог установленной сборки для независимого runtime.
- Mode/version — server-local выбор, что исполнять.
- Provenance/health — происхождение кода и наблюдаемое выполнение; это разные проверки.
Наличие Python-класса либо строки в Wiki не заменяет ни одну из следующих стадий.
Что объявляет contribution
- handler_id, provider_code, title/category;
- необязательные ticket_type/status и стабильные contracts;
- capabilities и список операций с capability каждой;
- callback_path;
- builtin_code_path и builtin_workspace_path;
- default_mode/default_version, API key env name и metadata.
Пути проверяются как безопасные project-relative paths. builtin_available требует code path, blockly_editable — workspace path; операция не может требовать необъявленный capability. Дубли handler ID и некорректные manifests вызывают ошибку, а не молча выбирают последнюю запись.
Optional contribution не получает широкие ticket.transition/relationship.write/permission.write/requirements.write: для своего бизнес-действия объявляется narrow operation. Это граница API, не способ скрыто обрабатывать чужой статус.
Materialization и read-only проверка
Из корня собранной установки под назначенным пользователем:
./venv/bin/python manage.py sync_handler_contributions --check --list
Команда проверяет совпадение manifest с зарегистрированными installed contributions и выводит ID. Без –check команда записывает conf-real/handler_contributions.json через canonical config I/O; такая запись относится к штатной подготовке установки, а не обычному чтению статуса.
Если manifest отсутствует, low-level loader возвращает пустой набор optional contributions; это не доказательство, что optional-модули не нужны. Строгая sync-check должна выявить отсутствие/устаревание manifest.
От workspace к исполнению
- Измените typed Blockly workspace и соответствующие зарегистрированные блоки/операции.
- Сгенерируйте Python; ручная бизнес-ветка только в generated-файле не является каноническим изменением.
- Сверьте source hashes/provenance и declared program.
- Для optional берите module-owned code/workspace paths из contribution/provenance; не навязывайте всем один каталог generated.
- Проверьте выбранную runtime version: обновление builtin-файла не означает переключение локальной версии.
Open provider привязывает core builtin paths к handlers_examples/handlers и handlers_examples/generated_handler_blocks, local versions — к conf-real/handlers/local_versions. Modes — handler/disabled; прежний auto_transition не является текущим mode.
Диагностика по порядку
- Source доступен, но app не загружен → проверьте конфигурацию и materialization/restart state.
- App загружен, contribution отсутствует → проверьте регистрацию provider и её ошибку.
- Contribution есть, manifest stale → штатная подготовка manifest, затем повтор check.
- Catalog есть, процесс disabled/другая version → проверьте выбранный runtime режим.
- Процесс запущен → отдельно проверьте identity/capability, необходимый XMPP/API и domain result.
Общий runtime может использоваться Platform; его собственный каталог и маршруты сохраняют отдельную assembly-привязку. Shared-изменение передаётся ответственному Platform для проверки по его внутренним инструкциям.
Проверенные источники
Проверено по Git-исходникам 31.10.2026. Состояние исходников отделено от состояния конкретной установки; команды ниже при редакционной проверке не выполнялись, бизнес-данные и значения секретов не читались.