Перейти к основному содержимому

Roadmap и честный статус

Мы ведём hlf-core в сторону отраслевого стандарта, и путь к нему лежит через качество, а не через громкие заявления. Поэтому здесь имеет смысл сказать и о том, что уже сделано хорошо, и о том, что ещё предстоит — одно без другого было бы нечестным.

Что уже сильно​

Главное — hlf-core проверен в продакшене, на реальных финансовых системах, а не на демонстрационных примерах. Архитектура его цельная: единая точка входа, подпись на уровне приложения, ORM поверх key-value — всё это не разрозненные приёмы, а части одной идеи. Система токенов зрелая, с аудитом и точной строковой арифметикой. Фреймворк работает и с Fabric 2.x, и с 3.x (см. «Совместимость»). Есть и вещи, до которых обычно не доходят руки: batch-режим и транзакционное управление состоянием через StateProxy.

Что в работе​

Самое заметное из незакрытого — надёжная доставка эффектов: сейчас возможна потеря команд между коммитом транзакции и рассылкой эффектов, и мы закрываем это паттерном transactional outbox. Кроме того, впереди английская локаль документации и автогенерация API-референса из исходников.

Технический долг​

Если называть вещи своими именами, у hlf-core есть места, которые держатся не на конструкции, а на аккуратности автора. Именно их мы считаем первоочередным долгом на пути к стандарту, потому что для чужого потребителя «держится на аккуратности» означает «однажды сломается». Часть из перечисленного ниже уже закрыта — отмечаю это прямо по месту.

Первое — умолчания и их очистка. Значения по умолчанию задавались сразу в двух местах: там, где они проставляются при приёме команды, и там, где вычищаются из конверта перед отправкой, чтобы лишнее не легло в ledger навсегда. Эта пара обязана оставаться симметричной, но держать её такой приходилось вручную, и это уже подводило — одно поле опций долго жило под чужим именем и не распознавалось как дефолтное. Основное здесь уже сделано: умолчания сведены к одному источнику, из которого и установка, и очистка выводятся сами и физически не могут разойтись, а само поле переименовано. Осталось закрыть последнюю несимметричность — в batch-ветке очистка пока не имеет парного восстановления.

Второе — nonce и модель параллелизма. Защита от повторного воспроизведения построена на строго возрастающем счётчике по пользователю, и это сознательно сериализует его команды: две параллельные транзакции одного пользователя конфликтуют на общем ключе. Для учётных систем такая сериализация часто и желательна, но её стоит проговаривать явно, а не оставлять сюрпризом, и свести генерацию nonce к одному каноническому способу. Массовые операции для этого и уходят в batch.

Третье — неявные соглашения. Часть корректности держится на договорённостях, которые нигде не закреплены в типах: имена команд без служебных символов, порядок сборки конверта. Пока соглашение соблюдается, всё верно, но нарушить его можно молча. Мы переводим такие инварианты из «по соглашению» в «по конструкции», чтобы ошибку ловил компилятор или проверка, а не эксплуатация.

Четвёртое — выпуск и версии. Основное здесь тоже уже сделано. Процесс публикации пакетов приведён в порядок: релиз проходит одной командой, инструмент публикации больше не пушит лишние ветки и корректно проставляет версию в собираемый пакет, а разнобой его версий по пакетам устранён. README всех пакетов выровнены по единому виду — без декоративного шума, с одинаковой структурой и общими секциями. Осталось довести автогенерацию API-референса из исходников и выровнять оставшиеся диапазоны версий зависимостей.

Пятое — криптография под регуляторику. Поддержка ГОСТ и RSA решает задачу совместимости, но реализация ГОСТ не сертифицирована как СКЗИ, а RSA опирается на устаревшую библиотеку. Для юридически значимой подписи это нужно называть прямо: за сертифицированным контуром стоит отдельное сертифицированное средство, а наш слой даёт интерфейс к нему, а не замену.

Об открытости​

hlf-core — авторский проект, и это тоже стоит назвать прямо. Путь к статусу стандарта — это не только код, но и чужие потребители, обратная связь и вклад сообщества, и мы к этому открыты. Вопросы и предложения — через GitHub.