Skip to content

Releases: slaclab/rogue

Patch Release v6.10.1

14 Apr 18:35
cf8e36f

Choose a tag to compare

Pull Requests Since v6.10.0

Unlabeled

  1. #1179 - Publish durable performance results and add a GitHub Pages performance dashboard
  2. #1178 - Tweak list of releases in docs.

Pull Request Details

Tweak list of releases in docs.

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Tue Apr 14 11:15:40 2026 -0700
Pull: #1178 (143 additions, 35 deletions, 3 files changed)
Branch: slaclab/doc-hist-2

Notes:

Description

The publisher now treats latest as the display entry for the newest release tag:

  • latest is labeled vX.Y.Z - Latest Release
  • the newest concrete vX.Y.Z release is omitted from the selector/history list
  • older releases still appear newest-first after Pre-release

The frontend was updated so direct URLs under the newest concrete tag, like /v6.10.1/..., still behave as latest in the selector and don’t get an “archived” banner.


Publish durable performance results and add a GitHub Pages performance dashboard

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Tue Apr 14 11:29:45 2026 -0700
Pull: #1179 (1789 additions, 48 deletions, 12 files changed)
Branch: slaclab/perf-publish

Notes:

Description

Add durable performance result publishing on gh-pages so perf runs can be compared against prior branch results and the current main and pre-release baselines instead of relying only on transient workflow artifacts.

This change adds a new gated Performance Publish workflow that consumes the perf-results artifact from Rogue Integration, normalizes the benchmark output, and publishes it under gh-pages/perf/. It also updates the perf summary in CI to load published branch and baseline data when available, and generates a static /perf/ dashboard for browsing recent history and benchmark comparisons.

The docs publishing workflows now share the same gh-pages concurrency group as the perf publisher so independent workflows do not race while writing site content. The docs sidebar also includes a direct link to the published performance dashboard.

Details

  • Added shared perf normalization and comparison helpers in scripts/perf_data.py.
  • Added scripts/perf_publish.py to write:
    • perf/index.html
    • perf/index.json
    • perf/refs/main/latest.json
    • perf/refs/pre-release/latest.json
    • perf/branches/<branch-slug>/latest.json
    • perf/branches/<branch-slug>/index.json
    • perf/branches/<branch-slug>/history/<sha>.json
  • Added .github/workflows/perf_publish.yml, gated by ROGUE_ENABLE_PERF_PUBLISH == 'true'.
  • Updated .github/workflows/rogue_ci.yml and scripts/ci_perf_summary.py so the perf summary compares the current run against:
    • the latest published result for the same branch
    • the latest main baseline
    • the latest pre-release baseline
  • Added stale branch cleanup so published branch directories are removed when a later publish sees that the branch is no longer active or has been merged into main or pre-release.
  • Added focused tests in tests/utilities/test_perf_tools.py.
  • Added repo-local planning/progress notes in docs/plans/.

Rollout notes:

  • merge with ROGUE_ENABLE_PERF_PUBLISH unset or false
  • enable the variable only when ready to validate live GitHub publication
  • confirm first writes into gh-pages/perf/ and inspect the generated dashboard

Minor Release v6.10.0

13 Apr 23:26
aa4fcaa

Choose a tag to compare

Pull Requests Since v6.9.0

Unlabeled

  1. #1162 - Add native C++ ctest suite
  2. #1172 - Add floating point variable types: Float16, Float8, BFloat16, TensorFloat32, Float6, Float4 (ESROGUE-730)
  3. #1164 - Add versioned release and pre-release doc publishing workflows
  4. #1173 - Add SW batcher (CombinerV1/V2) for ESROGUE-516
  5. #1174 - Add SrpV3Emulation module for software-only SRPv3 CI testing (ESROGUE-493)
  6. #1166 - Fix silent fixed-point overflow (ESROGUE-735)
  7. #1168 - fix(memory): prevent false verify failures under concurrent access (ESROGUE-733)
  8. #1167 - Catch GeneralError during init read/write in start() (ESROGUE-734)
  9. #1176 - test: harden UDP packetizer integration test against flakiness
  10. #1171 - Add memBase validation for devices with remote variables (ESROGUE-732)
  11. #1169 - Fix Variable.set/get/post rejecting numpy integer index types (ESROGUE-724)
  12. #1165 - Add path to support Qt6 in the future via qtpy abstraction layer (ESROGUE-688)
  13. #1170 - Fix unpicklable Boost.Python exceptions crashing ZMQ server (ESROGUE-723)
  14. #1177 - fix: modernize super() calls in AxiStreamDmaMon

Pull Request Details

Add native C++ ctest suite

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Apr 13 13:45:10 2026 -0700
Pull: #1162 (8686 additions, 159 deletions, 30 files changed)
Branch: slaclab/cpp-tests
Issues: #1162

Notes:

Description

This branch adds the first native C++ regression suite under tests/cpp/ and wires it into the main CMake/CTest flow. The new coverage stays intentionally narrow and fast. It implements deterministic native tests for version helpers, memory bit helpers, stream frame/pool behavior, and stream iterator behavior, plus a Python-enabled API smoke test managed by CTest.

This change also replaces the old standalone tests/api_test sample executable with a CTest-managed smoke test, updates the test documentation to describe how the native suite is built and run from the standard build/ tree, and updates CI so the native test labels run as part of the existing build jobs.

Details

The native test system is added behind ROGUE_BUILD_TESTS in the top-level CMake build and uses an in-tree single-header doctest-compatible harness plus a shared support target so individual test files stay focused on behavior. The suite is organized under tests/cpp/ by subsystem and uses CTest labels (cpp, cpp-core, no-python, requires-python, smoke) to keep local runs and CI selection predictable.

Two product bugs were exposed while building the deterministic native coverage and are fixed here:

  1. src/rogue/interfaces/memory/Master.cpp
    The copyBits, setBits, and anyBits helpers all use a do { ... } while (...) structure after initializing rem = size. When size == 0, the old code still executed the loop body once before checking termination. That made zero-length operations unsafe: a no-op request could still calculate masks, read source bits, inspect destination bits, or write into the destination buffer even though no bits were requested. The fix adds an immediate zero-length return at the top of each helper, preserving the expected semantics: copyBits and setBits become true no-ops, and anyBits returns false without touching memory.

  2. src/rogue/interfaces/stream/Pool.cpp
    The pool destructor previously freed dataQ_.front() inside while (!dataQ_.empty()) but never removed the front element from the queue. In practice that means the destructor repeatedly frees the same pointer while the queue never advances, which can lead to double-free behavior or an infinite drain loop during teardown. The fix pops the queue entry after each free() so the destructor actually walks and releases every pooled allocation exactly once.


Add versioned release and pre-release doc publishing workflows

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Apr 13 15:51:39 2026 -0700
Pull: #1164 (1397 additions, 24 deletions, 12 files changed)
Branch: slaclab/doc-hist
Issues: #1164

Notes:

Description

Add versioned documentation publishing on GitHub Pages so release docs can be retained per tag, expose a latest alias for the newest release, and publish development docs from pre-release.

Details

This change:

  • splits docs publishing out of the main CI workflow into dedicated release and pre-release workflows
  • adds a docs publishing helper script that writes versioned docs trees, versions.json, a versions index page, and the latest alias
  • adds a docs version selector and version-status banners to the Sphinx UI
  • adds repo-local implementation and rollout planning documents under docs/plans/

