Commit Graph

207 Commits

Author SHA1 Message Date
zuevav 7de9e3c65b Опрос ЛК ЕСИА Финанс раз в 10 секунд (было раз в минуту), повтор одной ошибки в журнале — не чаще раза в 5 мин
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-29 13:13:24 +03:00
zuevav 02e44c9173 Связь с НРД восстановилась — сквозная проверка сразу
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 20:26:30 +03:00
zuevav d4237c9da3 Шапка: одна плашка «Шлюз НРД», подробности по участкам — в подсказке
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 16:21:43 +03:00
zuevav 27c350a087 Карточка недоставленной заявки: фон ошибки вместо боковой полосы
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 15:59:13 +03:00
zuevav eecb3b7923 Выпуск 2026.09.25.28: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 15:38:53 +03:00
zuevav c56834af5c Выпуск 2026.09.25.27: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 15:37:34 +03:00
zuevav 76b97b0755 Выпуск 2026.09.25.26: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 15:22:41 +03:00
zuevav 4b81862a90 Выпуск 2026.09.25.25: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 00:30:24 +03:00
zuevav fc907bea1d Выпуск 2026.09.25.24: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 00:19:37 +03:00
zuevav 5ddea22b30 Выпуск 2026.09.25.23: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 00:14:52 +03:00
zuevav af7133beaa Выпуск 2026.09.25.22: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 00:08:27 +03:00
zuevav 7da9a380a9 Выпуск 2026.09.25.21: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 23:50:37 +03:00
zuevav 0104300918 Выпуск 2026.09.25.20: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 23:38:06 +03:00
zuevav 2a5a8d60fa Выпуск 2026.09.25.19: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 23:24:25 +03:00
zuevav d7b53f1c16 Выпуск 2026.09.25.18: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 23:15:23 +03:00
zuevav d994350590 Выпуск 2026.09.25.17: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:56:46 +03:00
zuevav 965e21c686 Выпуск 2026.09.25.16: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:53:37 +03:00
zuevav e5176d6df2 Выпуск 2026.09.25.15: версии компонентов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:44:25 +03:00
zuevav 2edc83e614 Модуль, снятый с лицензии, отключается один раз: служба остановлена (bj-keymedia unit-disable), одно оповещение, в списках не показывается; вернули в лицензию — служба включается
Также: версия файла, совпадающего с выпуском, записывается (нет ложного «новее»); признак неудачной проверки отдельно от результатов установки; окно обновления само перезагружает страницу.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:43:34 +03:00
zuevav 75c86246ad Выпуск: у каждого компонента своя версия — поднимается, только если изменился компонент (отпечаток исходников / сумма jar)
deploy/release/component-versions.json — версии и отпечатки последнего выпуска, стартовые = 2026.09.25.14.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:32:13 +03:00
zuevav b9ca30bef1 Образ: подтверждение стирания — выбор пункта в меню загрузки (меню ждёт без таймера), вместо вопроса yes/no в журнале установщика
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 21:27:27 +03:00
zuevav a6c3511349 Образ: установка без вопросов (DHCP, весь диск) с одним подтверждением стирания; приветствие на консоли не перерисовывается без нужды
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 20:14:10 +03:00
zuevav d7d7e2105f Образ Ubuntu: слой обновлений (full-upgrade + ядро) и пакеты bj на диске — установка почти не качает из сети
- deploy/iso/build-ubuntu-updates-layer.sh: слой ubuntu-server-minimal.ubuntu-server.bj.squashfs поверх
  «Ubuntu Server» (оригинальные слои и среда установщика не меняются) + debs/ для bj-installer;
- build-iso-ubuntu.sh LAYER=<каталог>: слой — источник установки по умолчанию, старые ядро HWE и прошивки
  из репозитория образа убираются;
