java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface! 🐛

What's happening?
First of all its not a duplicate issue. I earlier faced the switching camera issue with same error but that fixed with adding "key" attribute, thanks for that.
What's happening in my case is I am having a adding attachment button on my camera screen which uses react-native-document-picker to pick files, Now if I click the add attachment button, it opens up the file manager to pick the file and once i click on any file it crashes the app with above error meesage.
Initially I thought its some error from react-native-document-picker but when I tried it somewhere else in the app, it worked absolutely fine. Then I came to a conclusion that it definitely an error somewhat like switching camera as I faced the same error message
Reproduceable Code

useEffect(() => {
        const devices = Camera.getAvailableCameraDevices()
        const deviceR = getCameraDevice(devices, 'back', {
            physicalDevices: ['wide-angle-camera']
        })
        const deviceF = getCameraDevice(devices, 'front', {
            physicalDevices: ['wide-angle-camera']
        })
        setRearCamera(deviceR)
        setFrontCamera(deviceF)
    }, [])

const handleDocumentPick = async () => {
        try {
            const result = await DocumentPicker.pick({
                presentationStyle: "formSheet",
                copyTo: 'cachesDirectory',
            })
            console.log("🚀 ~ file: index.tsx:383 ~ handleDocumentPick ~ result:", result)
            navigation.goBack();
        } catch (error) {
            console.log("🚀 ~ file: index.tsx:384 ~ handleDocumentPick ~ error:", error)
        }
    }

//Camera Code

<Camera
     ref={camera}
     key={deviceState === DEVICE_STATE.REAR ? rearCamera.id : frontCamera.id}
     style={{ alignItems: "center", flex: 1, position: "absolute", top: 0, bottom: 0, left: 0, right: 0, zIndex: -2 }}
     device={deviceState === DEVICE_STATE.REAR ? rearCamera : frontCamera}
     photo
     video={true}
     orientation="portrait"
     isActive={isFocused}
/>

Relevant log output
FATAL EXCEPTION: mrousavy/VisionCamera.main
                                                                                Process: com.gravhlmobileapp, PID: 12011
                                                                                java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!
                                                                                at android.hardware.camera2.CaptureRequest.convertSurfaceToStreamId(CaptureRequest.java:765)
                                                                                at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest(CameraDeviceImpl.java:1259)
                                                                                at android.hardware.camera2.impl.CameraDeviceImpl.setRepeatingRequest(CameraDeviceImpl.java:1315)
                                                                                at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:313)
                                                                                at com.mrousavy.camera.core.CameraSession.updateRepeatingRequest(CameraSession.kt:574)
                                                                                at com.mrousavy.camera.core.CameraSession.startRunning(CameraSession.kt:552)
                                                                                at com.mrousavy.camera.core.CameraSession.access$startRunning(CameraSession.kt:49)
                                                                                at com.mrousavy.camera.core.CameraSession$configureSession$1.invokeSuspend(CameraSession.kt:167)
                                                                                at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                                                                                at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                                                                                at android.os.Handler.handleCallback(Handler.java:942)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                at android.os.Looper.loopOnce(Looper.java:201)
                                                                                at android.os.Looper.loop(Looper.java:288)
                                                                                at android.os.HandlerThread.run(HandlerThread.java:67)
                                                                                Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@8f8d4d4, mrousavy/VisionCamera.main]

Camera Device
{
    "id": "0",
    "position": "back",
    "hasTorch": false,
    "hasFlash": false,
    "name": "BACK (0)",
    "isMultiCam": false,
    "supportsRawCapture": false,
    "supportsFocus": true,
    "physicalDevices": [
        "telephoto-camera"
    ],
    "neutralZoom": 1,
    "supportsLowLightBoost": false,
    "minZoom": 1,
    "maxZoom": 10,
    "hardwareLevel": "limited",
    "sensorOrientation": "landscape-right",
    "formats": [
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 480,
            "videoWidth": 640,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 288,
            "videoWidth": 352,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 240,
            "videoWidth": 320,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 144,
            "videoWidth": 176,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 720,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 640,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 480,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 352,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 288,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 320,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 240,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 176,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 144,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 720,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        },
        {
            "maxFps": 30,
            "fieldOfView": 35.48934190849526,
            "photoWidth": 1280,
            "videoHeight": 960,
            "videoWidth": 1280,
            "minFps": 1,
            "minISO": 0,
            "maxISO": 0,
            "supportsDepthCapture": false,
            "supportsVideoHDR": false,
            "photoHeight": 960,
            "supportsPhotoHDR": false,
            "autoFocusSystem": "contrast-detection",
            "videoStabilizationModes": [
                "off",
                "off"
            ],
            "pixelFormats": [
                "yuv",
                "native"
            ]
        }
    ]
}

Device
Emulator - API 33
VisionCamera Version
3.2.2
Can you reproduce this issue in the VisionCamera Example app?
I didn't try (⚠ your issue might get ignored & closed if you don't try this)
Additional information

[ ] I am using Expo
[X] I have enabled Frame Processors (react-native-worklets-core)
[X] I have read the Troubleshooting Guide
[X] I agree to follow this project's Code of Conduct
[X] I searched for similar issues in this repository and found none.

First of all its not a duplicate issue

Why not?

fixed with adding "key" attribute

This is NOT a fix. That is a hacky workaround but doesn't really solve the issue, and this is slow as well.

I faced the same error message

Duplicate of #1773 and #1925 then.


Batch Trigger upgrades

Increases batch sizes from 100 to 500
Larger (>20) batches are now processed in the background and won't timeout with a 504 error
Each batch item can trigger a different task, instead of all items only being able to trigger a single task
More detailed response when calling batch trigger
Can now pass an idempotency key at the batch level, not just each individual item
Added ability to subscribe to a batch of runs using runs.subscribeToBatch
Can now list runs for a batch when using runs.list
Can now retrieve a batch using batch.retrieve

Added new batch.trigger and batch.triggerByTask methods that allows triggering multiple different tasks in a single batch:
import { batch } from<EMAIL_ADDRESS>import type { myTask1, myTask2 } from './trigger/tasks';

// Somewhere in your backend code
const response = await batch.trigger<typeof myTask1 | typeof myTask2>([
  { id: 'task1', payload: { foo: 'bar' } },
  { id: 'task2', payload: { baz: 'qux' } },
]);

for (const run of response.runs) {
  if (run.ok) {
    console.log(run.output);
  } else {
    console.error(run.error);
  }
}

Or if you are inside of a task, you can use triggerByTask:
import { batch, task, runs } from<EMAIL_ADDRESS>
export const myParentTask = task({
  id: 'myParentTask',
  run: async () => {
    const response = await batch.triggerByTask([
      { task: myTask1, payload: { foo: 'bar' } },
      { task: myTask2, payload: { baz: 'qux' } },
    ]);

    const run1 = await runs.retrieve(response.runs[0]);
    console.log(run1.output) // typed as { foo: string }

    const run2 = await runs.retrieve(response.runs[1]);
    console.log(run2.output) // typed as { baz: string }

    const response2 = await batch.triggerByTaskAndWait([
      { task: myTask1, payload: { foo: 'bar' } },
      { task: myTask2, payload: { baz: 'qux' } },
    ]);

    if (response2.runs[0].ok) {
      console.log(response2.runs[0].output) // typed as { foo: string }
    }

    if (response2.runs[1].ok) {
      console.log(response2.runs[1].output) // typed as { baz: string }
    }
  }
});

export const myTask1 = task({
  id: 'myTask1',
  run: async () => {
    return {
      foo: 'bar'
    }
  }
});

export const myTask2 = task({
  id: 'myTask2',
  run: async () => {
    return {
      baz: 'qux'
    }
  }
});

Batch dashboard improvements

We've now added a dedicated Batches page

You can also filter runs by batch:

Idempotency key changes
Idempotency keys now default expire after 30 days, and you can customize the expiration time when creating a new key by using the idempotencyKeyTTL parameter:
await myTask.batchTrigger([{ payload: { foo: "bar" }}], { idempotencyKey: "my-key", idempotencyKeyTTL: "60s" })
// Works for individual items as well:
await myTask.batchTrigger([{ payload: { foo: "bar" }, options: { idempotencyKey: "my-key", idempotencyKeyTTL: "60s" }}])
// And `trigger`:
await myTask.trigger({ foo: "bar" }, { idempotencyKey: "my-key", idempotencyKeyTTL: "60s" });

Breaking Changes

We've removed the idempotencyKey option from triggerAndWait and batchTriggerAndWait, because it can lead to permanently frozen runs in deployed tasks. We're working on upgrading our entire system to support idempotency keys on these methods, and we'll re-add the option once that's complete.

Summary by CodeRabbit
Release Notes

New Features

Introduced batch triggering methods: batch.trigger, batch.triggerByTask, and batch.triggerByTaskAndWait.
Added a new endpoint for asynchronous batch triggering, supporting up to 500 runs per request.
Users can now subscribe to a batch of runs with runs.subscribeToBatch.
Enhanced navigation with a new "Batches" menu item in the application.
Comprehensive filtering options for batch tasks are now available.
New functionality to manage batch task runs with improved metadata and error handling.
Added support for UTC date handling in relevant components.
Enhanced TimeFrameFilter and ScheduledTaskForm components to explicitly handle timestamps in UTC.
Improved the handling of idempotency keys with customizable expiration settings.
Introduced new components for shared filtering functionality, enhancing user interaction.
New utility functions for managing applied filters and date conversions.

Bug Fixes

Improved error handling for idempotency keys and task run executions.

Documentation

Updated documentation to reflect new methods and features in the SDK.

Style

Enhanced UI components for better user experience in navigation and filtering.

@ericallam do we need to make all the object store env vars required now?


Prefer use UUID instead of logical volume path in /etc/fstab

Hi,
recommendation is to use UUID instead of logical path n /etc/fstab.
UUID can be found by running blkid and output would be:
/dev/mapper/data--vg01-data--lv01: UUID="c726ed0c-918e-4558-b6a6-2f3fd1676247" TYPE="ext4"
Can you update the doc with this ?

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

ID: b03c95d3-f350-f631-cc43-d8ae317476ae
Version Independent ID: d9070248-23cb-584a-d96f-8ff5a4401145
Content: Configure LVM on a virtual machine running Linux
Content Source: articles/virtual-machines/linux/configure-lvm.md
Service: virtual-machines-linux
GitHub Login: @szarkos
Microsoft Alias: szark

Thanks for the feedback! I have assigned the issue to the content author to investigate further and update the document as appropriate.
CC @cynthn

LVM labels are dynamically scanned at boot, just like disk labels and UUID, and are safe to use.  The thing we want to avoid are path names like /dev/sdc, etc.

#please-close


Denied access to submit a DOI profile post-finalise

Describe the bug
The DOI profile should be allowed to have values saved to a catalogue item after that item is finalised; this is to ensure that changes can be made before submitting the profile to the DOI system and the core can make modifications automatically.
However, I've found that if submitting the DOI profile to save it using the POST /api/{domainType}/{id}/profile/{namespace}/{name} endpoint (before requesting the DOI), then a 403 response is returned instead, not getting as far as contacting the DOI system.
To Reproduce
From the UI:

Select a Data Model. Make sure it is finalised and public to anonymous users.
Under the "Description" tab, click on the triple-dot menu that should be visible, then select "DOI Submission > Draft".
In the Edit Profile dialog, enter any values into the mandatory fields.
Click "Save"
Check the network tab in the browser to see the request sent.

Expected behavior
The DOI profile should have been saved to the catalogue item, and the core should then have continued to send the DOI profile to the DOI system to get an identifier.
Screenshots

Additional context
I'm wondering if this access denied error is because the model is finalised and data cannot be written back to the model now - is the finalisedEditAction value checked in this case?
The issue is with saving the profile, which suggests it's an mdm-core issue. However, if it is related to the MauroDataMapper-Plugins / mdm-plugin-digital-object-identifiers, then please transfer this issue to that repo.

We never added the ability to mark profiles as editable after finalisation….once we do that this will work

this is fixed


Add OpenAPI 3.1 Support

Includes:

[x] #1046
[x] #1039
[x] #1042
[x] #1056
[x] #1077
[x] #1138
[x] #1275
[x] #1274
[x] #1273
[x] #1272
[x] #1271

I'm particularly interested in the new prefixItems option from the JSON schema specification, which can be used for supporting tuples as arrays:
https://stackoverflow.com/questions/57464633/how-to-define-a-json-array-with-concrete-item-definition-for-every-index-i-e-a

@darrelmiller do you have an ETA on this?

It is currently planned as a stretch goal for CY2022H2.

One thing that i would like to see is support for readOnly on properties that are using $ref.  for example

