Trying to negotiate VP9 caps at appsink ! webmmux

Hi everyone,
I’m trying to create a simple utility called webshuf.
It would split an input video to GOPs, and shuffle them in order to present more uniform experience when input file is coded still image.
Currently, I launch a first pipeline, where a probe collects buffers.
I’m trying to output them in same order to filesink.
However, it fails with:

0:00:00.755902917 11367 0x7f03b8000b70 ERROR            matroskamux matroska-mux.c:4324:gst_matroskaFeed buffer
_mux_handle_buffer:<webmmux1:video_0> No codec-id for pad
Feed buffer
Feed buffer
Feed buffer
Feed buffer
Feed buffer
0:00:00.755923197 11367 0x7f03b8000b70 WARN                 basesrc gstbasesrc.c:3127:gst_base_src_loop:<gtkmm__gstappsrc0> error: Internal data stream error.
Feed buffer
Feed buffer
0:00:00.755929563 11367 0x7f03b8000b70 WARN                 basesrc gstbasesrc.c:3127:gst_base_src_loop:<gtkmm__gstappsrc0> error: streaming stopped, reason not-negotiated (-4)

I tried to copy downstream events between first and second pipelines, but with no luck.
You can see the code at: https://github.com/movepointsolutions/webmshuf/blob/main/main.c%2B%2B

What do I get wrong? What is codec-id for webm/matroska? I set_caps on appsrc, but is there VP9 version range point in bytestream that I miss? I wonder…

Well, I think I found a hint:

Setting to PLAYING.
Running.
0:00:00.755497192 11367 0x7f03b8000b70 FIXME                default gstutils.c:4025:gst_pad_create_stream_id_internal:<gtkmm__gstappsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id

Some inconsiostency in what webmmux gets

In other words, I’m trying to just remux a webm file, copying and shuffling VP9 buffers

Well, I found that app_sink->set_caps() returns false.
Why could that be?