- bj-installer: пакеты из /var/lib/bj/debs ставятся с диска, иначе — из репозитория.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 19:46:04 +03:00
zuevav ce98ca137f Мастер по порядку без пропусков; шаг 5 — ключ организации и автообновление сертификатов НРД; в образ кладутся все файлы ядра
- мастер запоминает пройденный шаг и продолжает со следующего, выполненные шаги показываются с пояснением;
- шаг 5: мастер установки ключа + описание автоматического ведения сертификатов НРД (контуры не смешиваются);
- образ: bj-installer и crypto-service.jar в комплекте; установщик пропускает недостающие файлы, кроме ядра.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 18:10:10 +03:00
zuevav 9ee2641431 Первая загрузка: без повтора адреса после итога установщика
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 17:21:17 +03:00
zuevav 0ceabbeed8 Первая загрузка: вопросы после cloud-init, консоль без сообщений загрузки, подсказки по шагам
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 17:20:25 +03:00
zuevav e75de4f27d Образ Ubuntu: вариант раскладки для каждой из двух (us,ru) — иначе автоустановка падала с InconsistentMultiLayoutError; md5sum.txt пересчитывается
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 16:41:55 +03:00
zuevav 7ecfee524d Образ Ubuntu: без ядра HWE и его пункта меню (2,08 → 1,78 ГБ)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 15:50:00 +03:00
zuevav 9b963eb0b9 Образ на Ubuntu 22.04 LTS (автоустановка) со встроенной СКЗИ «Валидата Клиент L»: сборщик build-iso-ubuntu.sh, шаг установщика «СКЗИ Валидата» (из комплекта образа, с совместимой libldap 2.4), установщик принимает Ubuntu 22.04
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 15:29:42 +03:00
zuevav 2350fdf5aa firstboot: генерация пароля без обрыва канала (tr: ошибка записи)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 14:12:24 +03:00
zuevav 405061ef8d Сторож ИШ НРД: проверка каждые 30 с, оповещение через 2 мин недоступности, автоперезапуск igate (до 3 попыток, раз в 20 мин), оповещения «не помог»/«восстановлен», красный индикатор в шапке; igate в списке служб root-демона
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 13:56:37 +03:00
zuevav 8dbd97238a Образ: учётные записи ОС root_bj (sudo) и user_bj задаются автоматически, пароли генерируются при первой загрузке (можно ввести свои) и показываются один раз на итоговом экране; firstboot на bash (read -t/-p)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 13:15:49 +03:00
zuevav c88b0bb428 Установка: bj-server сам создаёт /run/bj (без bj-crypto служба падала с 226/NAMESPACE); шаг лицензии не показывается при установке с образа; причина при сбое запуска; Debian — один администратор с sudo, логин задаётся явно; логин на экране приветствия
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 12:35:40 +03:00
zuevav b2f8652381 Расширение Fancy DEPO для M2M (процедуры Фонтвьель, снято 23.09): тексты, зависимости, параметры для установки у другого клиента
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-23 16:48:25 +03:00
zuevav 14303b2522 build-iso: имена файлов ядра — из подписанного манифеста (payload), ошибка при отсутствии
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-23 16:28:37 +03:00
zuevav d7a1aec0f0 bj-welcome: создавать /etc/issue.d
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-23 09:01:17 +03:00
zuevav 492e226e54 Установка: приветственный экран консоли (bj-welcome: адрес веб-входа и состояние, всегда), ядро с образа без ключа продукта (--bundle), ключ продукта на первой веб-странице, повтор вопроса при каждой загрузке
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-23 08:53:13 +03:00
zuevav 3a4ec0cab8 ISO preseed: таймаут DHCP 60 с (медленные DHCP-серверы), IPv6 10 с
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-22 17:27:05 +03:00
zuevav 6e8f7ad37f ISO: латинские подписи меню, свой текст отсчёта, hotkey b, chmod перед записью
По результатам первого реального boot-теста образа (QEMU/OVMF, BIOS + UEFI +
UEFI Secure Boot — все три доходят до меню, наш пункт по умолчанию):
- подписи пунктов латиницей: vesamenu (BIOS) кириллицу не отображает — были
  кракозябры; в grub тот же риск со шрифтом темы;