Related

  • release staging workflow supports manual validation under /staging-docs/ before production release publishing is exercised

Add path to support Qt6 in the future via qtpy abstraction layer (ESROGUE-688)

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Apr 8 10:44:30 2026 -0700
Pull: #1165 (14 additions, 12 deletions, 4 files changed)
Branch: slaclab/ESROGUE-688
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-688

Notes:

Summary

  • Replace direct PyQt5 imports with qtpy in rogue_plugin.py and time_plotter.py, matching PyDM's own Qt backend abstraction
  • Replace deprecated QFontMetrics.width() with horizontalAdvance() for Qt6 compatibility
  • Add qtpy>=2.0 and pyqtgraph>=0.13 to conda.yml; add qtpy to pip_requirements.txt

Users can now choose their Qt backend (PyQt5 or PySide6) via the QT_API environment variable. Existing PyQt5 users see zero behavior change since qtpy defaults to PyQt5 when QT_API is not set.

Currently, PyDM has limited support for PyQt5 and PySide6, and does not yet support PyQt6. This will allow users to easily migrate to PyQt6 once PyDM adds support for it.

Test plan

  • CI passes on ESROGUE-688 branch (all 4 jobs green)
  • grep -rn "PyQt5\|pyqtSlot" python/ tests/ --include="*.py" returns zero matches
  • flake8 clean on python/ and tests/
  • Full test suite passes under PyQt5 backend
  • Full test suite passes under PySide6 backend

JIRA: ESROGUE-688


Fix silent fixed-point overflow (ESROGUE-735)

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Apr 8 10:28:09 2026 -0700
Pull: #1166 (375 additions, 20 deletions, 9 files changed)
Branch: slaclab/ESROGUE-735
Issues: #1166
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-735

Notes:

Summary

  • Fixed-point variables (Fixed/UFixed) now raise a GeneralError when set to a value outside the representable range, instead of silently clipping or storing an incorrect value
  • Added minValue()/maxValue() to Fixed and UFixed Python model classes so the existing C++ range check in Block::setFixed() is activated
  • Replaced the silent positive-edge-case clipping (fPoint -= 1) in C++ with an explicit overflow check that throws with the variable name, attempted value, and valid range

Test plan

  • Existing 103 core tests pass
  • New test_fixed_point_overflow_raises_error covers: positive overflow, negative overflow, unsigned overflow, negative-into-unsigned, and boundary values
  • Verified with Fixed(16, 14) (the etaQ/etaI register scenario, range +-2.0) that overflow now produces a clear error message

Catch GeneralError during init read/write in start() (ESROGUE-734)

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Apr 13 12:49:44 2026 -0700
Pull: #1167 (211 additions, 2 deletions, 2 files changed)
Branch: slaclab/ESROGUE-734
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-734

Notes:

Summary

  • Wraps self._read() and self._write() calls in Root.start() with try/except rogue.GeneralError
  • A transaction timeout during initial read/write (e.g. PCIe bus contention when starting multiple SMuRF carriers simultaneously) previously propagated as an unhandled GeneralError and crashed Root.start()
  • The fix catches the exception in start() and logs it via pr.logException(), allowing startup to continue
  • _read() and _write() themselves still raise rogue.GeneralError on timeout — only the start() call site swallows it

Test plan

  • 4 new integration tests in tests/integration/test_init_read_timeout_integration.py
  • test_init_read_timeout_does_not_crash — root survives timeout during init read
  • test_read_raises_on_timeout_read() raises rogue.GeneralError on timeout (callers outside start() still see the exception)
  • test_init_read_succeeds_without_timeout — sanity check for normal operation
  • test_concurrent_root_start_with_timeouts — 6 roots start simultaneously, 2 with timeouts, all succeed
  • Existing 184 tests pass with no regressions
  • flake8 clean

fix(memory): prevent false verify failures under concurrent access (ESROGUE-733)

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Apr 13 09:49:05 2026 -0700
Pull: #1168 (259 additions, 2 deletions, 3 files changed)
Branch: slaclab/ESROGUE-733
Jira: https://jira.slac.stanford.edu/issues/ESROGUE-733

Notes:

Summary

  • Fix race condition in Block::checkTransaction() where verify comparison used live blockData_ instead of the data actually written to hardware
  • When two variables share a block, a concurrent set() on one variable could modify blockData_ between the write and verify check, causing spurious verify errors
  • Add expectedData_ buffer t...
Read more

Minor Release v6.9.0

03 Apr 23:45
b89f702

Choose a tag to compare

Pull Requests Since v6.8.5

Unlabeled

  1. #1139 - Add many tests and fix bugs discovered by those tests.
  2. #1132 - Overhaul logging infrastructure and documentation
  3. #1161 - Add epicsV7 protocol using pythonSoftIOC (softioc)
  4. #1159 - Add EPICS V4 RPC test coverage and documentation
  5. #1160 - .planning/ removal
  6. #1152 - Fix PyDM debug_tree name corruption after long ZMQ transactions
  7. #1142 - Fix RunControl, Process, and UART worker shutdown bugs
  8. #1153 - Add system log record filtering to RootLogHandler.
  9. #1151 - Fix PyDM Plotter widget memory leak on plot refresh
  10. #1156 - Optimize GitHub Actions environment setup
  11. #1136 - Add direct PyDM display launch API
  12. #1150 - Add LocalVariable typeCheck flag and disable it for DataReceiver.Data
  13. #1163 - Add EPICS V7 Python API docs pages
  14. #1144 - Fix variable array write semantics and VariableWait state handling
  15. #1149 - Fix zip-directory YAML load ordering in Root.loadYaml
  16. #1148 - Fix version discovery for non-release Git tags
  17. #1143 - Fix Int conversions and LocalBlock in-place operators
  18. #1145 - Fix pack=True collisions in Device.addRemoteVariables
  19. #1141 - Fix FileReader config parsing and StreamReader IsOpen wrapper
  20. #1146 - Fix SqlLogger syslog decoding for VariableValue payloads
  21. #1147 - Fix malformed child sections and prologue loss in CPSW export

Pull Request Details

Overhaul logging infrastructure and documentation

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 30 15:03:06 2026 -0700
Pull: #1132 (1909 additions, 494 deletions, 80 files changed)
Branch: slaclab/logging-infra-explore
Issues: #1132

Notes:

Summary
This PR expands the logging work on top of origin/pre-release in two main areas:

  1. It makes Rogue C++ logger configuration dynamic, so rogue.Logging.setFilter(...) and rogue.Logging.setLevel(...) now update existing logger instances instead of only affecting loggers created afterward.
  2. It adds optional forwarding of Rogue C++ log records into Python logging, with metadata preserved so mixed Rogue/PyRogue applications can use a single logging path.

The branch also updates a broad set of log messages, adds helper APIs for logger naming and level control from Python, adds tests for the new behavior, and refreshes the docs to match the new semantics.

Implementation Details

Dynamic updates for existing Rogue logger instances
Previously, Rogue C++ loggers effectively snapshot their level at construction time, so changing the global level or adding a prefix filter later did not reliably affect already-created objects.

