Skip to main content

Release History

VersionDate
2.8.005 December 2025
2.7.124 November 2025
2.7.002 October 2025
2.6.028 August 2025
2.5.009 August 2025
2.4.008 August 2025
2.3.030 June 2025
2.2.005 March 2025
2.1.022 October 2024
2.0.027 October 2022
1.15.028 July 2022
1.14.021 June 2022
1.13.008 March 2022
1.12.020 January 2022
1.11.020 January 2022
1.10.019 January 2022
1.9.017 January 2022
1.8.008 December 2021
1.7.009 November 2021
1.6.025 October 2021
1.5.023 September 2021

[2.8.0]

Breaking Changes

  • Added new required config parameter server.publicAddress which is the URL to EAS, used to configure downstream services that may have to communicate with EAS.
  • The following customer list columns have been removed from the customer_list_column_config and user_customer_list_column_config:
    • LIFE_SUPPORT
    • SENSITIVE_LOAD

New Features

  • Modify GqlHcWorkPackage to return loadType, timePeriodStart, and timePeriodEnd of the work package to allow front-end access.
  • Added GraphQL mutation deleteWorkPackage to allow users to delete their own work packages.
  • Added new fields openDssExporterEnabled and openDssExporterOptions in config.ui config section for enabling and configuring OpenDss exporter in the web UI.
  • Added flaForecastConfig to GqlFeederLoadAnalysisInput so forecast FLA models can be generated. User are limited to setting 1 forecast year only.
  • Modify HostingCapacityWorkPackages table with additional column to allow front end access.
    • feeders - list of feeders for this work package
    • scenarios - list of scenarios for this work package
    • years - list of years for this work package
    • load_type - the load time setting of this work package (fixedTime/TimePeriod/null for feederConfigs)
    • configuration_type - SyfConfig type between ForecastConfig or FeederConfigs
    • time_period_start - start time for TimePeriod work package, null for everything else
    • time_period_end - end time for TimePeriod work package, null for everything else
  • Modify GqlHcWorkPackage to return feeders, scenarios, and years info of the work package.
  • Added config option in AppConfig Ui to hide/show device tree as deviceTreeEnabled.
  • Added config option variantManagementEnabled in AppConfig Ui to enable/disable variant management
  • Added new app_options table to store user customisable app options. These options will include a default value if the user does not wish to override it.
    • Added new graphql queries to support reading and updating app options.
      • getAppOptions - retrieve all app options (if no value exists in DB, will return default value for that option).
      • setAppOption - update an app option (will add/update record in DB and use the new value). Requires APP_OPTIONS:UPDATE permission.
      • clearAppOption - clear an app option (will remove record from DB and fallback to the default value). Requires APP_OPTIONS:UPDATE permission.
    • Added new app option assetNameFormat to allow user to format assets using the mustache template. See https://mustache.github.io/.
      • Supported fields include:
        • assetId
        • voltage
        • circuits
        • lvFeeders
        • substations
        • sites
        • energizingFeeders
        • energizingSubstation
        • assetName
  • Add API support for Variant Management with Powerfactory. See documentation for instructions on how to configure.
  • The following additional columns have been added to the customer_list_colum_config table`:
    • NMI_CLASS,
    • PHONE_NUMBER,
    • MOBILE_NUMBER,
    • TARIFF,
    • SENSITIVITY_CATEGORY,
    • MOVE_IN_DATE,
    • LV_FEEDER,
    • POSTAL_ADDRESS,
    • TNI,
    • DLF.
  • Added api/diagrams/graphql route to proxy diagram symbol GraphQL calls to EWB via EAS (requires EWB_DIAGRAM:READ).
  • Add UI feature flag ui.layersControlMapPluginEnabled: Boolean to control enabling the Layers Control plugin in the frontend map. Default value is false.

Enhancements

  • Migrate old HostingCapacityWorkpackage entries to support front end queries
  • Added the migration script to populate the customer_list_column_config table with all the available customer list columns.

Fixes

  • H2 Database driver is now included the EAS JAR.
  • Updated the GraphQL input field HcGeneratorConfig.HcModelConfig.useSpanLevelThreshold to be nullable. This removes the requirement for it to always be provided in a HcModelConfig.

Notes

  • Updated to temporal-platform-definitions v0.5.0

[2.7.1]

Fixes

  • Updated the GraphQL input field HcGeneratorConfig.HcModelConfig.useSpanLevelThreshold to be nullable. This removes the requirement for it to always be provided in a HcModelConfig.

[2.7.0]

Breaking Changes

  • Renamed an existing graphQL query getUserCustomerListColumnConfig to getUserSavedCustomerListColumnConfig.
  • Updated GqlCustomerListColumnConfig.columnName data type from string to enum.
  • GraphQL query pagedOpenDssModels now returns generationSpec as stringified JSON rather than a GraphQL object.

New Features

  • Added GraphQL query getUserPermittedCustomerListColumnConfig to return all permitted customer list columns for the requesting user.
  • Added GraphQL query getAllWorkPackagesAuthors to return all users that have created work packages.
  • Added /internal/health/ready and /internal/health/live for readiness and liveness probes in Kubernetes
  • Added support passing inverterControlConfig to ModelConfig when running work packages to configure the modelling of generation equipment as PVSystems controlled by InvControls rather than Generators (Advanced PV).

Enhancements

  • Default external role TIMESERIES_MODELLER now includes permissions to perform calibration runs.
  • Extended the getWorkPackages GraphQL query with a new searchText filter, allowing flexible search by UUID (exact match), name, and email (fuzzy match).

Fixes

  • Fixed network ingestor workflow so it does not restart EWB on completion if the network model is locked.
  • Fixed pagedOpenDssModels error due to incompatible generationSpec in previously generated models.
  • Fixed hosting capacity work package diff related query where duplicate keys can occur when there are multiple years worth of data in a result package
  • Fixed hosting capacity work package diff related query where errors gets swallow up by Exposed's transaction error.
  • Fix a check for empty string being passed through Generated Diff query.

Notes

  • Updated to temporal-platform-definitions 0.4.0, com.zepben.commons and com.zepben.ewb v1.1.0.

[2.6.0]

Breaking Changes

  • Update to zepben commons 1.0.0 and EWB sdk 1.0.0. This will largely be incompatible with pre-1.0 versions.
  • Renamed an existing config option customerListTableVisible to customerListDrawerEnabled.

New Features

  • Support node level results requests for hosting capacity work packages
  • Support HC work packages configuring combineCommonImpedances, simplifyNetwork, and collapseNegligibleImpedances
  • Added a permission based access control for viewing customer sensitive information in the customer list table in the UI.
    • A new GraphQL query getCustomerList added to read all the customer related information based on the assigned permissions:
      • CUSTOMER_PII:READ
      • CUSTOMER_NON_PII:READ.
    • A new GraphQL query downloadCustomerDetailsAsCsv added to download all the customer related information based on the assigned permissions:
      • CUSTOMER_PII:EXPORT
      • CUSTOMER_NON_PII:EXPORT.
    • A log containing the person requesting the customer information, the NMI's accessed and the date and time of access will be recorded.

Enhancements

  • Sincal exporter APIs now support a Forecast config to allow modelling of future network
  • Added new variable to hosting capacity configuration
    • useSpanLevelThreshold - use designRating for current comparison in this study.
    • ratingThreshold - It will consider AcLineSegments with current rating difference within a threshold collapsable.
    • simplifyPLSIThreshold - When provided, per length sequence impedance will be normalized between connected AcLineSegment when difference of their values are within this threshold.
    • emergAmpScaling - emergency amp scaling factor used in creating LineCode.
  • metrics.hierarchy_name is now nullable - schema upgrades will be applied at startup.

Fixes

  • Fixed bug that would result in null network model source dates if any of the job sources used to generate the model had a null source time.
  • Disable the option to request for a basic report in feeder load analysis study.

Notes

  • Removed hardcoded root logging level.

[2.5.0]

Breaking Changes

  • None.

New Features

  • None.

Enhancements

  • None.

Fixes

  • None.

Notes

  • None

[2.4.0]

Breaking Changes

  • FixedTimeLoadOverride now takes in lists of doubles just like TimePeriodLoadOverride
  • LoadTime and LocalLoadTime variable fetchLoadTime has been renamed to loadTime for ease of use and consistency between python and non-python part.
  • Ingestor service now uses the common callback endpoint /callback rather than /ingestor-callback.
  • Ingestor service configuration has been updated to include support for Temporal workflows. Existing configurations must be updated to specify the runtime type, "type": "container", to continue working. See config.md for full details.
  • Modification to ModelConfig to allow more customization for model generation
    • vMinPu and vMaxPu have been removed and replaced with loadVMinPu/loadVMaxPu for loads and separate genVMinPu/genVMaxPu for generators.
    • Added support for ctPrimScalingFactor which is required when calculating new ctPrim value when feeder proxy loads are not in use.

New Features

  • Ingestor service now supports running via a Temporal workflow.
  • Added GraphQL query getUserCustomerListColumnConfig and mutation saveUserCustomerListColumnConfig to support user-specific column configurations. User can now manage a unique column configuration tied to their profile.
  • Added the following new config options
    • customerListTableVisible to display of the customer list table in the UI.
    • networkMapSearch2Enabled to enable version 2 of the network map search component.
    • sincalExporterTimeseriesEnabled to enable timeseries modelling for the Sincal Exporter
    • sincalExporterForecastEnabled to enable forecast modelling for the Sincal Exporter
  • Added feeders argument to the runCalibration GraphQL mutation. This optional argument allows running a model calibration on a subset of feeders in the model.
  • Added support for passing a CalibrationWorkPackageConfig object to the CalibrationConfig in the EAS config file. This allows a custom scenario and GeneratorConfig to used for calibration work packages.

Enhancements

  • Added common http endpoint (/callback) for callbacks. All services will be migrated to use this endpoint eventually.
  • Upgrade ewb-grpc to 0.36.0 to provide mapbox vector tile proto.
  • Add generatorConfig parameter to the runCalibration GraphQL mutation.

Fixes

  • Wrap Kotlin exposed database query in transaction block to fix no transaction in context errors.
  • Fix issue where EAS will hang when fetching JWKS from itself in single CPU environments
  • Fix server shutdown hook not being registered correctly leading to unclean shutdowns
  • Fixed bug that would cause power factory models to never reach the completed status even though they were available for download.
  • Fixed issue where EAS was not recording the complete CalibrationWorkPackageConfig to the EAS database after being merged with user supplied configuration.

Notes

  • Support up to evolve-sdk 1.0.0
  • Support up to temporal-platform-definitions 0.2.0
  • Support up to test-utils 2.1.0
  • Support up to evolve-conn 0.12.1
  • Updated to ewb-grpc 1.0.0
  • Updated to Ktor 3.0.3

[2.3.0]

Breaking Changes

  • The metrics database that EAS connects to must now be hosted on Postgres instead of loaded from a SQLite file.
    • EAS now uses Liquibase to create and update the schema of the metrics database, similar to how it does for the main database.
  • airflow config block has been removed. To continue using airflow for administering EWB, provide airflow configuration to the ewbAdmin object. See config.md for details.
  • The GraphQL mutation executeIngestor argument runConfig now takes an object of key/value pairs instead of the previous stringified JSON. It is also now optional.
  • When requesting the HcWorkPackage.status GraphQL field, it will now report 100 if the work package is found it the hosting capacity services' "completed" list rather than returning an error.
  • Update Hosting capacity configuration to support hosting capacity package with distinct study settings for each individual feeder.
    • Added new configuration class SyfConfig to group variables moved out of WorkPackageRequest and WorkPackageConfig.
      • ForecastConfig - Functionally similar to old set up where it holds a list of feeders, years, scenarios and load time.
      • FeederConfigs - Holds a list of individual feeder settings so each feeder can run a hosting capacity study with distinct settings.
    • Added new configuration class LoadTime and LocalLoadTime which holds load specific variables.
      • FixedTime/LocalFixedTime - Fixed time setting for the study, includes an optional map of FixedTimeLoadOverrides.
      • TimePeriod/LocalTimePeriod - Time period setting for the study, includes an optional map of TimePEriodLoadOverrides.
    • Major refactoring of configuration.
      • WorkPackageRequest
        • Moved feeders, years, scenarios, timePeriod and fixedTime into SyfConfig and LocalLoadTime.
      • WorkPackageConfig
        • Moved feeders, years, scenarios, timePeriod and fixedTime into SyfConfig and LocalLoadTime.
      • CommonConfig
        • Moved timePeriod and fixedTime into LoadTime.
      • ModelConfig
        • Moved fixedTimeLoadOverride and timePeriodLoadOverride into LoadTime and LocalLoadTime

New Features

  • Added support for reading from a metrics database served on Postgres.
  • Liquibase is used to update the metrics schema to the latest supported version, similar to how it does for the main database.
  • Added support for switching EWB network databases in a Kubernetes environment. See ewbAdmin in config.md for full configuration details.
  • Support for uploading hosting capacity unprocessed input database (sqlite) to a cloud file storage.
  • Added new feature flag hostingCapacityConfigurationEnabled in config.ui config section for enabling the Hosting Capacity admin page.
  • For the runHostingCapacityWorkPackage mutation, added support for two additional classes of intervention:
    • Added ability to configure phase proportions for phase rebalance interventions via input.intervention.phaseRebalanceProportions.
    • Added ability to configure DVMS via input.intervention.dvms.
  • Intervention work packages record their base work package as the parent.
  • Added new GraphQl query to fetch all or specific network_performance diffs
    • getProcessedDiffs retrieves all diffs base on filter criteria
    • getProcessDiff retrieves ProcessedDiff base on diffId
    • editDiffPackage edit the meta property of generated diff
  • New isCompleted field added to HcWorkPackage object returned by GraphQL. This is true if the work package has been recently completed (regardless of failure status). Note: The hosting capacity service does not store completion status indefinitely, this field will be false if the completion status is not found.
  • Support for running hosting capacity calibration workflow and querying the run info.
  • Added new GraphQL call getWorkPackageCostEstimation to calculate an estimated cost of a specific hosting capacity work package.
  • Added new runFeederLoadAnalysis GQL call to generate a feeder load analysis to be uploaded to the designated S3 bucket.
  • Added new getFeederLoadAnalysisReportStatus GQL call to retrieve the status of a previously ran feeder load analysis job.
  • Support for running hosting capacity calibration workflow and querying the run info. The new GraphQl queries are:
    • runCalibration initiate a calibration run across the whole network.
    • getCalibrationRun retrieve information for a calibration run.
    • listCalibrationRuns retrieve a list of all calibration runs initiated by EAS, Optional filtering available.
    • getCalibrationSets retrieve a list of all completed calibration sets initiated by EAS.
    • getTransformerTapSettings retrieve the distribution transformer settings produced by a calibration run.
  • Added new config option connectedEquipmentNavigationEnabled to allow navigation between connected equipments.
  • Added new http endpoint api/customers/graphql to proxy GraphQL requests to the EWB query customer service. Please refer permissions.md for required permissions.
  • Added hosting capacity load override to GqlHcModelConfig so specified meters can have their load data replaced by set profiles.
    • FixedTimeLoadOverride - Override single time point load data for specified meters.
    • TimePeriodLoadOverride - Override load data with supplied profile for specified meters.
  • Support for running opendss export and querying the run info. The new GraphQl queries are:
    • createOpenDssModel initiate an opendss export run.
    • pagedOpenDssModels retrieves paginated information of 1 or more opendss export run.
    • deleteOpenDssModel deletes the opendss export run by passing the run id.

Enhancements

  • Logging for permission checks.
  • Configure Ktor with explicit Cache-Control headers to cache static assets and to not cache anything else
  • Log the creation of access tokens.
  • Added names to database connection pools.
  • executeIngestor now passes through the runConfig to the ingestor allowing users to override ingestor config
  • If no input.name is provided to the createPowerFactoryModel GraphQl mutation, once the model generation is complete the name of this model in the EAS database will be updated with the name generated by the PowerFactory service.
  • Add X-Content-Type-Options response header to all responses.
  • Added call back for feeder load analysis runs.
  • Added maxConnectionLifetimeMs field to database configuration blocks.

Fixes

  • Updated getWorkPackages and pagedStudies queries to return only the creators under the allUsers field.
  • Updated logic to support nullable source time in metrics job sources.

Notes

  • Update hosting-capacity-utils to 0.6.0
  • Reduced the default max connection lifetime for database connections from 5 minutes to 4 minutes.

[v2.2.0]

Breaking Changes

  • Updated configuration options for Sincal Model Exporter. Configuration files and input databases are no longer configured directly in the EAS config file and instead are stored in the EAS Database and updated via the updateSincalModelConfigFilePath GraphQl mutation. The cloud based storage locations for the input and output files configured via StorageBackend objects, See config.md for full details.
  • Updated the configuration options for the Ingestor Service. additionalConfigEnvPrefix is a new required field that specifies the prefix to use when passing configuration items to the ingestor as environment variables.

New Features

  • Added getAllExternalRoles GraphQl query to fetch all external roles from the database.

  • Added getMachineTokens GraphQL query to retrieve all users attached to machine-to-machine API keys.

  • Added getNetworkModels GraphQL query to retrieve available Network Model databases

  • Added new feature flag networkStateControlEnabled in config.ui config section for allowing users to toggle viewing normal and current network state in the map.

  • Updated EAS generated Personal Access Tokens to allow use with the EWB server and SDK directly. To enable this, the audience of the configured EWB server is added to all personal access tokens and the following EAS permissions will map to EWB roles:

    • EWB:READ -> read:ewb
    • EWB:UPDATE -> write:ewb
    • EWB_CUSTOMER:READ -> read:customer
    • EWB_DIAGRAM:READ -> read:diagram

    If a token inherits any of these EAS permissions at the time of creation the corresponding EWB role will also be added to the token's roles claim. (Note: This permission check only happens at token creation time and cannot be revoked after the token is created).

  • Added default EAS External Roles EWB_CUSTOMER_VIEWER and EWB_DIAGRAM_VIEWER that map to EWB roles read:customer and read:diagram respectively. Please refer permissions.md for the full details of the new roles.

  • Added default EAS External Role EWB_UPDATER that maps to EWB role write:ewb. Please refer permissions.md for the full details of the new role.

  • Added inputDatabase option to the hostingCapacity configuration block to support connecting to a hosting capacity input database. See config.md for full details.

  • Added getScenarioConfigurations GraphQl query to fetch scenario configurations from the hosting capacity input database if configured.

  • Added the ability to track network ingestor runs triggered via EAS.

    • Added new database table ingestor_runs to record network ingestor runs triggered via EAS.
    • Added route /ingestor-callback to receive status callbacks from network ingestor containers.
    • Added easUrl field to ingestor runtime config to manually specify the EAS domain to be used by ingestor containers when making status callbacks.
  • Added two new map tile routes: /normal/tile/{z}/{x}/{y} and /current/tile/{z}/{x}/{y}. These routes return tiles from EWB's new v2 map tile routes by the same names.

    • Requires an EWB version with the v2 map tile routes.
    • See EWB documentation for what's new in the v2 tile routes.
    • The existing /tile/{z}/{x}/{y} route is now marked as Deprecated, but still functions as before.
  • Added hosting capacity default load variables to GqlHcModelConfig so a hosting capacity with default load profile can be generated.

    • defaultLoadWatts
    • defaultGenWatts
    • defaultLoadVar
    • defaultGenVar
  • Support intervention work packages via the intervention field in WorkPackageInput.

  • Added support for cloud based config and input files for the Sincal Model Exporter.

  • Added support for uploading sincal config and input files to a cloud based storage backend.

  • Added config option primaryEwbService to specify a EWB service running in a supported container environment(See config.md for full list of supported options).

  • Added support for restarting the primaryEwbService container following a successful network ingestion run. This functionality can be enabled with the ingestor.restartEwbOnCompletion EAS config option.

Enhancements

  • Add new config item to allow certificate verification to be enabled/disabled when fetching JWKS keys. Certificate verification enabled by default.
  • Add dependency to explicitly use Apache HttpClient 5 for Docker Java client. This removes a warning that appeared on startup.
  • Better error message when jwks.issuer is misconfigured.
  • Explicit auth support for sincalModel.ewbAuthClient config.

Fixes

  • Fixed wrong ownership on /config directory in container image.
  • Updated error messages for machine-to-machine and user token creation errors.
  • Added missing routing for the profile path.

Notes

  • Enabled JWT logging.
  • Bump to using Azure BOM 1.2.30
  • Upgrade to Ktor 2.3.13
  • Update hosting-capacity-utils to 0.5.0
  • Reduced the expiry time of Sincal and Power Factory, model download links from 5 minutes to 30 seconds\n\n---\n

[v2.1.0]

Breaking Changes

  • Updated the hosting capacity service logic to import the work package configuration from the hosting-capacity-utils library instead of duplicating all the required classes.

  • mapLayerColors has been superseded by defaultMapLayerColors, themes, and defaultTheme. If you previously specified layer colors you will have to update your configuration to match the new options. See config.md and sample-config.md for information on the new settings and examples.

  • Coloring lines by voltage now requires specifying a range of voltages. Previous voltageColors configuration is not compatible with the new required format and will need to be updated.

  • API calls will now return Bad Request (502) instead of InternalServerError (500) when EWB cannot be contacted.

  • Updated GqlWorkPackageInput to have its 'modelConfig' property to be non-nullable.

  • Updated ModelConfig to include fixed time and time period.

  • Updated to evolve-super-pom version 0.35.2.

  • Updated H2 database engine from 1.4.200 to 2.2.224. See https://www.h2database.com/html/migration-to-v2.html for more details.

  • The following columns in the schema have been converted from TEXT to CLOB:

    • net_models.generation_spec (Now named power_factory_models.generation_spec; see other breaking changes)
    • net_model_templates.generation_spec (Now named power_factory_model_templates.generation_spec; see other breaking changes)
    • result_sections.description
    • studies.description
    • studies.tags
  • Upgrade Jetbrains exposed from 0.38.2 to 0.48.2. See https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md for more details.

  • Configuration for the EWB auth has changed:

    • To use a specific issuer, provide method, issuer, audience, clientID, and clientSecret parameters. Make sure audience and clientID match the values expected by EWB. NOTE if using Managed Identity, skip clientSecret, and only provide clientID.
  • Configuration for EAS auth has changed (consult the docs if needed):

    • For EntraID and Auth0, provide the following parameters:
      • method ("entraid" or "auth0")
      • trustedIssuers
      • audience
  • Removed Fault Location module FaultLocationService.

  • EAS is now exposing the same auth config endpoint to clients as EWB (Note: only the first configured trustedIssuer will be returned):

    • authType
    • issuer
    • audience This is a breaking change for the clients expecting tokenPath, issuerDomain or configType.
  • EAS now uses a Role based permissions system:

    • Users requests now must provide External Roles in their access token that inherit the permissions required to perform the request.
    • Existing REST API endpoints have been updated with new permission requirements, see docs for complete list.
    • Existing GraphQL API queries have been updated with new permission requirements, see docs for complete list.
    • Auth configuration is now required for EAS to start.
    • For Auth type None, defaultUserPermissions has been removed and replaced by defaultUserRoles. These roles must exist and have the relevant permissions in the EAS database. The default roles and permissions are populated when the EAS database is initialised by updateSchemaOnStart (see docs for a complete list of default roles).
    • Auth type None no longer provides access by default. If no defaultUserRoles are configured, only requests that don't require any permissions will succeed.
    • Auth type AUTH0, ENTRAID, no longer have permissions option.
    • Default External Roles:
      • SUPER_ADMIN, EWB_ADMIN, TIMESERIES_MODELLER, MODELLER, DEVELOPER, MAP_VIEWER, METRICS_VIEWER, INTEGRATION_ADMIN.
  • Removed /api/user/createUser and /api/user/queryUser http endpoints.

  • Removed Evolve Gateway DER Service functionality. evolveGateway configuration options and DER related http endpoints have been removed, including /api/config/der, api/der/tile/{z}/{x}/{y}, api/der/asset/{nmi}/ and api/der/logo/{aggregatorName}.

  • Renamed all instances of "net model" to "power factory model":

    • NetModelPowerFactoryModel
    • netModelpowerFactoryModel
    • net-modelpower-factory-model
    • net_modelpower_factory_model
    • NET_MODELPOWER_FACTORY_MODEL
    • netmodelpowerfactorymodel

    This was done to reduce confusion with the Sincal Model Service.

  • Removed auth.issuer configuration option. Replaced by auth.trustedIssuers that accepts a list of issuer domains.

  • Updated to ewb-conn-jvm version 0.11.0 to support trusting tokens from multiple issuers.

  • Updated to evolve-sdk-jvm version 0.23.0 to support new version of ewb-conn-jvm

  • In a Power Factory Model Export, the LoadConfig value is now set and passed on to the Power Factory Model Service (and on to the exporter).

  • Updated hostingCapacity configuration options. This now accepts:

    • service - Hosting Capacity service connection information (what was previously configured directly in hostingCapacity).
    • resultsDatabase - Hosting Capacity Results Database connection information.
  • Renamed defaultUserId to defaultUsername.

New Features

  • Configuring voltage colors now supports a range of voltages for a color. If a conductor has a color that doesn't match any range a default can be specified through the missingVoltage option.
  • Added defaultMapLayerColors which allows you to specify a set of default colors to be used on the map.
  • Added support for themes through the ui.themes configuration. Each theme is a mapbox theme and can have its own set of color definitions through the layerColors option. See config.md for details on how to configure themes.
  • Added support for specifying a default map theme with ui.defaultTheme
  • Added support for specifying colors for partially off supply lines through the partiallyOffSupply option.
  • Added basic hosting capacity functionality. At this stage only one graphql mutation exists with the purpose of running hosting capacity work packages.
  • Added the functionality to specify spreadMaxDemand as part of a NetModelGenerationSpec.
  • Added the functionality to specify whether transmission network should be included as part of a NetModelGenerationSpec.
  • Filename from User input is pass on for power factory model generation.
  • Hosting capacity work package run request now supports more configuration options.
  • Added functionality to cancel hosting capacity work packages.
  • Added functionality to request progress of currently running work packages.
  • Added 'calibration' flag to ModelConfig.
  • Added new fields to GqlHcModelConfig that are passed through to ModelConfig. Consult opendss-model-processor docs for details.
    • pFactorBaseExports
    • pFactorForecastPv
    • pFactorBaseImports
    • fixSinglePhaseLoads
    • maxSinglePhaseLoad
    • fixOverloadingConsumers
    • maxLoadTxRatio
    • maxGenTxRatio
    • fixUndersizedServiceLines
    • maxLoadLineRatio
  • Add support for logging in with Microsoft EntraID
  • Add support for M2M auth to EWB with Microsoft EntraID
  • Added the functionality to control the network-model loaded by EWB. This can be used via the following GraphQL mutations.
    • switchNetworkModelDatabase Restart EWB with the network-model of the specified date. Following the restart EWB will remain "locked" to the specified date.
    • lockNetworkModelDatabase Locks the EWB network-model date to the currently loaded model. If EWB restarts for any reason, it will continue to reload the "locked" date instead of the latest available.
    • unlockNetworkModelDatabase On next restart EWB will load the latest network-model available in the data path instead of the date it was previously "locked" to.
  • Added Admin page routes
  • Added optional connection to a metrics database. This is configurable through the metricsDatabase option.
  • Added a /metrics route, which serves the frontend static assets. The frontend can then load a new Metrics page at this route.
  • Added collapseLvNetworks field to ModelConfig
  • Added feederScenarioAllocationStrategy field to ModelConfig
  • Added includeEnergyConsumerMeterGroup field to ModelConfig
  • Added GraphQL queries and types for the metrics database.
  • EAS now uses a Role based permissions system.
  • Added permissions field to the response of the currentUser GraphQL query. This field contains a complete list of permissions inherited by the External Roles provided in the access token used to make the request (or defaultUserPermissions if None auth is configured).
  • Added GraphQL queries and mutations for Sincal Model management.
    • Added routes for downloading Sincal models and logs.
  • Added support for accepting client tokens from multiple issuers simultaneously. Multiple issuers can now be provided via the new configuration option auth.trustedIssuers. Note: Only the first issuer is returned to clients via /config/auth.
  • Added new feature flags sincalExporterEnabled and powerFactoryExporterEnabled in config.ui section for PowerFactory/Sincal Exporters. Note: When enabling the flag, they require relevant powerFactoryExporterOptions or sincalExporterOptions.
  • Added optional connection to a Hosting Capacity Results Database. This is configurable through the hostingCapacity.resultsDatabase option.
  • Added the following GraphQL queries for retrieving information from the Hosting Capacity Results Database
    • getOpportunity - Retrieve an Opportunity by ID.
    • getOpportunityLocations - Retrieve all opportunity locations available for a specific year. (opportunity locations for all years if a year is not specified).
    • getOpportunitiesForEquipment - Retrieve Opportunities attached to the supplied conducting equipment mRID.
    • getOpportunities - Retrieve all Opportunities available for a specific year (Opportunities for all years if a year is not specified).
    • getDurationCurves - Retrieve duration curves for a single piece of equipment in a specific SYF.
  • Added workPackageName parameter to runWorkPackage which represents the name of the work package. This parameter is now mandatory.
  • Updated the runHostingCapacityWorkPackage to accept the workPackageName field as a parameter for storing the work package name and entries in the database.
  • Hosting capacity work packages created via EAS are now recorded in the hosting_capacity_work_packages database table.
  • Added new getWorkPackages GraphQL query to support:
    • Pagination.
    • Searching by id, name, and createdBy.
    • Added support for partial matching on the name
    • Returning work package details such as:
    • status: Progress percentage if in progress.
    • description, created_at, updated_at, parent_id.
    • Added getWorkPackageById GraphQL query to indicate work package progress with all other information.
  • Added the following configuration option to generate jwks keys for Personal Access Tokens for EAS:
    • jwks - Configuration for generating jwks keys for Personal Access Tokens.
      • currentUserSigningKey - The key name used to sign the Personal Access Tokens for users.
      • currentMachineSigningKey - The key name used to sign the Personal Access Tokens for machines.
      • issuer - The url of the issuer for the Personal Access Tokens.
  • EAS now provides the OpenID configuration endpoint at /.well-known/openid-configuration and JWKS endpoint at /.well-known/jwksfor verifying Personal Access Tokens issued by EAS.
  • Added functionality to allow EAS to trigger container based network ingestion tasks to generate new EWB Network Models. The container service to use is configured by providing a Ingestor config object (see Ingestor Service Config in config.md for full details). The ingestion tasks themselves can be triggered by the new GraphQL mutation executeIngestor.
  • Added GraphQl mutation executeIngestor to initiate a new network ingestion. Calling this mutation requires the permission INGESTOR:RUN.
  • Added getWorkPackageTree GraphQL query that takes a work package id and returns its ancestors and immediate children.
  • Added createUserApiKey GraphQL query to create user Personal Access Tokens/API keys:
    • createUserApiKey - Creates a new user Personal Access Token for the user making the request and takes the following parameters:
      • roles - Array of roles to delegate to the new Personal Access Token. Must be a subset of the user's existing roles.
      • tokenName - Included in the newly created token as the tkn claim. This cannot be blank and can only include lowercase characters, numbers, dashes -, and underscores _, with a max length of 32 characters.
  • Added support for passing a seed in the ModelConfig for a work package.
  • Added support for "Public Access" mode to allow limited access to unauthenticated users alongside regular authenticated users. This can be enabled, and permissions configured, by adding a publicAccess object(See config.md for full details.) to the auth config block. Note: Regardless of the permissions granted to unauthenticated users, unauthenticated requests for map tiles will always be directed to the EWB public tile endpoint /ewb/network/graphics/api/v1/mvt/geo-view/public/{x}/{y}/{z} instead of the regular tile endpoint /ewb/network/graphics/api/v1/mvt/geo-view/{x}/{y}/{z}.
  • Added the GraphQL query getPublicGeoViewConfig to expose the GeoViewConfig used to configure the EWB public map tile endpoint. The returned GeoViewConfig Json object is encoded to as string.
  • Added new GraphQL mutations to generate diffs between hosting capacity work package results
    • generateNetworkPerformanceDiff - Generate diff for data from network_performance_metrics table and insert them into network_performance_metrics_diff
    • generateEnhancedNetworkPerformanceDiff - Generate diff for data from network_performance_metrics_enhanced table and insert them into network_performance_metrics_enhanced_diff
  • Added createMachineApiKey GraphQL query to create machine Personal Access Tokens/API keys:
    • createMachineApiKey - Creates a new machine Personal Access Token for the user making the request and takes the following parameters:
      • roles - Can be any external role unlike createUserApiKey which takes a subset of the user's external roles.
      • tokenName - Included in the newly created token as the tkn claim. This cannot be blank and can only include lowercase characters, numbers, dashes -, and underscores _, with a max length of 32 characters.
  • Added editWorkPackage GraphQL mutation to edit work package name and description. Calling this mutation requires the permission HC_WORK_PACKAGE:UPDATE

Enhancements

  • Updated vulnerable dependencies to latest version (H2, Postgres, Liquibase, Jackson, SnakeYAML)
  • Added config option in AppConfig Ui to enable/disable work package browser option as workPackageBrowserEnabled
  • Better error messages when attempting to update/delete PowerFactory/Sincal models/templates/presets as someone who isn't the owner
  • Migrate eas to new config pattern using kotlinx.serialization for deserializing the json file

Fixes

  • Errors are now returned to the client for hosting capacity calls.
  • Upgraded ktor to fix hanging request issue
  • Fixed execution order of SQL migration scripts
  • Updated default H2 database connection string to include DATABASE_TO_LOWER=TRUE.
  • Fixed issues caused by incorrect method of getting username from Entra ID JWT.
  • Fixed issue where boolean is returned instead of ID of deleted template for deletePowerFactoryModelTemplate mutation.
    • An error is now returned in the GraphQL response for this mutation if the current user is not the owner of the template.
  • Make WorkPackagesProgress serialisable so it can be returned from the getWorkPackageProgress endpoint

Notes

  • The REST endpoint /api/map/symbol/{symbolPath...} does not require EWB:READ permission. Its use only requires an authenticated user or that "Public Access" is enabled.\n\n---\n

[v2.0.0]

Breaking Changes
  • Removed support for self auth.
New Features
  • Added functionality to create and manage power-factory-models.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.15.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.14.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • Fix bug where studies and faults published by no-auth users are filtered out of queries
Notes
  • None.

[v1.13.0]

Breaking Changes
  • Updated to find the relocated connection point identifier. You will need to use a EWB server running a database generated from an updated migrator for this to work.
New Features
  • The EWB connection point identified can be specified via the config file via the ewb.connectionPointIdentifier setting.
Enhancements
  • None.
Fixes
  • Made less cryptic error messages for malformed sealed object configurations (specifically "auth" in config.json).
Notes
  • None.

[v1.12.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.11.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.10.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.9.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.8.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.7.0]

Breaking Changes
  • None.
New Features
  • None.
Enhancements
  • None.
Fixes
  • None.
Notes
  • None.

[v1.6.0]

Breaking Changes
  • None
New Features
  • None
Enhancements
  • None
Fixes
  • None
Notes
  • None

[v1.5.0]

Breaking Changes
  • None
New Features
  • None
Enhancements
  • None
Fixes
  • None
Notes
  • None

Breaking Changes

  • The metrics database that EAS connects to must now be hosted on Postgres instead of loaded from a SQLite file.
    • EAS now uses Liquibase to create and update the schema of the metrics database, similar to how it does for the main database.
  • airflow config block has been removed. To continue using airflow for administering EWB, provide airflow configuration to the ewbAdmin object. See config.md for details.
  • The GraphQL mutation executeIngestor argument runConfig now takes an object of key/value pairs instead of the previous stringified JSON. It is also now optional.
  • When requesting the HcWorkPackage.status GraphQL field, it will now report 100 if the work package is found it the hosting capacity services' "completed" list rather than returning an error.
  • Update Hosting capacity configuration to support hosting capacity package with distinct study settings for each individual feeder.
    • Added new configuration class SyfConfig to group variables moved out of WorkPackageRequest and WorkPackageConfig.
      • ForecastConfig - Functionally similar to old set up where it holds a list of feeders, years, scenarios and load time.
      • FeederConfigs - Holds a list of individual feeder settings so each feeder can run a hosting capacity study with distinct settings.
    • Added new configuration class LoadTime and LocalLoadTime which holds load specific variables.
      • FixedTime/LocalFixedTime - Fixed time setting for the study, includes an optional map of FixedTimeLoadOverrides.
      • TimePeriod/LocalTimePeriod - Time period setting for the study, includes an optional map of TimePEriodLoadOverrides.
    • Major refactoring of configuration.
      • WorkPackageRequest
        • Moved feeders, years, scenarios, timePeriod and fixedTime into SyfConfig and LocalLoadTime.
      • WorkPackageConfig
        • Moved feeders, years, scenarios, timePeriod and fixedTime into SyfConfig and LocalLoadTime.
      • CommonConfig
        • Moved timePeriod and fixedTime into LoadTime.
      • ModelConfig
        • Moved fixedTimeLoadOverride and timePeriodLoadOverride into LoadTime and LocalLoadTime

New Features

  • Added support for reading from a metrics database served on Postgres.
  • Liquibase is used to update the metrics schema to the latest supported version, similar to how it does for the main database.
  • Added support for switching EWB network databases in a Kubernetes environment. See ewbAdmin in config.md for full configuration details.
  • Support for uploading hosting capacity unprocessed input database (sqlite) to a cloud file storage.
  • Added new feature flag hostingCapacityConfigurationEnabled in config.ui config section for enabling the Hosting Capacity admin page.
  • For the runHostingCapacityWorkPackage mutation, added support for two additional classes of intervention:
    • Added ability to configure phase proportions for phase rebalance interventions via input.intervention.phaseRebalanceProportions.
    • Added ability to configure DVMS via input.intervention.dvms.
  • Intervention work packages record their base work package as the parent.
  • Added new GraphQl query to fetch all or specific network_performance diffs
    • getProcessedDiffs retrieves all diffs base on filter criteria
    • getProcessDiff retrieves ProcessedDiff base on diffId
    • editDiffPackage edit the meta property of generated diff
  • New isCompleted field added to HcWorkPackage object returned by GraphQL. This is true if the work package has been recently completed (regardless of failure status). Note: The hosting capacity service does not store completion status indefinitely, this field will be false if the completion status is not found.
  • Support for running hosting capacity calibration workflow and querying the run info.
  • Added new GraphQL call getWorkPackageCostEstimation to calculate an estimated cost of a specific hosting capacity work package.
  • Added new runFeederLoadAnalysis GQL call to generate a feeder load analysis to be uploaded to the designated S3 bucket.
  • Added new getFeederLoadAnalysisReportStatus GQL call to retrieve the status of a previously ran feeder load analysis job.
  • Support for running hosting capacity calibration workflow and querying the run info. The new GraphQl queries are:
    • runCalibration initiate a calibration run across the whole network.
    • getCalibrationRun retrieve information for a calibration run.
    • listCalibrationRuns retrieve a list of all calibration runs initiated by EAS, Optional filtering available.
    • getCalibrationSets retrieve a list of all completed calibration sets initiated by EAS.
    • getTransformerTapSettings retrieve the distribution transformer settings produced by a calibration run.
  • Added new config option connectedEquipmentNavigationEnabled to allow navigation between connected equipments.
  • Added new http endpoint api/customers/graphql to proxy GraphQL requests to the EWB query customer service. Please refer permissions.md for required permissions.
  • Added hosting capacity load override to GqlHcModelConfig so specified meters can have their load data replaced by set profiles.
    • FixedTimeLoadOverride - Override single time point load data for specified meters.
    • TimePeriodLoadOverride - Override load data with supplied profile for specified meters.
  • Support for running opendss export and querying the run info. The new GraphQl queries are:
    • createOpenDssModel initiate an opendss export run.
    • pagedOpenDssModels retrieves paginated information of 1 or more opendss export run.
    • deleteOpenDssModel deletes the opendss export run by passing the run id.

Enhancements

  • Logging for permission checks.
  • Configure Ktor with explicit Cache-Control headers to cache static assets and to not cache anything else
  • Log the creation of access tokens.
  • Added names to database connection pools.
  • executeIngestor now passes through the runConfig to the ingestor allowing users to override ingestor config
  • If no input.name is provided to the createPowerFactoryModel GraphQl mutation, once the model generation is complete the name of this model in the EAS database will be updated with the name generated by the PowerFactory service.
  • Add X-Content-Type-Options response header to all responses.
  • Added call back for feeder load analysis runs.
  • Added maxConnectionLifetimeMs field to database configuration blocks.

Fixes

  • Updated getWorkPackages and pagedStudies queries to return only the creators under the allUsers field.
  • Updated logic to support nullable source time in metrics job sources.

Notes

  • Update hosting-capacity-utils to 0.6.0
  • Reduced the default max connection lifetime for database connections from 5 minutes to 4 minutes.\n\n---\n

Breaking Changes

  • FixedTimeLoadOverride now takes in lists of doubles just like TimePeriodLoadOverride
  • LoadTime and LocalLoadTime variable fetchLoadTime has been renamed to loadTime for ease of use and consistency between python and non-python part.
  • Ingestor service now uses the common callback endpoint /callback rather than /ingestor-callback.
  • Ingestor service configuration has been updated to include support for Temporal workflows. Existing configurations must be updated to specify the runtime type, "type": "container", to continue working. See config.md for full details.
  • Modification to ModelConfig to allow more customization for model generation
    • vMinPu and vMaxPu have been removed and replaced with loadVMinPu/loadVMaxPu for loads and separate genVMinPu/genVMaxPu for generators.
    • Added support for ctPrimScalingFactor which is required when calculating new ctPrim value when feeder proxy loads are not in use.

New Features

  • Ingestor service now supports running via a Temporal workflow.
  • Added GraphQL query getUserCustomerListColumnConfig and mutation saveUserCustomerListColumnConfig to support user-specific column configurations. User can now manage a unique column configuration tied to their profile.
  • Added the following new config options
    • customerListTableVisible to display of the customer list table in the UI.
    • networkMapSearch2Enabled to enable version 2 of the network map search component.
    • sincalExporterTimeseriesEnabled to enable timeseries modelling for the Sincal Exporter
    • sincalExporterForecastEnabled to enable forecast modelling for the Sincal Exporter
  • Added feeders argument to the runCalibration GraphQL mutation. This optional argument allows running a model calibration on a subset of feeders in the model.
  • Added support for passing a CalibrationWorkPackageConfig object to the CalibrationConfig in the EAS config file. This allows a custom scenario and GeneratorConfig to used for calibration work packages.

Enhancements

  • Added common http endpoint (/callback) for callbacks. All services will be migrated to use this endpoint eventually.
  • Upgrade ewb-grpc to 0.36.0 to provide mapbox vector tile proto.

Fixes

  • Wrap Kotlin exposed database query in transaction block to fix no transaction in context errors.
  • Fix issue where EAS will hang when fetching JWKS from itself in single CPU enviroments
  • Fix server shutdown hook not being registered correctly leading to unclean shutdowns
  • Fixed bug that would cause power factory models to never reach the completed status even though they were available for download.

Notes

  • Updated to hosting-capacity-utils 0.10.0
  • Support up to evolve-sdk 0.29.0
  • Support up to temporal-platform-definitions 0.2.0
  • Support up to test-utils 2.1.0
  • Support up to evolve-conn 0.13.0
  • Updated to evolve-grpc 0.27.0.
  • Updated to Ktor 3.0.3\n\n---\n

Breaking Changes

  • None.

New Features

  • None.

Enhancements

  • None.

Fixes

  • None.

Notes

  • None.\n\n---\n

Breaking Changes

  • Update to zepben commons 1.0.0 and EWB sdk 1.0.0. This will largely be incompatible with pre-1.0 versions.
  • Renamed an existing config option customerListTableVisible to customerListDrawerEnabled.

New Features

  • Support node level results requests for hosting capacity work packages
  • Support HC work packages configuring combineCommonImpedances, simplifyNetwork, and collapseNegligibleImpedances
  • Added a permission based access control for viewing customer sensitive information in the customer list table in the UI.
    • A new GraphQL query getCustomerList added to read all the customer related information based on the assigned permissions:
      • CUSTOMER_PII:READ
      • CUSTOMER_NON_PII:READ.
    • A new GraphQL query downloadCustomerDetailsAsCsv added to download all the customer related information based on the assigned permissions:
      • CUSTOMER_PII:EXPORT
      • CUSTOMER_NON_PII:EXPORT.
    • A log containing the person requesting the customer information, the NMI's accessed and the date and time of access will be recorded.

Enhancements

  • Sincal exporter APIs now support a Forecast config to allow modelling of future network
  • Added new variable to hosting capacity configuration
    • useSpanLevelThreshold - use designRating for current comparison in this study.
    • ratingThreshold - It will consider AcLineSegments with current rating difference within a threshold collapsable.
    • simplifyPLSIThreshold - When provided, per length sequence impedance will be normalized between connected AcLineSegment when difference of their values are within this threshold.
    • emergAmpScaling - emergency amp scaling factor used in creating LineCode.
  • metrics.hierarchy_name is now nullable - schema upgrades will be applied at startup.

Fixes

  • Fixed bug that would result in null network model source dates if any of the job sources used to generate the model had a null source time.
  • Disable the option to request for a basic report in feeder load analysis study.

Notes

  • Removed hardcoded root logging level.\n\n---\n

Breaking Changes

  • Renamed an existing graphQL query getUserCustomerListColumnConfig to getUserSavedCustomerListColumnConfig.
  • Updated GqlCustomerListColumnConfig.columnName data type from string to enum.
  • GraphQL query pagedOpenDssModels now returns generationSpec as stringified JSON rather than a GraphQL object.

New Features

  • Added GraphQL query getUserPermittedCustomerListColumnConfig to return all permitted customer list columns for the requesting user.
  • Added GraphQL query getAllWorkPackagesAuthors to return all users that have created work packages.
  • Added /internal/health/ready and /internal/health/live for readiness and liveness probes in Kubernetes
  • Added support passing inverterControlConfig to ModelConfig when running work packages to configure the modelling of generation equipment as PVSystems controlled by InvControls rather than Generators (Advanced PV).

Enhancements

  • Default external role TIMESERIES_MODELLER now includes permissions to perform calibration runs.
  • Extended the getWorkPackages GraphQL query with a new searchText filter, allowing flexible search by UUID (exact match), name, and email (fuzzy match).

Fixes

  • Fixed network ingestor workflow so it does not restart EWB on completion if the network model is locked.
  • Fixed pagedOpenDssModels error due to incompatible generationSpec in previously generated models.
  • Fixed hosting capacity work package diff related query where duplicate keys can occur when there are multiple years worth of data in a result package
  • Fixed hosting capacity work package diff related query where errors gets swallow up by Exposed's transaction error.
  • Fix a check for empty string being passed through Generated Diff query.

Notes

  • Updated to temporal-platform-definitions 0.4.0, com.zepben.commons and com.zepben.ewb v1.1.0.