@KeithMAtFis I have good news for you!
Previously, $ref meant that sibling keywords were ignored.
But since OpenAPI 3.1 uses JSON Schema 2020-12, this restriction is lifted, and now sibling keywords are respected.
Your use case should work as long as the package does something with the readonly annotation (I have no reason to believe it won't).

@gregsdennis that is great.  I should have provided some background, I am using Minimal API and DOTNet 6, C#10 and it  seems that that does not support OpenAPI 3.1.0 yet in its current form.    Out of the box there is Swagger support but it seems to only support 3.0.1 and backwards support to v2.  I have not found a way to allow output to 3.1.0 standards.
The Nugets that I am using are Swashbuckle.AspNetCore, Swashbuckle.AspNetCore.Swagger and Swashbuckle.Core all at version 6.4.0 (latest).  Would you know if there is another NuGet that I should be using or certain configuration i should use?
Btw, I really appreciate you taking the time to respond.

I don't know of any others, no.

There's a new project https://github.com/sourcemeta/alterschema that aims to convert between schema versions.  I think they plan to handle OpenAPI versions as well eventually.  This might take care of "Enable upcasting from V2/V3 to 3.1".

What are the timeline on these changes? It looks like a lot of project depends on this project to move forward with OpenAPI 3.1
With regards,
Morten

Hello all! I'm taking a sab at implementing the 9th item - "Map nullable to null type." I have broken up this effort into two seperate PRs. I want to make sure I am not stepping on anyones toes before raising a PR.
The first modifies the parser to map the OpenAPI represetntation of null within a type array to the existing nullable property. The second implements the more complex type array support required by the OpenAPI specification.
Does this sound good to everyone?

Hey @funkeyfreak,
We're happy to merge any PR coming our way.
Make sure you start your work from release/2.0.0 and target that branch when opening your pull requests.
And let us know if you have questions.

@funkeyfreak we're considering taking a dependency on an external JSON schema library so maybe just hold off on creating a PR.

Swagger/SmartBear has started to support 3.1 since June, at https://smartbear.com/news/news-releases/swagger-open-source-tooling-now-supports-latest-op/
And at the moment, the lib gives "Microsoft.OpenApi.Readers.Exceptions.OpenApiUnsupportedSpecVersionException : OpenAPI specification version '3.1.0' is not supported."

hi all, do we have any update for this, any ETA, anything?

Hi @msolujic
This work is set out to go with our 2.0 release early next year. We're working on a couple of breaking changes hence the hold up.

My research about OpenAPI 3.1 support led me to this project - https://github.com/gregsdennis/Graeae
Perhaps this will help someone right now, or will help with progress in this issue.

@HavenDV I created that as kind of an experiment to see if I can make a JsonSchema.Net-based OpenAPI implementation.
It provides the models, and all of the referencing and everything works right, but it's really basic.
My focus is really the json-everything project that hosts the schema lib, and I don't really have time to put effort into Graeae right now.

hi @MaggieKimani1
@zijianhuang @baywet
are we closer for this issue to be closed and OAS 3.1 to be supported by OpenAPI.NET?

Hi @msolujic, we've finished working on this issue but we're currently working on other breaking changes that need to go out with the v2.0 release. ETA for the preview release is within a month or less.

Do we have support for OAS 3.1 now?

joining questions from @JWMB
hi @MaggieKimani1 @zijianhuang @baywet do we have any ETA when support for 3.1 will be released?

Hi @JWMB, @msolujic  thank you for your patience.
We incurred a couple of issues during testing that set us back in terms of the release timeline.
We're still working on getting a v2.0-preview out as soon as possible so please bear with us.
Cc: @darrelmiller @coseguera @njaci1

Great, thanks. Please consider keeping us updated on the progress - I suggest keeping the the milestone page updated with the latest info, plus adding a link to it from any issues/comments asking about the release or support for 3.1.

The commit history (pretty much only lib bumps lately) and the lack of communication gives me the feeling this project is abandonware. and that the real work is being done somewhere else in preparation for the .NET 9 release (which has several OpenAPI initiatives tied to it). Hidden git branches could be another possibility.
I can't imagine the Kiota team would be content with having dependencies to this project if vnext is really progressing as slowly as it seems.

@jwmb ...or let us consider another theory.  A big chunk of the dev team has been asked to work on security related issues.  The remaining developers are being asked to focus on some specific Copilot related activities because it is a company wide effort that takes the highest priority.  The few people who were tasked with working on this library are only able to sneak in a few hours a week, at least while this other work takes priority.  Imagine that the target was to actually deliver 3.1 support as part of the .net9 timeline, but that the team had to tell the .net team that they were not able to make that deadline.  Why? Because OpenAPI 3.1 is hard to implement properly.  Partly because the integration between JSON Schema 2020-12 and OpenAPI 3.1 was sadly underspecified. I can take partial blame for that as I was heavily involved.  Many other OpenAPI libraries treat $refs as pre-processing instructions and the in-memory representation has no awareness of use of $ref.  That's not how OpenAPI.NET works.  OpenAPI.NET attempts to preserve the referencing model whilst still trying to make the referenced information easily accessible.  This has been challenging in OpenAPI.NET v2, particularly whilst trying to incorporate the JsonSchema.NET library which comes with its own set of conventions and behavior.
So, please consider for a moment, that maybe there isn't some grand schema to secretly replace this library with some hidden effort that has a team of devs dedicated to doing things in the dark.
Consider maybe that we do not hear a lot of customer demand for 3.1 and that developers have been temporarily assigned to work on what we believe is currently higher priority.

Fantastic to finally get some honest messaging, I'm sincerely thankful. I think if you look at past comments here, the main issue is the lack of communication; silence breeds speculation.
This definitely helps me make decisions on how to proceed with some of my projects. Would have been good if I had been able to make them earlier, but I can cut my losses and move on.

@JWMB That is a fair criticism.  The lack of communication was definitely not because we don't care. It is just hard to make firm commitments on OSS projects at Microsoft that are not part of a primary effort.

@darrelmiller I've sadly seen this as a recurring pattern from Microsoft. We all respect and understand that priorities don't always align with the community's priorities, and I believe I can comfortably say that most of us are able to adjust to that reality when it's communicated to us.
I really value that Microsoft has moved to doing a lot of it's work out in the open using GitHub, but there's still a lot of internal communication that never gets transmitted back to the community. For example, System.CommandLine was dead for years, stuck in a perpetual state of beta, to which no one responded and was suddenly bought back to life recently. This left most of us in the state of uncertainty wondering if it was a priority issue or if it was abandonware.
A small sign of life is often all that's needed for us to adjust our expectations.

@jscarle, I share the same view, however, I guess the embarrassing situation is probably partly due to the reshuffle of MS, says, the recent massive layoff, so dedicated veteran programmers in MS might have to resolve some issues due to some temp vacuum.   3.1 had been release in early 2021, and many there have been many on .NET solution around for years. I am pretty sure veteran programmers in MS well understand what the communities along with business customers of MS stacks really want and need, and wishfully they may have more says in the priority.

The current ChatGPT Plugin only supports OAS 3.1

hi @darrelmiller @MaggieKimani1
thank you for the recent clarification on priority level for this project in MS
do you guys have any news on this, is there  a chance this support is finalised some time soon?

Somewhere in the ASP.NET Community Standup: OpenAPI Updates in .NET 9 video it was mentioned that .NET 9 will not contain OpenAPI 3.1 support because OpenAPI.NET will not be ready in time. So don't expect a release before mid November.

@cremor yes i checked the video and this is the moment they say it.
https://www.youtube.com/live/XoMese9g8WQ?feature=shared&t=3780
That's sad. This discussion started in 2022 and and two years after we don't have it.

@cremor is there an ETA to add 3.1.0 support? You mention "Mid-November" above

@darrelmiller @baywet I see the milestone due date has been changed to 2024-10-31 - is this the current assessment?
I think many of us would greatly appreciate if you could post in this thread when the milestone date has been updated. Thanks

@darrelmiller @baywet @MaggieKimani1
Would be nice with some type of communication here. Any comment on the milestone date having been passed? Thanks.

Everyone! We have a [preview version out[(https://www.nuget.org/packages/Microsoft.OpenApi/2.0.0-preview1) please go try it out and give us feedback!
Huge congrats to the team here for putting this release together and for all the hard work!


State that payloadId should be unique for each PayloadAttributes instance

Adds a statement that payloadId value returned EL client software should be different for two distinct PayloadAttributes objects

From a discussion in discord#consensus-dev: CL sometimes may replay fcU with the same payload attributes, so, the recommendation for EL to not rewind the build process is added by this PR.
In a conversation with @protolambda and in discord#interop we concluded that using a prefix of hash function output to compute payloadId is fine as long as the hash function is strong enough. As it would give us a 2^-32 probability of a clash within one or couple of adjacent slots which is perfectly fine considering trusted communication channel between EL and CL (there seem to be no worthwhile way to exploit this potential attack vector).


Problems installing dotnet on Mac OS 10.14.4

Problem encountered on https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
Operating System: macos
Provide details about the problem you are experiencing. Include your operating system version, exact error message, code sample, and anything else that is relevant.
I am running OSX Mojave 10.14.4. The dotnet core files install but when I attempt to run dotnet in terminal - message: command not found. I can navigate to /usr/local/share/dotnet/dotnet and see that it actually did install. I can run ./dotnet at that location and get information back regarding dotnet. I have ran export PATH="/usr/local/share/dotnet/" but it does not seem to have an effect.
My goal is to be able to use VS Code but regardless of what I do it does not recognize that .net core is installed.

The dotnet core files install but when I attempt to run dotnet in terminal - message: command not found.

Is that the exact error messsage? This seems strange, usually the command name is in there. Like this:
$ foo
-bash: foo: command not found

Admittedly I'm on macOS 10.13.6, I'm not sure if this might have changed.

I have ran export PATH="/usr/local/share/dotnet/" but it does not seem to have an effect.

Also strange, that should definitely work. (Even without export.) To be specific, does running these commands in the same terminal results in command not found?
$ export PATH="/usr/local/share/dotnet/"
$ dotnet
Usage: dotnet [options]
...

(I'm pointing out "in the same terminal" on the off chance you weren't aware that export PATH=... only takes effect in the same session. 🙂)
I wonder if you have some configuration like ~/.bash_profile that's interfering. Can you try this series of commands to see if it works without your normal config?
env -i bash --norc --noprofile
export PATH="/usr/local/share/dotnet/"
dotnet

I was trying to do this in the same session. I tried running the statements recommended and dotnet worked after clearing the bash profile. However, once I shutdown the terminal window/session no more joy. Possibly I am trying to add this to the PATH statement incorrectly. I would like for this to be permanent.
On May 8, 2019 at 4:44 PM, Davis Goodin<EMAIL_ADDRESS>wrote:
The dotnet core files install but when I attempt to run dotnet in terminal - message: command not found.
Is that the exact error messsage? This seems strange, usually the command name is in there. Like this:
$ foo
-bash: foo: command not found
Admittedly I'm on macOS 10.13.6, I'm not sure if this might have changed.
I have ran export PATH="/usr/local/share/dotnet/" but it does not seem to have an effect.
Also strange, that should definitely work. (Even without export.) To be specific, does running these commands in the same terminal results in command not found?
$ export PATH="/usr/local/share/dotnet/"
$ dotnet
Usage: dotnet [options]
...
(I'm pointing out "in the same terminal" on the off chance you weren't aware that export PATH=... only takes effect in the same session. 🙂)
I wonder if you have some configuration like ~/.bash_profile that's interfering. Can you try this series of commands to see if it works without your normal config?
env -i bash --norc --noprofile
export PATH="/usr/local/share/dotnet/"
dotnet
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

However, once I shutdown the terminal window/session no more joy.

That was only a diagnosis step, not a solution. Now we know something in your shell configuration is preventing the normal configuration from working right.
If you're ok with posting your ~/.bash_profile, ~/.bashrc, ~/.profile, etc. on Gist or something, maybe some line will stand out. Otherwise you're going to need to go through your shell's configuration to narrow down the cause.

No info - should we close it @dagood? Or is there any next step?

Let's close it for now, I would love to help get to the bottom of this if you have some time to send more info though, @rthacker02.


Fix flow diagram styling for dark themes

I am using a plugin called Dark Reader for FireFox, which automatically applies a dark theme to enabled websites.
All of the Huginn menus look flawless except for the flow diagram. The bubbles and arrows successfully invert colors, but the bubble text does not. I poked around the CSS but couldn't find the corresponding variable.

Interesting, I think the font color is defined by the fill attribute of the text node of the SVG:
<text text-anchor="middle" x="280" y="-468.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">OwnTracks receiver</text>

We are using graphviz to generate the SVG, so I am not sure if that is tweakable.

It seems to me that this issue was fixed (probably by Dark Reader). I just installed it and the page looks fine. Text inside the bubbles is white. So this issue might not exist anymore and can be closed.


UEBA Workbook patch - Query fails when multiple param values selected

In the Anomalies Breakdown section of the workbook if you select 2+ Anomaly Name, Tactic and/or Anomaly Scores from the drop down parameters the dependent queries fail.  The where statements in the queries are not properly setup to handle the array of values that selecting multiple items causes.  This PR fixes that issue, allowing 1, multiple or all options to be selected without issue.
Also, if you select 0 values from any of the above parameters, the query also fails so this change includes making those parameters required.
In addition, an option for '0' was added to the Anomaly Score Parameter as it is possible to have an anomaly with score 0, this enables selecting it.

@briandelmsft Workbook query is not working, could you please check the query and do the required changes.
Please find the screenshot below:

Thanks,
Aditi Maheshwari

@v-admahe it looks like you don't have UEBA enabled in the workspace as your error is loading the BehaviorAnalytics table.  You would see the same error if you tried the currently published version of the workbook in your config...


Add DNS lookup error percentage threshold instead of error count

Changes:

Modify generic_query_measurement to support PromQL queries that have multiple duration placeholders [%v].
Add DNS lookup error percentage query to the advanced DNS test measurement in load test config, and move the threshold from DNS lookup error count to the DNS lookup error percentage query, with 0.1% threshold, meaning that there must be at least 99.9% of successful DNS lookups.

/kind feature
/assign @marseel

/lgtm
/approve


Cannot control color of TwoTone Icons

With outlined icons a fill: currentColor on the svg works just fine to control the color of the icon.
But for two-tone icons I can't seem to find a way since the fill values seem to be hardcoded.
Would it be reasonable to accept a Color value for two tone icons?

@tgelu sure!
Maybe a syntax like:
accountBookTwoTone : List (Html.Attribute msg) -> { color : String } -> Html msg

hmm, actually we need both the primary and the secondary color, like:
accountBookTwoTone : List (Attribute msg) -> { primaryColor : String, secondaryColor : String } -> Html msg

Definitely they are optional:
accountBookTwoTone : List (Attribute msg) -> { primaryColor : Maybe String, secondaryColor : Maybe String } -> Html msg

Check: https://ant-design-icons-elm-k0cd0faau.vercel.app/#Default/Directional Icons/Two Tones
What do you think?

Thanks for the reply!
I think I have 3 short thoughts.

I am not sure what it would mean to provide Nothing as primaryColor for example, or to provide Nothing for both. If it means something specifically (like the color defaulting to transparent or white) I would think it's a better interface to make that explicit. For example to expect something like:

type Color
    = Transparent
    | Color ColorValue

But I am wondering if there's an optimal relation between the primary and secondary colors which is desirable when using two tone icons. If there is, it would be nice if these icons would accept simply one color and deduce the secondary color from that (by increasing lightness by a certain amount to create contrast).

if you think option 2 is not ideal or too restricting I still think it would be better to have both primary and secondary colors as required, and if transparency is one of the possible accepted colors then it is better addressed either with accepting a RGBA value or a custom type like in option 1.

What do you think?

@tgelu thank you thoughts,

I was trying to follow the API from ant-design icon for react, so that primaryColor = Nothing means the default primary color, which is #333 (default secondary color is #E6E6E6). I agree that it is not good being implicit, although I am not sure about creating a custom Color type, since other colors from Html.Attributes are represented as String.

Yes we can implement a relation between the primary and secondary colors. Actually the react implementation doesn't receives the secondary color, but calculates it from the primary. I don't know if we can easily calculate the color using string hex colors. If we use the custom Color type as you suggest then it maybe easiest to compute the secondary color from the primary one.

Thinking here...
To remove the Maybe and make it explicit we can define a different function for the default case:
accountBookTwoTone : List (Attribute msg) -> { primaryColor : String, secondaryColor : String } -> Html msg

-- HERE { primaryColor = "#333", secondaryColor = "#E6E6E6" }
accountBookTwoToneDefault : List (Attribute msg) -> Html msg

Regarding the custom color I suggested, I was actually thinking about using https://package.elm-lang.org/packages/avh4/elm-color/latest/ which I have seen other color-related packages use. It is intended as a type to be shared between packages. There is also this additional package for more functionality on that type https://package.elm-lang.org/packages/noahzgordon/elm-color-extra/latest/
I personally think that accepting one Color type from avh4/elm-color is ideal. You can easily calculate the coresponding secondary color with https://package.elm-lang.org/packages/noahzgordon/elm-color-extra/latest/Color-Manipulate


Latest Docker image is broken: not compatible with the Swift toolchain it uses

Following the instructions to install Kitura with Docker, I'm unable to run either the Starter app or my own project, because the dependencies fail to compile. It's a whole lot of syntax errors, clearly due to the image not using the latest supported Swift toolchain:

The README states the the latest supported Swift snapshot is DEVELOPMENT-SNAPSHOT-2016-08-23-a, whereas the Docker image uses DEVELOPMENT-SNAPSHOT-2016-07-25-a.

@foreignfilm The Kitura docker image is based on the ibmcom/swift-ubuntu:latest. There is work underway to upgrade that docker image to the Swift 3 08/31 level, which is compatible with the 0.28 version of Kitura.
Hopefully this will be fixed shortly.

@foreignfilm Can you pull the latest kitura-ubuntu image? docker pull ibmcom/kitura-ubuntu:latest? It should now be compatible with 08-31.

@rolivieri thanks! I've pulled down the latest image and the starter app runs now. I'm still having trouble building my project though:
$ swift-build: error: the module at Tests/KituraSys has an invalid name ('KituraSys'): the name of a test module has no ‘Tests’ suffix
$ fix: rename the module at ‘Tests/KituraSys’ to have a ‘Tests’ suffix

I'm not entirely sure why this isn't an issue for the starter app.

Actually, never mind, this was my mistake: I haven't updated the dependency package version. This issue is resolved. Thanks!


Global Translation JSON with Inline Loader in NX Lib?

I'm using Transloco within an NX Mono Repo, which has a shared library "UI". I've set up Transloco so that each component uses a scoped inline loader to ensure that it's easy to track translations between the components. However there are a number of translations which match across components so it would be good if they could be extracted out and contained in a centralised file to keep it DRY.
When I add a scope to the UiModule the translation files aren't loaded, and can't be used in other inline loaded files.
I've got a demo setup here https://github.com/ChazUK/nx-transloco-global-translations Just need to run ng serve demo-app
global - en.json
{
  "title": "Welcome to Demo App!",
  "button": "Button",
  "hello": "Hola"
}

button - en.json
{
  "hello-friend": "{{ ui.hello }} Friend",
  "text": "English Button"
}

button.component.ts
@Component({
  selector: 'nx-transloco-global-translations-button',
  template: `
    <ng-template transloco let-t>
      <h4>{{ t('button.hello-friend') }}</h4>
      <button>{{ t('ui.button') }} Text: {{ t('button.text') }}</button>
    </ng-template>
  `,
  providers: [
    {
      provide: TRANSLOCO_SCOPE,
      useValue: {
        scope: 'button',
        loader: loader((lang, root) => import(`./${root}/${lang}.json`)),
      },
    },
  ],
})
export class ButtonComponent {}

Experiencing the same issue. When I use multi: true for this setup I get Cannot mix multi providers and regular providers

Try to move the scope provider to the button component.

@ArielGueta The Button Component already has a Scope and Loader.

So what's the scope in the UIModule?

I want to scope the UiModule because it's a library, so scoping it would hopefully mean it wouldn't clash with anything. Which I'm pretty sure is quite standard

You can't. It's not related to Transloco, it's how Angular works.

@ArielGueta: As far as I'm aware adding a scope to a component will wrap the loaded translations in the provided key, so in my example I have the button component scoped to "button". So JSON translation file { "text": "Button Text" } will be loaded into Transloco as { "button": { "text": "Button Text" } }. And in the template I can either define the scope, or use the full path to load the desired string.
I feel that the "Global" translation file I want to create, which can be shared among all components within the module, should be able to have a scope so that the keys don't clash and overwrite each other. That in itself is directly related to Transloco.
The screenshot you posted above (link for future reference) states that scoping follows the Angular Dependancy Injection rules, but doesn't necessarily mean the  functionality I described can't be achieved.
@jurienhamaker: I've managed to find a quick workaround that still inline loads translations.
@Injectable({ providedIn: 'root' })
export class CustomLoader implements TranslocoLoader {
  getTranslation(lang: string) {
    return import(`./i18n/${lang}.json`);
  }
}

@NgModule({
  imports: [
    TranslocoModule,
    ...
  ]
  providers: [
    PageContentResolver,
    {
      provide: TRANSLOCO_LOADER,
      useClass: CustomLoader,
    },
    ...
  ]
  ...
})
export class UiModule {}

@itayod unfortunately the blog post didn't help, but the solution I posted above has worked well enough.


targetSdkVersion: 33 in Android

Update your com.google.android.play:core:1.10.0 Maven dependency to an Android 14 compatible version! Your current com.google.android.play:core:1.10.0 library is incompatible with targetSdkVersion 34 (Android 14), which introduces a backwards-incompatible change to broadcast receivers. As a reminder, from August 31, 2024, Google Play requires all new app releases to target Android 14. Update to the latest library version dependency to avoid app crashes.-  Getting this while updating the App my app in google play console.

You are welcome to send a PR with your contribution. Contributions are always welcome and more likely to be reviewed, merged and release in a new version.

@priyaa29
I am closing this, this plugin does not depend on com.google.android.play:core.
It must be from another plugin you are using in your app.

duplicate.
Closing

@bensonarafat: could you add to which issue this one duplicates?

@bensonarafat: could you add to which issue this one duplicates?

Here  @fbernaly


[qtDCM] remove PACS system

Following this issue: https://github.com/Inria-Asclepios/medInria-public/issues/72
:m:

do we really need to delete the files?
can't we just modify the CMakeLists?
just to minimise differences between MUSIC and medInria.

I don't know but if we change something from the core of MUSIC, or if medInria does it, we would have to adapt these unused files also. Thus it's more work for not much since we do not use these files.

the MUSIC part could use it even if the inHeart part does not, so as we try to make these versions diverge the latest possible, it could be worth keeping them (and only removing them if effectively they create a burden)

Oki, i close this PR. We will do it again on the certified version.


Vendor fails to compile

Following the example from the README, godog refuses to compile when using vendor.
$> go version
go version go1.10 darwin/amd64
$> pwd
~/go/src/godogs
$> go get -u github.com/DATA-DOG/godog/cmd/godog
$> godog
Feature: eat godogs
  In order to be happy
  As a hungry gopher
  I need to be able to eat godogs

  Scenario: Eat 5 out of 12          # features/godogs.feature:7
    Given there are 12 godogs        # main_test.go:11 -> thereAreGodogs
    When I eat 5                     # main_test.go:16 -> iEat
    Then there should be 7 remaining # main_test.go:24 -> thereShouldBeRemaining

1 scenarios (1 passed)
3 steps (3 passed)
314.853µs
$> git clone https://github.com/DATA-DOG/godog.git $GOPATH/src/godogs/vendor/github.com/DATA-DOG/godog
$> godog
failed to compile testmain package: exit status 2 - output: /var/folders/sn/xc8v8w011mq2llpz0pkq889x9rw_gw/T/go-build993150416/b001/_testmain.go:4:2: can't find import: "github.com/DATA-DOG/godog"

Same result using dep.
Please advise.

Hi go has updated the build toolchain in 1.10 #115 have adapted it and seems like on linux it is now capable to compile it from vendors. But maybe there are still some issues. I will investigate it further, thanks for reporting. For now you can integrate it with go test

@creack could you check whether the change resolved the issue?

bumped ;)


auro-radio: incorrect a11y experience

Describe the bug
Not sure if this pull request is the cause, but it's been discovered that when selecting a radio button option on a mobile device, there is a blue halo.
This is only appearing with a radio-group.
This is not the expected experience when working with an Auro element.
To Reproduce
Steps to reproduce the behavior:

Go to https://auro.alaskaair.com/components/auro/radio
Click on any option in a radio group
See the error

Expected behavior
When tapping on a radio option, there should be no halo.
Screenshots

Smartphone (please complete the following information):

OS: iOS
Browser: Safari
Latest version

Issue is currently assigned to @blackfalclon to find root cause of this issue.

It looks like whatever is compiling the Sass is combining the focus-visible declarations in WCSS, presumably because they share a ruleset:
.js-focus-visible :focus:not(.focus-visible), :focus:not(:focus-visible) { /* whatever */ }

They are separate in the _core.scss stylesheet to prevent browsers that do not support :focus-visible from throwing the whole rule out. With how it's currently minified, Safari will not remove focus styles as expected because it does not support focus-visible.
This may be the cause of the issue.


How Can I render Animations with GPU ?

When render Animations, it always takes a long time . So I want to know how to render with my GPU card.

Manim uses cairo for rendering and from what I've read, though it is possible to configure cairo to work with OpenGL, the benefits are unclear due to the difference between the cairo canvas model and the graphical and programming style suitable for GPUs. A quick search told me that there is no mention of OpenGL in the manim codebase, so with reasonable confidence I can say it is not possible at this moment.

The OpenGL backend of Cairo is, at best, experimental. Cairo was not designed with having to deal with a GPU - rather, all graphics are drawn by the CPU. Cairo is very mature, and I assume well optimized, but ultimately CPU-bound. To enjoy the benefits GPU rendering might give we'd need to switch to an entirely different library, one that was designed with OpenGL (or more broadly GPU rendering) in mind.
I suspect a second bottleneck might be Python's multithreaded performance and the round-trips between "native code" (written in C, to call the cairo functions) and Python code. A good profiling of the library may reveal significant time passed in the lower-level functions, which would be evidence of the latter (the Global Interpreter Lock being a bit sneakier to find evidence for).
I have been thinking about the benefits of moving the entire core of the library into native code, since then only "high-level" features would be written in Python, ie. MObjects, Scenes, etc., and those would call internally the native code responsible for rendering the animation in one go.

ok，I know that I can not run my manim program on GPU， but what should I do to make full use of my CPU ？I tryed  to run many scene at a same time，but still not 。

Perhaps the author of this great lib could share his plans about GPU support?


Cannot resize carousel slides in a flexbox layout.

I am trying to get slick carousel working with the flexbox, which has a footer. even thought the slick carousel covers 100% of the remaining space there is no way to make the height of each slide span the whole height assigned to the carousel. Using height: 100% doesn't work.
Any ideas?
My fiddle is here https://jsfiddle.net/qxkqzjow/7/

I had the very same question today and finally got it resolved by listening to the window resize event and setting there the height of '.slick-slide' to the available height within the container.

How about using calc and vh units? Subtract the height of your footer from the height of the viewport.
.carousel__item {
    height: calc(100vh - 100px);
}

IE9+

My footer is variable in height, based on how much text goes in it. torfranz@ Can you elaborate your solution?

I guess you already managed with your flex approach to get the .slick-slider to occupy the available height. But the .slick-slide will keep their initial height which is probably based on the content.
If I guessed this to be correct you could listen to (please ignore any syntax issues, I usually use TypeScript)
$(window).resize(function () {
$(.slick-slide).height($("").innerHeight()) });
In addition you need to make this height setting once at start when the page is shown, otherwise only after the first window resize the height is modified.

@pmeissner I was not able to get your solution to work with this. Sorry.


Improve saving dialog

Is your feature request related to a problem? Please describe.
When closing Modeler with a not saved model, the dialog displays the buttons in a not standardized way (compared to e.g. word) and the focus is on cancel.

Due to this behavior, it happend to me several times, that I lost my model without saving.
Describe the solution you'd like
Implement default behavior like e.g. Word with the focus on save.

Confirmed by @toco-cam that this is annoying for windows users.


[SDK Module Renaming] - Update Readme & Rollback podspec change

Jira Ticket

ACCSEC-

Github Issue

ISSUE-

Description

Update Readme with Carthage instructions & Rollback the rename of the podspec.

Commit message

Screenshot

Testing

[ ] Added unit tests
[x] Ran unit tests successfully
[x] Added documentation for public APIs and/or Wiki

Code coverage
Total coverage: 95.13%

Powered by Slather

  Generated by :no_entry_sign: Danger

Code coverage
Total coverage: 95.13%

Powered by Slather

  Generated by :no_entry_sign: Danger

Code coverage
Total coverage: 95.13%

Powered by Slather

  Generated by :no_entry_sign: Danger

Code coverage
Total coverage: 95.13%

Powered by Slather

  Generated by :no_entry_sign: Danger


quictls: 3.0.9-quic1 -> 3.0.10-quic1

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/quictls/openssl/releases.
meta.description for quictls is: TLS/SSL and crypto library with QUIC APIs
meta.homepage for quictls is: https://quictls.github.io
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found 3.0.10-quic1 with grep in /nix/store/i8md9vfmn818gygj7zd5z8rslwyvqzlb-quictls-3.0.10-quic1-bin
found 3.0.10-quic1 in filename of file in /nix/store/i8md9vfmn818gygj7zd5z8rslwyvqzlb-quictls-3.0.10-quic1-bin

Rebuild report (if merged into master) (click to expand)

4 total rebuild path(s)

4 package rebuild(s)

First fifty rebuilds by attrpath
curlHTTP3
nginxQuic
ngtcp2
quictls

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/i8md9vfmn818gygj7zd5z8rslwyvqzlb-quictls-3.0.10-quic1-bin \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A quictls https://github.com/r-ryantm/nixpkgs/archive/9c580ea67307cc9a58ef9a9e06025584ee8cfd22.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/i8md9vfmn818gygj7zd5z8rslwyvqzlb-quictls-3.0.10-quic1-bin
ls -la /nix/store/i8md9vfmn818gygj7zd5z8rslwyvqzlb-quictls-3.0.10-quic1-bin/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

4 packages built:

curlHTTP3
nginxQuic
ngtcp2
quictls

Maintainer pings
cc @Izorkin for testing.

@GrahamcOfBorg test nginx-реез3

@GrahamcOfBorg test nginx-http3

Maybe update to 3.1.2 right away?

I'll just do the finalAttrs part, I don't know enough that package to make such a big upgrade.

Ok, I'll try to update myself later.


Prepare v0.58.1

Google Cloud PHP v0.58.1
google/cloud-bigquerydatatransfer

Fixed PSR-4 autoloader for restructure and included missing dev-dependencies. (#962)

couple other things coming too.


The wall is underground,tile image looks like has  transparent

Hi @kaixin51,
Can you set scene.globe.depthTestAgainstTerrain to true?
CesiumJS is a big project, so we use GitHub for feature requests and bug tracking exclusively. In the future, please take any questions to the Cesium Forum where there are members of the community and developers from the team who can help. Thanks!


Adding day night mask CLI

Addresses #GitHubissuenum
Added CLI and acceptance tests for day night mask functionality.
Testing:

[x] Ran tests and they passed OK
[x] Added new tests for the new feature(s)

CLA

[x] If a new developer, signed up to CLA

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 1

Complexity increasing per file
==============================
- improver_tests/acceptance/test_day_night_mask.py  1
- improver/cli/day_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 1

Complexity increasing per file
==============================
- improver_tests/acceptance/test_day_night_mask.py  1
- improver/cli/day_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_day_night_mask.py  1
- improver/cli/day_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_day_night_mask.py  1
- improver/cli/day_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 1

Complexity increasing per file
==============================
- improver_tests/acceptance/test_day_night_mask.py  1
- improver/cli/day_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_apply_night_mask.py  1
- improver/cli/apply_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_apply_night_mask.py  1
- improver/cli/apply_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_apply_night_mask.py  1
- improver/cli/apply_night_mask.py  1

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Complexity increasing per file
==============================
- improver_tests/acceptance/test_apply_night_mask.py  1
- improver/cli/apply_night_mask.py  1

See the complete overview on Codacy


Mutation query responses may be cached

Both useMutation and useBulkMutation may end up using cached query responses if the action doesn't change between mutations (e.g., the POST data remains the same). It seems wrong to me that mutations would be cached.
The query function has a skipCache flag that needs to be set on these two lines:
https://github.com/marcin-piela/react-fetching-library/blob/9b0abd81cf7494931ca144a1d64952f6e0d77b18/src/hooks/useMutation/useMutation.ts#L50
https://github.com/marcin-piela/react-fetching-library/blob/9b0abd81cf7494931ca144a1d64952f6e0d77b18/src/hooks/useBulkMutation/useBulkMutation.ts#L66
I'll submit a PR for this after I free up some time.

Actually, now that I think about it, this is an issue for us because we want to cache some POST requests that we use with useSuspenseQuery. This is actually more of an issue with the design of our API.


API call to freeze/seal object

I would like an API equivalent for Object.freeze().  My use case: I want to freeze the module.exports of my native modules but can't do so currently because that value lives only on the valstack.

It occurs to me that I can do this as a temporary measure:
/* ... obj */
duk_get_global_string(ctx, "Object");
duk_get_prop_string(ctx, -1, "freeze");
duk_dup(ctx, -3); /* ... 'Object' 'freeze' obj */
duk_call(ctx, 1);  /* ... 'Object' result */
duk_pop_2(ctx);

However in light of Duktape supporting native modules perhaps this would still be worth having as a convenience call.

For completeness Object.seal() and Object.freeze() these related calls are also candidates:

Object.preventExtensions()
Object.isSealed()
Object.isFrozen()
Object.isExtensible()


Hide Cluster, Project, User namespaces from namespace drop-down.

Issue:  Because each Cluster, Project & User creates a namespace, my namespace drop-down fills up with namespaces I would never use.  This makes it hard for the end-user to really see what namespaces matter.  We should hide the namespaces we are creating that the user will never need.

Plan is to use a preference to decide when to show them.
If preference is on, show all of these namespaces.
If preference is off, hide these namespaces

management.cattle.io/system-namespace: "true"

Places where Namespace drop-down currently exist:
Cluster Explorer

[ ] Namespace picker in header
[ ] Namespace picker in Create for all resources
[ ] Pod Scheduling in Create workload

Logging:

[ ] Namespace picker in Create for Flows & Output

Monitoring:

[ ] Namespace picker in Create Prometheus Rules
[ ] OPA Create Constraint

This work has been completed - see https://github.com/rancher/dashboard/pull/6468.


Remove zoomDelta?

I'm not seeing the utility of the zoomDelta function from the original implementation. However, I also don't understand the original idea behind it. Is this something to keep (document & add tests for), or remove? This PR removes it.

It’s for showing tiles at different resolution than the screen. For example, if you have a HiDPI screen, you might take 256×256 tiles and display them in a 128×128 space. Example here:
http://bl.ocks.org/mbostock/4150951

Ohhh I see, that makes sense. Sounds like something to keep.
Just created Docs for zoomDelta #9


[Bug]: FS - Shell Command doesn't handle ".." path

What happened?
Shell Command node failed to resolve a valid path containing ...
What was the expected functionality?
Valid shell path woudl be handled as in any normal shell.
The same command works with default WIndows shell (not PowerShell or some such).
Describe your environment
Windows 11, default command prompt
cp comes from Git Bash installation.
Relevant log output
No response
Relevant screenshots

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Hey @DjWarmonger this is intentional, to add a tiiiny bit of security to the node. The intention is that an LLM couldn't accidentally break out of the working directory you set for it and cause your system harm. In your case the path is equivalent to F:/AI/Rivet/CV-bot/CV_tex/cv_template.tex so you could just use that without navigating up a directory?

You could make this restriction togglable and set the default to true but I think such a restriction doesn't make sense. The idea of restricting ".." is very subjective, because I find it communicates a false sense of security. It's by far better to say "Warning: executing ANY commands on the shell is a security risk and use at your own risk" and then offer no restrictions.
It shouldn't be Rivet's job to act as a security layer for projects performing shell commands. It's better to admit you can't offer any security and let the developer figure it out.

You're probably right, I accept pull requests!

@abrenneke I had troubles installing and building the latest on main. Can work on this PR once I get the project to build. Any ideas what might cause this error?
yarn build
[7:47:23 PM] Projects in this build:
    * tsconfig.json

[7:47:23 PM] Project 'tsconfig.json' is out of date because output file 'dist/tsconfig.tsbuildinfo' does not exist

[7:47:23 PM] Building project '/Users/nickfoscarini/work/github/codemile/rivet/packages/core/tsconfig.json'...

node:internal/process/esm_loader:40
      internalBinding('errors').triggerUncaughtException(
                                ^
TypeError [ERR_INVALID_RETURN_PROPERTY_VALUE]: Expected array buffer, or typed array to be returned for the "source" from the "transformSource" function but got undefined.
    at __node_internal_captureLargerStackTrace (node:internal/errors:497:5)
    at new NodeError (node:internal/errors:406:5)
    at assertBufferSource (node:internal/modules/esm/translators:84:9)
    at stringify (node:internal/modules/esm/translators:94:3)
    at createCJSModuleWrap (node:internal/modules/esm/translators:219:12)
    at ModuleLoader.commonjsStrategy (node:internal/modules/esm/translators:297:10) {
  code: 'ERR_INVALID_RETURN_PROPERTY_VALUE'
}


Desactivated questions - color

Changing the color of questions that are desactivated for all students (in grey like it was before with the toggle button)
Keeping the other questions in black, regular

Done!


no way to undo/redo on tablets

For non-keyboard, non-mobile devices (mostly tablets), there's no way to undo/redo.
via @dinhani https://github.com/excalidraw/excalidraw/issues/2827#issuecomment-782758576

I got struck by this the other day when I used my Ipad and a pen. It's a real issue.

Excalidraw works smoothly on Galaxy Tab. App is more keyboard friendly though.
In essence I felt the need for following two features.

Undo / Redo button - as specified in this issue.
Ability to escape multi point line/arrow

I am still able to create amazing diagrams without these, so kudos for building awesome tool

[Proposal]
Adding Undo/Redo buttons in CanvasActions (Bottom left)

Best Option, Add Undo/Redo as part of Canvas actions alongside other Zoom actions [ Rename ZoomActions to CanvasActions]

Other options, not so good UX
2. Create new UndoRedoActions component, put them in canvas action area in it's own Island
Island on left

Island on right

Option 1 looks good, it will help Tablet users (like me 😉) perform Undo/Redo action
cc: @dwelle

@sirajc forgot to update this — we definitely want to fix this for tables, but ideally not introduce the UI to laptop/desktop (or non-touch-only) screens.

@dwelle I was just proposing the UX. Where in tablets we can show this.
If UX discussion is finalized then we can work to have identification like isTablet and only for that case we add these undo/redo actions.

Sure, if you can come up with some reasonable tablet detection, let's do it! I'd go with option (1) as well, but we can tweak it in the PR.

If I may can give up a vote I would like to go with Option 3 because I need undo/redo more often then zoom in and out.

On iPad this is commonly done with a two finger tap to undo (3 to redo). That gesture is a bit "pro-user feeling" but its super convenient and feels good.

https://codepen.io/tteske/pen/KKwxOxp
This looks a good option, works for my tab. Can anyone Confirm for iPad?

If I may can give up a vote I would like to go with Option 3 because I need undo/redo more often then zoom in and out.

In fact for tabs we don't need zoom in / zoom out, as we use 2 finger gestures for pan & zoom which works flawlessly. Reset zoom is the only thing I click on.

https://codepen.io/tteske/pen/KKwxOxp

Shows handy on my iPad Pro

Nowadays, many laptop/desktop screens have touch support so this will have lots of false positives.

Why dont we use a user agent?
const userAgent = navigator.userAgent.toLowerCase();
const isTablet = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.touch))|kindle|playbook|silk|(puffin(?!.(IP|AP|WP))))/.test(userAgent);
I tested this and it works

Nowadays, many laptop/desktop screens have touch support so this will have lots of false positives.

That's not really a problem, right? Because if a laptop has a touch screen, say the Lenovo Yoga, then the user might want to use Excalidraw without touching the keyboard (on the Yoga the keyboard can be flipped behind the screen - I doubt there's an API for detecting it).
So it seems reasonable that we'd include the undo/redo controls for all touchscreens.

Yeah, ok. Let's start with something. Any takers?

Happy to contribute, maybe the initial implementation could be to leverage the built-in undo/redo mechanism and build a undoManager if the native implementation has a drawback?
buttonUndo.onclick = function() {
  document.execCommand("undo", false, null);
};

@PsyGik we already have a redo/undo stack. This issue isn't about implementing the mechanism, just about exposing it to the UI.

Thanks @dwelle for adding this, I couldn't get past my initial POC.
Appreciate you for taking out time to add this feature in. This would be helpful for all the touchscreen users

no problem @sirajc ❤


Modifying Robots

@wei-harness we will need to update Coveo for IaCM.
Harness Developer Pull Request
Thanks for helping us make the Developer Hub better. The PR will be looked at
by the CODEOWNERS.
What Type of PR is This?

[ ] Issue
[ ] Feature
x ] Maintenance/Chore

