Build Issues on Hyperland 0.37.1-1

Hi,
Having build issues on Hyperland 0.37.1-1 (Arch) after updating.
See below for hyprpm log:
[v] version returned: Hyprland, built from branch HEAD at commit c5e28ebcfe00a510922779b2c568cfa52a317445  (props: bump ver 0.37.1).
Date: Sat Mar 16 14:51:49 2024
Tag: v0.37.1

flags: (if any)

[v] parsed commit c5e28ebcfe00a510922779b2c568cfa52a317445 at branch HEAD
✔ adding a new plugin repository from https://github.com/VortexCoyote/hyprfocus
  MAKE SURE that you trust the authors. DO NOT install random plugins without verifying the code and author.
  Are you sure? [Y/n]

 → Cloning https://github.com/VortexCoyote/hyprfocus
✔ cloned
✔ found hyprload manifest
✔ parsed manifest, found 1 plugins:
 → hyprfocus by Vortex version 2.0
✔ Hyprland headers OK
 → Building hyprfocus
✖ Plugin hyprfocus failed to build.

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━━━━━━━━━━━  3 / 5  Building plugin(s)[v] shell returned:  -> cd /tmp/hyprpm/new && PKG_CONFIG_PATH="/home/aviherman/.local/share/hyprpm/headersRoot/share/pkgconfig" make all
g++ -shared -fPIC --no-gnu-unique src/Flash.cpp src/IFocusAnimation.cpp src/main.cpp src/Shrink.cpp src/Flash.hpp src/IFocusAnimation.hpp src/Shrink.hpp  -o hyprfocus.so -g `pkg-config --cflags pixman-1 libdrm hyprland` -std=c++2b
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Flash.hpp:3,
                 from src/Flash.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Flash.cpp: In member function ‘virtual void CFlash::init(void*, std::string)’:
src/Flash.cpp:10:77: error: C99 designator ‘floatValue’ outside aggregate initializer
   10 |     addConfigValue(pHandle, "flash_opacity", SConfigValue{.floatValue = 0.5f});
      |                                                                             ^
src/Flash.cpp:10:77: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/HookSystemManager.hpp:12,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/Screencopy.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/ToplevelExport.hpp:6,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/ProtocolManager.hpp:4,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:18,
                 from src/Flash.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/Flash.cpp: In member function ‘virtual void CFlash::onWindowFocus(CWindow*, void*)’:
src/Flash.cpp:16:25: error: ‘getConfigValue’ was not declared in this scope; did you mean ‘HyprlandAPI::getConfigValue’?
   16 |     pWindow->m_fAlpha = getConfigValue(pHandle, "flash_opacity")->floatValue;
      |                         ^~~~~~~~~~~~~~
      |                         HyprlandAPI::getConfigValue
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:133:37: note: ‘HyprlandAPI::getConfigValue’ declared here
  133 |     APICALL Hyprlang::CConfigValue* getConfigValue(HANDLE handle, const std::string& name);
      |                                     ^~~~~~~~~~~~~~
src/Flash.cpp: In lambda function:
src/Flash.cpp:20:100: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   20 |             pWindow->m_fAlpha = HyprlandAPI::getConfigValue(pHandle, "decoration:active_opacity")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/IFocusAnimation.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/IFocusAnimation.cpp: In member function ‘virtual void IFocusAnimation::init(void*, std::string)’:
src/IFocusAnimation.cpp:8:107: error: C99 designator ‘strValue’ outside aggregate initializer
    8 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "in_bezier",  SConfigValue{.strValue = "default"});
      |                                                                                ^
src/IFocusAnimation.cpp:8:107: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from src/IFocusAnimation.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:9:107: error: C99 designator ‘strValue’ outside aggregate initializer
    9 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "out_bezier", SConfigValue{.strValue = "default"});
      |                                                                                ^
src/IFocusAnimation.cpp:9:107: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:11:102: error: C99 designator ‘floatValue’ outside aggregate initializer
   11 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "in_speed",  SConfigValue{.floatValue = 1.f});
      |                                                                                ^
src/IFocusAnimation.cpp:11:102: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:12:102: error: C99 designator ‘floatValue’ outside aggregate initializer
   12 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "out_speed", SConfigValue{.floatValue = 5.f});
      |                                                                                ^
src/IFocusAnimation.cpp:12:102: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp: In member function ‘virtual void IFocusAnimation::onWindowFocus(CWindow*, void*)’:
src/IFocusAnimation.cpp:26:117: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   26 |     m_sFocusInAnimConfig.internalBezier       = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "in_bezier")->strValue;
      |                                                                                ^~~~~~~~
src/IFocusAnimation.cpp:27:116: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   27 |     m_sFocusInAnimConfig.internalSpeed        = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "in_speed")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
src/IFocusAnimation.cpp:29:118: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   29 |     m_sFocusOutAnimConfig.internalBezier      = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "out_bezier")->strValue;
      |                                                                                ^~~~~~~~
