# Отношения с апстримом Форк живёт от `satnogs-flowgraphs` Libre Space Foundation. Эта страница фиксирует, где мы разошлись, что берём из апстрима, а что нет — и почему. Обновляется при каждой синхронизации. ## Точка расхождения | | | |---|---| | Апстрим | | | Последний взятый коммит | `ae57df06` «Fix wrong rotator phase increment value», 2026‑06‑04 | | Проверено на | `ac12b779`, 2026‑07‑02 | Проверить, что появилось нового: ```sh 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 ` — контракт с клиентом станции. См. [](../ai/context.md#инварианты). ## Решение по 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 ` и ждёт кода возврата процесса. gRPC-сервер — другая модель жизненного цикла, её пришлось бы одновременно внедрять в оба проекта. 2. **Наши декодеры исчезнут.** Geoscan и USP — это `.grc`; апстримовский `block_initializers.py` импортирует только `gnuradio.satnogs`, `soapy` и `Hamlib`, а из модуляций собран пока один FSK. Перенос декодеров пришлось бы делать вручную в Python, потеряв возможность править их в GRC. 3. **Стоимость.** Тесты, CMake, `debian/` и вся `docs/` построены вокруг текущей схемы; замена — это переписывание форка, а не слияние. 4. **Выгоды нет.** Внутри этих 16 коммитов нет ни одного исправления ошибки, применимого к нашей схеме. Отдельно рассмотрены и отклонены две мелочи: - `eb7145dd` — `type=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`, а не слияния веток.