If tied to an Issue, list the Issue(s) here:

Issue(s)

House Keeping
Some items to keep track of. Screen shots of changes are optional but would help the maintainers review quicker.

[ ] Tested Locally
[ ] Optional Screen Shoot.

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step behind the Harness VPN and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app. Current Draft URL is: https://65678749e5f0f208a9baa6d2--harness-developer.netlify.app


Only Object ID and not OPC UA Variable name appear as Time Series Instances in TSI

When using TSI, available time series instances are displayed using non human understandable strings.  It would be nice to create an time series instance for each variable and for those instances to be named using an OPC UA variable name such as DisplayName.

We are not going to fix this.


[Bug Report] Installing box2d on colab

Describe the bug
It's not great that the example on the documentation home page does not work. I tried running that example (copy-pasted exactly from the home page) in a Google Colab notebook (after installing gymnasium with !pip install gymnasium) and was immediately faced with this error: "DependencyNotInstalled: Box2D is not installed, run pip install gymnasium[box2d]".
When I follow the suggestion and !pip install gymnasium[box2d] run in new code cell, the installation fails due this this error: "ERROR: Could not build wheels for box2d-py, which is required to install pyproject.toml-based projects".
Code example
!pip install gymnasium

Collecting gymnasium
  Using cached gymnasium-0.29.0-py3-none-any.whl (953 kB)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium) (1.23.5)