src/IFocusAnimation.cpp:30:117: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   30 |     m_sFocusOutAnimConfig.internalSpeed       = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "out_speed")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
src/IFocusAnimation.cpp: At global scope:
src/IFocusAnimation.cpp:33:6: error: no declaration matches ‘void IFocusAnimation::addConfigValue(void*, std::string, SConfigValue)’
   33 | void IFocusAnimation::addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue) {
      |      ^~~~~~~~~~~~~~~
src/IFocusAnimation.hpp:12:21: note: candidate is: ‘void IFocusAnimation::addConfigValue(void*, std::string, int)’
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                     ^~~~~~~~~~~~~~
src/IFocusAnimation.hpp:7:7: note: ‘class IFocusAnimation’ defined here
    7 | class IFocusAnimation {
      |       ^~~~~~~~~~~~~~~
src/IFocusAnimation.cpp:37:15: error: no declaration matches ‘SConfigValue* IFocusAnimation::getConfigValue(void*, std::string)’
   37 | SConfigValue* IFocusAnimation::getConfigValue(HANDLE pHandle, std::string name) {
      |               ^~~~~~~~~~~~~~~
src/IFocusAnimation.cpp:37:15: note: no functions named ‘SConfigValue* IFocusAnimation::getConfigValue(void*, std::string)’
src/IFocusAnimation.hpp:7:7: note: ‘class IFocusAnimation’ defined here
    7 | class IFocusAnimation {
      |       ^~~~~~~~~~~~~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:10,
                 from src/main.cpp:7:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
In file included from src/main.cpp:12:
src/Shrink.hpp: At global scope:
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
src/main.cpp: In function ‘void flashWindow(CWindow*)’:
src/main.cpp:22:128: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   22 |     auto* const PTYPE = g_bMouseWasPressed  ? &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:mouse_focus_animation")->strValue
      |                                                                                ^~~~~~~~
src/main.cpp:23:131: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   23 |                                             : &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:keyboard_focus_animation")->strValue;
      |                                                                                ^~~~~~~~
src/main.cpp: In function ‘void flashCurrentWindow(std::string)’:
src/main.cpp:29:111: error: ‘class Hyprlang::CConfigValue’ has no member named ‘intValue’; did you mean ‘getValue’?
   29 |     static auto* const PHYPRFOCUSENABLED = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:enabled")->intValue;
      |                                                                                ^~~~~~~~
      |                                                                                getValue
src/main.cpp: In function ‘void onActiveWindowChange(void*, std::any)’:
src/main.cpp:43:115: error: ‘class Hyprlang::CConfigValue’ has no member named ‘intValue’; did you mean ‘getValue’?
   43 |         static auto* const PHYPRFOCUSENABLED = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:enabled")->intValue;
      |                                                                                ^~~~~~~~
      |                                                                                getValue
src/main.cpp: In function ‘void onMouseButton(void*, std::any)’:
src/main.cpp:63:58: warning: comparison between ‘enum wl_pointer_button_state’ and ‘enum wlr_button_state’ [-Wenum-compare]
   63 |         g_bMouseWasPressed = PWLRMOUSEBUTTONEVENT->state == WLR_BUTTON_PRESSED;
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
src/main.cpp: In function ‘PLUGIN_DESCRIPTION_INFO pluginInit(void*)’:
src/main.cpp:76:121: error: C99 designator ‘intValue’ outside aggregate initializer
   76 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:enabled",                    SConfigValue{.intValue = 0      });
      |                                                                                ^
src/main.cpp:76:121: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from src/main.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/main.cpp:77:121: error: C99 designator ‘strValue’ outside aggregate initializer
   77 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:keyboard_focus_animation",   SConfigValue{.strValue = "flash"});
      |                                                                                ^
src/main.cpp:77:121: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/main.cpp:78:121: error: C99 designator ‘strValue’ outside aggregate initializer
   78 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:mouse_focus_animation",      SConfigValue{.strValue = "flash"});
      |                                                                                ^
src/main.cpp:78:121: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Shrink.hpp:3,
                 from src/Shrink.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
src/Shrink.cpp: In member function ‘virtual void CShrink::init(void*, std::string)’:
src/Shrink.cpp:10:81: error: C99 designator ‘floatValue’ outside aggregate initializer
   10 |     addConfigValue(pHandle, "shrink_percentage", SConfigValue{.floatValue = 0.5f});
      |                                                                                ^
src/Shrink.cpp:10:81: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/HookSystemManager.hpp:12,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/Screencopy.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/ToplevelExport.hpp:6,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/ProtocolManager.hpp:4,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:18,
                 from src/Shrink.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/Shrink.cpp: In member function ‘virtual void CShrink::onWindowFocus(CWindow*, void*)’:
src/Shrink.cpp:20:35: error: ‘getConfigValue’ was not declared in this scope; did you mean ‘HyprlandAPI::getConfigValue’?
   20 |     const auto SHRINKPERCENTAGE = getConfigValue(pHandle, "shrink_percentage")->floatValue;
      |                                   ^~~~~~~~~~~~~~
      |                                   HyprlandAPI::getConfigValue
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:133:37: note: ‘HyprlandAPI::getConfigValue’ declared here
  133 |     APICALL Hyprlang::CConfigValue* getConfigValue(HANDLE handle, const std::string& name);
      |                                     ^~~~~~~~~~~~~~
src/Shrink.cpp: In lambda function:
src/Shrink.cpp:30:68: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘goalv’; did you mean ‘goal’?
   30 |                 const auto GOALPOS      = pWindow->m_vRealPosition.goalv();
      |                                                                    ^~~~~
      |                                                                    goal
src/Shrink.cpp:31:64: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘goalv’; did you mean ‘goal’?
   31 |                 const auto GOALSIZE     = pWindow->m_vRealSize.goalv();
      |                                                                ^~~~~
      |                                                                goal
src/Shrink.cpp:33:61: error: missing template arguments before ‘*’ token
   33 |                 const auto* PANIMATION  = (CAnimatedVariable*)pShrinkAnimation;
      |                                                             ^
src/Shrink.cpp:33:62: error: expected primary-expression before ‘)’ token
   33 |                 const auto* PANIMATION  = (CAnimatedVariable*)pShrinkAnimation;
      |                                                              ^
src/Shrink.cpp:36:99: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘vec’
   36 |                 pWindow->m_vRealPosition.setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.vec() / 2.f);
      |                                                                                ^~~
src/Shrink.cpp: In lambda function:
src/Shrink.cpp:40:36: error: missing template arguments before ‘*’ token
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                                    ^
src/Shrink.cpp:40:37: error: expected primary-expression before ‘)’ token
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                                     ^
src/Shrink.cpp:40:38: error: expected ‘)’ before ‘pShrinkAnimation’
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                 ~                    ^~~~~~~~~~~~~~~~
      |                                      )
src/Flash.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Flash.hpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/IFocusAnimation.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Shrink.hpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
make: *** [Makefile:4: all] Error 1

✔ all plugins built
✔ installed repository
✔ you can now enable the plugin(s) with hyprpm enable
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  5 / 5  Done!

I recently was involved in fixing another plugin, split-monitor-workspaces, that suffered from a similar issue: https://github.com/Duckonaut/split-monitor-workspaces/issues/56

Hi,
Having build issues on Hyperland 0.37.1-1 (Arch) after updating.
See below for hyprpm log:
[v] version returned: Hyprland, built from branch HEAD at commit c5e28ebcfe00a510922779b2c568cfa52a317445  (props: bump ver 0.37.1).
Date: Sat Mar 16 14:51:49 2024
Tag: v0.37.1

flags: (if any)

[v] parsed commit c5e28ebcfe00a510922779b2c568cfa52a317445 at branch HEAD
✔ adding a new plugin repository from https://github.com/VortexCoyote/hyprfocus
  MAKE SURE that you trust the authors. DO NOT install random plugins without verifying the code and author.
  Are you sure? [Y/n]

 → Cloning https://github.com/VortexCoyote/hyprfocus
✔ cloned
✔ found hyprload manifest
✔ parsed manifest, found 1 plugins:
 → hyprfocus by Vortex version 2.0
✔ Hyprland headers OK
 → Building hyprfocus
✖ Plugin hyprfocus failed to build.

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━━━━━━━━━━━  3 / 5  Building plugin(s)[v] shell returned:  -> cd /tmp/hyprpm/new && PKG_CONFIG_PATH="/home/aviherman/.local/share/hyprpm/headersRoot/share/pkgconfig" make all
g++ -shared -fPIC --no-gnu-unique src/Flash.cpp src/IFocusAnimation.cpp src/main.cpp src/Shrink.cpp src/Flash.hpp src/IFocusAnimation.hpp src/Shrink.hpp  -o hyprfocus.so -g `pkg-config --cflags pixman-1 libdrm hyprland` -std=c++2b
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Flash.hpp:3,
                 from src/Flash.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Flash.cpp: In member function ‘virtual void CFlash::init(void*, std::string)’:
src/Flash.cpp:10:77: error: C99 designator ‘floatValue’ outside aggregate initializer
   10 |     addConfigValue(pHandle, "flash_opacity", SConfigValue{.floatValue = 0.5f});
      |                                                                             ^
src/Flash.cpp:10:77: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/HookSystemManager.hpp:12,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/Screencopy.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/ToplevelExport.hpp:6,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/ProtocolManager.hpp:4,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:18,
                 from src/Flash.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/Flash.cpp: In member function ‘virtual void CFlash::onWindowFocus(CWindow*, void*)’:
src/Flash.cpp:16:25: error: ‘getConfigValue’ was not declared in this scope; did you mean ‘HyprlandAPI::getConfigValue’?
   16 |     pWindow->m_fAlpha = getConfigValue(pHandle, "flash_opacity")->floatValue;
      |                         ^~~~~~~~~~~~~~
      |                         HyprlandAPI::getConfigValue
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:133:37: note: ‘HyprlandAPI::getConfigValue’ declared here
  133 |     APICALL Hyprlang::CConfigValue* getConfigValue(HANDLE handle, const std::string& name);
      |                                     ^~~~~~~~~~~~~~
src/Flash.cpp: In lambda function:
src/Flash.cpp:20:100: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   20 |             pWindow->m_fAlpha = HyprlandAPI::getConfigValue(pHandle, "decoration:active_opacity")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/IFocusAnimation.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/IFocusAnimation.cpp: In member function ‘virtual void IFocusAnimation::init(void*, std::string)’:
src/IFocusAnimation.cpp:8:107: error: C99 designator ‘strValue’ outside aggregate initializer
    8 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "in_bezier",  SConfigValue{.strValue = "default"});
      |                                                                                ^
src/IFocusAnimation.cpp:8:107: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from src/IFocusAnimation.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:9:107: error: C99 designator ‘strValue’ outside aggregate initializer
    9 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "out_bezier", SConfigValue{.strValue = "default"});
      |                                                                                ^
src/IFocusAnimation.cpp:9:107: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:11:102: error: C99 designator ‘floatValue’ outside aggregate initializer
   11 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "in_speed",  SConfigValue{.floatValue = 1.f});
      |                                                                                ^
