13 KiB
Исследования SQL: активность расширений
Статус: in_progress. Этот журнал отделяет наблюдения от гипотез. Ничего из
раздела «гипотеза» не используется адаптером как runtime-правило.
2026-08-02 — baseline upo_test
Цель: установить доказанный SQL-признак флажка «Активно» расширения в Конфигураторе.
Снимок выполнен только чтением из dbo._ExtensionsInfo для имён
фс_Отчеты и фс_Отчеты1. Зафиксированы все известные скалярные поля строки
и SHA1 _ExtensionZippedInfo; бинарные данные и учётные сведения не сохранены.
| name | _IDRRef (hex) |
_ExtensionOrder |
_UpdateTime |
_ExtensionUsePurpose |
_ExtensionScope |
zipped bytes | zipped SHA1 |
|---|---|---|---|---|---|---|---|
фс_Отчеты |
0x8287005056B0D48311F13D089B11F844 |
21 | 4026-05-07 23:45:25 | 2 | 1 | 188 | 0D07CB6CE05AADB301A002CAB7312AD6EA64A344 |
фс_Отчеты1 |
строка отсутствует | — | — | — | — | — | — |
Подтверждено
- Наличие строки в
_ExtensionsInfoдоказывает регистрацию расширения в данном SQL-снимке, но не доказывает флажок «Активно» в Конфигураторе. - Поэтому поле
activeадаптера для такого источника возвращается какnull; прежнее значениеtrueбыло неподтверждённым и удалено.
Гипотеза, требующая проверки
После переключения флажков в Конфигураторе изменится одна или несколько
наблюдаемых SQL-структур: строка _ExtensionsInfo, поля строки, DBNames-Ext,
ConfigCAS/ConfigCASSave или иной live SQL-маркер.
Следующий контролируемый опыт
- Пользователь активирует
фс_Отчетыи выключаетфс_Отчеты1(либо наоборот) в Конфигураторе и сообщает, когда действие сохранено. - Адаптер снимает тот же снимок
_ExtensionsInfoи дополнительно сравнивает только подтверждённые live SQL-маркеры. - Правило будет добавлено в runtime лишь если различие воспроизводится при обратном переключении и однозначно связано с активной композицией.
Запрещённый вывод до опыта
Нельзя отбрасывать расширение из поиска только по факту его наличия или
отсутствия в _ExtensionsInfo, по совпадающему GUID объекта либо по догадке
из названия/порядка расширения.
2026-08-02 — baseline upo (текущий опыт)
Этот снимок является исходной точкой для переключения, которое пользователь
будет выполнять в upo. Он не смешивается с наблюдением upo_test выше.
| name | _IDRRef (hex) |
GUID из _IDRRef |
_ExtensionOrder |
_UpdateTime |
_ExtensionUsePurpose |
_ExtensionScope |
zipped bytes | zipped SHA1 |
|---|---|---|---|---|---|---|---|---|
фс_Отчеты |
0xA0CF005056B59ABC11F13D592F0651F1 |
2f0651f1-3d59-11f1-a0cf-005056b59abc |
20 | 2001-01-01 00:00:00 | 2 | 1 | 188 | 2718A3CC564F593799EFCF1E716305358AF804E8 |
фс_Отчеты1 |
0x8294005056B0D48311F18A348E02ACCD |
8e02accd-8a34-11f1-8294-005056b0d483 |
22 | 4026-08-01 18:51:55 | 2 | 1 | 188 | A9A4AF42BBA2084141A122F9D7C39D7E1428CB21 |
На baseline присутствуют обе строки. Значит наличие в _ExtensionsInfo не
может быть критерием активности: оно не отличает выключенное фс_Отчеты от
включенного фс_Отчеты1 на скриншоте пользователя.
2026-08-02 — подтверждённый декодер активности
Три независимых переключения флажка в Конфигураторе, сохранённые пользователем
в upo, дали один и тот же результат. Не весь SHA1, а третий байт с конца
_ExtensionZippedInfo меняется вместе с флажком:
| расширение | длина контейнера | состояние в UI | третий байт с конца |
|---|---|---|---|
фс_Отчеты |
188 | выключено → включено | 81 → 82 |
фс_Отчеты1 |
188 | включено → выключено | 82 → 81 |
ЭкстракторДанных1СВBI |
215 | включено → выключено | 82 → 81 |
Другие изменения контейнера не являются маркером: например, байт около начала контейнера и весь SHA1 меняются при сохранении Конфигуратором.
Runtime-правило (подтверждено для наблюдаемой версии)
SUBSTRING(_ExtensionZippedInfo, DATALENGTH(_ExtensionZippedInfo) - 2, 1):
0x82— расширение активно;0x81— расширение выключено;- любое иное значение —
active: null,unresolved.
Правило декодирует только активность и не интерпретирует остальные байты
контейнера. Перед использованием для фильтрации глобального поиска требуется
отдельный regression-тест, что выключенная extension route не попадает в
effective_working code search/read.
2026-08-02 — расширенная матрица флажков
В Конфигураторе была показана полная таблица расширений с дополнительными
флажками: безопасный режим, защита от опасных действий, использование в
распределённой ИБ и «использовать основной режим». Их комбинации различаются
между активными расширениями. Повторный read-only снимок upo дал:
- 14 расширений с UI-флажком «Активно» получили завершающий байт
82; ЭкстракторДанных1СВBIифс_Отчеты1с выключенным «Активно» получили81;- среди активных строк есть разные состояния каждого показанного
дополнительного флажка, но их завершающий байт всё равно
82.
Уточнённый вывод
81 и 82 надо рассматривать как два наблюдаемых кода состояния
активности в третьем байте с конца, а не как полную структуру битовых
флажков расширения. Технически это может быть битовое поле, перечисление или
маркер внутри более крупного протокола — формат этого байта пока не доказан.
Для runtime достаточно точного соответствия 81/82; никаких выводов о
других флажках из него делать нельзя.
Принятое правило адаптера
Рабочая композиция адаптера содержит только строки с active: true (82).
По умолчанию неактивные и нераспознанные расширения:
- не выдаются методом
extensions.list; - не участвуют в DBNames-Ext, ConfigCAS, manifest и cache-маршрутах;
- не участвуют в глобальном поиске модулей и объектов;
- не могут стать целью чтения или записи.
Явная попытка обратиться к известному выключенному расширению завершается
status: unavailable, error: extension_inactive; адаптер не читает и не
строит маршрут к его объектам. Это исключает неоднозначность одинакового GUID
объекта в активном и выключенном расширениях.
Это правило распространяется и на технические селекторы: верхнеуровневый
extension_guid, а также публичный ConfigCASSave file route с префиксом
GUID. Публичное чтение ConfigCAS разрешено только для ключа, который
подтверждён манифестом активного расширения; непринадлежащий активной
композиции файл получает extension_route_not_active. Внутренние SQL-вызовы
адаптера отделены от этого публичного барьера, чтобы он мог доказуемо
построить маршрут, но не раскрывает эти строки агенту.
Неподтверждённая гипотеза
Остальные флажки записаны в других позициях _ExtensionZippedInfo либо в
другой SQL-структуре. Это не используется адаптером.
Следующий опыт для декодирования остальных флажков (только по необходимости)
На одном выбранном расширении оставить «Активно» неизменным и переключить ровно один другой флажок, сохранить, затем снять бинарный diff. Повторить обратное переключение. До двухстороннего воспроизведения позиция и смысл изменившихся байтов остаются гипотезой.
Неподтверждённое направление — opaque module_ref
Нельзя отбрасывать любой ConfigCAS/ConfigCASSave module_ref только по
имени физического файла: у части подтверждённых активных модулей GUID
расширения отсутствует в имени и восстанавливается только из доказанного
контекста владельца. Ранняя фильтрация такого module_ref была проверена и
отменена, так как блокировала активные маршруты. Дальнейшее усиление возможно
только после доказанного owner-resolution до чтения модуля; до этого нельзя
объявлять opaque module_ref маршрутом выключенного расширения или менять его
семантику догадкой.
Подтверждённое частное правило для module_ref
Если physical ConfigCASSave module_ref содержит стандартный префикс
<extension-guid>__, GUID слоя доказуем до чтения контейнера. Адаптер
проверяет этот GUID по активной композиции и возвращает extension_inactive
для выключенного расширения. Это правило не распространяется на непрозрачные
имена файлов без GUID: для них по-прежнему требуется доказательство владельца.