Requirement already satisfied: cloudpickle>=1.2.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium) (2.2.1)
Requirement already satisfied: typing-extensions>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium) (4.7.1)
Collecting farama-notifications>=0.0.1 (from gymnasium)
  Using cached Farama_Notifications-0.0.4-py3-none-any.whl (2.5 kB)
Installing collected packages: farama-notifications, gymnasium
Successfully installed farama-notifications-0.0.4 gymnasium-0.29.0

import gymnasium as gym
env = gym.make("LunarLander-v2", render_mode="human")
observation, info = env.reset(seed=42)
for _ in range(1000):
   action = env.action_space.sample()  # this is where you would insert your policy
   observation, reward, terminated, truncated, info = env.step(action)

   if terminated or truncated:
      observation, info = env.reset()

env.close()

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/gymnasium/envs/box2d/bipedal_walker.py in <module>
     14 try:
---> 15     import Box2D
     16     from Box2D.b2 import (

ModuleNotFoundError: No module named 'Box2D'

The above exception was the direct cause of the following exception:

DependencyNotInstalled                    Traceback (most recent call last)
15 frames
/usr/local/lib/python3.10/dist-packages/gymnasium/envs/box2d/bipedal_walker.py in <module>
     23     )
     24 except ImportError as e:
---> 25     raise DependencyNotInstalled(
     26         "Box2D is not installed, run `pip install gymnasium[box2d]`"
     27     ) from e