This PR changes that behavior in include/rogue/Logging.h and src/rogue/Logging.cpp:

  • Logging now tracks active logger instances in a static loggers_ list.
  • Each logger stores its level in std::atomic<uint32_t> level_ instead of a plain integer.
  • A new internal helper, updateLevelLocked(), recomputes the effective level from the current global level plus prefix filters.
  • setLevel(...) now updates gblLevel_ and immediately re-applies levels to all active loggers.
  • setFilter(...) now normalizes the filter name, appends it to the filter list, and immediately re-applies levels to all active loggers.
  • Logger names are normalized through normalizeName(...), so Python-facing and Rogue-facing logger/filter naming stays consistent.

The practical result is that changing logging configuration after object construction now works for existing C++-backed Rogue objects, which is why the docs were updated to stop requiring “enable before construction” except when users specifically want constructor/startup messages.

Optional Rogue C++ -> Python log forwarding
This PR also adds an opt-in bridge from Rogue C++ logging into Python logging.

Core implementation in include/rogue/Logging.h and src/rogue/Logging.cpp:

  • Adds setForwardPython(...) / forwardPython().
  • Adds setEmitStdout(...) / emitStdout() so native stdout emission can be disabled independently.
  • intLog(...) now optionally:
    • emits to stdout via the native sink, and/or
    • acquires the GIL and forwards a Python LogRecord to logging.getLogger(name_).handle(...).
  • Forwarded records carry extra metadata fields:
    • rogue_cpp
    • rogue_tid
    • rogue_pid
    • rogue_logger
    • rogue_timestamp
    • rogue_component

This forwarding is then surfaced in PyRogue:

  • python/pyrogue/_Root.py adds unifyLogs support on Root, wires it into setUnifiedLogging(True), and copies the forwarded metadata into Root.SystemLog.
  • python/pyrogue/pydm/widgets/system_log.py is updated to display/use the richer forwarded records.
  • The branch also adds/extends helper APIs in python/pyrogue/_Node.py, including logName(...), setLogLevel(...), classLogName(), and setClassLogLevel(...), so Python code can work with the normalized logger naming model more easily.

Other notable changes

  • Adds coverage in tests/test_logging.py for the new logging behavior.
  • Refactors many Python and C++ log statements to use parameterized formatting for consistency and to avoid eager string formatting.
  • Updates docs across logging, transport, stream, memory, hardware, PRBS, file I/O, and migration pages to reflect:
    • unified logging as the preferred mixed Python/C++ path,
    • dynamic logger reconfiguration after construction,
    • common logger names and patterns,
    • forwarded C++ metadata in SystemLog.

User-facing behavior changes

  • rogue.Logging.setFilter(...) and rogue.Logging.setLevel(...) now affect existing active Rogue loggers.
  • Mixed PyRogue applications can opt into a unified logging path where Rogue C++ logs appear in Python logging handlers and Root.SystemLog.
  • Docs now clarify that logging can be enabled before or after construction; enabling early is only necessary when users want constructor/startup messages.

Testing

Suggested reviewer focus


Add direct PyDM display launch API

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 23 11:40:48 2026 -0700
Pull: #1136 (92 additions, 12 deletions, 4 files changed)
Branch: slaclab/pydm-launch-api

Notes:

Description
This branch improves the Rogue PyDM launch API so custom Python top-level displays can be launched directly, without routing users through the file-based ui= path.

Previously, custom Python PyDM displays had to be exposed as a filesystem path and passed through ui=..., even when the user already had a pydm.Display subclass in normal Python code. That worked, but it exposed a PyDM loader detail in Rogue’s public API.

This branch adds a cleaner Rogue-facing launch path.

What changed:

  • pyrogue.pydm.runPyDM(...) now accepts:
    • display=<Display subclass>
    • display_factory=<callable returning Display>
  • ui, display, and display_factory are mutually exclusive
  • The implementation uses the PyDM main window’s native object path:
    • create the PyDMApplication
    • construct the Display
    • install it directly into the main window
  • The existing ui= path remains supported for:
    • Qt Designer .ui files
    • legacy file-based Python display loading

Additional update:

  • python -m pyrogue timeplot now uses the new object-based path directly with display=TimePlotTop

Docs updated:

  • docs/src/pydm/starting_gui.rst
  • docs/src/pydm/rogue_widgets.rst

The docs now:

  • show the recommended display=MyTop pattern
  • show display_factory= for constructor customization
  • keep ui= documented as the legacy/file-based path

Why:

  • makes the PyDM launch API feel like normal Python
  • avoids forcing users to think in terms of Python file paths
  • keeps backward compatibility
  • gives Rogue a cleaner public API while still working with PyDM’s existing infrastructure

Add many tests and fix bugs discovered by those tests.

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Wed Apr 1 12:17:35 2026 -0700
Pull: #1139 (6720 additions, 1400 deletions, 79 files changed)
Branch: slaclab/add-tests
Issues: #1139

Notes:

Summary

This branch is a substantial Python-side test expansion, focused on raising regression coverage across the core PyRogue tree/runtime APIs, cleaning up the test suite structure, and adding higher-value end-to-end interface/integration coverage.

