Честный статус на апрель 2026. Что работает зелёным, что
остаётся делать, что принципиально вне scope’а. Начата TRL-5
hardening (ветка feat/trl5-hardening) — фазы отмечены ниже.
| Проверка | Статус |
|---|---|
Host build firmware (unisat_core) |
✅ clean |
Target build firmware (ARM, unisat_firmware.elf) |
✅ verified — 31.6 KB flash / 36.3 KB RAM (6 % / 28 % of budget) |
C unit tests (ctest) |
✅ 28 / 28 (100+ sub-tests after Phase 1–8) |
| C line coverage | ✅ 85.3 % / functions 84.0 % (make coverage) |
Python tests (pytest, full) |
✅ 420 passing — 262 flight-software + 82 ground-station + 57 simulation + 19 configurator |
| Python coverage | ✅ 85.15 % (make coverage-py, gate ≥ 80 % MUST) |
| mypy –strict | ✅ 0 issues in 21 source files |
| Hypothesis property + fuzz | ✅ 200 + 500 cases |
| AX.25 golden vectors C↔Python | ✅ 28 / 28 byte-identical |
| SHA-256 FIPS 180-4 vectors | ✅ |
| HMAC-SHA256 RFC 4231 vectors | ✅ |
| End-to-end SITL beacon demo | ✅ ./scripts/verify.sh |
| STM32 size-budget gate (90 % flash/RAM) | ✅ new, в verify.sh |
| Threat T1 (command injection) | ✅ mitigated by HMAC dispatcher |
| Threat T2 (replay) | ✅ mitigated — 32-bit counter + 64-bit window |
| Threat T3 (bit-stuff DoS) | ✅ hard-reject >400 B |
| Threat T4 (RF garbage flood) | ✅ decoder never crashes (fuzz) |
Сегодня платформа готова к подаче на любой студенческий / университетский конкурс. TRL-5 hardening в работе — см. ниже.
feat/trl5-hardening)Шесть фаз дополнительной работы, чтобы платформа честно соответствовала TRL 5 (validated in relevant environment, real target hardware execution proven).
| Фаза | Тема | Статус |
|---|---|---|
| 1 | STM32 target build — LD, startup, clock, IT, HAL shim, make target / size / flash | ✅ done |
| 2 | Replay protection (T2) + secure key store + rotation | ✅ done |
| 3 | FDIR table + watchdog integration + autonomous recovery | ✅ done |
| 4 | Tboard driver + E2E mission scenario test + 48 h soak harness | ✅ done |
| 5 | cppcheck gate + lcov coverage + ASAN/UBSAN + STRICT mode | ✅ done |
| 6 | Full SRS + traceability CSV + characterization templates + HIL plan | ✅ done |
Все 6 фаз TRL-5 hardening закрыты — ветка feat/trl5-hardening
готова к ревью и слиянию с master.
После Phase 7 проведён code audit + realistic ARM build. Закрыто:
| # | Тема | Результат |
|---|---|---|
| 8.1 | C driver unused-function warnings | ✅ __attribute__((unused)) на все SIM-only helpers |
| 8.2 | comm.c unused TX buffer |
✅ annotated |
| 8.3 | Python coverage 51 % → 77.24 % | ✅ 4 новых test pack’а, 299 pytest total |
| 8.4 | ARM target build verified | ✅ firmware.elf = 31.6 KB flash (6 %) / 36.3 KB RAM (28 %) |
| 8.5 | FreeRTOSConfig.h / stm32f4xx_hal_conf.h / stm32_assert.h / peripherals.c | ✅ добавлены под Target/ |
| 8.6 | setup_stm32_hal.sh теперь тянет CMSIS-RTOSv2 wrapper | ✅ |
| 8.7 | SysTick conflict между port.c / cmsis_os2.c / stm32f4xx_it.c | ✅ resolved через weak + priority |
ARM firmware реально собирается под arm-none-eabi-gcc 13.2.1
с зависимостями FreeRTOS V10.6.1 + STM32CubeF4 v1.27.1. Результат:
firmware/build-arm/unisat_firmware.elf готов к st-flash write.
После TRL-аудита пошедшего за Phase 6 было выделено 5 критичных пробелов, которые блокировали честный TRL-5 на ПО-стороне. Все 5 закрыты:
| # | Тема | Статус |
|---|---|---|
| 7.1 | key_store → CommandDispatcher wiring в main.c boot | ✅ 4/4 tests |
| 7.2 | Python CounterSender + build/verify/parse auth frame | ✅ 22/22 tests |
| 7.3 | Mode manager в C (FDIR → SAFE/DEGRADED/REBOOT) | ✅ 9/9 tests |
| 7.4 | Persistent fault log в .noinit (warm-reboot survives) | ✅ 6/6 tests |
| 7.5 | Coverage push 77.3% → 84.4% lines (через CCSDS/EPS/telemetry) | ✅ SRS REQ-BLD-005 |
Результат: все пять 🔴 критичных блокеров закрыты, ПО-сторона теперь действительно на уровне TRL 5. Оставшиеся gaps (HIL bench с реальным железом, радиация, вибрация, TVAC) принципиально вне scope репозитория — см. §”Out of scope” выше.
command_dispatcher.c принимает 32-bit BE-counter, пропускает его
через sliding-window filter (64 bit), HMAC покрывает counter || body.
См. docs/security/ax25_threat_model.md §T2.
Остаточный риск (задокументирован) — persistent key store, следующий пункт Phase 2 ниже.
Что: ключ HMAC сейчас в RAM после CommandDispatcher_SetKey.
Нужно: выделенный flash-сектор (0x0807F000, last 4 KB of 512 KB
F446RE), CRC-защищённое хранение, rotation uplink-командой
подписанной старым ключом.
Как: новый модуль firmware/stm32/Core/Src/key_store.c +
key_store.h, persistent shadow в ground-station simulation (host).
Оценка: ~4 часа. Средний риск (flash erase семантика).
Impact: закрывает остаточный риск T1 (key compromise через warm reboot с подменённым образом).
Что: Streamlit dashboard читает реальные beacon’ы, не demo данные из SQLite.
Как: добавить фоновый воркер в ground-station/app.py, который
слушает ax25_listen.py по TCP и пишет декодированные frame’ы в
ту же SQLite, которую читает UI.
Оценка: ~3 часа.
Impact: демо становится эффектнее — видно реальные пакеты в UI, не статичные примеры.
Что: один большой тест “полная миссия” от LEOP → detumble → nominal → imaging → downlink → safe mode. Сейчас есть 14 unit- тестов модулей, но нет integration-сценария.
Как: flight-software/tests/test_full_mission.py с asyncio
event loop, имитирующим 24 часа виртуального полёта за 10 секунд
реальных.
Оценка: ~4 часа.
Impact: уверенность, что модули корректно взаимодействуют во всех фазах миссии.
Что: документ + пример регистровых настроек для CC1125 (UHF радио из BOM): GFSK 9600 bps, RF 437 MHz, deviation 2.4 kHz.
Оценка: ~1 час чтения datasheet + 100 строк config dumps.
Impact: кто-то, собирающий реальное железо, не тратит день на поиск настроек в datasheet.
Что: раздел в README или отдельный docs/project/REGULATORY.md —
как получить amateur radio callsign, как подать заявку на IARU
frequency coordination, какие страны требуют что.
Оценка: ~2 часа research’а.
Impact: полезно для команд, которые планируют реальный запуск. Для учебных конкурсов не нужно.
Что: пошаговая инструкция на день запуска и первые 72 часа: acquire signal → first beacon → detumble check → deploy panels → first image → TT&C schedule.
Оценка: ~3 часа.
Impact: опять же, только для реального запуска.
Что: скрипт, который принимает настоящий STM32F446 через USB-UART и имитирует orbit/sensor данные в реальном времени (Renode или самописный bridge).
Оценка: 1–2 недели работы.
Impact: максимальный для TRL uplift. Но это уже серьёзный инженерный труд, не вечерняя задача.
Никакое ПО не заменит реальный запуск на орбиту и возврат невредимым. Для flight heritage нужен либо CubeSat на чьей-то попутке (CSLI, Dispenser), либо лабораторная квалификация (TID, TVT, Vibration, EMC) стоимостью десятки тысяч долларов.
Проект сам по себе не даёт flight heritage — это ПО основа для команды, которая уже имеет доступ к железу и запуску.
Soft-error mitigation (ECC-RAM, TMR, watchdog scrubbing) требует либо rad-hard MCU (стоимость ~$50K), либо детального радиационного тестирования (cyclotron time). Platform предоставляет базовые fault-tolerance примитивы (watchdog, safe mode, error handler с EEPROM persistence), но настоящая radiation tolerance — отдельная инженерная дисциплина.
Формальная mission assurance документация для NASA/ESA-class миссий — десятки документов, процессов, reviews. Платформа не претендует на этот уровень. Она ориентирована на educational / research / amateur-launch сегмент.
✅ Полный AX.25 link layer ✅ HMAC-SHA256 command dispatcher ✅ End-to-end SITL demo ✅ 50/50 тестов зелёные ✅ CDR-level документация
feat/trl5-hardening)См. CONTRIBUTING.md. Приоритетно ждём M1/M2/M3 — любая из
этих задач делает платформу заметно лучше и умещается в одну-две
вечерних сессии.
Last updated: 2026-04-17 — All 6 TRL-5 hardening phases closed on feat/trl5-hardening.