DependencyNotInstalled: Box2D is not installed, run `pip install gymnasium[box2d]`

!pip install gymnasium[box2d]

Requirement already satisfied: gymnasium[box2d] in /usr/local/lib/python3.10/dist-packages (0.29.0)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium[box2d]) (1.23.5)
Requirement already satisfied: cloudpickle>=1.2.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium[box2d]) (2.2.1)
Requirement already satisfied: typing-extensions>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from gymnasium[box2d]) (4.7.1)
Requirement already satisfied: farama-notifications>=0.0.1 in /usr/local/lib/python3.10/dist-packages (from gymnasium[box2d]) (0.0.4)
Collecting box2d-py==2.3.5 (from gymnasium[box2d])
  Using cached box2d-py-2.3.5.tar.gz (374 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: pygame>=2.1.3 in /usr/local/lib/python3.10/dist-packages (from gymnasium[box2d]) (2.5.0)
Collecting swig==4.* (from gymnasium[box2d])
  Using cached swig-4.1.1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.8 MB)
Building wheels for collected packages: box2d-py
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  Building wheel for box2d-py (setup.py) ... error
  ERROR: Failed building wheel for box2d-py
  Running setup.py clean for box2d-py
Failed to build box2d-py
ERROR: Could not build wheels for box2d-py, which is required to install pyproject.toml-based projects