src/IFocusAnimation.cpp:11:102: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp:12:102: error: C99 designator ‘floatValue’ outside aggregate initializer
   12 |     HyprlandAPI::addConfigValue(pHandle, configPrefix() + "out_speed", SConfigValue{.floatValue = 5.f});
      |                                                                                ^
src/IFocusAnimation.cpp:12:102: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/IFocusAnimation.cpp: In member function ‘virtual void IFocusAnimation::onWindowFocus(CWindow*, void*)’:
src/IFocusAnimation.cpp:26:117: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   26 |     m_sFocusInAnimConfig.internalBezier       = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "in_bezier")->strValue;
      |                                                                                ^~~~~~~~
src/IFocusAnimation.cpp:27:116: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   27 |     m_sFocusInAnimConfig.internalSpeed        = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "in_speed")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
src/IFocusAnimation.cpp:29:118: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   29 |     m_sFocusOutAnimConfig.internalBezier      = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "out_bezier")->strValue;
      |                                                                                ^~~~~~~~
src/IFocusAnimation.cpp:30:117: error: ‘class Hyprlang::CConfigValue’ has no member named ‘floatValue’; did you mean ‘getValue’?
   30 |     m_sFocusOutAnimConfig.internalSpeed       = HyprlandAPI::getConfigValue(pHandle, configPrefix() + "out_speed")->floatValue;
      |                                                                                ^~~~~~~~~~
      |                                                                                getValue
src/IFocusAnimation.cpp: At global scope:
src/IFocusAnimation.cpp:33:6: error: no declaration matches ‘void IFocusAnimation::addConfigValue(void*, std::string, SConfigValue)’
   33 | void IFocusAnimation::addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue) {
      |      ^~~~~~~~~~~~~~~
src/IFocusAnimation.hpp:12:21: note: candidate is: ‘void IFocusAnimation::addConfigValue(void*, std::string, int)’
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                     ^~~~~~~~~~~~~~
src/IFocusAnimation.hpp:7:7: note: ‘class IFocusAnimation’ defined here
    7 | class IFocusAnimation {
      |       ^~~~~~~~~~~~~~~
src/IFocusAnimation.cpp:37:15: error: no declaration matches ‘SConfigValue* IFocusAnimation::getConfigValue(void*, std::string)’
   37 | SConfigValue* IFocusAnimation::getConfigValue(HANDLE pHandle, std::string name) {
      |               ^~~~~~~~~~~~~~~
src/IFocusAnimation.cpp:37:15: note: no functions named ‘SConfigValue* IFocusAnimation::getConfigValue(void*, std::string)’
src/IFocusAnimation.hpp:7:7: note: ‘class IFocusAnimation’ defined here
    7 | class IFocusAnimation {
      |       ^~~~~~~~~~~~~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:10,
                 from src/main.cpp:7:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
In file included from src/main.cpp:12:
src/Shrink.hpp: At global scope:
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
src/main.cpp: In function ‘void flashWindow(CWindow*)’:
src/main.cpp:22:128: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   22 |     auto* const PTYPE = g_bMouseWasPressed  ? &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:mouse_focus_animation")->strValue
      |                                                                                ^~~~~~~~
src/main.cpp:23:131: error: ‘class Hyprlang::CConfigValue’ has no member named ‘strValue’
   23 |                                             : &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:keyboard_focus_animation")->strValue;
      |                                                                                ^~~~~~~~
src/main.cpp: In function ‘void flashCurrentWindow(std::string)’:
src/main.cpp:29:111: error: ‘class Hyprlang::CConfigValue’ has no member named ‘intValue’; did you mean ‘getValue’?
   29 |     static auto* const PHYPRFOCUSENABLED = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:enabled")->intValue;
      |                                                                                ^~~~~~~~
      |                                                                                getValue
src/main.cpp: In function ‘void onActiveWindowChange(void*, std::any)’:
src/main.cpp:43:115: error: ‘class Hyprlang::CConfigValue’ has no member named ‘intValue’; did you mean ‘getValue’?
   43 |         static auto* const PHYPRFOCUSENABLED = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprfocus:enabled")->intValue;
      |                                                                                ^~~~~~~~
      |                                                                                getValue
src/main.cpp: In function ‘void onMouseButton(void*, std::any)’:
src/main.cpp:63:58: warning: comparison between ‘enum wl_pointer_button_state’ and ‘enum wlr_button_state’ [-Wenum-compare]
   63 |         g_bMouseWasPressed = PWLRMOUSEBUTTONEVENT->state == WLR_BUTTON_PRESSED;
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
src/main.cpp: In function ‘PLUGIN_DESCRIPTION_INFO pluginInit(void*)’:
src/main.cpp:76:121: error: C99 designator ‘intValue’ outside aggregate initializer
   76 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:enabled",                    SConfigValue{.intValue = 0      });
      |                                                                                ^
src/main.cpp:76:121: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from src/main.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/main.cpp:77:121: error: C99 designator ‘strValue’ outside aggregate initializer
   77 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:keyboard_focus_animation",   SConfigValue{.strValue = "flash"});
      |                                                                                ^
src/main.cpp:77:121: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/main.cpp:78:121: error: C99 designator ‘strValue’ outside aggregate initializer
   78 |     HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:mouse_focus_animation",      SConfigValue{.strValue = "flash"});
      |                                                                                ^
src/main.cpp:78:121: error: invalid use of incomplete type ‘struct SConfigValue’
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Shrink.hpp:3,
                 from src/Shrink.cpp:1:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
src/Shrink.cpp: In member function ‘virtual void CShrink::init(void*, std::string)’:
src/Shrink.cpp:10:81: error: C99 designator ‘floatValue’ outside aggregate initializer
   10 |     addConfigValue(pHandle, "shrink_percentage", SConfigValue{.floatValue = 0.5f});
      |                                                                                ^
src/Shrink.cpp:10:81: error: invalid use of incomplete type ‘struct SConfigValue’
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/HookSystemManager.hpp:12,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/Screencopy.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/ToplevelExport.hpp:6,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/ProtocolManager.hpp:4,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/Compositor.hpp:18,
                 from src/Shrink.cpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:63:8: note: forward declaration of ‘struct SConfigValue’
   63 | struct SConfigValue;
      |        ^~~~~~~~~~~~
src/Shrink.cpp: In member function ‘virtual void CShrink::onWindowFocus(CWindow*, void*)’:
src/Shrink.cpp:20:35: error: ‘getConfigValue’ was not declared in this scope; did you mean ‘HyprlandAPI::getConfigValue’?
   20 |     const auto SHRINKPERCENTAGE = getConfigValue(pHandle, "shrink_percentage")->floatValue;
      |                                   ^~~~~~~~~~~~~~
      |                                   HyprlandAPI::getConfigValue
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/managers/../protocols/../managers/../plugins/PluginAPI.hpp:133:37: note: ‘HyprlandAPI::getConfigValue’ declared here
  133 |     APICALL Hyprlang::CConfigValue* getConfigValue(HANDLE handle, const std::string& name);
      |                                     ^~~~~~~~~~~~~~
src/Shrink.cpp: In lambda function:
src/Shrink.cpp:30:68: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘goalv’; did you mean ‘goal’?
   30 |                 const auto GOALPOS      = pWindow->m_vRealPosition.goalv();
      |                                                                    ^~~~~
      |                                                                    goal
src/Shrink.cpp:31:64: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘goalv’; did you mean ‘goal’?
   31 |                 const auto GOALSIZE     = pWindow->m_vRealSize.goalv();
      |                                                                ^~~~~
      |                                                                goal
src/Shrink.cpp:33:61: error: missing template arguments before ‘*’ token
   33 |                 const auto* PANIMATION  = (CAnimatedVariable*)pShrinkAnimation;
      |                                                             ^
src/Shrink.cpp:33:62: error: expected primary-expression before ‘)’ token
   33 |                 const auto* PANIMATION  = (CAnimatedVariable*)pShrinkAnimation;
      |                                                              ^
src/Shrink.cpp:36:99: error: ‘class CAnimatedVariable<Vector2D>’ has no member named ‘vec’
   36 |                 pWindow->m_vRealPosition.setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.vec() / 2.f);
      |                                                                                ^~~
src/Shrink.cpp: In lambda function:
src/Shrink.cpp:40:36: error: missing template arguments before ‘*’ token
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                                    ^
src/Shrink.cpp:40:37: error: expected primary-expression before ‘)’ token
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                                     ^
src/Shrink.cpp:40:38: error: expected ‘)’ before ‘pShrinkAnimation’
   40 |                 ((CAnimatedVariable*)pShrinkAnimation)->resetAllCallbacks();
      |                 ~                    ^~~~~~~~~~~~~~~~
      |                                      )
