OpenC3 COSMOS Core 7.4.0 - Base containers now Debian (vs Alpine), preview of new Bridge
Welcome to OpenC3 COSMOS Core 7.4.0! We've made a ton of enhancements and bug fixes in this release. The biggest is the foundation for an exciting new Bridge concept. This will enable direct to the host control of attached hardware through a fully secure network channel. While the foundation is laid, we're not ready to declare this as feature complete so stay tuned!
We've added a cool new ability to set various settings via the environment variables. This layers on the new compose.override.yaml support in 7.3.0. Now you can add OPENC3_SETTING_TIME_ZONE=UTC in the openc3-cosmos-init container environment to always start with UTC time (for example).
There were numerous enhancements to the documentation and many more to our testing system. This is all preparing us for an exciting 4th quarter headlined by our Space Software Summit. We're also already preparing ideas and issues for COSMOS 8. Finally if you haven't checked out the OpenC3 Store make sure to check out all the new additions!
Migration Notes
With the addition of the compose.override.yaml and .env.local (first in 7.3.0) you should move all of your compose.yaml and .env updates into these new files. Rename your existing compose.yaml to compose.override.yaml and .env to .env.local. Get the newly released compose.yaml and .env files from the release. Then diff with these files to determine your project specific modifications and remove any defaults or other settings that you're not explicitly overriding. This will make upgrading much easier going forward because you don't have to sync with our defaults.
🛑 Breaking Changes from 6.x
- S3 Backend Migration: Migrated from MINIO to versitygw.
- See the Migration Guide for details.
See the COSMOS 7.0.0 release notes for all the amazing new features in COSMOS 7!
🛠 Enhancements
- Switch base images from Alpine to Debian Slim
- New bridge concept with new keywords
BRIDGE,BRIDGE_OPTION,BRIDGE_PROTOCOL,BRIDGE_SECRET - Named widgets accessed by
getNamedWidgetare case insensitive - Update playback button spacing in Telemetry Viewer
- Clarify documentation about string quoting
- Document grafana roles
- Add received_time to inject_tlm
- Refactor Web socket API to reduce duplication, normalize URL generation, and tighten protocol/error-handling behavior
- Update Script Organization wording to clarify target requirement
- Add secrets guide covering kubernetes and vault
- Add guide on Packet Structure Changes
- Improve binary processing and native CRC performance
- Make Content Security Policy (CSP) more permissive and configurable
- Update migration docs and mcp-server
- Improve scriptRunner performance for lines and output, and add batching to events
- Set
OPENC3_LOG_LEVELto control log levels in all containers - Telemetry Grapher now implements smooth scrolling
- Update start and load_utility documentation
- Update Data Viewer documentation
- Prevent token errors on startup
- Improve interface details implementation and documentation
- Seed settings from OPENC3_SETTING_* env vars
- Allow DetailsDialog to scroll
- Numerous enhancements to unit tests and Playwright tests (thanks @EmilyRagan!)
🪲 Bug Fixes
- Various fixes to the Python venv behavior including using it for Suite analysis
- Emit schema-valid XTCE 1.2 from both Ruby and Python exporters
- Fix QuestDB TTL alter syntax
- Fix write protocols layout in the Data Flow visualization
- Deconflict time module in user scripts
- Disable fields while loading the Admin settings to prevent race condition
- Fix malformed note blocks in documentation
- Fix ulimit documentation
- Fix classification banner to respect height option
- Prevent update_news auth bypass from broad rescue
- Perform autonomic input validation
- Validate suiteRunner values as identifiers not code
- Scope auth rate limit counters per client
- Fix script runner file Save As to remove
*from filename - Fix processor documentation
- Prevent double underscores in scope names
- Fixes to UDP interfaces supporting receiving from any port
- Gate cmd_tlm overlay writes at every writer
- Fix env.local not sourced by various openc3.sh commands
- Contain read_file paths to config directory when parsing cmd/tlm files
- Allow custom
RUBYGEMS_URLfor build and runtime plugin gem installs - Call queue size methods in as_json
- Fix Python TcpipSocketStream to honor read_timeout
- Bound protocol accumulation buffer size (mostly affects Length and Terminated protocols)
- Make
connect_interfacea no-op when already connected - Fix Secret file path validation
- Flag and read CBOR extra on RAW_PACKET entries
- Fix error reporting in Telemetry Viewer when parsing screens with errors
- Fix unreserve to release the reservation in BucketFileCache
What's Changed
- fix(xtce): emit schema-valid XTCE 1.2 from both Ruby and Python exporters by @mcosgriff in #3650
- Fix questdb ttl alter by @jmthomas in #3668
- Bump anycable version by @jmthomas in #3677
- Named widgets case insensitive by @ryanmelt in #3678
- Fix data flow write protocols by @ryanmelt in #3679
- Release/v7.3.0 Merge to Main by @ryanmelt in #3682
- Deconflict time module in user scripts by @ryan-pratt in #3681
- Retry build attempt during release by @jmthomas in #3686
- build(deps-dev): bump ruff from 0.15.22 to 0.16.1 in /openc3/python in the uv group across 1 directory by @dependabot[bot] in #3674
- Fix some docs code examples by @jmthomas in #3700
- Update pnpm release by @jmthomas in #3690
- Ruby env access should use fetch by @jmthomas in #3701
- fix(admin): disable settings fields while loading by @jmthomas in #3702
- [Enhancement] Update playback button spacing by @clayandgen in #3703
- Sonar fixes by @EmilyRagan in #3693
- Fix malformed note blocks in docs by @ryan-pratt in #3712
- fix(test): wait for microservice run thread before writing to topics by @EmilyRagan in #3715
- Clarify docs about string quoting by @ryan-pratt in #3714
- Fix Playwright failure (Enterprise) by @EmilyRagan in #3716
- Playwright bucket explorer stability improvements by @EmilyRagan in #3718
- Add info to docs about grafana roles by @ryan-pratt in #3713
- feat: add received_time to inject_tlm by @suhaslord in #3720
- Web socket api refactor by @jmthomas in #3704
- Ensure all Playwright tests run by @EmilyRagan in #3726
- Fix ulimit docs by @jmthomas in #3730
- update Script Organization wording to clarify target requirement by @EmilyRagan in #3727
- Update rdoc requirement from ~> 7.0 to >= 7, < 9 in /openc3/test/integration/tsdb/ruby by @dependabot[bot] in #3530
- build: switch base images from Alpine to Debian Slim by @ryanmelt in #3694
- feat(bridge): add bridge and host microservice models by @ryanmelt in #3695
- feat(bridge): add Python bridge runtime (hub, interface, host runner) by @ryanmelt in #3696
- feat(bridge): wire BRIDGE interface keywords and DEFAULT bridge per scope by @ryanmelt in #3697
- add missing double brackets by @calmonroe in #3734
- Upgrade simplecov by @jmthomas in #3753
- feat(bridge): add bridges REST API, admin UI, and CLI enrollment by @ryanmelt in #3698
- Make clamav and trivy on demand only by @jmthomas in #3759
- fix(playwright): stop notoast leaking into shared storage state by @EmilyRagan in #3747
- Classification banner by @clayandgen in #3756
- Fix table manager test by @EmilyRagan in #3766
- Issue #3707 by @pt-klein-bae in #3709
- fix(test): stop test_get_cmd_time flaking on rounding boundaries by @EmilyRagan in #3768
- fix(test): stop interface microservice tests leaking threads on failure by @EmilyRagan in #3769
- fix(api): prevent update_news auth bypass from broad rescue by @jmthomas in #3729
- 658 autonomic input validation by @calmonroe in #3765
- OpenBLAS env setting by @clayandgen in #3758
- fix(script-runner): validate suiteRunner values as identifiers by @jmthomas in #3755
- fix(test): stop counting unrelated requests in "stops posting" tests by @EmilyRagan in #3770
- fix(cmd-tlm-api): scope auth rate limit counters per client by @jmthomas in #3733
- build(deps): bump actions/setup-node from 6.4.0 to 7.0.0 by @dependabot[bot] in #3573
- build(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in #3626
- docs(secrets): add secrets guide covering kubernetes and vault by @jmthomas in #3789
- Bump setup-uv to 9.0.0 by @jmthomas in #3786
- Add guide on Packet Structure Changes by @jmthomas in #3787
- 3780 script runner file save by @calmonroe in #3785
- [Documentation] Fix processor docs by @clayandgen in #3799
- Improve binary processing. Improve native CRC performance. Add benchmarks. by @ryanmelt in #3719
- Make CSP more permissive and configurable by @ryan-pratt in #3800
- Fix structure of Copyright header by @EmilyRagan in #3804
- condense eslint workflow to one job by @EmilyRagan in #3805
- Update migration docs and mcp-server by @jmthomas in #3788
- fix(test): stop asserting exact elapsed time in wait timeout tests by @EmilyRagan in #3795
- Improve scriptRunner performance for lines and output, and add batching to events by @ryanmelt in #3760
- Security policy by @jmthomas in #3790
- Prevent double underscores in scope names by @jmthomas in #3818
- Udp interface fixes by @ryanmelt in #3761
- [Feature] OPENC3_LOG_LEVEL to control log levels by @clayandgen in #3814
- Graph smooth scrolling by @ryanmelt in #3763
- test(playwright): absorb the Keycloak reload bounce in notification specs by @EmilyRagan in #3772
- Update start and load_utility docs by @ryan-pratt in #3797
- Cleanup file handling by @calmonroe in #3801
- gate cmd_tlm overlay writes at every writer by @jmthomas in #3731
- [Documentation] Data Viewer docs by @clayandgen in #3815
- feat(auth): verify-token endpoint and quieter expected-error logging by @jmthomas in #3748
- fix(frontend): guard requests on auth and batch settings fetches by @jmthomas in #3749
- Fix/env local not sourced by @jmthomas in #3826
- fix(config_parser): contain read_file paths to config directory by @jmthomas in #3822
- Reorder TLM protocols by @jmthomas in #3829
- fix: honor custom RUBYGEMS_URL for build and runtime plugin gem installs by @EmilyRagan in #3825
- fix(interface): call queue size methods in as_json by @jmthomas in #3824
- Sonarqube/verify message origin by @calmonroe in #3827
- Bump the github-actions group across 1 directory with 7 updates by @dependabot[bot] in #3776
- Fix sonarqube quality issues by @jmthomas in #3836
- Fix/python tcpip socket read timeout by @jmthomas in #3823
- Improve interface details by @EmilyRagan in #3794
- feat(settings): seed settings from OPENC3_SETTING_* env vars by @mcosgriff in #3699
- Address medium issues in SonarQube by @jmthomas in #3835
- ci(python): fail the lint workflow on fixable vulnerabilities by @mcosgriff in #3807
- Sonarqube fixes by @EmilyRagan in #3771
- fix(protocols): bound protocol accumulation buffer size by @jmthomas in #3820
- fix(interface): make connect_interface a no-op when already connected by @jmthomas in #3828
- Dependencies by @jmthomas in #3837
- [Enhancement] DetailsDialog scrolls by @clayandgen in #3845
- fix(tlmviewer): stop probing targets_modified with requests that 404 by @jmthomas in #3817
- Secret file path validation by @jmthomas in #3791
- fix: add missing requires so spec files run standalone by @jmthomas in #3846
- fix(script-runner): use plugin venv for Python suite analysis by @mcosgriff in #3767
- fix(logs): flag and read CBOR extra on RAW_PACKET entries by @jmthomas in #3852
- fix flaky file menu tests by @calmonroe in #3847
- Fix/screen error reporting by @jmthomas in #3816
- fix(bucket-file-cache): make unreserve release the reservation by @jmthomas in #3855
- fix(scripts): resolve shellcheck findings and handle arguments safely by @mcosgriff in #3853
- More dependency updates, fix astro css by @jmthomas in #3854
New Contributors
- @suhaslord made their first contribution in #3720
- @calmonroe made their first contribution in #3734
- @pt-klein-bae made their first contribution in #3709
Full Changelog: v7.3.0...v7.4.0