Skip to content

Releases: powsybl/powsybl-core

v6.4.1

11 Jul 16:34
v6.4.1
a2d7caa
Compare
Choose a tag to compare

To fix any issues due to migration, please go to the migration guide (search "(v6.4.1)"). Labels are clickable and lead to the section of the migration guide corresponding to the associated described change.

  • Breaking Change indicates a breaking change which could impact all users;
  • Custom IIDM Impl indicates a breaking change or a special notice impacting only custom IIDM implementations (most of the time, new IIDM methods/classes to implement). Note that this label is not added when another breaking change impacting all users is also present.

📜 Release notes

IIDM

  • Fix: Update TapChanger neutralPosition after using a stepsReplacer (#3094) Custom IIDM Impl
  • Rename Area acInterchangeTarget to interchangeTarget (#3095) Breaking Change Custom IIDM Impl

TCK

  • TCK: Remove reference comparison for TapChangers step (#3090)

Utils

  • Make method to compute hvdc line losses public (#3098)

CGMES

  • CGMES export: report multiple model identifiers (#3093)
  • CGMES metadata models: allow clear of supersedes (#3099) Custom IIDM Impl

PSS/E

  • Open setters for all properties in PsseTransformerWinding class (#3091)

v6.4.0

01 Jul 08:05
v6.4.0
90ca399
Compare
Choose a tag to compare

To fix any issues due to migration, please go to the migration guide. Labels are clickable and lead to the section of the migration guide corresponding to the associated described change.

  • Deprecated indicates that some methods were deprecated;
  • Breaking Change indicates a breaking change which could impact all users;
  • Custom IIDM Impl indicates a breaking change impacting only custom IIDM implementations (most of the time, new IIDM methods/classes to implement). Note that this label is not added when another breaking change impacting all users is also present.

⚠️ Important

Do not use this version, but use the new 6.4.1 release instead. It introduces slight changes in the area modeling (and so the serialization…) and fixes the CGMES supersedes management.


⭐ Key features

  • Generic Area model in IIDM (#2955, #3081) Custom IIDM Impl
  • Dynamic security analysis (#2675)
  • Add network modification to action (#2924) Custom IIDM Impl

📜 Release notes

IIDM

  • Factorize PhaseTapChangerAdderImpl and RatioTapChangerAdderImpl (#3033)
  • IIDM Validation Util rework (#3021) Breaking Change
  • Remove name unicity constraint on temporary limits (#3043)
  • Boundary P, Q, angle and voltage with zero impedance (#3048)
  • Three-windings transformer manipulation improvements (#3014) Custom IIDM Impl
  • Allow to use checkLimits methods with LimitReductions (#3056)
  • Allow zero value for limits in loading limits (#3061) Breaking Change Custom IIDM Impl
  • Add connect/disconnect on Tie Lines and HVDC Lines (#3072) Custom IIDM Impl

IIDM 1.13

Please refer to the detailed documentation of new version IIDM v1.13.

  • Update to IIDM version 1.13 (#2976)
  • Generic Area model in IIDM (#2955, #3081) Custom IIDM Impl
  • Support of condensers (#3065)

Extensions

  • Add an import post-processor to fill geographical extensions from ODRE data (#2998, #3077)
  • Allow OperatingStatus extension on busbar sections (#3057)
  • Active power control: add the ability to override minP and maxP (#3054, #3068, #3084) Breaking Change
  • Fix VoltageRegulation extension XSDs for compatibility (#3083)

Identifiers

  • Add a new identifier with wildcards support (#2965)

Network modifications

  • Report removed injections when removing voltage levels (#2984)
  • Add network modification to action (#2924) Custom IIDM Impl
  • Support HVDC line action to network modification (#3031)
  • Three windings transformer RatedU0 modification (#3016)
  • Fix exception for connectable not found in Network Modification connection and disconnection (#3069)
  • TerminalsConnectionAction: handle Tie Lines and HVDC Lines (#3079, #3072)

Network reducer

  • Tie lines in network reduction (#3038)

TCK

  • Add a TCK test ensuring that all TCK tests are extended in an implementation (#2985) Custom IIDM Impl
  • Changes in TCK to ease the compatibility tests of custom IIDM implementations (#3025, #3019, #3020, #3022) Custom IIDM Impl

Commons

  • Move Ref interface and implementations to powsybl-commons (#3008) Breaking Change
  • ReportNode V2.1 (#3011) Breaking Change
  • Fix ReportNode's include: the included ReportNode's root was missing (#3007)
  • ReportNode: make TypedValue constructor public (#3012)
  • Add an optional category in parameters (#3046)

Contingency

  • Add missing battery contingency validation (#2973)

Load flow

  • Fix hvdcAcEmulation option loading from a yaml config file (#2966)
  • Load default loadflow parameters from json file with ServiceLoader (#3040)

Security analysis

  • Security analysis runner parameters (#3017) Breaking Change
  • Remove violation detector from SecurityAnalysis API (#2943) Breaking Change
  • Consider sides when applying limitReductions with IdentifiableCriterion (#3050)
  • Dynamic security analysis (#2675)

CGMES

  • Unit tests for transformer conversion (#2987)
  • CGMES metadata model interface and implementation (#2988)
  • Export: fix regression on external explicit SV dependencies using network properties (#2991)
  • Export: allow external metadata model definition through parameter (#2993)
  • Export: modeling authority must be preserved (#2996)
  • Fix CGMES GL import (#2992)
  • Fix SlackTerminal.isEmpty misuses (#3009)
  • Export: fix equivalent injection base voltage reference in EQ (#3006)
  • Add slack bus mismatch at CGMES export: slack terminal can be disconnected (#3027)
  • Export: retained switch with same TN at both ends as non-retained (#3029)
  • Export: fix the fictitious load SvInjection should refer to TopologicalNode UUID (#3037)
  • CGMES SvInjection for slack unit test: referred topological node must be defined (#3039)
  • Export: output max number values as float, not double (#3044)
  • CGMES export: handle quick CGM export for SSHs and SV (#2927)
  • Fix equivalent injection missing regulation target (#3087)

Matpower

  • Matpower: export dclines (#2932)
  • Matpower: fix pv buses (#3003)

PSS/E

  • Copy of the imported PSSE model to make the updates and export (deep copy) (#2946)

AMPL

  • Modify AMPL export per unitage of lines with different nominal voltage at ends (#3013)

Scalable

  • Add a parameter to the scaling parameters to allow to skip some injections (#3010)

Time series

  • Add back static method parseCsv without ReportNode for TimeSeries (#2962)

Math

  • Proposition to create a complex matrix class (#2835)

Shortcircuit

  • Add side in FeederResult (#2994)

Quality

  • Refactor assert command for tool tests (#2777, #3088)
  • Code cleanup to correct issues reported by Sonar (Consistency) (#2967) Breaking Change
  • Code cleanup to correct issues reported by Sonar (Severity: high) (#2971, #2974, #2981) Breaking Change
  • Launch CI when new version tag is pushed (#2963)
  • Change the reduction's type from float to double in the LimitViolation builder (#2990)

Documentation

Dependencies

Library / component Previous version New version PR
assertj 3.24.2 3.26.0 #2979, #3018
commons-cli 1.5.0 1.8.0 #3018
commons-compress 1.26.0 1.26.2 #3018
commons-io 2.13.0 2.16.1 #2979
commons-lang3 3.13.0 3.14.0 #2979
commons-text 1.10.0 1.12.0 #3018
groovy 4.0.14 4.0.21 #3018
guava 32.1.2-jre 33.2.1-jre #2979, #3018
jackson 2.15.2 2.17.1 #2980, #3018
junit-jupiter 5.10.0 5.10.2 #2979
logback 1.4.14 1.5.6 #2979 ...
Read more

v6.4.0-RC2

24 Jun 13:31
v6.4.0-RC2
8b03be3
Compare
Choose a tag to compare
v6.4.0-RC2 Pre-release
Pre-release

To fix any issues due to migration, please go to the migration guide. Labels are clickable and lead to the section of the migration guide corresponding to the associated described change.

  • Deprecated indicates that some methods were deprecated;
  • Breaking Change indicates a breaking change which could impact all users;
  • Custom IIDM Impl indicates a breaking change impacting only custom IIDM implementations (most of the time, new IIDM methods/classes to implement). Note that this label is not added when another breaking change impacting all users is also present.

⭐ Key features

  • Generic Area model in IIDM (#2955) Custom IIDM Impl
  • Dynamic security analysis (#2675)
  • Identifiers: add a new identifier with wildcards support (#2965)
  • Add network modification to action (#2924) Custom IIDM Impl

📜 Release notes

IIDM

  • Factorize PhaseTapChangerAdderImpl and RatioTapChangerAdderImpl (#3033)
  • IIDM Validation Util rework (#3021) Breaking Change
  • Remove name unicity constraint on temporary limits (#3043)
  • Boundary P, Q, angle and voltage with zero impedance (#3048)
  • Three-windings transformer manipulation improvements (#3014) Custom IIDM Impl
  • Allow to use checkLimits methods with LimitReductions (#3056)

IIDM 1.13

Please refer to the detailed documentation of new version IIDM v1.13.

  • Update to IIDM version 1.13 (#2976)
  • Generic Area model in IIDM (#2955) Custom IIDM Impl
  • Support of condensers (#3065)

Extensions

  • Add an import post-processor to fill geographical extensions from ODRE data (#2998, #3077)
  • Allow OperatingStatus extension on busbar sections (#3057)
  • Active power control: add the ability to override minP and maxP (#3054, #3068)

Identifiers

  • Add a new identifier with wildcards support (#2965)

Network modifications

  • Report removed injections when removing voltage levels (#2984)
  • Add network modification to action (#2924) Custom IIDM Impl
  • Support HVDC line action to network modification (#3031)
  • Three windings transformer RatedU0 modification (#3016)
  • Fix exception for connectable not found in Network Modification connection and disconnection (#3069)
  • TerminalsConnectionAction: fix javadoc (#3079)

Network reducer

  • Tie lines in network reduction (#3038)

TCK

  • Add a TCK test ensuring that all TCK tests are extended in an implementation (#2985) Custom IIDM Impl
  • Changes in TCK to ease the compatibility tests of custom IIDM implementations (#3025, #3019, #3020, #3022) Custom IIDM Impl

Commons

  • Move Ref interface and implementations to powsybl-commons (#3008) Breaking Change
  • ReportNode V2.1 (#3011) Breaking Change
  • Fix ReportNode's include: the included ReportNode's root was missing (#3007)
  • ReportNode: make TypedValue constructor public (#3012)
  • Add an optional category in parameters (#3046)

Contingency

  • Add missing battery contingency validation (#2973)

Load flow

  • Fix hvdcAcEmulation option loading from a yaml config file (#2966)
  • Load default loadflow parameters from json file with ServiceLoader (#3040)

Security analysis

  • Security analysis runner parameters (#3017) Breaking Change
  • Remove violation detector from SecurityAnalysis API (#2943) Breaking Change
  • Consider sides when applying limitReductions with IdentifiableCriterion (#3050)
  • Dynamic security analysis (#2675)

CGMES

  • Unit tests for transformer conversion (#2987)
  • CGMES metadata model interface and implementation (#2988)
  • Export: fix regression on external explicit SV dependencies using network properties (#2991)
  • Export: allow external metadata model definition through parameter (#2993)
  • Export: modeling authority must be preserved (#2996)
  • Fix CGMES GL import (#2992)
  • Fix SlackTerminal.isEmpty misuses (#3009)
  • Export: fix equivalent injection base voltage reference in EQ (#3006)
  • Add slack bus mismatch at CGMES export: slack terminal can be disconnected (#3027)
  • Export: retained switch with same TN at both ends as non-retained (#3029)
  • Export: fix the fictitious load SvInjection should refer to TopologicalNode UUID (#3037)
  • CGMES SvInjection for slack unit test: referred topological node must be defined (#3039)
  • Export: output max number values as float, not double (#3044)
  • CGMES export: handle quick CGM export for SSHs and SV (#2927)

Matpower

  • Matpower: export dclines (#2932)

PSS/E

  • Copy of the imported PSSE model to make the updates and export (deep copy) (#2946)

AMPL

  • Modify AMPL export per unitage of lines with different nominal voltage at ends (#3013)

Scalable

  • Add a parameter to the scaling parameters to allow to skip some injections (#3010)

Time series

  • Add back static method parseCsv without ReportNode for TimeSeries (#2962)

Math

  • Proposition to create a complex matrix class (#2835)

Shortcircuit

  • Add side in FeederResult (#2994)

Quality

  • Refactor assert command for tool tests (#2777)
  • Code cleanup to correct issues reported by Sonar (Consistency) (#2967) Breaking Change
  • Code cleanup to correct issues reported by Sonar (Severity: high) (#2971, #2974, #2981) Breaking Change
  • Launch CI when new version tag is pushed (#2963)
  • Change the reduction's type from float to double in the LimitViolation builder (#2990)

Documentation

Dependencies

Library / component Previous version New version PR
assertj 3.24.2 3.26.0 #2979, #3018
commons-cli 1.5.0 1.8.0 #3018
commons-compress 1.26.0 1.26.2 #3018
commons-io 2.13.0 2.16.1 #2979
commons-lang3 3.13.0 3.14.0 #2979
commons-text 1.10.0 1.12.0 #3018
groovy 4.0.14 4.0.21 #3018
guava 32.1.2-jre 33.2.1-jre #2979, #3018
jackson 2.15.2 2.17.1 #2980, #3018
junit-jupiter 5.10.0 5.10.2 #2979
logback 1.4.14 1.5.6 #2979
maven-plugin-annotations 3.9.0 3.13.0 #3018
mockito 5.5.0 5.12.0 #2979, #3018
native-lib-loader 2.4.0 2.5.0 #3018
poi-ooxml 5.2.3 5.2.5 #3018
slf4j 2.0.9 2.0.13 #2979
threeten-extra 1.7.2 1.8.0 #3018
testcontainers 1.19.0 1.19.8 #2979, #3018
xmlunit-core 2.9.1 2.10.0 #2997
zstd-jni 1.5.5-5 1.5.6-3 #3018
  • Update math native library to 1.3.1 (#3042)

🛡️ Vulnerability fix

v6.3.2

11 Jun 08:47
v6.3.2
15b0fc5
Compare
Choose a tag to compare

Release notes

IIDM

  • Boundary P, Q, angle and voltage with zero impedance (#3048)

CGMES

  • CGMES export: fix equivalent injection base voltage reference in EQ (#3006)
  • CGMES export: retained switch with same TN at both ends as non-retained (#3029)
  • CGMES export: output max number values as float, not double (#3044)

Dependencies

  • Update math native library to 1.3.1 (#3042)

v6.3.1

02 May 13:36
v6.3.1
47fb79f
Compare
Choose a tag to compare

Release notes

IIDM

Network modifications

  • Report removed injections when removing voltage levels (#2984)

Contingency

  • Add missing battery contingency validation (#2973)

Load flow

  • Fix hvdcAcEmulation option loading from a yaml config file (#2966)

CGMES

  • CGMES metadata model interface and implementation (#2988)
  • CGMES export: fix regression on external explicit SV dependencies using network properties (#2991)
  • CGMES export: allow external metadata model definition through parameter (#2993)
  • CGMES export: modeling authority must be preserved (#2996)
  • Fix CGMES GL import (#2992)

Time series

  • Add back static method parseCsv without ReportNode for TimeSeries (#2962)

🛡️ Vulnerability fix

v6.3.0

29 Mar 14:24
v6.3.0
a2f1f99
Compare
Choose a tag to compare

To fix any issues due to migration, please go to the migration guide. Labels are clickable and lead to the section of the migration guide corresponding to the associated described change.

  • Deprecated indicates that some methods were deprecated;
  • Breaking Change indicates a breaking change which could impact all users;
  • Custom IIDM Impl indicates a breaking change impacting only custom IIDM implementations (most of the time, new IIDM methods/classes to implement). Note that this label is not added when another breaking change impacting all users is also present.

⭐ Key features

📜 Release notes

IIDM

  • Add VoltageRegulation extension for batteries (#2919)
  • Export ActivePowerControl extension in all versions of IIDM (#2914)
  • Bug fix: move properties during network merge and detach (#2934)
  • Limit reduction API (#2760, #2948, #2949, #2950, #2954) Breaking Change
  • Utility classes for reduced limits computation (#2912) ⚠️ this is a beta feature: we do not guarantee that the general design will still be the same in the next releases
  • Add a pairing key setter for unpaired dangling lines (#2904) Custom IIDM Impl
  • Support of validation level for missing permanent limit (#2939) Breaking Change
  • Fix reference terminal extension managing cloned variants (#2956)
  • Fix BoundaryImpl getters when generation not null (#2960)

Load flow

  • LoadFlowParameters: default value of writeSlackBus parameter to true (#2922)

Security analysis

Actions

  • Move actions to a new powsybl-action-api module (#2923) Breaking Change
  • Dangling Line Action (#2903)
  • Add action builders and a new action list with network element identifiers (#2952)

Contingency

  • Add name in contingency for open rao (#2890)
  • Add new field name in equals and hash code of Contingency (#2915)
  • Add "tieLineCriterion" in options for contingency list type deserialization (#2881)
  • Move criterion package and criterion serializer/deserializer to dedicated powsybl-iidm-criteria module (#2793) Breaking Change
  • Add a way to get the elements not found in the network for every contingency (#2830)
  • Allow JsonContingencyListLoader to load all json contingency lists (#2945)
  • More robust VoltageIntervals (#2951) Breaking Change

Sensitivity analysis

  • Sensitivity function: add new SensitivityFunctionType BUS_REACTIVE_POWER (#2930) Breaking Change

CGMES

  • Export: Add custom model version for CGMES export (#2875)
  • Export: UUID of fullModel on each file should be unique (#2888)
  • Export: Add a business process parameter used for UUIDs generation (missing information) (#2889)
  • Export: Updated export of busbar section terminals (#2886)
  • Export: UUIDs with a leading underscore are considered valid master resource ids (#2896)
  • Import: remove obsolete parameter and methods from config (#2882)
  • Operational Limits conversion: minor improvements (#2873)
  • Import: simplify the creation of tie lines when no subnetworks are present (assembled models) (#2872)
  • Import: fix access to busbar section container in bus/breaker import (#2910)
  • Import: condensers shall not have generating units (#2905)
  • Export RegulatingControl only when generator has voltage regulation capability (#2909)
  • Export: support of fossilFuel and hydroPowerPlant (#2749)
  • Import and export: use reference priority extension instead of slack terminal extension (#2921)
  • Export: tie lines as two separate equipment (ACLSs) (#2619)
  • Import: fix performance regression checking for condensers (#2933)
  • CGMES metadata models extension (#2898) Breaking Change
  • Export tculControlMode as volt by default in CGMES 2.4.15 and prevent export of the attribute in 3.0 (#2929)
  • Export: preserve original class of generators (#2726)
  • Import: fix support for ACLineSegments contained in cim:Line containers (#2944)

AMPL

  • Converter: add export sorting option (#2893)

iAL

  • Move iAL actions DSL and simulator to new powsybl-action-ial-... modules (#2923) Breaking Change

Matpower

  • DC lines import (#2425)
  • Dangling line export bugs (#2918)

Math

  • Sparse matrices serialization (#2834)

PSSE

  • Fix Q record management (#2936)

Scalable

  • LoadScalable: Do not apply constant power factor if P0 is zero (#2897)

Time series

  • AbstractMinMaxNodeCalc extends AbstractSingleChildNodeCalc (#2906)
  • Improving NodeCalc computing (#2899)
  • Default version number for unversioned TimeSeries (#2925) Breaking Change

Tools

  • Fix build timestamp when displaying powsybl version (#2911)

Commons

Dependencies

  • Update to powsybl-parent 18 (#2823)

Quality

  • Restrict permissions in github workflow (#2825)
  • Missing license and author in test file (#2892)
  • Short-circuits: corrections in javadoc (#2887, #2894, #2907)
  • Update README.md with scorecard badge (#2902)
  • Remove dead link to tutorial in README (#2858)
  • More detailed exception when JSON parsing (#2941)
  • Add missing SPDX license identifiers (#2953)

🛡️ Vulnerability fix

6.2.4

25 Mar 16:26
v6.2.4
816e3e0
Compare
Choose a tag to compare

Release notes

CGMES

  • Import: fix performance regression checking for condensers (#2933)

🛡️ Vulnerability fix

v6.3.0-alpha-1

19 Mar 13:46
v6.3.0-alpha-1
aa9475a
Compare
Choose a tag to compare
v6.3.0-alpha-1 Pre-release
Pre-release

To fix any issues due to migration, please go to the migration guide. Labels are clickable and lead to the section of the migration guide corresponding to the associated described change.

  • Deprecated indicates that some methods were deprecated;
  • Breaking Change indicates a breaking change which could impact all users;
  • Custom IIDM Impl indicates a breaking change impacting only custom IIDM implementations (most of the time, new IIDM methods/classes to implement). Note that this label is not added when another breaking change impacting all users is also present.

⭐ Key features

  • Reporter API v2 (#2201) Breaking Change
  • Limit reduction API (#2760) Breaking Change
  • CGMES import/export fixes and improvements

📜 Release notes

IIDM

  • Add VoltageRegulation extension for batteries (#2919)
  • Export ActivePowerControl extension in all versions of IIDM (#2914)
  • Bug fix: move properties during network merge and detach (#2934)
  • Limit reduction API (#2760) Breaking Change
  • Add a pairing key setter for unpaired dangling lines (#2904) Custom IIDM Impl

Load flow

  • LoadFlowParameters: default value of writeSlackBus parameter to true (#2922)

Security analysis

  • Dangling Line Action (#2903)
  • Limit reduction API (#2760) Breaking Change
  • Use double format for limit reduction values (#2935) Breaking Change
  • Move actions to a new powsybl-action-api module (#2923) Breaking Change

Contingency

  • Add name in contingency for open rao (#2890)
  • Add new field name in equals and hash code of Contingency (#2915)
  • Add "tieLineCriterion" in options for contingency list type deserialization (#2881)
  • Move criterion package and criterion serializer/deserializer to dedicated powsybl-iidm-criteria module (#2793) Breaking Change

Sensitivity analysis

  • Sensitivity function: add new SensitivityFunctionType BUS_REACTIVE_POWER (#2930) Breaking Change

CGMES

  • Export: Add custom model version for CGMES export (#2875)
  • Export: UUID of fullModel on each file should be unique (#2888)
  • Export: Add a business process parameter used for UUIDs generation (missing information) (#2889)
  • Export: Updated export of busbar section terminals (#2886)
  • Export: UUIDs with a leading underscore are considered valid master resource ids (#2896)
  • Import: remove obsolete parameter and methods from config (#2882)
  • Operational Limits conversion: minor improvements (#2873)
  • Import: simplify the creation of tie lines when no subnetworks are present (assembled models) (#2872)
  • Import: fix access to busbar section container in bus/breaker import (#2910)
  • Import: condensers shall not have generating units (#2905)
  • Export RegulatingControl only when generator has voltage regulation capability (#2909)
  • Export: support of fossilFuel and hydroPowerPlant (#2749)
  • Import and export: use reference priority extension instead of slack terminal extension (#2921)
  • Export: tie lines as two separate equipment (ACLSs) (#2619)
  • Import: fix performance regression checking for condensers (#2933)

AMPL

  • Converter: add export sorting option (#2893)

iAL

  • Move iAL actions DSL and simulator to new powsybl-action-ial-... modules (#2923) Breaking Change

Matpower

  • DC lines import (#2425)
  • Dangling line export bugs (#2918)

Math

  • Sparse matrices serialization (#2834)

Scalable

  • LoadScalable: Do not apply constant power factor if P0 is zero (#2897)

Time series

  • AbstractMinMaxNodeCalc extends AbstractSingleChildNodeCalc (#2906)
  • Improving NodeCalc computing (#2899)

Tools

  • Fix build timestamp when displaying powsybl version (#2911)

Commons

  • Reporter API v2 (#2201) Breaking Change

Dependencies

  • Update to powsybl-parent 18 (#2823)

Quality

  • Restrict permissions in github workflow (#2825)
  • Missing license and author in test file (#2892)
  • Short-circuits: corrections in javadoc (#2887, #2894, #2907)
  • Update README.md with scorecard badge (#2902)
  • Remove dead link to tutorial in README (#2858)

🛡️ Vulnerability fix

v6.2.3

06 Mar 08:12
v6.2.3
440fdf2
Compare
Choose a tag to compare

Release notes

⚠️ Important

Do not use this version for CGMES purposes. The CGMES import takes a very long time (~ x8 longer)!

CGMES

  • Import: fix access to busbar section container in bus/breaker import (#2910)
  • Import: condensers shall not have generating units (#2905)

Tools

  • Fix build timestamp when displaying powsybl version (#2911)

v6.2.2

23 Feb 09:05
v6.2.2
f788aa1
Compare
Choose a tag to compare

Release notes

🛡️ Vulnerability fix