src/Flash.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Flash.hpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/IFocusAnimation.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
In file included from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../Window.hpp:8,
                 from /home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/ConfigManager.hpp:16,
                 from src/IFocusAnimation.hpp:5,
                 from src/Shrink.hpp:3:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp: In member function ‘virtual std::string CGradientValueData::toString()’:
/home/aviherman/.local/share/hyprpm/headersRoot/include/hyprland/src/config/../config/ConfigDataValues.hpp:64:5: warning: no return statement in function returning non-void [-Wreturn-type]
   64 |     }
      |     ^
src/IFocusAnimation.hpp: At global scope:
src/IFocusAnimation.hpp:12:70: error: ‘SConfigValue’ has not been declared
   12 |     void            addConfigValue(HANDLE pHandle, std::string name, SConfigValue sValue);
      |                                                                      ^~~~~~~~~~~~
src/IFocusAnimation.hpp:13:5: error: ‘SConfigValue’ does not name a type
   13 |     SConfigValue*   getConfigValue(HANDLE pHandle, std::string name);
      |     ^~~~~~~~~~~~
src/Shrink.hpp:10:5: error: invalid use of template-name ‘CAnimatedVariable’ without an argument list
   10 |     CAnimatedVariable m_sShrinkAnimation;
      |     ^~~~~~~~~~~~~~~~~
make: *** [Makefile:4: all] Error 1

✔ all plugins built
✔ installed repository
✔ you can now enable the plugin(s) with hyprpm enable
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  5 / 5  Done!

I recently was involved in fixing another plugin, split-monitor-workspaces, that suffered from a similar issue: Duckonaut/split-monitor-workspaces#56

Please try my fork, I am currently using it with v0.37.1.

Hi, thanks for your help! Your fork compiled which is amazing, thanks!
I have the following in my hyprland.conf, but the effects aren't taking place:
plugin:hyprfocus {
    enabled = yes

    keyboard_focus_animation = shrink
    mouse_focus_animation = flash

    bezier = bezIn, 0.5,0.0,1.0,0.5
    bezier = bezOut, 0.0,0.5,0.5,1.0

    flash {
        flash_opacity = .9

        in_bezier = bezIn
        in_speed = 0.5

        out_bezier = bezOut
        out_speed = 3
    }

   shrink {
	shrink_percentage = .99
	in_bezier = bezIn
	in_speed = 1
	out_bezier = bezOut
	out_speed = 3
   }
}

@pyt0xic I take that back, it totally works, but it looks like shrinking is broken and only flashing functions

@pyt0xic I take that back, it totally works, but it looks like shrinking is broken and only flashing functions

Check the example config in the README.
mouse_focus_animation and keyboard_focus_animation have been replaced with a single setting focus_animation


BSD-3-Clause

The Modelica Association seems to be switching to the BSD-3-Clause license (instead of Modelica license) for the Modelica Standard Library:
https://github.com/modelica/Modelica/issues/2320
Once that is completed and released, we should consider switching to BSD-3-Clause as well.
https://choosealicense.com/licenses/bsd-3-clause/
https://opensource.org/licenses/alphabetical

When choosing a license for my Modelica library, I found @dietmarw's and @mtiller's Where impact got Going helpful.

So what should the library developer do? The simplest solution is to not use the “Modelica License Version 2.0” for libraries but rather go for standard licenses that are more compatible with open source, community driven development (e.g., MIT or BSD licenses). Interestingly, the old “Modelica License Version 1.1” is still suitable for user libraries since it does not contain the restrictions of having to change the package name.

Just some update. The Modelica Association has just agreed (voted on) to move away from the custom Modelica License 2 and will be using BSD 3-clause in future for all its projects.

@raulrpearson Thanks. Also, one can find a lot of related issues here on github:
https://github.com/search?q=license+language%3Amodelica&type=Issues&utf8=✓

MSL and IBPSA are now under BSD3,
so that we can also switch any time now.


Module does not have filename set

A module I depend on uses https://github.com/indexzero/node-pkginfo that breaks because module.filename is not set.
Any reason why module.__filename is set but not module.filename as per the node docs?

Yes that seems like a bug. We'll fix it for the next release.

Thanks @cpojer


Unfortunate layout overflow for allergens on scan card

What

[ ] Unfortunate layout overflow for allergens on scan card

Screenshots

Part of

#526

What would you expect? "Présence inconnue : moutarde" on one line?
Another thing is that "Poisson" is probably also an allergen, but as it's "important" there's no additional "allergens" subtitle, it's in the "important" block.

so what's happening on the scan card is "Clipping" if the card is too big,
only a portion of it is shown. We could employ a different design for scan
card, a condensed version of the current card (comma separated values?)
On Mon, 3 Jan 2022 at 22:13, monsieurtanuki @.***>
wrote:

What would you expect? "Présence inconnue : moutarde" on one line?
Another thing is that "Poisson" is probably also an allergen, but as it's
"important" there's no additional "allergens" subtitle, it's in the
"important" block.
—
Reply to this email directly, view it on GitHub
https://github.com/openfoodfacts/smooth-app/issues/839#issuecomment-1004362686,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABZRHYRJ5JAHNEDRFMIXXRLUUIGQNANCNFSM5LFZX4DA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

--
Cheers,
Jasmeet Singh


Highlight configuration options in text.

Use monospace tag for configuration options to avoid confusions.

Thanks @ercpe! We just need you to sign the InfluxData Contributor License Agreement (CLA) before we can merge community contributions.

Done.

Thanks! Merged!


Add a SystemParam that gives a resource and the previous value of that resource

What problem does this solve or what need does it fill?
When using resources it is often helpful to know what the value of the resource was the last time the system was run.
A simple example might be: if the player's score changed you could trigger a particle effect if it increased by more than a certain amount.
What solution would you like?
A SystemParam called WithPrevious that works exactly like Res except that it also has a method to access the previous value.
#[derive(Resource, Clone)]
struct Score {
    pub points: usize,
}

fn track_score(score: WithPrevious<Score>){
    if let Some(previous) = score.previous_if_changed(){
        if score.points > previous.points + 100{
            // Trigger cool effect
        }
    }
}

What alternative(s) have you considered?
This could easily be in an external crate but it is relatively short (~100  lines) and requires unsafe code (SystemParam is an unsafe trait).
Users can achieve this behavior themselves using Local<T> but it is quite fiddly and error prone.
The exact interface for accessing the previous value is up for grabs. I favour pub fn previous_if_changed(&self) -> Option<&'s T>
An alternative formulation might involve writing something like WithPrevious<Res<T>>, and that could support other inner system parameters (such as NonSend<T>) but that might not be possible to implement.
Additional context
I have written and tested the code for this and am happy to contribute a PR.

IMO this should be done externally. The SystemParam impl can be derived, making this a pretty approachable little helper :)


emul: Allow emulated drivers without a reg property

Make the reg property for emulated devices optional, to allow implementing a custom emulated driver, for example on a UART bus.

Marking as draft and implement actual UART peripheral emulation support.

Superseded by #75827


waiting for image on ROS2 dashing

I habe Ubuntu 18.04 and ROS1 Melodic and ROS2 dashing, and I tried making this package run on ROS2 dashing, but i couldn't make it.
The steps I did are the following one:

source /opt/ros/dashing/setup.bash
mkdir -p ~/darknet2_ws/src
cd ~/darknet2_ws/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git -b ros2
cd ..
colcon build