- подсказка обратного отсчёта своя («Bridge&Join install starts in # seconds»)
  и пишется в конец isolinux.cfg ПОСЛЕ include menu.cfg — внутри menu.cfg
  подменю Advanced повторно включает stdmenu.cfg и перебивало autoboot из txt.cfg;
- горячая клавиша b (i занята родным «Install» в grub);
- без «(Debian 13)» в подписи — обрезалось краем бокса темы UEFI, и так в заголовке;
- chmod u+w перед >> в isolinux.cfg: файлы, извлечённые xorriso из ISO, 0444.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-22 17:16:22 +03:00
zuevav 414227796b Настройка: состояние служб ядра и модулей с перезапуском из админки
Модули работают отдельными службами (bj-npr, bj-quikexport, bj-lk), и когда
служба лежит, раздел модуля отвечает ошибкой связи, а администратору
предлагалось идти в консоль за systemctl status. Теперь в разделе «Обновления»
карточка «Службы»: состояние каждой службы, с какого времени, причина отказа
и кнопка «Перезапустить».

Состояние читаем обычным systemctl show — прав не требует. Перезапуск делает
root-демон bj-keymedia (тот же канал, что у установки обновлений) по закрытому
списку служб: чужую службу и сам демон отсюда не тронуть.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 19:28:58 +03:00
zuevav 6fee3c5ff7 Личный кабинет — модуль modules/lk: сборка в релизе, unit в комплекте, ключ вне unit-файла
Код bj-lk перенесён в modules/lk (cmd/bj-lk — запуск, флаг -version); релиз собирает bj-lk
со своей версией (LK_VERSION), unit bj-lk.service встроен в комплект установщика и берёт
адрес bj-server и ключ доступа из /etc/bj/lk.env, а не из unit-файла.

Исправлено: признаки «администратор» и «кабинет клиента» читались из общей переменной
последнего запроса (curReq) — при одновременной работе признак мог достаться чужому запросу.
Теперь из кук своего запроса. Без BJ_URL/BJ_KEY кабинет показывает подсказку настройки
вместо падения службы. Тесты: вход, портфель, health, флаг админа по запросу, без настройки.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 01:21:01 +03:00
zuevav 97e99b72c7 Экспорт QUIK — отдельная служба bj-quikexport; модули, выделенные из ядра, ставятся с обновлением
bj-quikexport (modules/quikexport + cmd/bj-quikexport, 127.0.0.1:8084): управление ARQA
quikexport перенесено из bj-server. Настройки у службы в /var/lib/bj/.bj/quik-export/settings.json
(при первом запуске переносятся из setup.json), раздел отдаётся фрагментом с индикатором меню,
действия отвечают X-BJ-Flash. bj-server встраивает раздел в «Настройку», проксирует формы
/admin/setup/quikexport/… и передаёт лицензию (X-BJ-Licensed). Общая проверка служебного
ключа — modules/modkit (им пользуется и bj-npr), общее для прокси — lkgateway/modules.go.

Выделенные из ядра модули (bj-npr, bj-quikexport: Component.FromCore) при обновлении ставятся и
там, где их ещё нет, если входят в лицензию: release.MarkSplitModules, request.json "new",
root-установщик ставит и включает unit-файл из комплекта. Если в обновлении меняется сам
установщик, модули ставятся после перезапуска bj-server (ensureSplitModules).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 01:15:27 +03:00
zuevav 5527a464ca НПР / УДС — отдельная служба bj-npr
Модуль вынесен в modules/npr + cmd/bj-npr (127.0.0.1:8083), обновляется
независимо от ядра. Служба читает подключение из setup.json и принимает
запросы только со служебным ключом модулей (/var/lib/bj/.bj/module.key,
создаёт bj-server). Полные страницы отдаются фрагментом (X-BJ-Layout: page).

bj-server хранит настройки и проверку подключения, проксирует /admin/npr
после входа, прав и лицензии и встраивает страницы модуля в общий макет
(admin.modulePage); если служба не отвечает — понятная страница.
Unit bj-npr.service встроен в установщик, установщик включает службы
установленных модулей; build-release.sh собирает bj-npr.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 01:00:31 +03:00
zuevav d8dee07213 feat(iso): образ Bridge&Join на основе Debian 13 netinst
- deploy/iso/build-iso.sh: пересборка официального netinst (xorriso, загрузочные записи
  BIOS и UEFI сохраняются), пункт по умолчанию «Установить Bridge&Join», текстовый установщик
- preseed.cfg: русская локаль, Москва, DHCP, SSH и пакеты для bj; спрашиваются только
  пароли, диск и подтверждение стирания
- bj-firstboot: при первой загрузке на экране сервера спрашивает ключ продукта и запускает
  bj-installer; адрес первичной настройки и код остаются на экране входа

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 00:48:56 +03:00
zuevav 4135435b51 feat(install): консольный установщик bj и первичная настройка по одноразовому коду
- cmd/bj-installer (вместо веб-мастера): проверка Debian 13 / Astra, пакеты, пользователь и
  каталоги, активация лицензии ключом продукта, PostgreSQL и миграции m2m_core, компоненты
  по лицензии с проверкой подписи, root-скрипты и службы, одноразовый код и итоговый экран
  с адресом http://<сервер>:8080/first-run; проверка в песочнице (--steps, --root)
- bj: /first-run — пока нет пользователей и установщик оставил код, по коду создаётся
  первый администратор (прежние установки без файла работают как раньше)
- internal/release/install.go — общая установка компонентов (bj-component-install и
  установщик); bj-component-install стал компонентом ядра
- открытые ключи вынесены в internal/license и internal/release; миграции и файлы
  развёртывания встроены (migrations/embed.go, deploy/embed.go); unit bj-server исправлен
- scripts/build-release.sh: сборка с версиями, подпись, публикация на сервер обновлений

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 23:56:44 +03:00
zuevav 2908697363 feat(update): независимые обновления компонентов bj
- internal/release/components.go: список компонентов (ядро bj-server, криптосервис, bj-lk,
  bj-npr, bj-quikexport) с путём и службой, установленные версии в components.json,
  расчёт обновлений по версии каждого файла и sha256 (без отката, модули — только если
  уже установлены на сервере)
- cmd/bj-component-install: root-установщик — сам перепроверяет подпись манифеста ключом
  /etc/bj/update.pub и sha256, копия прежнего файла, перезапуск только затронутых служб
- updater: bj-server (без прав root) скачивает в update-staging и передаёт установку
  root-воркеру (действие component-install); установка в фоне
- настройки: таблица компонентов с версиями, «Обновить» и «Обновить всё»
- bj-release: версия файла из <файл>.version; bj-keymedia-worker: component-install

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 20:16:36 +03:00
zuevav 5115ed7223 refactor: сервер лицензий вынесен в репозиторий lic_Bridge-and-Join-s
cmd/bj-license-server, cmd/bj-license и deploy/license перенесены в zuevav/lic_Bridge-and-Join-s
(наша инфраструктура, клиентам не поставляется). Здесь остаются клиентская часть
лицензирования, формат токена internal/license и контракт API в docs.
TestTokenCompat — одинаковый тест формата токена в обоих репозиториях.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 20:07:14 +03:00
zuevav 59fc774f08 chore(deploy): обновление ИШ v107, keymedia, экспортёр QUIK, fail2ban для bj
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:11 +03:00
zuevav 86aa452ed6 feat(license): сервер лицензий lic.zetit.ru — кабинет, онлайн-активация и защита
- bj-license-server: активация по коду и продление токенов (API /v1), кабинет
  администратора (клиенты, лицензии, установки, журнал, администраторы)
- защита: доверенные IP установок, jail fail2ban api/admin, раздел «Защита»
  с режимом обороны, белым списком и сроками блокировок (root-помощник fw-apply)
- доступ к кабинету: свой адрес вместо /admin, вход только из белого списка,
  второй фактор — TOTP или подтверждение в «ЗЕТИТ Ключ» (push/код)
- deploy/license: unit-файлы, fail2ban, path/timer помощника; контракт API в docs

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:11 +03:00
zuevav 9737c787f9 feat: живой цикл M2M с НРД + мастер установки ключа на флешку
Инфраструктура M2M (живой обмен с НРД через ИШ):
- обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение
  ответа; INFO → ждём Decision; идемпотентность поллера
- fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO
- сырой XML ответа НРД в карточке заявки (для пересылки в ТП)
- тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes,
  4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта
- редирект из теста сразу в карточку заявки

Мастер установки ключа Валидаты на флешку (admin/setup/keywizard):
- пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник
  сертификатов (CRL) → перезапуск+проверка ИШ → готово
- привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен,
  bj-server остаётся в песочнице
- сохранение структуры профиля архива (spr<N>), перечисление съёмных USB

Прочее:
- пакет-доказательство для ТП НРД + форма регистрации участника M2M
- эталонные образцы робота (DOC/m2m_robot_samples)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:03:21 +03:00