### System info

Google Colab environment.
Python 3.10.12.
Gymnasium installed using `!pip install gymnasium`.
gymnasium.__version__ == 0.29.0

### Additional context

_No response_

### Checklist

- [X] I have checked that there is no similar [issue](https://github.com/Farama-Foundation/Gymnasium/issues) in the repo

Not an actual bug, but it's more a lack of (critical, in my opinion) documentation. To run the example (or any env that requires box2d) in a Google Colab notebook, you need to install swig first:
!apt-get install swig
!pip install gymnasium[box2d]

@robertoschiavone @pseudo-rnd-thoughts I think the bug is a lot simpler than this. box2d does seem to depend on swig, but the dependency is in the wrong order, i.e., swig is placed after box2d: https://github.com/Farama-Foundation/Gymnasium/blob/fa8a982f99279b9912866d5fd72af6af9f2d99e1/pyproject.toml#L39 This means that box2d is installed before swig even though it depends on swig to be built.

@robertoschiavone Would you be able to make a PR to improve the documentation. You should just need to modify the box2d environment's docstring

Hi @pseudo-rnd-thoughts, I created #683 to resolve this issue. Let me know what you think!

Hi @pseudo-rnd-thoughts can we improve the ImportError message to please? see my PR #1009


Evict duplicate pods only if not all nodes are used

Currently, if the total number of pods running on a cluster is greater than the number of nodes and each node has atleast one pod allocated, the descheduler will evict the pods from the nodes where duplicates are found. This behavior is unnecessary as the evicted pods will be allocated to some nodes again. Further, if the descheduler runs periodically as a CronJob, the cluster never stabilizes and remains in a constant state of flux.
This PR adds a condition to check if a creator has its pods on all possible nodes (the pods satisfy the affinity and taints on these nodes). If it has, we call the creator saturated and no pods of this creator would be evicted from any nodes. This helps stabilize the cluster.

Currently, if the total number of pods running on a cluster is greater than the number of nodes and each node has atleast one pod allocated, the descheduler will evict the pods from the nodes where duplicates are found. This behavior is unnecessary as the evicted pods will be allocated to some nodes again. Further, if the descheduler runs periodically as a CronJob, the cluster never stabilizes and remains in a constant state of flux.

This PR adds a condition to check if a creator has its pods on all possible nodes (the pods satisfy the affinity and taints on these nodes). If it has, we call the creator saturated and no pods of this creator would be evicted from any nodes. This helps stabilize the cluster.

I agree with your explanation. thanks for this PR. I will review it soon.

Any news on this pull request? I haven't hit this issue yet, but I have a use case where I probably will. :)

@nitzs could you resolve conflicts?

@nitzs could you reopn this issue and get it merged. We need this too.
We have two special nodes where 4 copies of a pod are running on each. After a node maintenance all pods are always stuck on one node and we want to rebalance 8 pods as 4 + 4.


Forward button appearance does not match back button

The forward button looks like the other toolbar button (for e.x., no circular border around it), but should look like the back button. I tried adding #forward-button rules everywhere #back-button appeared, mimicking existing rules for #back-button. Still the forward button shows up like other toolbar buttons

I go in and tell Firefox to use the compact density for the address bar and tabs. Compact density always removes the circle around the back button no matter what your setup looks like.

(I'm not the maintainer. I don't know if he originally designed Quietfox to remove the circle around the backspace button in Normal density.)

I go in and tell Firefox to use the compact density for the address bar and tabs. Compact density always removes the circle around the back button no matter what your setup looks like.

(I'm not the maintainer. I don't know if he originally designed Quietfox to remove the circle around the backspace button in Normal density.)

Yeah, I tried that already and it worked. I guess that's just a shortcoming of firefox itself.

Yeah, I tried that already and it worked. I guess that's just a shortcoming of firefox itself.

Yeah, I tried that already and it worked. I guess that's just a shortcoming of firefox itself.

Idk if "shortcoming" is an appropriate label. It's a design choice to have a circle around the back button in normal and touch density.

Yeah, I tried that already and it worked. I guess that's just a shortcoming of firefox itself.

Idk if "shortcoming" is an appropriate label. It's a design choice to have a circle around the back button in normal and touch density.

Well, I only meant it in the sense that it's inconsistent to have a circle around the back button and not on the forward button.

Well, I only meant it in the sense that it's inconsistent to have a circle around the back button and not on the forward button.


Support for multiple versions of Accumulo does not work well in IDE

Currently the Accumulo version is specified by a Maven profile - this means that the IDE does not have the correct JARs for both supported versions of Accumulo on the classpath at compile time.
The Accumulo store should be refactored to fix this.

Merged into develop.