After that, the pachage builds correctly, but when runing ros2 launch darknet_ros darknet_ros.launch.py (with or without changing the directories of the topic to subscribe to), it gets stuck loading weights as so:
[INFO] [launch]: All log files can be found below /home/valde18/.ros/log/2021-06-23-10-16-32-082029-DESKTOP-H7QOGIF-18190
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [darknet_ros-1]: process started with pid [18200]
[darknet_ros-1] layer     filters    size              input                output
[darknet_ros-1]     0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16  0.150 BFLOPs
[darknet_ros-1]     1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
[darknet_ros-1]     2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32  0.399 BFLOPs
[darknet_ros-1]     3 max          2 x 2 / 2   208 x 208 x  32   ->   104 x 104 x  32
[darknet_ros-1]     4 conv     64  3 x 3 / 1   104 x 104 x  32   ->   104 x 104 x  64  0.399 BFLOPs
[darknet_ros-1]     5 max          2 x 2 / 2   104 x 104 x  64   ->    52 x  52 x  64
[darknet_ros-1]     6 conv    128  3 x 3 / 1    52 x  52 x  64   ->    52 x  52 x 128  0.399 BFLOPs
[darknet_ros-1]     7 max          2 x 2 / 2    52 x  52 x 128   ->    26 x  26 x 128
[darknet_ros-1]     8 conv    256  3 x 3 / 1    26 x  26 x 128   ->    26 x  26 x 256  0.399 BFLOPs
[darknet_ros-1]     9 max          2 x 2 / 2    26 x  26 x 256   ->    13 x  13 x 256
[darknet_ros-1]    10 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512  0.399 BFLOPs
[darknet_ros-1]    11 max          2 x 2 / 1    13 x  13 x 512   ->    13 x  13 x 512
[darknet_ros-1]    12 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
[darknet_ros-1]    13 conv    512  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x 512  1.595 BFLOPs
[darknet_ros-1]    14 conv    425  1 x 1 / 1    13 x  13 x 512   ->    13 x  13 x 425  0.074 BFLOPs
[darknet_ros-1]    15 detection
[darknet_ros-1] mask_scale: Using default '1.000000'
[darknet_ros-1] [INFO] [darknet_ros]: [YoloObjectDetector] Node started.
[darknet_ros-1] [INFO] [darknet_ros]: [YoloObjectDetector] Xserver is running.
[darknet_ros-1] [INFO] [darknet_ros]: [YoloObjectDetector] init().
[darknet_ros-1] YOLO V3
[darknet_ros-1] Loading weights from /home/valde18/darknet2_ws/install/darknet_ros/share/darknet_ros/yolo_network_config/weights/yolov2-tiny.weights...Done!

Then after a few minutes (2-3 min) without displaying anything else besides the loading weights line, it displays dozens of [darknet_ros-1] Waiting for image., but the image is being published onto the /camera/rgb/camera_raw topic, so it shouldn't be neccesary to change the path onto darknet_ros.launch.py, YoloObjectDetector.cpp and ros.yaml. Also, by doing a ros2 topic echo /camera/rgb/camera_raw, I can see how the data it's being published correctly, and its of type sensor_msgs/msg/Image.

Hey, how did you solve this? I am facing the same issue

In my case it was a problem with the publisher that I had on ROS2 on windows, and the subscriber in WSL Dashing, since I was able to make a ros2 topic echo on WSL and see the data being published, but I was unable for some reason to subscribe to it. That being said, I ended making another publisher that send the data of the image that I needed properly, and to make sure that from a standar topic on ROS2 dashing I was able to subcribe to it and see the image. Once I properly send the image topic, it did work as espected.


Import Full review data

Looks like I only imported the partial version.
This should help clear up any of the broken reviews I submitted for testing, too.
(We will have to update our randint() method used to give reviews an ID in the add_dealer_review method.)

We need more cars for dealers in the sql db too... not seeing any sort of pre-determined data anywhere, so I guess we'll have to make a script...

There's something about the "reviews-full" file that won't let couchimport actually parse the docs...

Copied the data into the "reviews.json" file and it worked fine. (Do db names have to match the file?)

The need for car models in the database can be a new task...


Refactoring repository into multiple crates

Required for using derive macros, which depend on one part of the core library in other parts of the core library

Actually, refactoring is not required: I found a way how I can import derive macros into the main crate


Russian pluralisation rules are out of sync with other resources

The following code works in other locales, but fails in Russian:
alert((new TwitterCldr.TimespanFormatter()).format(3));

According to the pluralization rules few category should be used for number 3, but there's no formatting patterns for this category.
It might have something to do with the fact that at some point few category was mistakenly removed from Russian pluralization rules in CLDR. It should be put back both into pluralization rules and into other resources (e.g., time formatting patterns).

It looks like this may still be an issue; using the updated version of the twitter_cldr_js gem - v2.3.2, we're still seeing the same error with certain pluralization forms in Russian, for example in the console:
new TwitterCldr.TimespanFormatter().format(-119)
gives
Uncaught TypeError: Cannot read property 'replace' of undefined
while
new TwitterCldr.TimespanFormatter().format(-21)
(as well as others) works fine:
"21 секунду назад"

@mathewbgordon v2.3.2 was released in September, well before the issue was fixed. I guess we should release a new version. Meanwhile, you can try using ru.js from master. I just tested it and for
new TwitterCldr.TimespanFormatter().format(-119)

it returns 2 минуты назад that is what I'd expect it to return.

@mathewbgordon I just pushed v2.4.0 to rubygems, give it a try. It contains quite a few resources changes (we upgraded to CLDR v26) and several fixes including the one for this issue.

Yikes I thought I had published this a long time ago. Totally my bad.

@KL-7  seems good so far - thanks!


added a android program that implements fragment

added a android program that implements fragment

added a android program that implements fragment


Segmentation mask is flipped

... Another strange problem is that in ITK-Snap, when I first load the ct image and then add the result as segmentation, the direction will be reversed. It was correct when I chose to add as additional. I'm not sure where is the problem.

Originally posted by @ZZZsn in https://github.com/wasserth/TotalSegmentator/issues/18#issuecomment-1250803493
I encountered the same problem, so I thought it may deserve its own issue.
As an input data, I have an abdominal ct scan from the Learn2Reg challenge. When I open it in ITKSnap I get the following meta data with dimensions (x: 384, y: 320, z: 512):
Voxel Spacing (x: 1, y: 1, z: 1), Origin (x: 0, y: -318, z: 0), Orientation Code: RAI
When I open one of the segmentation masks, however, I get:
Voxel Spacing (x: 1, y: 0.9984, z: 0.999), Origin (x: 383, y: 1, z: 0), Orientation Code: RAI
As @ZZZsn mentioned: When I load the segmentation as an additional image, it fits perfectly. When I load it as a segmentation, it is flipped. So how comes that the spacing, but most of all the origin, is altered from the original ct scan?

Good questions. Can you send me the image so I can try to reproduce the issue?

I have encountered this problem before, but I haven't encountered it since I updated the new version. I hope this solution will help you find the reason.

I changed the code so now all header fields from the input are copied to the output file. Can you try it again with the latest master?

That works fine, thanks a lot. Though, I had to downgrade to python 3.9 because of the following error when trying to install TotalSegmentator with python 3.10
ERROR: Could not find a version that satisfies the requirement SimpleITK==2.0.2 (from totalsegmentator) (from versions: 1.0.1, 1.2.0, 2.1.0, <IP_ADDRESS>, <IP_ADDRESS>, 2.2.0)     ERROR: No matching distribution found for SimpleITK==2.0.2

