Tags: root3315/unisat
Tags
UniSat v1.5.1 — UzCanSat 2026 compliance preset
One JSON + one compliance doc + six official reference files.
Zero changes to core platform (form_factors.py, cansat profiles,
BOM, firmware, ops-guide all untouched).
Activates via:
cp mission_templates/cansat_uzcansat.json mission_config.json
Overrides (from Qollanma.pdf official handbook):
telemetry_hz 10.0 -> 1.0 (regulation §Ma'lumotlarni uzatish)
buzzer off -> on (§5 post-landing locator)
camera off -> 640x480@30fps, horizontal, SD
bonus tasks off -> altitude + velocity algorithms on (§4.2)
Scoring forecast
Now: ~46/100 (code perfect, hardware not built)
After build+drop: ~95/100 (all regulation gates closed)
Pattern
Generic cansat_standard profile stays 10 Hz and stays universal.
UzCanSat specific knobs live in the preset. Future competitions
(ESERO, NASA) get their own JSON without touching platform code.
UniSat v1.5.0 — CanSat «РадиоПрофиль-1» full mission pack
Closes 4 regulation gaps before physical hardware exists:
* Mission-specific CDR (14 sections)
* Falsifiable science mission with SBM-20 Geiger as primary sensor
* 10-slide presentation deck (Marp) + A0 poster layout
* Triple-redundant key-data packet spec + baseline SITL dataset
that demonstrates the analysis pipeline finding the injected
anomaly before any real flight
Regulation score delta: +13 points (13/15 → 15/15 Docs, 5/15 → 12/15
Mission, 12/20 → 18/20 Presentation, −20 penalty risk downgraded to
partial-credit scenario).
Files
docs/missions/cansat_radiation/{README,CDR,SCIENCE_MISSION,
KEY_DATA_PACKET,PRESENTATION,POSTER}.md
docs/missions/cansat_radiation/baseline_sitl_dataset.csv
scripts/analyze_cansat_radiation.py
Verified
* 299 flight-software + 21 configurator tests green.
* Pipeline finds the injected 310 m anomaly at z=+2.65.
* 0 broken markdown links.
UniSat v1.4.3 — Code 100/100: mission_types split + pyserial tests un…
…blocked
Final code-side polish. Zero behavioural changes. Every static
quality metric now reports the ideal state.
Refactor
core/mission_types.py 743 -> 254 lines
New _profiles/ subpackage: cubesat.py (158), cansat.py (138),
other.py (212), __init__.py (68). All files under 500 lines;
largest is form_factors.py at 487 (one class per form factor).
mypy --strict now covers 27 files (was 23).
Tests
471 green (was 435). pyserial was already in requirements.txt;
pip install -r flight-software/requirements.txt unblocks 37
tests in test_communication_mocked.py + test_coverage_boost.py.
flight-software: 262 -> 299
ground-station: 94
simulation: 57
configurator: 21
Static metrics — all ideal
ruff check clean (4 packages)
mypy --strict clean (27 files)
TODO / FIXME / XXX 0 in production code
NotImplementedError 0 in production code
broken md links 0 across the whole repo
longest file 487 lines
UniSat v1.4.2 — README visual overhaul (hero banner + feature grid + …
…form-factor lineup)
Zero behavioural changes. Makes the landing README visually
user-friendly with three new inline SVGs that render above the
fold on GitHub.
Added
docs/diagrams/hero_banner.svg — title + tagline + sat
illustration + 5 capability
chips (1200 x 340)
docs/diagrams/feature_grid.svg — 8 capability cards with
line-art icons and metrics
(1200 x 340)
docs/diagrams/form_factors_lineup.svg — 14 form factors to scale,
3U highlighted as TRL-5 ref
(1200 x 420)
Changed (README only)
* Top banner switched to hero_banner.svg (full width).
* New '60-second tour' quickstart block under the banner.
* Version chip bumped 1.3.1 -> 1.4.1 and test badge 420 -> 435.
* feature_grid.svg inserted under version chip.
* form_factors_lineup.svg at the top of the 'Supported Form
Factors' section.
All three SVGs validate as XML and render inline without external
CDN dependencies.
Test pass
No code changed — 435 Python tests, 28 ctest targets, 0 broken
markdown links, all unchanged from v1.4.1.
UniSat v1.4.1 — Docs tree reorganised + BOM corrections + bench-test … …verification Zero behavioural changes. Three parallel chores: 1. Reorganised flat docs/ root into guides/design/budgets/reference/ project subdirs. 100 link references across 25 files updated, 0 broken links remaining. 2. New docs/README.md index covers every file in the tree by purpose. README.md Documentation section rebuilt as a structured catalogue with links to all 8 ADRs. 3. Fixed 2 wrong BOM masses in cansat_advanced.csv (LiPo 2S and HS-35HD servo), total 246 -> 277 g. Verified 17 testing-checklist items across 12 per-profile ops guides with [x]; legend added separating software-verified from physical items. Test pass 435 Python tests green (263 fs + 94 gs + 57 sim + 21 cfg). 0 broken markdown links, ruff + mypy --strict clean.
UniSat v1.4.0 — Reliability hardening + per-profile ops + key rotation Cherry-picks the seven genuinely-new changes from the root3315/code-review-fixes branch, skipping the parallel v1.3.0 re-implementation that master already has. Zero rework of existing subsystems; pure additions + one real bug fix. Bug fix EventBus.subscribe dedupe — repeated registrations of the same handler used to double-fire on publish and leak a live duplicate past unsubscribe. Firmware reliability Reboot-loop guard: >=5 consecutive warm resets route all REBOOT recoveries to SAFE, breaking the intermittent reset spiral. Grayscale FDIR: sensor degradation is now 0-255 severity instead of binary; DEGRADED at >=128, REBOOT only at >=224 — keeps the vehicle flying with partially-working instruments. Ground station HMAC key-rotation policy module: operator-side knobs for WARN (50 % counter), ROTATE (80 % counter), and MAX_LIFETIME_DAYS (365) with 12 regression tests. Firmware key_store already did A/B rotation; this adds when-to-press-the-button. Documentation 11 per-profile ops guides under docs/ops/ (one per form factor) + docs/ops/README.md selection flowchart. Replaces the single docs/OPERATIONS_GUIDE.md only as a complement — that file stays as the platform-agnostic overview. docs/hardware/radiation_budget.md: design-level TID/SEE budget per orbital class for STM32F446RE + sensor stack + radios. Hardware cubesat_1_5u.csv and cubesat_2u.csv reference BOMs close the last gaps in hardware/bom/by_form_factor/. Every CubeSat size registered in form_factors.py now has a BOM. Test pass 435 Python tests green (263 fs + 94 gs + 57 sim + 21 cfg). ruff clean, mypy --strict clean across 23 flight-software files. Firmware host ctest + ARM cross-compile unchanged from 1.3.0.
UniSat v1.3.2 — Full audit: docs sync + lint clean
Zero behavioural changes. Full repository sweep to bring every
documentation file in line with the real v1.3.1 state and to clear
every ruff + mypy warning across all four Python packages.
Doc fixes
- README badges / project-status table / project tree updated to
show the real 420 pytest / 28 ctest numbers (were quoted as
329 / 27 or older).
- GAPS_AND_ROADMAP, USAGE_GUIDE, quality/static_analysis aligned.
- TECHNICAL_DOCUMENTATION bumped 1.2.0 -> 1.3.1 with delta note.
- CLAUDE.md parallel-truth warning replaced with 1.3.1 SSoT
confirmation.
- COMPETITION_GUIDE CanSat section rewritten (previous guidance
predated first-class CanSat profiles).
- mass_budget + power_budget scoped to 3U reference with pointers
to form_factors.py for other profiles.
Lint / types
- Every Python package now ruff-clean.
- mypy --strict clean on all 23 flight-software source files.
- 19 ruff auto-fixes (unused imports / vars).
- noqa hints on 3 legitimate late-import sites.
Verified
- 420 Python tests green (262 flight-software + 82 ground-station
+ 57 simulation + 19 configurator).
- C ctest / ARM footprint unchanged from 1.3.0.
UniSat v1.3.1 — universal-platform polish
Form-factor registry is now the single source of truth across
flight-software, firmware, ground-station, and the Streamlit
configurator. Adds a full 12-section operations guide covering
every supported vehicle class from first clone to flight debrief.
Highlights
* Configurator validators read envelopes directly from core.form_factors;
legacy keys ('1U', 'cansat_custom' …) keep working via alias table.
* CanSat-scale component masses separated from CubeSat defaults —
validator now matches the 170 g reference BOM instead of reporting
1.4 kg for a 500 g envelope.
* Five new configurator templates fill the CanSat / 1.5U / 12U gap.
* Flaky long-soak drift assertion rewired to median-of-first-5
baseline so it stops tripping on Windows scheduler jitter.
* docs/OPERATIONS_GUIDE.md: start-to-finish playbook from profile
pick through competition submission.
* hardware/bom/by_form_factor/README.md clarifies bare-kit vs
regulation cutoff (170 g kit + 330 g headroom = 500 g).
Test pass
flight-software 262 / ground-station 82 / simulation 57 /
configurator 19 = 420 Python tests green.
Firmware host ctest + ARM cross-compile unchanged from 1.3.0.
PreviousNext