Screen recording does not work

Yes, it’s by design; and, no: the button is hidden if the shell cannot create the following GStreamer pipeline:

    static canScreencast() {
        const elements = [
            'pipewiresrc',
            'filesink',
            ...DEFAULT_PIPELINE.split('!').map(e => e.trim().split(' ').at(0)),
        ];
        return Gst.init_check(null) &&
            elements.every(e => Gst.ElementFactory.find(e) != null);
    }

with the DEFAULT_PIPELINE being:

const DEFAULT_PIPELINE = 'videoconvert chroma-mode=GST_VIDEO_CHROMA_MODE_NONE dither=GST_VIDEO_DITHER_NONE matrix-mode=GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY n-threads=%T ! queue ! vp8enc cpu-used=16 max-quantizer=17 deadline=1 keyframe-mode=disabled threads=%T static-threshold=1000 buffer-size=20000 ! queue ! webmmux';

I would recommend asking on a postmarketOS forum how to ensure that pipewire is running and can be used by GStreamer.