fyi. I had no issues loading to itksnap.
--
single nifti can be generated using wasserth's convenience method from totalsegmentator.libs import combine_masks_to_multilabel_file
Output organs from TotalSegmentator looks amazing (testing on my hospital's wb pet/ct protocol).

color lut file available here. https://github.com/pangyuteng/totalsegmentator-and-friends/blob/main/assess/docker-with-weights/itksnap.label


Correction to Script

Missing a continue line in:
Update database and set zone redundancy as false
az sql db update
--resource-group myResourceGroup
--server $servername
--name mySampleDatabase
--zone-redundant false
Should be:
Update database and set zone redundancy as false
az sql db update
--resource-group myResourceGroup
--server $servername
--name mySampleDatabase
--zone-redundant false

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 1cc6f34d-ba83-563c-b4a1-82bcd9698472
Version Independent ID: dbb4ea03-e3cc-ae79-4145-aee0253fd8f0
Content: CLI example-create an Azure SQL database
Content Source: articles/sql-database/scripts/sql-database-create-and-configure-database-cli.md
Service: sql-database
GitHub Login: @Janeng
Microsoft Alias: janeng

@cybermohr Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

Reference:
Update database and set zone redundancy as false
az sql db update
--resource-group myResourceGroup
--server $servername
--name mySampleDatabase
--zone-redundant false
Upon further investigation, I am not seeing what changes needs to occur.

Attached is a screen shot. I am not sure what happened when I pasted in comments. The line is missing a backslash. It throws and error.

Brian P. Mohr | Owner
MCSE: Cloud Platform and Infrastructure, C|NDA, CISSP
<EMAIL_ADDRESS>| Mobile<PHONE_NUMBER>
Blog: https://cybermohr.ghost.iohttps://cybermohr.ghost.io/
From: Mike Ubezzi<EMAIL_ADDRESS>Sent: Wednesday, May 16, 2018 4:57 PM
To: MicrosoftDocs/azure-docs<EMAIL_ADDRESS>Cc: Brian Mohr<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [MicrosoftDocs/azure-docs] Correction to Script (#8710)
Reference:
Update database and set zone redundancy as false
az sql db update
--resource-group myResourceGroup
--server $servername
--name mySampleDatabase
--zone-redundant false
Upon further investigation, I am not seeing what changes needs to occur.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/azure-docs/issues/8710#issuecomment-389662912, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AZoTXE3e_P69qMPKnZ6uZp0On_r5fJhsks5tzJKUgaJpZM4UBpEG.

@cybermohr I have highlighted the missing backslashes. I will assign to the content owner for an update.

The content author is identified as @janeng in the metadata but is most likely @jan-eng ?!

@CarlRabeler, can you please take this, correct the content author as I am not working on SQL DB at the moment, and sync probably Sasha to see what is the correct setting? Thanks!

@cybermohr thanks for catching this - PR is pending

done
#please-close

@cybermohr We will now proceed to close this thread. If there are further questions regarding this matter, please reopen it and we will gladly continue the discussion.


add relational, min, max, floor, ceil, sqrt, arctan2 to ParameterExpression

Summary
Adds relational expressions to ParameterExpression as well as floor, ceil, max, min, sqrt, arctan2, and, or, piecewise.
Details and comments
Depends on #4854
Resolves #5276
Resolves #6376

@ewinston Any update on this PR?

@ewinston @kdk What is the status of the PR?

Hi @peendebak this pr opens up broadened functionality of ParameterExpressions and there may be some concern about whether it is needed particularly when considering the desire to reduce dependence on sympy due to speed considerations. Do you have a use case you were considering?

@ewinston I have two use cases. Both involve ParameterExpressions which start symbolic, but at some point in the computation are just floats (but represented as a ParameterExpression). Then I want to perform either a comparison on the expression, or take the abs and then compare. For example here is the abs used: https://github.com/Qiskit/qiskit-terra/pull/6472/files#diff-ce3115c08c6064bff6d00bd1ec433fa5568dabf9db1f8dbb2979032147e09a00R50 . The other use case was (I think) a comparison to check whether a duration is strictly positive.
These cases do not require the full PR, but just the abs and comparison operators.
Both cases can be solved by first casting to float and then performing the operation, but this requires casts at various places and it is a little bit hard to predict when it is needed and when not.
Another option that keeps the ParameterExpression small and would (perhaps) improve performance would be to automatically convert a ParameterExpression without symbols to a float
from qiskit.circuit import Parameter

p=Parameter('s')
delta = p-p # is still a ParameterExpression, but could be a float
delta > 0 # currently fails, but would work if the result of p-p would be cast to float automatically

This PR is old, and I think that incoming changes to how classical types are handled will render all of the relational parts anyway.  I've laid out my reasoning in other places (e.g. https://github.com/Qiskit/qiskit-terra/pull/7497#pullrequestreview-855681162), but primarily I think that right now ParameterExpression is designed to represent real- and complex-valued expressions, not Boolean-valued relational statements.  All the usage examples I have seen for these would not work with actual symbols, and there is no part of Qiskit that would actually make use of symbolic relational arguments.  ParameterExpression doesn't have a type associated with it, so there would be no way for a user of ParameterExpression to know what sort of value was being represented.
The uses cited all seem to revolve around issues caused by ParameterExpression.bind not producing a float once it is fully bound, or our failure to ensure that inputs are numerical in other places in the code.  I'm very strongly against attempting to patch ParameterExpression with more and more relational expressions to try and make this work; it's not what it's designed to be, and as best as I can see, it seems to be fixing the wrong problems.
Mathematical operations that return real values could be useful, but it doesn't seem like they're super pressing.

My use case for this was getting the RVGate to be in the standard_gates directory. I believe at the time that gates in that directory were required to take ParameterExpression arguments but the decomposition method we used needed something numeric. Using relationals and Piecewise I had a symbolic decomposition just about worked out (which exists in these tests) but abandoned it since it was just a "would be nice" sort of thing.
I'll close this now unless there is stronger justification in the future.


Use neostandard + add more static code analysis

This replaces standard with neostandard and:

adds the result of running a npx eslint --fix
removes no longer supported /* eslint-env mocha */ and replaces it with env: ['mocha'] in the neostandard config (it adds it globally, but I think that's okay for this project, a more deluxe solution would be to instead do: https://github.com/voxpelli/eslint-config/blob/main/base-configs/mocha.js)
adds a neostandard badge, I opted for the one without the neostandard colors 😜

Also:

adds rimraf, because there's a dependency on it that worked when standard made it be included
adds knip to help avoid the above
cleaned up stuff and refactored some stuff to help knip
added installed-check to ensure that the engine range is good

Thanks for doing all of that. No breaking changes right?

Only such change would be the narrowing of the engine definition to match that of the dependencies, else nothing 😌

@bcomnes You want me to merge or you will merge? :)

I won't have time till later so feel free.


Clicking a file link doesn't open it

Branch: master
Visual Studio Code, Version 1.17.2
Clicking on a link to a file doesn't open that file.
I noticed this

in the rendering of an instance in "Usages from your code". I closed the file first to make sure that an open file isn't causing this. See screenshot 1.
clicking a "def" link in a hover popup. A click should move the caret to the line which is given in the link, I think. See screenshot 2.

Screenshot 1:

Screenshot 2:

Reassigned to me because I can't reproduce this reliably atm

Closing as I can't reproduce this


Something isn't handling encoding correctly

Running cargo about generate about.hbs > license.html on my project, which has a dependency on is_ci 1.1.1 generates the following output in the HTML:
                <pre class="license-text">The ISC License

Copyright (c) Kat March├ín and other contributors.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.Apache License
</pre>

the problem (in case it's not obvious) is that this says March├ín, while the original says Marchán:
The ISC License

Copyright (c) Kat Marchán and other contributors.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.Apache License

(I've gone and checked that the file (presumably) used as input (i.e. ~/.cargo/registry/src/github.com-1ecc6299db9ec823/is_ci-1.1.1/LICENSE does indeed have Marchán as such when read as UTF-8.
Device:

OS: Windows 10
Version 0.5.1

fn main() {
    println!("á");
}

If you run cargo run --release > new.txt

Powershell writes ├í to the file.
Cmd writes á to the file.

Ah yeah, there does seem to be an issue with Powershell and encoding.
That's not great. I guess that's the problem then. I was aware that it
saved as UTF-16LE, but not that it also mangled the input UTF-8 in the
process. It's weird how it can display the output from the program just
fine, but if you try to redirect it, well, time to mangle!
On Sat, Jul 16, 2022 at 1:55 PM Shouvik Ghosh @.***>
wrote:

fn main() {
println!("á");

}
If you run cargo run --release > new.txt

Powershell writes ├í to the file.
Cmd writes á to the file.

—
Reply to this email directly, view it on GitHub
https://github.com/EmbarkStudios/cargo-about/issues/198#issuecomment-1186164916,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAF3MAUR2UDCMV7AFJM4NUDVUKPLDANCNFSM52OYFLXQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

Ahh ok, that's indeed unfortunate. I would accept a PR that adds either a check for if the terminal is powershell and raise an error if stdout is being redirected and point the user to the -o flag, or at least a warning in the documention or Cli help


rubyzip 1.2.1 dependency in selenium-webdriver is shown to have security vulnerabilities.

To follow up on this issue, rubyzip 1.2.1 is now also shown to have security vulnerabilities. See details here: rubyzip/rubyzip#369
Solution: Disable rubyzip or apply a patch whenever one becomes available.
$ bundle audit update
Updated ruby-advisory-db
ruby-advisory-db: 321 advisories

$ bundle audit
Invoking bundle-audit Gemfile Scanner...
Name: rubyzip
Version: 1.2.1
Advisory: CVE-2018-1000544
Criticality: Unknown
URL: https://github.com/rubyzip/rubyzip/issues/369
Title: Directory Traversal in rubyzip
Solution: remove or disable this gem until a patch is available!

Vulnerabilities found!

$ gem uninstall rubyzip

You have requested to uninstall the gem:
        rubyzip-1.2.1

selenium-webdriver-3.14.0 depends on rubyzip (~> 1.2)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN]  n
ERROR:  While executing gem ... (Gem::DependencyRemovalException)
    Uninstallation aborted due to dependent gem(s)

Simply run a bundle update.
rubyzip bumped from 1.2.1 to 1.2.2.


Chat Feature in Meshmap design section

Current Behavior

There is not any option for chatting between users who are active or designing in a group while designing MeshMap.
Desired Behavior

We can add a normal chat feature so that users can communicate or discuss while designing MeshMap.
Implementation

Acceptance Tests

Mockups

Contributor Guides and Handbook

🛠 Meshery Build & Release Strategy
📚 Instructions for contributing to documentation

Meshery documentation site and source

🎨 Wireframes and designs for Meshery UI in Figma
🙋🏾🙋🏼 Questions: Discussion Forum and Community Slack

I want to work on this issue.

\assign

we can use sockets

Mockup added.

we can use sockets

Yes, MeshMap uses sockets currently.

okay


fake loader when the profile doesn't exist

Context:

Start a conversation
Person closes/deletes its account
Open chat page
See weird 'fake loader' in the page
Doesn't look great

Pictures

I think @aapeliv added this on purpose for deleted accounts, but I agree it can be confusing. At first I thought it was just content that still needed to load.
I think instead we should have "deleted account" or some other kind of placeholder. We should probably look at how other platforms handle this (reddit just does [deleted]). In any case this needs discussion/design tho so I'm moving this to engineering backlog til we decide on something.

I think @aapeliv added this on purpose for deleted accounts, but I agree it can be confusing. At first I thought it was just content that still needed to load.

It's not on purpose. There's another issue for this: https://github.com/Couchers-org/couchers/issues/4297

closing this one in favor of https://github.com/Couchers-org/couchers/issues/4297


PermissionError with default config

I just spin up a docker container as basic as it can be.
version: "2.1"
services:
  wikmd:
    image: linbreux/wikmd:latest
    container_name: wikmd
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
    ports:
      - 5000:5000
    restart: unless-stopped

I start the application and the default page is shown, but if I try to edit it or create a new one I am having this error:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/app/wikmd/wiki.py", line 272, in edit_homepage
    save(page_name)
  File "/app/wikmd/wiki.py", line 66, in save
    content = plugin.process_md(content)
  File "/app/wikmd/plugins/draw/draw.py", line 26, in process_md
    return self.search_for_pattern_and_replace_with_uniqueid(md)
  File "/app/wikmd/plugins/draw/draw.py", line 83, in search_for_pattern_and_replace_with_uniqueid
    self.create_draw_file(filename)
  File "/app/wikmd/plugins/draw/draw.py", line 68, in create_draw_file
    shutil.copyfile(os.path.join(self.this_location, "default_draw"), path_to_file)
  File "/usr/lib/python3.6/shutil.py", line 121, in copyfile
    with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: '/app/wikmd/plugins/draw/drawings/draw_e03c70da-ab4a-4c53-bbe4-ead5a7fa36ee'

Maybe something related with permissions on /app/wikmd/ path?

Hi @goliath888,
Thanks for letting me know. After implementing the new plugin system there were some permissions problems in the docker images. eba81bbaafdbdab478e3ada76937f64973c86578 should fix this.
You should be able to pull the latest docker image now. Let me know if there is something else.

Yes, it is working perfectly now, thanks.


Add route dictionary generator

Goal of this PR
Since it's a lot of work to keep up with new constructors and to maintain the route dictionary, I made a tool to automatically keep it up to date. It also has a nice user interface!
Fixes #205

How to test it

go run tools/automatic_route_dictionary_updater/main.go

Pull Request Test Coverage Report for Build 663

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 659:
0.0%

Covered Lines:
365

Relevant Lines:
365

💛  - Coveralls


fix: HTTP 500 from "List cluster Azure resource" Geneva Action for unknown resource types

Which issue this PR addresses:
Fixes https://msazure.visualstudio.com/AzureRedHatOpenShift/_workitems/edit/12866432
What this PR does / why we need it:
When listing Azure Resources there can be cases where resources are returned whose type is not defined in pkg/util/azureclient/apiversions.go and would result in an HTTP 500 being returned for the Geneva Action. This prevents SREs from investigating the known resource types that are defined.
This change switches from returning an error to logging a warning instead, so as to allow the process to complete and a list of known/defined resource types to be returned.
Test plan for issue:
Should be covered by existing tests. Ran e2e tests in a dev environment to confirm.
Is there any documentation that needs to be updated for this PR?


Node engine restriction, but why?

Hi. Is there a specific reason why the node engine is restricted?
I'm using node 18 and it is working fine, but the warning bugs me :)
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '<EMAIL_ADDRESS>npm WARN EBADENGINE   required: { node: '>=16.15.0 <17.0', npm: '>=8.10.0 <9.0' },
npm WARN EBADENGINE   current: { node: 'v18.7.0', npm: '8.15.0' }
npm WARN EBADENGINE }

I tested with the above node and npm combinations and will support any issues with these specific version. Other versions may work but i can not guarantee supporting all the possible node/npm versions.
We can relax the node version to include 18.x if this works fine. Can you please create a PR? :) thank you

Hi @ryaa, thanks for your quick response. I raised a PR. I'm still not convinced that this is the best approach, as the restriction should come from the underlying framework (Capacitor) and this plugin should (automatically) support the same versions. But that is just my opinion :) Thanks for your work

as the restriction should come from the underlying framework (Capacitor) and this plugin should (automatically) support the same versions.

make sense. thank you for the contribution.


AMBA policy ALZ_ServiceHealth_ActionGroups Missing when remediating AMBA policies - Bug Report

When remediating AMBA policy assignments (brownfield environment), following steps outlined here running the following commands:
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $managementManagementGroup -policyName Alerting-Management
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $connectivityManagementGroup -policyName Alerting-Connectivity
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $identityManagementGroup -policyName Alerting-Identity
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $LZManagementGroup -policyName Alerting-LandingZone
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $LZManagementGroup -policyName Alerting-HybridVM
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $pseudoRootManagementGroup -policyName Alerting-ServiceHealth
.\patterns\alz\scripts\Start-AMBARemediation.ps1 -managementGroupName $pseudoRootManagementGroup -policyName Notification-Assets

All remediation commands complete successfully, apart from Start-AMBARemediation.ps1 -managementGroupName $pseudoRootManagementGroup -policyName Alerting-ServiceHealth, producing the following error:
Exception: /azure-monitor-baseline-alerts/patterns/alz/scripts/Start-AMBARemediation.ps1:106
Line |
 106 |          throw "No policy assignments found for policy $policyName at  …
     |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | No policy assignments found for policy ALZ_ServiceHealth_ActionGroups at management group scope *redacted*

Hi @Greg-Court,
In #278 you mentioned that you rolled out the latest version using Azure CLI, which got me revisiting this issue.
My initial reaction is not correct because it applies solely to deployments via the ALZ portal accelerator.
I've looked into the script and identified a problem relating to how the wait time was implemented. After initiating the remediations of ALZ_ServiceHealth_ActionGroups, a 5 minute delay is factored in because it is a prerequisite for the subsequent deployment of service health alerts. The code that was implemented to address the remediation of just the ALZ_ServiceHealth_ActionGroups prior to the wait time failed to accurately list the policy, resulting in this error.
The latest script update is in our development branch. The merge to the main branch is scheduled for completion by the end of August.

Start-AMBARemediation.ps1


Fix parsing (maybe it is just the formatting display?) of send amount from ether.js (not sure about web3.js) in actionsheet

Visit https://web3.hboon.repl.co/ (This sends 0.0001 ETH to me). Don't have to confirm the transaction.
Refer: https://github.com/AlphaWallet/alpha-wallet-ios/pull/4896#issuecomment-1166901989
Just noticed that although it says 0.00000 ETH (wrong), it says 0.01 USD. So, maybe the ETH amount is actually correct, just not formatted correctly for display?

It wrongly adds last zero, there should be 4 digits, while using short formatter, it adds last zero.

in addition, it doesn't work with less that zero numbers, actually new balance should display '-0.0000' value, in case if we have zero balance.


Disable composer warning about xdebug

I wonder why disable the warning? I found it useful because I keep a php executable around that can run composer faster than my xdebug enabled one. So had I not had the warning I'd still be waiting for composer update to this day

It's only hidden in travisci, your local composer will keep showing you that boring message :wink:

Gotcha, thanks!


Route snapper is picking up irrelevant edges

Footways and things are currently included. Need to do the graph refactor to have a customizable mode, and use it here

95982c2e4fe64e6369e8df21ab5a80be3839f86b started this. But there's more work to do to initially clean up the graph of possibly editable roads:

[ ] Edinburgh has lots of pedestrian crossings tagged just as highway=footway, like https://www.openstreetmap.org/way/400692851. Ideally we'd prune.
[ ] Need to prune out disconnected components, like highway=path in a golf course, https://www.openstreetmap.org/way/909112247

In case of use/interest, we remove irrelevant ways with the the get_cycling_network() function early in the process.

Function documentation: https://nptscot.github.io/osmactive/reference/get_cycling_network.html
Regex for highway values we exclude:

    "abandoned|bridleway|bus_guideway|byway|construction|corridor|disused|elevator|emergency|escalator|escap",
    "|far|fixme|gallop|historic|motorway|no|planned|platform|proposed|raceway|rest|road|services|steps|track"

Source: https://github.com/nptscot/osmactive/blob/e7372dee246af427781e35e863d40cdbbdefe405/R/osmactive.R#L50C1-L52C1

Bicycle values we exclude:

    "mtb|discouraged|unknown|no"

It could be beneficial to align these and I think the function is imperfect, so any issues with the outputs let us know. You can see the results here: https://nptscot.github.io/#/clos/#11.15/55.939/-3.2132

Or ideas for improvement..

Thanks, I was referring to that filtering. It'll be something to iterate on. For NPW, we're not just trying to reason about existing infrastructure, but also let people quickly select roads to consider improvements. If we filter out too much, then somebody has to draw freehand. What if there's a very poor surface track and someone's proposal is to pave it and make a proper rural shared use path?

What if there's a very poor surface track and someone's proposal is to pave it and make a proper rural shared use path?

Oh yes, so there are different filtering requirements for the 'currently cyclable network' data that osmactive gets and the 'potentially cyclable network after interventions' network.

I'm now trying to make sure NPW and NPT match much better on detecting existing infra, and in fact, pruning out some edges from consideration in the first place. The subtlety is that NPW can modify something currently unsuitable to make it become suitable, so we may need to include more cases upfront, but not assign them an existing infra type.
You can now debug this better in the "Existing network" layer by toggling two options. osmactive's view:

NPW's currently very buggy view:

There's lots of shared footways like https://www.openstreetmap.org/way/933658433 that're only tagged highway=path, nothing else. https://github.com/nptscot/osmactive/blob/912b61e6d0b6403f1737989bb22a84ca5ea73af7/R/osmactive.R#L141   osmactive is pretty strict about these, totally discarding footways and paths without explicit bicycle designation and explicitly good surfacing.
So the question for @Robinlovelace and @mvl22 -- should we more or less match osmactive's choices in NPW? It's indeed confusing right now that there are so many paths in the middle of nowhere that you can snap to. In the worst case, if we wind up excluding existing paths that the user might want to snap to and use for making real improvements, then they could fall back to drawing new freehand roads. It might also be simpler to start by being stricter and matching osmactive closely, and then relaxing in gradual ways as we do some testing and discover edge cases we do want to include. And when that happens, maybe osmactive might want to change too.

Filtering out paths without explicit bicycle=yes|designated helped massively. Just as a code walkthrough, the approach in NPW is two-stage. https://github.com/nptscot/npw/blob/main/backend/src/existing.rs
First Highway::classify decides if an edge should be included in the model at all, and if so, captures the OSM highway type as an explicit enum list: https://github.com/nptscot/npw/blob/569d84372bebc0df17fd20c520eb3848b49eead7/backend/src/existing.rs#L13C1-L25C10
Then to decide if there's any existing infra on something, https://github.com/nptscot/npw/blob/569d84372bebc0df17fd20c520eb3848b49eead7/backend/src/existing.rs#L141 handles things based on that highway enum. I found the osmactive https://github.com/nptscot/osmactive/blob/912b61e6d0b6403f1737989bb22a84ca5ea73af7/R/osmactive.R#L244 equivalent hard to follow, because the cases for roads vs cycleway/path/footway/pedestrian are so different. The results don't match osmactive well yet, but I'm working through the mismatches

should we more or less match osmactive's choices in NPW?

It's a reasonable starting point but, as you say, it will likely make sense for the NPW editor to have access to more paths. That can be added later though. Great that removing paths without certain tags worked. I wouldn't worry too much about osmactive compatibility for now as they are quite different use cases. osmactive focusses on visualisation existing active travel infrastructure, while the NPW is more about what it could be in the future.

Edinburgh has lots of pedestrian crossings tagged just as highway=footway, like https://www.openstreetmap.org/way/400692851. Ideally we'd prune.

Personally I would advise against pruning, as inevitably sometimes highway=footway will be part of a genuine overall route. For instance, there may be a very short spur going over a footway which provides vital connectivity.
In general I would take a relatively strict approach, as laxity only promotes sloppy mapping. In my view it is generally best to adopt as pure an approach in data consumption as possible, and let errors be visible in the mapping, so as to motivate fixes. OSM data fixes don't usually take that long.
In this example I've spent five minutes fixing up a big pile of those crossings in that area:
https://www.openstreetmap.org/changeset/160306653
If you have mapping showing these, let me know and I'll zap more if possible.

Need to prune out disconnected components, like highway=path in a golf course, https://www.openstreetmap.org/way/909112247

Yes, disconnected components are very likely to be either stuff like courtyards or paths in the middle of grassed areas, e.g. a ring round a fountain. They can be safety pruned. If something is genuinely part of a path network it will or should be connected.


[spaceship] fix crash deleting testers

Checklist

[x] I've run bundle exec rspec from the root directory to see all new and existing tests pass
[x] I've followed the fastlane code style and run bundle exec rubocop -a to ensure the code style is valid
[x] I've read the Contribution Guidelines
[x] I've updated the documentation if necessary.

Motivation and Context
Fixes a crash that happens when calling tester.delete_from_apps(apps: [app])
Description

Sure. I would’ve fixed the tests but I’m not that well versed in ruby/rake. Im glad you did it 😀