Skip to main content

Release Notes: Version 26.07

Last updated: 17 July 2026

What's New

New console (NUI)

With Beta features enabled, the new console gains a wave of improvements:

  • New look and feel across the console, with refreshed page headers, tabs, and controls for a cleaner, more consistent experience.
  • New landing page — a card-based home screen for quick access to the areas you use most.
  • Datasource view — the datasource detail view (chart, data table, tags, and annotations) is now available in the new console.
  • Task management is now available in the new console.
  • Environment switcher (opt-in) — jump straight to another Energyworx instance and namespace you're signed in to, right from the top bar.
  • New settings page — User Settings reorganised into clear sections (Interface, Datasource, Tasks, Credentials, Account), plus a "Show namespace IDs" toggle.
  • Search parity with the original console — the same features, now in the new console.

Ordered key processing

Files uploaded with the same ordering_key are now ingested one at a time, in the order the platform receives them, instead of in parallel — preventing race conditions when several files target the same datasource (for example, sequential corrections for the same meter). Give each independent stream its own key so unrelated files still process in parallel. Set the key as a path component when uploading to GCS — see Uploading files to Energyworx (GCS).

Process monitoring start time alerts

Process monitoring can now alert on when a process starts. Configure a condition on the "Process Start Time" metric with an HH:MM threshold (e.g. alert if a process hasn't started by 09:00) — the alert fires as soon as that time passes with no activity, and holds other conditions until the process actually starts.

🖥️ UI Improvements

  • Automated access settings: OAuth2 client credentials now live in their own "Automated access" section, separate from personal Account settings — making it clear they're for API and automation.
  • No more freezing after a new release: If the web UI was open in a tab when a new version shipped, some pages could silently stop responding. The UI now detects this and refreshes itself so navigation keeps working.
  • Clearer Groups & Permissions: The table now hides deprecated and internal resources and shows a short description for each one, so it's clearer what each permission governs.
  • Audit event search: Searching audit events with API v2 keywords (like 'flows' or 'datasources') no longer hits the wrong endpoint and fails.
  • Cleaner channel-classifier editing: The create-only "Datasource type" helper (not stored, and absent from the classic console and API) no longer appears when editing a channel classifier, so it can't show a misleading value for units used by more than one datasource type. The attribute-group editor was also restyled to match the rest of the form.
  • Faster datasource tag edits: Editing a single tag now sends only that tag to the API instead of re-submitting all tags on every save.
  • Trigger schedule version history restored: The version history panel is available again, and restoring a previous version now applies to the correct record.
  • Process monitoring alert links: Links in process-monitoring alert emails now open the correct configuration under Observability, scoped to the alert's namespace.
  • Default group protection: Users can no longer be removed from the default group — the option is hidden in the UI and rejected by the API.
  • Sign-in page links: The "Sign in with Google" screen now shows the correct support contact and links to the published General Conditions page (replacing a broken Terms of Service link).
  • Namespace properties: Saving a namespace property now works even when the namespace has none set yet (previously the first save silently did nothing).
  • Choose your default data view: A new "Default data view" setting opens datasource data as a chart or a table by default — per user, with a namespace-wide default admins can set.
  • Filter files by date range: File Management now filters files by a creation date range, with separate start and end datetime inputs.
  • Automatic tags on manual uploads: Files uploaded through File Management are now tagged "console" and "manual" automatically.
  • Warning before running a disabled trigger: Clicking "Run now" on a disabled trigger now shows a confirmation first, instead of failing with an unexpected error.
  • Map XML attributes: When mapping an XML file in a transformation configuration, element attributes (e.g. id on <meter id="123">) are now selectable as columns alongside element values — no need to use the API.
  • File upload & ingestion fixes: Uploads no longer fail with a CORS error; files stay editable even after a market adapter is assigned (the read-only lock now applies only to automated files); "ingest after upload" reliably starts ingestion; and re-ingesting an already-uploaded file no longer errors with "File IDs are required".

⚙️ Custom Business Logic

  • Market adapter file splitting: The XML and JSON market adapters now support a split_process_level property, letting large files be split into smaller chunks before processing to avoid timeouts on very large inputs. The existing json_process_level property continues to work as before. Processing of large JSON files is also noticeably faster.
  • Duplicate datasource fix: Fixed a rare race during platform scale-up that could process an ingested file twice, creating duplicate datasource tags and audit events.
  • Datasource tag types preserved: A standard package update fixes a bug that caused datasource-type tag properties to lose their type (falling back to plain text); dependent rules now behave as expected.
  • Channel unit type available in BigQuery: A channel's unit type is now stored on the datasources table in BigQuery, so it can be used in dashboards and advanced search.
  • Standard validation annotation properties: Property keys inside annotations written by the standard validation rules are now consistently sentence-cased spaced strings (e.g. Min n of intervals, Previous read value, Maximum allowed value), replacing the previous mix of snake_case, CamelCase, and partially-capitalized labels.
  • Audit events for user group updates now correctly include details when a condition (additional specification) is added, modified, or removed.
  • Rule framework tag loading: Fixed an issue where load_tags_multi_datasource in the rule framework incorrectly returned channel properties alongside datasource tags.
  • ewx-public testing utilities: Fixed the ewx-public package so it now includes the ewx_public.testing module, restoring the ability to write unit tests for custom flow rules as documented.

🔐 API & Permissions

  • Larger timeseries queries no longer fail: Wide timeseries queries over multi-year ranges now return their full result instead of failing with a "message too large" (HTTP 429) error — the API accepts responses up to 64 MiB (raised from 4 MiB).
  • Long-running API requests no longer time out: Long requests such as wide timeseries queries — whether called directly or through the web UI — now have up to 5 minutes to complete instead of failing with a 502 after ~2–3 minutes.
  • Correct validation message for Channel Classifiers: Validating a Channel Classifier's technical name now returns a Channel Classifier error instead of incorrectly referring to a "datasource classifier".
  • Tag removal now sticks: Tags sent with removed: true via the API v2 tag service are now saved as removed instead of silently reverting to active.
  • Tags are searchable immediately: Tags created through API v2 are indexed for search as soon as they're created, matching API v1 behaviour.
  • Datasource search with AND / OR: Searching datasources with boolean operators (e.g. A OR B) now returns the expected results instead of treating the operator as part of the search term.
  • More reliable datasource listing: The datasource list endpoint now respects the requested page size and resumes correctly when paging through results. The filter and order_by options — previously accepted but ignored — were removed; use datasource search to filter by name or description.

📚 Documentation Updates

  • Documentation Structure Update: Documentation pages now have clean, stable URLs and every section has an overview page with card-based navigation; old links and bookmarks keep working via redirects. Search results also show a short description for every page.
  • GCS file upload guide clarified: Updated the "Uploading files to Energyworx" client integration guide — the Python example now passes the project ID to the storage client, and the curl example uploads the object name verbatim (the object name must not be URL-encoded).
  • Rule framework batch tag loading: Added documentation for load_tags_multi_datasource, a rule framework method that retrieves tags for multiple datasources in a single batch call without loading full datasource objects.
  • Data ingestion guide: The data ingestion documentation now describes all five ways to get data into the platform - file upload through the file manager, inbound REST, scheduled REST polling, MODBUS headend, and SOAP messaging - with guidance on choosing between them.
  • Rule code examples: Updated the custom rule documentation examples to use the current ewx-public package (FlowRule and TransformRule), with the legacy imports still noted as supported.
  • Chained flow documentation: The Flow Design guide now documents the bulk chain flow rule and adds a comparison of the chain, bulk chain, and conditional chain flow rules - covering how many datasources each targets, whether they run conditionally, and their decision tree support - so it is clearer when to use each.
  • ewx-public migration guide: Expanded the legacy-to-ewx-public import mapping to cover enums, domain models, utility functions and the testing module, and updated the rule code examples across the docs to use the current ewx-public imports.

🚀 Notable Backend Changes

  • Sign-in no longer re-prompts for consent: Signing in with Google or Microsoft no longer shows the IdP consent/permissions screen on every sign-in. Consent is now requested only the first time (or when a new refresh token is genuinely needed); the platform keeps the upstream refresh token server-side (encrypted) and reuses it on later sign-ins.
  • Latest datasource view fix: Datasources with no channel assigned are now correctly included in the latest datasource view.
  • Datasource update fix: Updating a datasource with no field changes no longer triggers an unnecessary write, preventing a new datasource version from being created and preserving the original creation timestamp.
  • Datasource ID case normalization: Files with datasource IDs in any casing are now correctly matched to existing datasources, preventing duplicate entries or processing failures caused by case mismatches between the submitted ID and the stored ID.
  • Flow-created channels stay linked to their datasource: Data a flow writes (derived channels, annotations) now keeps the datasource's original ID, so it no longer gets split from the source datasource by a casing mismatch.

📡 Integration Component

  • Inbound message tag validation fix: Incoming messages that carry no tags (for example N10 MeasurementSeriesNotification messages) are no longer rejected with the ewx-02: Object missing required field tags validation error; the tags field is now correctly treated as optional and the messages are processed.
  • SFTP no longer re-uploads processed files: The SFTP integration now archives a file once it has been collected and forwarded, so the same file is no longer picked up and re-uploaded on every polling cycle.
  • GLDPM acknowledgement completeness fix: Acknowledgements returned for incoming GLDPM messages now include the mandatory Reason/text element (alongside Reason/code) and the received_MarketDocument.type element, so market parties can submit revised GLDPM messages that were previously blocked.

🛠️ ewx-cli

  • Namespace display names: ewx-cli commands now accept a namespace display name (e.g. --namespace integration/automated_testing.dev) in addition to the underlying namespace ID, resolving the name against the namespaces visible to your authenticated user. When a name is ambiguous, an interactive session prompts you to pick the ID; non-interactive runs error out and list the candidates.
  • Only require relevant permissions: ewx-cli config commands now check only the permissions for the resources you act on (viewer to read, owner to write) instead of requiring every config-management permission, and --no-deps no longer reads or requires permissions for unrelated dependencies.
  • Automatic retry on transient errors: ewx-cli now retries requests that hit transient server-side failures (502/503/504 responses, or a connection reset or timeout before the request reaches the backend) with exponential backoff, so a momentary platform hiccup no longer fails a command outright.
  • Process monitoring config transfer: Process monitoring configurations can now be downloaded and copied between namespaces using ewx-cli, removing the need to recreate them manually in the UI when promoting environments or onboarding new namespaces.

26.07.01

📡 Integration Component

  • Inbound SFTP duplicate delivery fix: Successfully processed files are no longer removed from the Redis deduplication set immediately after archiving. Previously this caused duplicate Pub/Sub deliveries arriving within seconds to attempt to re-download an already-archived file, fail with a "file not found" error, and land in the dead-letter queue. Files now remain in the set for the full one-hour TTL so duplicate deliveries are recognised as already processed and skipped cleanly.

26.07.02

🖥️ UI Improvements

  • The datasource search query and filters are now retained when navigating to a result's Details or Flows and back.

🔐 API & Permissions

  • Channel classifier consistency: Channel classifier attributes now behave consistently across API v1 and v2. The technical name is immutable, classifier ids may contain the '+' character, and the per-datasource channel name is optional.
  • Channel labels: Charts, tables and the channel list now label a channel by its datasource-specific channel name when set, falling back to the classifier display name and then the technical name.
  • Fixed access for users with mixed-case email addresses: Users whose identity provider (e.g. Microsoft Entra) returns their email with capital letters were incorrectly denied access to dashboards and other platform features. Authorization now matches the stored account regardless of email casing.

🚀 Notable Backend Changes

  • Datasource search now correctly returns results when filtering by classifier for newly-added datasources.
  • Scheduled flow triggers can select datasources by query: the flow trigger schedule now accepts a datasource_ids_query (a BigQuery SELECT whose first column is a datasource id) as an alternative to a static datasource_ids list, resolved at execution time so the flow runs on whatever datasources currently match — letting a scheduled flow target a dynamic, self-maintaining set (e.g. every datasource whose name starts with a given prefix) with no id list to maintain.

📡 Integration Component

  • ACK URL lookup fix: Resolved an issue where acknowledgement-specific URLs configured in the message URL map were silently discarded during URL resolution, causing non-GLDPM acknowledgements to fall back to the default URL and be rejected by the counterparty with a version mismatch.

26.07.03

⚙️ Custom Business Logic

  • Rule unit-test helpers restored (standard_test_utils): The ewx_public.testing module now includes the synthetic-timeseries generators — create_monotonic_series, create_sinusoidal_series, create_seasonal_series, create_register_channels and related helpers — available via from ewx_public.testing import standard_test_utils as stu. These restore the standard_test_utils generators that were previously only shipped with the legacy energyworx_public package, so custom-rule unit tests can build test series without it.
  • Fixed a bug that prevented custom rules and scripts from importing the standard-packages library directly.

26.07.04

⚙️ Custom Business Logic

  • Custom rules can be constructed and unit-tested directly (FlowRule): ewx_public.flow_rule.FlowRule now supports direct construction with keyword arguments, and add_tags records tag mutations onto tag_mutations (keyed by datasource id) exactly as the platform does — so custom-rule tests can build a rule and assert on the tags it produced without a mock.
  • RuleTestCase and datasource mocks restored (standard_test_utils): ewx_public.testing.standard_test_utils is now a full drop-in for the legacy std-grid module — adding the RuleTestCase base class, mock_datasource_with_tags, and the remaining channel/timeslice helpers — so existing custom-rule test suites migrate with only the import line changing.
  • Tag.to_dict() / TagProperty.to_dict() restored: Tag and TagProperty in ewx_public can again be serialized back to dictionaries and round-trip through from_dict(), with value_type emitted as a string — letting custom-rule tests assert tag mutations against expected dicts.

🚀 Notable Backend Changes

  • Datasource unit_type backfill fix: The 26.07 BigQuery datasource migration now backfills channels.unit_type on existing datasource version rows (preserving channel order), not only on newly-written rows. Previously the column was added but left empty, which blocked upgrading existing clients.

26.07.05

Platform Bug Fixes

  • API tag writes now reach BigQuery: Fixed an issue where tags created through the API v2 tags endpoint were stored on the datasource but never synced to BigQuery, so they could not be found when querying tag data (for example in analytics or exports). Tags written through the API are now propagated to BigQuery the same way as tags created by flows.