Отношения с апстримом

Форк живёт от satnogs-flowgraphs Libre Space Foundation. Эта страница фиксирует, где мы разошлись, что берём из апстрима, а что нет — и почему. Обновляется при каждой синхронизации.

Точка расхождения

Апстрим

https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs

Последний взятый коммит

ae57df06 «Fix wrong rotator phase increment value», 2026‑06‑04

Проверено на

ac12b779, 2026‑07‑02

Проверить, что появилось нового:

git remote add upstream https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs.git
git fetch upstream
git log --oneline ae57df06..upstream/master

Что мы берём, а что нет

Берём: новые .grc-декодеры, правки существующих флоуграфов, исправления в подписчиках, всё, что не ломает контракт командной строки.

Не берём: изменения архитектуры запуска. Диспетчер — это точка стыка с soniks-client-new, и она у нас другая.

Ключевые инварианты форка, которые нельзя обменять на апстримовский код: .grc — источник правды (декодеры Geoscan и USP существуют только как .grc); flowgraph_dispatcher --mode <MODE> — контракт с клиентом станции. См. Инварианты.

Решение по MR от 2026‑07‑02: не внедрять

Все 16 коммитов, появившихся после ae57df06, — это одна работа: перевод диспетчера на gRPC и отказ от .grc в пользу сборки флоуграфа в рантайме.

Коммиты

Что делают

a3dca055, eb7145dd, 461c1f35, 41b30cc2, 22424d07, 3668a497, 112a2d54, a090fc49, 266016c3

flowgraph_builder.py и py_blocks_helpers/block_initializers.py: флоуграф собирается из блоков GNU Radio на Python при запуске

e9cd6ee4, 7e4791ec, ac12b779

сабмодуль satnogs-proto с protobuf-описаниями

f55f940f, 842778cb

диспетчер становится долгоживущим gRPC-сервером, параметры приходят protobuf-сообщениями

437f2144

gRPC-клиенты для ручной проверки

63d7667c

hierarchical/fsk_downlink_hier.grc и gfsk_uplink_hier.grc под новый сборщик

Причины отказа:

  1. Ломается контракт с клиентом. soniks-client-new вызывает flowgraph_dispatcher --mode <MODE> и ждёт кода возврата процесса. gRPC-сервер — другая модель жизненного цикла, её пришлось бы одновременно внедрять в оба проекта.

  2. Наши декодеры исчезнут. Geoscan и USP — это .grc; апстримовский block_initializers.py импортирует только gnuradio.satnogs, soapy и Hamlib, а из модуляций собран пока один FSK. Перенос декодеров пришлось бы делать вручную в Python, потеряв возможность править их в GRC.

  3. Стоимость. Тесты, CMake, debian/ и вся docs/ построены вокруг текущей схемы; замена — это переписывание форка, а не слияние.

  4. Выгоды нет. Внутри этих 16 коммитов нет ни одного исправления ошибки, применимого к нашей схеме.

Отдельно рассмотрены и отклонены две мелочи:

  • eb7145ddtype=float для --baud и --lo-offset. У нас бодрейт уходит во флоуграф как str(baud), и --baud=9600 превратился бы в baudrate=9600.0. Риск ради нулевой выгоды: int(float(baud)) в диспетчере и так принимает оба вида записи.

  • 461c1f35 — снятие try/except, которые только пробрасывают исключение дальше. Эквивалентная чистка в нашем диспетчере уже сделана.

Если апстрим понадобится позже

Возврат к общей ветке возможен только как отдельный проект: перенести Geoscan и USP в flowgraph_builder, договориться с soniks-client-new о gRPC и заново собрать тесты. До тех пор берём из апстрима точечные коммиты через git cherry-pick, а не слияния веток.