In addition to the original core coverage push, the branch now also:

  • reorganizes tests/ by behavior and execution style
  • adds live VirtualClient / SimpleClient over ZmqServer integration coverage
  • converts several socket-backed tests away from fixed ports
  • splits benchmark-style workloads into `tests/per...
Read more

Patch Release v6.8.5

17 Mar 05:00
e79fd63

Choose a tag to compare

Pull Requests Since v6.8.4

Unlabeled

  1. #1131 - Revamp Rogue documentation structure, narrative guides, and built-in module coverage
  2. #1138 - Documentation - Reorganize built-in modules and align tree/interface docs
  3. #1134 - Add optional readiness checks to memory TcpClient
  4. #1133 - Stabilize timing-sensitive tests
  5. #1135 - Fix UdpRssiPack startup race in negotiated RX buffer setup
  6. #1130 - Update GitHub Actions for macos workflow to fix warnings

Pull Request Details

Update GitHub Actions for macos workflow to fix warnings

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Tue Mar 10 13:09:30 2026 -0700
Pull: #1130 (17 additions, 4 deletions, 2 files changed)
Branch: slaclab/fix-macos-arm64-conda-warnings

Notes:

Description

CI was throwing some warnings related to macos builds. These are now fixed.


Revamp Rogue documentation structure, narrative guides, and built-in module coverage

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 16 11:56:52 2026 -0700
Pull: #1131 (15586 additions, 6354 deletions, 457 files changed)
Branch: slaclab/doc-update-6
Issues: #1131

Notes:

Summary
This branch is a large documentation rework that reorganizes Rogue around clearer top-level concepts, replaces the older interface-driven structure with better narrative sections, expands practical user guidance across PyRogue, stream, memory, built-in modules, and protocols, and significantly improves the generated API reference experience.

It also moves a large amount of content into new locations, rewrites many thin or outdated pages into real narrative documentation, refreshes navigation so the docs behave more like a coherent manual instead of a collection of disconnected reference stubs, and adds new docs tooling for generated API pages and local source-code browsing.

What changed

Documentation architecture

  • Established top-level sections and reduced legacy navigation clutter
  • Reworked the docs entry point and sidebar organization
  • Reframed the docs around user-facing concepts instead of older implementation-oriented structure

Top-level documentation structure
The docs now center on user-facing concepts instead of the old interfaces/-centric layout:

  • Introduction
  • Installing & Compiling Rogue
  • PyRogue Tree
  • Stream Interface
  • Memory Interface
  • Built-in Modules
  • Logging In Rogue
  • Using the PyDM Gui
  • Tutorials
  • Cookbook
  • Migration Notes
  • API Reference

Earlier quick-start material was folded into the installation/tutorial flow instead of remaining a standalone primary section.

Core narrative sections

  • Reorganized and expanded pyrogue_tree into clearer core concepts such as root, device, variable, command, block, model, poll queue, and YAML configuration
  • Reworked stream_interface into a coherent narrative section covering connecting, sending, receiving, frame model, TCP bridge, and built-in helpers like FIFO, Filter, and RateDrop
  • Reworked memory_interface into clearer conceptual docs for connecting, master/slave behavior, hub usage, transactions, and TCP bridging
  • Added stronger lifecycle, bulk-operation, transport, and integration guidance across these areas
  • Added practical Python and C++ examples throughout

Built-in modules and protocol coverage

  • Consolidated hardware, protocols, and utilities under built_in_modules
  • Expanded documentation for DMA wrappers, raw memory mapping, OS memory bridge, SQL, version helpers, GPIB, PRBS, file I/O, compression, HLS, and simulation helpers such as Pgp2bSim and MemEmulate
  • Expanded and cleaned up protocol sections including UDP, RSSI, SRP, Packetizer, Batcher, EPICS V4, Xilinx/XVC, UART, network wrappers, and GPIB
  • These pages now include clearer conceptual overviews, stronger integration guidance, code-backed examples, lifecycle notes, and better cross-links

API reference improvements

  • Added conceptual links from API pages back to canonical narrative docs
  • Regrouped Python API docs around actual package structure and user-facing topics
  • Cleaned up many C++ and Python API wrapper pages to better reflect the new docs structure
  • Standardized backlink language around Related Topics
  • Expanded missing Python and C++ API coverage for a number of Rogue classes and bindings
  • Added generated Boost.Python API documentation support for binding-heavy areas

Generated API tooling and source links
This branch now includes substantial docs tooling work in addition to content rewrites:

  • Added custom Sphinx extensions for Boost.Python API generation/rendering
  • Fixed the custom Boost.Python directive for Sphinx 8
  • Added local Doxygen-backed source links for C++ API docs
  • Enabled Doxygen source browsing and .cpp indexing so C++ API entries can link to declarations and implementations
  • Added a docs-only Doxygen input filter to normalize selected .cpp alias spellings during docs generation
  • Added a first-pass Binding source link for Boost.Python-generated API pages so wrapper .cpp sources can be previewed in built docs

In practice this means:

  • C++ API entries can show [header] and, where available, [impl]
  • Boost.Python-generated pages can show a Binding source link
  • These links target local generated Doxygen HTML, not GitHub

Navigation behavior

  • API sections now expand deeply in the sidebar so nested namespaces/packages are actually navigable
  • Non-API sections stay shallower so the general docs do not become fully exploded
  • API page-body toctrees remain shallow for readability
  • Related Topics remains visible in page content without polluting API sidebar navigation

Tutorials, cookbook, and logging

  • Expanded tutorials, cookbook content, and supplemental getting-started guidance
  • Added more practical examples for advanced stream patterns, PyRogue devices/variables, system integration, and device workflow
  • Reworked logging documentation substantially and added logger guidance across many module pages

Content migration
This branch performs the bulk of the documentation migration away from older locations such as:

  • docs/src/interfaces/*
  • older protocols/*, hardware/*, and utilities/* layouts
  • fragmented older PyRogue structural layouts

Legacy material was moved, merged, rewritten, or deleted depending on whether it still served a useful purpose.

Suggested review focus
Because of the size, the most effective review path is:

  1. Top-level navigation and information architecture
  2. pyrogue_tree, stream_interface, and memory_interface
  3. built_in_modules
  4. protocol sections and tutorial/cookbook additions
  5. API reference structure, generated Boost.Python pages, and source-link behavior

Stabilize timing-sensitive tests

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 16 09:18:31 2026 -0700
Pull: #1133 (44 additions, 13 deletions, 2 files changed)
Branch: slaclab/test-sync-waits

Notes:

Description
This branch replaces fixed synchronization sleeps with bounded waits on real completion conditions in a few timing-sensitive tests.

Changes:

  • tests/test_udpPacketizer.py
    • wait for frame drain instead of sleeping for one second
  • tests/test_epics.py
    • wait for PV readiness and propagated values instead of fixed sleeps

This should make the tests less sensitive to host timing and transport latency, and gives better timeout failures when something does stall.

Note:

  • tests/test_enum.py still contains a static sleep path elsewhere in the broader test/setup flow that should be cleaned up later.

Add optional readiness checks to memory TcpClient

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 16 12:23:36 2026 -0700
Pull: #1134 (218 additions, 50 deletions, 9 files changed)
Branch: slaclab/tcpclient-wait-ready
Issues: #1134

Notes:

Description
This branch adds an explicit readiness-check capability to rogue.interfaces.memory.TcpClient and updates a few timing-sensitive tests to use it.

The main change is a lightweight built-in bridge probe between memory.TcpClient and memory.TcpServer. This allows a client to verify that the TCP memory request/response path is actually usable, rather than relying on fixed sleeps or local socket-connect assumptions.

What changed:

  • Added an internal memory bridge probe transaction type:
    • rim::TcpBridgeProbe
  • Updated memory.TcpServer to recognize and answer that probe locally
  • Added memory.TcpClient.waitReady(timeout, period)
  • Added waitReady as an optional TcpClient constructor flag
    • TcpClient(addr, port, waitReady=False)
    • when waitReady=True, managed _start() blocks on bridge readiness
  • Kept the default behavior backward-compatible
    • if waitReady is not enabled, startup behavior is unchanged

Tests updated:

  • tests/test_enum.py
  • tests/test_epics.py

These now use TcpClient(..., waitReady=True) instead of fixed startup sleeps or external readiness wrappers.

Docs updated:

  • docs/src/pyrogue_tree/node/device/index.rst

Important compatibility note:

  • Th...
Read more

Patch Release v6.8.4

05 Mar 20:51
65833bc

Choose a tag to compare

Pull Requests Since v6.8.3

Enhancement

  1. #1123 - Allow rogue builds on macOS arm64
  2. #1127 - Variable.h Signature Clarity

Documentation

  1. #1123 - Allow rogue builds on macOS arm64
  2. #1119 - Update conf.py

Unlabeled

  1. #1126 - Docs/CI Refresh: Introduction Landing Page, Tutorial Reorg, API Reference Restructure
  2. #1125 - Update windows.rst for Windows11 + WSLg
  3. #1129 - Conda Build Release Script Updates
  4. #1128 - bug fix for PRBS module for high bandwidth rates (>8Gb/s)
  5. #1121 - Fix Python 3.12/3.13 type-annotation crash in TimePlotter legend row

Pull Request Details

Update conf.py

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Mar 2 11:08:34 2026 -0800
Pull: #1119 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ruck314-patch-1
Labels: documentation

Notes:

Description

  • Fixed the copyright year

Fix Python 3.12/3.13 type-annotation crash in TimePlotter legend row

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Mon Mar 2 10:17:52 2026 -0800
Pull: #1121 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/issue-1120
Issues: #1120

Notes:

Fix for issue #1120

Description

This change fixes a runtime TypeError when launching the PyRogue GUI on Python 3.12/3.13:

TypeError: unsupported operand type(s) for |: 'str' and 'NoneType'

The issue was caused by a quoted forward reference combined with PEP 604 union syntax in LegendRow.__init__:

Before: main: "TimePlotter" | None = None
After: main: TimePlotter | None = None

Why this works

On Python < 3.14, a quoted type name in this context is treated as a string at runtime, so "Type" | None attempts a string bitwise-or and fails. Using the actual symbol avoids that runtime evaluation error.


Allow rogue builds on macOS arm64

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Wed Mar 4 14:48:18 2026 -0800
Pull: #1123 (257 additions, 115 deletions, 15 files changed)
Branch: slaclab/mac-build
Labels: enhancement, documentation

Notes:

Summary

This PR adds native macOS arm64 build/install support for Rogue using Conda/Miniforge, while keeping Linux workflows intact.
It also fixes packaging and formatting issues found during macOS validation.

What Changed

Build system and platform support

  • Added explicit macOS architecture guard: only arm64 is supported.
  • Fixed macOS shared library handling:
    • rogue-core-shared now uses .dylib on macOS.
  • Added macOS runtime library path support in setup scripts:
    • DYLD_LIBRARY_PATH exported in setup_rogue.sh/.csh/.fish.
  • Improved ZeroMQ fallback lookup to include DYLD_LIBRARY_PATH on macOS.
  • Avoided linking rt on Apple static builds.
  • Added CMake policy handling for newer CMake versions:
    • CMP0144 set to NEW
    • CMP0167 set to OLD
  • Added Boost_ROOT hint (in addition to BOOST_ROOT) for conda/miniforge environments.

Dependency environment

  • Updated conda.yml to be cross-platform:
    • replaced gcc_linux-64 / gxx_linux-64 with c-compiler / cxx-compiler.
  • Updated Qt dependency pin to a modern compatible range:
    • pyqt>=5.15.

Python packaging/install fix

  • Fixed make install failure from invalid version strings when working tree is dirty.
  • Reworked version normalization in templates/setup.py.in to produce PEP 440-compliant versions, including:
    • vX.Y.Z-dirty
    • vX.Y.Z-N-g<sha>
    • vX.Y.Z-N-g<sha>-dirty.

CI updates

  • Add macos-15 build to github actions CI pipeline.
  • Added/expanded dedicated macos_arm64_build_test path.
  • macOS job now runs pytest (excluding separate api_test flow on macOS).
  • Added pip dependency install step in macOS workflow.
  • pip_requirements.txt now uses environment marker for hwcounter:
    • hwcounter; platform_system == "Linux" and platform_machine == "x86_64".

Test portability improvements

  • Refactored tests/test_rate.py:
    • table-driven/cleaner benchmark structure
    • supports optional hwcounter
    • cross-platform fallback timing based on perf_counter_ns
    • clearer printed output with explicit units
    • restored/retained tuned cycle thresholds where hwcounter is available.

Portability/format-string fixes

  • Replaced non-portable printf specifiers in Xilinx protocol code with fixed-width-safe formatting (PRIu64) in:
    • XvcConnection.cpp
    • JtagDriver.cpp.

Documentation updates

  • Updated install docs to reflect current support:
    • Native source build supported on Linux + macOS arm64.
    • Windows guidance remains Docker/WSL.
  • Added macOS-specific Miniforge build prerequisites and commands:
    • xcode-select --install
    • macOS Miniforge installer path
    • cross-platform build command examples.

Repo hygiene

  • Added .vscode/ to .gitignore to avoid committing local editor settings.

Update windows.rst for Windows11 + WSLg

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Mar 4 10:35:30 2026 -0800
Pull: #1125 (25 additions, 14 deletions, 1 files changed)
Branch: slaclab/docs-windows-update

Notes:

Description

  • Old instructions were obsolete and referring to old windows 10 material
  • This modernizes it for latest Windows 11 features

Docs/CI Refresh: Introduction Landing Page, Tutorial Reorg, API Reference Restructure

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Wed Mar 4 15:10:10 2026 -0800
Pull: #1126 (4296 additions, 890 deletions, 185 files changed)
Branch: slaclab/doc-update-5

Notes:

Summary

This PR updates Rogue docs and CI/tooling relative to pre-release, with a focus on:

  • making Introduction the docs landing page
  • restructuring tutorials into clearer top-level onboarding sections
  • improving API docs organization and cross-linking
  • making docs builds more deterministic (clean before build)

Major Changes

1. Documentation landing/navigation overhaul

  • Set Sphinx root to introduction/index in docs/src/conf.py and removed legacy docs/src/index.rst.
  • Expanded/cleaned Introduction content and nav behavior.
  • Added docs/src/documentation_index.rst (Table of Contents) and adjusted left-nav ordering (including Introduction label and Migration -> Table of Contents -> API).
  • Resolved toctree recursion from intro/TOC cross-linking.

2. Tutorial restructuring

  • Moved tutorial roots to top-level docs paths:
    • docs/src/tutorials/starting -> docs/src/getting_started
    • docs/src/tutorials/complex -> docs/src/advanced_examples
  • Updated toctrees/references to new paths and simplified getting-started flow (root -> device -> full example).
  • Moved osmemmaster out of getting-started to docs/src/interfaces/pyrogue/osmemmaster.rst.

3. API docs organization and references

  • Added/expanded Python API reference pages under docs/src/api/python/* and a central docs/src/api/index.rst.
  • Reorganized C++ API docs into docs/src/api/cpp/* with broad path cleanup/moves.
  • Updated many interface/protocol/utility pages to point to generated API docs.

4. Docs build reliability + config updates

  • Standardized docs builds to clean-first (make clean html) across local task, Cursor command, and CI docs generation.
  • Updated docs/Doxyfile (including PAPER_TYPE = a4) and related Doxygen config modernization.
  • Added missing Sphinx extensions to conda.yml (sphinx-autodoc-typehints, sphinx-copybutton, sphinxcontrib-napoleon).
  • Intend that the conda env created by conda.yml can build the documentation.

7. Other code changes

  • Updated include/rogue/interfaces/memory/Variable.h method signatures for clearer parameter naming.

Variable.h Signature Clarity

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Wed Mar 4 12:59:45 2026 -0800
Pull: #1127 (16 additions, 16 deletions, 2 files changed)
Branch: slaclab/variable-h-signature-clarity
Labels: enhancement

Notes:

Summary

This PR isolates the Variable.h API signature readability cleanup into a standalone change for easier review and merge sequencing.

What Changed

Updated method declarations in:

  • include/rogue/interfaces/memory/Variable.h

The change names previously unnamed first parameters in several method signatures, for example:

  • setByteArray(uint8_t* value, ...)
  • getByteArray(uint8_t* value, ...)
  • setUInt(uint64_t& value, ...)
  • setInt(int64_t& value, ...)
  • setBool(bool& value, ...)
  • setString(const std::string& value, ...)
  • getValue(std::string& valueRet, ...)
  • setFloat(float& value, ...)
  • setDouble(double& value, ...)
  • setFixed(double& value, ...)

Source updates

  • src/rogue/interfaces/memory/Variable.cpp
  • Matched parameter names with the header for:
    • setByteArray(uint8_t* value, ...)
    • getByteArray(uint8_t* value, ...)
    • getValue(std::string& valueRet, ...)

Why

  • Improves readability of the public C++ interface.
  • Makes signatures clearer in headers/docs/IDE hovers.
  • No intended behavioral/runtime change.

Scope / Risk

  • Header declaration cleanup only (parameter naming).
  • No logic changes.

bug fix for PRBS module for high bandwidth rates (>8Gb/s)

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Mar 4 13:07:29 2026 -0800
Pull: #1128 (12 additions, 12...
Read more

Patch Release v6.8.3

27 Feb 23:29
7f853d0

Choose a tag to compare

Pull Requests Since v6.8.2

Documentation

  1. #1117 - Add Protocol Documentation and Update Rogue C++ API Doxygen

Unlabeled

  1. #1116 - Enhance PyRogue docs and typing across utilities and PyDM
  2. #1113 - adding AxiStream Batcher Protocol Version 2
  3. #1118 - Revert functionWrapper back to eval() implementation

Pull Request Details

adding AxiStream Batcher Protocol Version 2

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Feb 23 13:39:56 2026 -0800
Pull: #1113 (688 additions, 3 deletions, 8 files changed)
Branch: slaclab/AxiStreamBatcherV2

Notes:

Description

  • Version 2 of the protocol is nearly identical to Version 1, with the exception of the zero padding previously used in the “Super-Frame Header,” “Sub-Frame Payload,” and “Sub-Frame Tail.”
  • By removing this zero padding, the AXI stream frame on the CPU side no longer needs to account for differences in zero-padding between firmware versions that use different AXI stream widths. This simplifies compatibility, particularly for applications that choose not to use the Rogue unbatcher API to split sub-frames.
  • In addition, this reduces the overall frame size to support faster frame rates
  • https://confluence.slac.stanford.edu/x/L2VlK
  • Pull Request for FW support: slaclab/surf#1383

Enhance PyRogue docs and typing across utilities and PyDM

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Wed Feb 25 13:59:32 2026 -0800
Pull: #1116 (1373 additions, 368 deletions, 37 files changed)
Branch: slaclab/doc-update-3

Notes:

Description

  • Add and reorganize docs for file I/O format and HLS register parser utilities:
    • add canonical Rogue file format page and cross-links from reader/writer docs
    • add HLS utility docs for pyrogue.utilities.hls._RegInterfParser (workflow, CLI usage, and function behavior)
  • Improve typing and docstrings in utilities modules (cpsw, fileio, prbs, HLS parser), including clearer parameter/return docs and callback signatures.
  • Perform broad PyDM/UI docstring and type hint cleanup:
    • strengthen type hints (including QWidget/PyDMChannel where applicable)
    • add/complete class and method docstrings
    • ensure class docstrings document __init__ parameters consistently.

Add Protocol Documentation and Update Rogue C++ API Doxygen

Author: Benjamin Reese bengineerd@users.noreply.github.com
Date: Fri Feb 27 11:54:10 2026 -0800
Pull: #1117 (8543 additions, 2319 deletions, 128 files changed)
Branch: slaclab/doc-update-4
Labels: documentation

Notes:

Summary

This branch is a large documentation and API-reference update against pre-release, focused on making Rogue/PyRogue docs more complete, consistent, and usable for both C++ and Python users.

What Changed

1) Broad Doxygen modernization in C++ headers

  • Standardized and expanded doxygen across a large set of public headers under include/rogue/....
  • Added/clarified:
    • class-level architecture/context
    • @brief/@details usage
    • method parameter/return semantics
    • behavior notes for threading, queueing, timeout, and lifecycle APIs
  • Improved consistency/readability and corrected many wording/signature-alignment issues.

2) Major protocol documentation expansion (docs/src/protocols)

  • RSSI
    • Added substantial overview and class relationship explanations.
    • Added practical usage guidance and examples.
    • Clarified RFC lineage and transport stack behavior.
  • SRP
    • Expanded SRPv0/SRPv3 docs and class pages.
    • Added usage examples and clarified transport/memory-role relationships.
  • Batcher
    • Added V2 support docs and class pages.
    • Clarified how Core, Splitter, and Inverter fit together.
    • Added context on firmware batcher usage (SURF interoperability).
  • Xilinx
    • Added consolidated Xilinx protocol docs (XVC/JTAG driver usage and class pages).
  • Network wrappers
    • Replaced TODO with full UdpRssiPack documentation, including Root integration and lifecycle (addInterface).

3) Memory/stream interface docs updates

  • Expanded memory docs (blocks, advanced blocks, transaction docs).
  • Added/updated stream and utility docs for clearer behavior and usage.
  • Added new Version helper docs:
    • docs/src/interfaces/version.rst with Python + C++ examples.

4) C++ API docs aligned with implementation

  • Updated docs/src/interfaces/cpp_api.rst to match rogue::interfaces::api::Bsp behavior and examples.

5) PyRogue tree docs expansion/reorganization

  • Significant expansion/restructure of docs/src/pyrogue_tree/... content.
  • Added pages for model/root/poll queue/groups/block-related topics.
  • Improved command/variable/device/root documentation clarity.

Reviewer Notes

  • This PR is primarily documentation quality and API-doc alignment work, but it is broad.
  • Suggested review strategy:
    1. Protocol docs (rssi, srp, batcher, xilinx, network)
    2. Header doxygen consistency in include/rogue/interfaces/* and include/rogue/protocols/*

Revert functionWrapper back to eval() implementation

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Fri Feb 27 12:53:03 2026 -0800
Pull: #1118 (15 additions, 38 deletions, 1 files changed)
Branch: slaclab/revert-functionwrapper-0ee82ec

Notes:

Description

The helper function functionWrapper() was reverted back to it's previous implementation. It should not have been part of a PR that focused on documentation updates.


Patch Release v6.8.2

21 Feb 18:02
5701b5e

Choose a tag to compare

Pull Requests Since v6.8.1

Unlabeled

  1. #1112 - Documentation Update

Pull Request Details

Documentation Update

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Fri Feb 20 19:21:45 2026 -0800
Pull: #1112 (5453 additions, 4006 deletions, 71 files changed)
Branch: slaclab/doc-update-tutorials

Notes:

Description

This is round 2 of the documentation updates. The plan is to add type hints and docstrings for the core Rogue tree API.


Patch Release v6.8.1

06 Feb 00:17
8f93ea3

Choose a tag to compare

Pull Requests Since v6.8.0

Unlabeled

  1. #1108 - Update Documentation, Tutorials, Docstrings, add Typehints
  2. #1111 - removing legacy file IO classes
  3. #1109 - Register Rogue PyDM plugin manually in cases where it's not loaded automatically
  4. #1106 - Update LICENSE.txt

Pull Request Details

Update LICENSE.txt

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Jan 5 10:51:29 2026 -0800
Pull: #1106 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ruck314-patch-1

Notes:

Description

  • Updating for Year 2026

Update Documentation, Tutorials, Docstrings, add Typehints

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Jan 26 13:52:42 2026 -0800
Pull: #1108 (2462 additions, 53 deletions, 54 files changed)
Branch: slaclab/doc-update-tutorials

Notes:

Description

  • WIP tutorial and documentation changes

Register Rogue PyDM plugin manually in cases where it's not loaded automatically

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Jan 26 14:19:25 2026 -0800
Pull: #1109 (10 additions, 3 deletions, 2 files changed)
Branch: JJL772/pr-register-rogue-plugin

Notes:

Description

I was running into a strange issue with the Rogue conda environments on /sdf where the rogue PyDM plugin wasn't being registered despite $PYDM_DATA_PLUGINS_PATH being set correctly. Registering the plugin manually fixed the issue.

Additionally, conda environments on my Debian desktop weren't setting $PYDM_DATA_PLUGINS at all, leading to the same type of error. I think it makes sense to have fallback logic here, just in case auto-registration doesn't work.


removing legacy file IO classes

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Thu Feb 5 16:02:22 2026 -0800
Pull: #1111 (0 additions, 686 deletions, 11 files changed)
Branch: slaclab/remove-LegacyFileIO

Notes:

Description

  • Removing the deprecated legacy file writer and reader
    • LegacyFileWriter and LegacyFileReader

Minor Release v6.8.0

10 Dec 04:33
0e675ad

Choose a tag to compare

Pull Requests Since v6.7.0

Bug

  1. #1100 - Fix CMake configuration by removing incorrect 'PUBLIC' keyword from library list

Enhancement

  1. #1099 - Remove incorrect documentation
  2. #1097 - Update VariableWait function using an underlying class VariableWaitClass
  3. #1102 - Update Cmake to a cleaner approach
  4. #1095 - ZmqClient Messages Update
  5. #1103 - Update conda build meta to use older system libraries and C++

Unlabeled

  1. #1105 - Add bandwidth tracking and display to StreamWriter and PyDM DataWriter
  2. #1096 - Misc .rst updates
  3. #1104 - Allow setting of the SystemLog widget title at creation.
  4. #1101 - Fix logging handler to format strings properly

Pull Request Details

ZmqClient Messages Update

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Nov 11 12:13:03 2025 -0800
Pull: #1095 (11 additions, 11 deletions, 1 files changed)
Branch: slaclab/ZmqClient-busy-msg
Labels: enhancement

Notes:

Description


Misc .rst updates

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Nov 11 12:19:51 2025 -0800
Pull: #1096 (4 additions, 3 deletions, 2 files changed)
Branch: slaclab/build-rst

Notes:

Description

  • Update build.rst with misc fixes for building form source
  • Update yocto.rst for v6.7.0

Update VariableWait function using an underlying class VariableWaitClass

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Tue Nov 11 16:14:58 2025 -0800
Pull: #1097 (101 additions, 54 deletions, 1 files changed)
Branch: slaclab/vwait
Labels: enhancement

Notes:

This PR updates the VariableWait function to use an underlying class VariableWaitClass which enables the user to setup the test condition before doing some operation and then waiting on the update. This is useful in cases where you need to arm the wait, trigger and action and then wait for the update without worrying about a race condition between the trigger and the wait setup.

This update also allows the user to trigger on a simple update of the variables in the list by not passing a test function.


Remove incorrect documentation

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Tue Nov 11 17:06:05 2025 -0800
Pull: #1099 (5 additions, 393 deletions, 10 files changed)
Branch: slaclab/doc_updates_rth
Labels: enhancement

Notes:

Remove incorrect documentation.


Fix CMake configuration by removing incorrect 'PUBLIC' keyword from library list

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Thu Nov 20 07:20:39 2025 -0800
Pull: #1100 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/cmake-config-patch
Labels: bug

Notes:

Removes PUBLIC from the list of libraries written to the CMake config.

Description

The CMake configuration currently includes the PUBLIC keyword in the list of specified libraries, which was introduced due to a typo in the build file. This improper configuration results in compilation errors when attempting to build an application against the rogue library. This PR removes the erroneous PUBLIC keyword, ensuring the CMake configuration is generated correctly and resolving the build issues.

JIRA

https://jira.slac.stanford.edu/browse/ESROGUE-727


Fix logging handler to format strings properly

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Dec 9 10:02:29 2025 -0800
Pull: #1101 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/log-format

Notes:

Description

The RootLogHandler was not formatting the log strings before capturing the message, leading to messages like this...
image

The fix is to use record.getMessage(), which applies the string formatting.


Update Cmake to a cleaner approach

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Tue Dec 9 11:15:49 2025 -0800
Pull: #1102 (18 additions, 28 deletions, 1 files changed)
Branch: slaclab/cmake_fix
Labels: enhancement

Notes:

This updates the cmake file to a cleaner approach. it does not yet get rid of the error related to:

set(Boost_NO_BOOST_CMAKE ON)

which is still needed to make this work


Update conda build meta to use older system libraries and C++

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Tue Dec 9 13:22:20 2025 -0800
Pull: #1103 (3 additions, 0 deletions, 1 files changed)
Branch: slaclab/rocky8
Labels: enhancement

Notes:

Update conda build meta to use older system libraries and C++.

From searching:

The correct fix is to rebuild your Anaconda package while telling the compiler to target an older version of glibc (specifically, the version on Rocky 8 or older). Rocky 8 uses glibc 2.28.

You do not need to install an older Linux distro to do this. You can use Conda's sysroot features during the build.

If you are building a custom recipe: Add the sysroot dependency to your meta.yaml file in the build section. This forces the compiler to use an older set of headers and libraries, ensuring compatibility with Rocky 8.

requirements:
build:
- {{ compiler('c') }}
- {{ compiler('cxx') }}
# Target CentOS 7 glibc (2.17) for maximum compatibility
# OR target Rocky 8 glibc (2.28) specifically
- sysroot_linux-64 2.17


Allow setting of the SystemLog widget title at creation.

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Dec 9 17:36:11 2025 -0800
Pull: #1104 (4 additions, 2 deletions, 1 files changed)
Branch: slaclab/system-log-dev

Notes:

Description

Small tweak needed for a cleaner integration into the LDMX run control gui.


Add bandwidth tracking and display to StreamWriter and PyDM DataWriter

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Dec 9 20:07:53 2025 -0800
Pull: #1105 (96 additions, 1 deletions, 5 files changed)
Branch: slaclab/writer-bandwidth

Notes:

Description

  • Added rolling 1-second bandwidth accounting to StreamWriter with a new getBandwidth() (C++/Python-exposed) and reset on open/close.
  • Extended DataWriter Bandwidth LocalVariable and StreamWriter wrapper to fetch it.
  • Updated the PyDM DataWriter widget to show bandwidth with units alongside existing file size and frame count; adjusted layout to avoid spacing issues.

Minor Release v6.7.0

10 Nov 16:45
96f0e16

Choose a tag to compare

Pull Requests Since v6.6.2

Bug

  1. #1092 - Fix Numpy init issue which impacted linked to external libraries.

Enhancement

  1. #1085 - Remove the dependency on EPIC base.
  2. #1094 - Create linting script that can be called by the user
  3. #1087 - Conda CI Release Updates
  4. #1081 - Add warning for type changes in non-array LocalVariable values

Unlabeled

  1. #1089 - Remove dtype parameter from Frame.getNumpy()
  2. #1088 - Work around for a CI pytest randomly failing
  3. #1090 - delListener bug fix to allow removal from _listeners
  4. #1086 - updating CI test script's TCP port mapping
  5. #1080 - Update rogue_ci.yml
  6. #1093 - Update _Root.py's Time Variable Init value
  7. #1091 - Fix crash with segfault when attempting to log on arm32
  8. #1079 - Update yocto.rst
  9. #1082 - Update miniforge_build.rst
  10. #1084 - updating .gitignore

Pull Request Details

Update yocto.rst

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Thu Sep 11 13:54:22 2025 -0700
Pull: #1079 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ruck314-patch-1
Issues: #1079

Notes:

Description

  • Do not include rogue-dev in the Yocto images.
  • rogue-dev appears to somehow pull along a huge amount of dependencies inflating the generated image.
  • Apparently this should also have been included in the images produced by the old Petalinux bold process
    • but inspecting build files suggests that the setting somehow ended up ignored
    • so the rogue-dev never was in the images.

Update rogue_ci.yml

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Thu Sep 11 13:43:32 2025 -0700
Pull: #1080 (1 additions, 2 deletions, 2 files changed)
Branch: slaclab/ruck314-patch-2

Notes:

Description

  • secrets.DOCKERHUB_TOKEN is no longer used because publishing docker images on Github (instead of dockerhub) now

Add warning for type changes in non-array LocalVariable values

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Nov 4 08:03:44 2025 -0800
Pull: #1081 (5 additions, 0 deletions, 1 files changed)
Branch: slaclab/staticType
Labels: enhancement

Notes:

Summary

This update introduces a warning when a LocalVariable is assigned a value whose type does not match its default type. This helps prevent users from unintentionally assigning incorrect value types.

Details

  • Type consistency is now checked for all LocalVariable instances except arrays.
  • Arrays remain dynamic and are excluded from type checking.
  • This change currently issues a warning instead of an error to allow users time to adapt.
  • In a future release, this behavior will be upgraded to an error to enforce stricter type safety.

Motivation

The goal is to improve type safety and prevent subtle bugs caused by inconsistent value types while maintaining backward compatibility during the transition period.


Update miniforge_build.rst

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Sep 10 08:43:00 2025 -0700
Pull: #1082 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ruck314-patch-3

Notes:

Description

  • changing make to make -j$(nproc) for faster building

updating .gitignore

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Sep 15 15:00:27 2025 -0700
Pull: #1084 (1 additions, 0 deletions, 1 files changed)
Branch: slaclab/gitignore-patch

Notes:

Description

  • Ignoring rogue.egg-info dir that can be generated with local build
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        python/rogue.egg-info/

nothing added to commit but untracked files present (use "git add" to track)

Remove the dependency on EPIC base.

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Sep 16 14:43:28 2025 -0700
Pull: #1085 (2 additions, 68 deletions, 7 files changed)
Branch: slaclab/remove_epics_base
Labels: enhancement

Notes:

This PR removes rogues dependency on EPICS base.

Description

Since EPICS Base is no longer required to build Rogue, this PR removes its dependency from the CMake configuration.


updating CI test script's TCP port mapping

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Sep 16 15:23:14 2025 -0700
Pull: #1086 (4 additions, 4 deletions, 2 files changed)
Branch: slaclab/pytest-patch

Notes:

Description

  • test_enum.py and test_epics.py and test_streamBridge.py were previouslly all mapped to 9080
  • Moved test_epics.py to 9070 and test_memory.py to 9060
  • Enables parallel pytest and prevents a potential conflict in CI's TCP traffic

Conda CI Release Updates

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Wed Sep 17 07:51:54 2025 -0700
Pull: #1087 (7 additions, 14 deletions, 2 files changed)
Branch: slaclab/conda-numpy-v2
Labels: enhancement

Notes:

  • Moving numpy constraint from ==1.26 to >= 2.0
    • NumPy 1.x, including the final release in the 1.x line (NumPy 1.26.x), reaches its official End-of-Life (EOL) in September 2025
    • This PR is part of rogue's NumPy migration to NumPy 2.x

Work around for a CI pytest randomly failing

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Sep 22 12:14:33 2025 -0700
Pull: #1088 (8 additions, 0 deletions, 1 files changed)
Branch: slaclab/test_enum

Notes:

Description

  • https://jira.slac.stanford.edu/browse/ESROGUE-721
  • It appears to be a race condition between when the TCP client/server establish the connection at start of root. Adding a 1 second time out to root.start() seems to be the work around. Not a very good solution. It would be better with the TCP server/client had something like a "getOpen" variable to poll on in root.start() for determining when the TCP links are established

Remove dtype parameter from Frame.getNumpy()

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Nov 10 08:28:03 2025 -0800
Pull: #1089 (40 additions, 34 deletions, 2 files changed)
Branch: slaclab/getNumpy-fix

Notes:

Description

The dtype optional parameter was meant to conveniently get the frame pre-formatted to a specific numpy type.
But the implementation was broken and so it didn't work for anything other than the default uint8.

Overall, there is no need for us to maintain numpy C++ code to do this conversion when you can just call view() in python to accomplish the same thing.

So frame.getNumpy(dtype=np.uint16) now becomes frame.getNumpy().view(np.uint16).

This will not break any code since the feature never worked in the first place.


delListener bug fix to allow removal from _listeners

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Mon Sep 22 11:13:36 2025 -0700
Pull: #1090 (6 additions, 2 deletions, 1 files changed)
Branch: slaclab/remove-listener-patch

Notes:

Description

  • Variable class delListeners bugfix - allows deletion of listeners from _listeners

Fix crash with segfault when attempting to log on arm32

Author: Larry Ruckman ruckman@slac.stanford.edu
Date: Tue Oct 28 07:50:03 2025 -0700
Pull: #1091 (1 additions, 1 deletions, 1 files changed)
Branch: burbschat/fix_arm32_logging

Notes:

Fix crash with segfault when attempting to use log on arm32 target.

Description

Segfault likely caused by architecture dependent types of the values passed to printf (tv_sec, tv_usec). Now explicitly cast to long to ensure the type matches the %l format specifier.

Details

Tested and verified to resolve the problem on a 7series Zynq CPU.


Fix Numpy init issue which impacted linked to external libraries.

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Thu Oct 30 15:19:49 2025 -0700
Pull: #1092 (64 additions, 37 deletions, 9 files changed)
Branch: slaclab/numpy_init
Labels: bug

Notes:

This PR cleans up the way numpy arrays are initialized, following a proper approach and removing numpy array from the Frame.h header which may be included in external libraries.

It also fixes the naming in the unit test files to avoid a pytest warning.


Update _Root.py's Time Variable Init value

Author: Ryan Herbst rherbst@slac.stanford.edu
Date: Mon Nov 3 20:38:03 2025 -0800
Pull: #1093 (1 additions, 1 deletions, 1 files changed)
Branch: slaclab/ruck314-patch-1

Notes:

Description

Root.Time...

Read more