It appears that something is still wrong. I applied lipq pipeline v27 from [1] and ran src/test/modules/test_libpq/pipeline singlerow, after patching it to do PQtrace() after PQconn(). Below is the output I get from that. The noteworthy point is that "ParseComplete" messages appear multiple times for some reason ... but that's quite odd, because if I look at the network traffic with Wireshark I certainly do not see the ParseComplete message being sent three times.
[1] https://www.postgresql.org/message-id/20210216231350.GA1629@alvherre.pgsql > Parse 38 "" "SELECT generate_series(42, $1)" #0 > Bind 20 "" "" #0 #1 2 '44' #1 #0 > Describe 6 P "" > Execute 9 "" 0 > Parse 38 "" "SELECT generate_series(42, $1)" #0 > Bind 20 "" "" #0 #1 2 '45' #1 #0 > Describe 6 P "" > Execute 9 "" 0 > Parse 38 "" "SELECT generate_series(42, $1)" #0 > Bind 20 "" "" #0 #1 2 '46' #1 #0 > Describe 6 P "" > Execute 9 "" 0 > Sync 4 < ParseComplete 4 < BindComplete 4 < RowDescription 40 #1 "generate_series" 0 #0 23 #4 -1 #0 < DataRow 12 #1 2 '42' < DataRow 12 #1 2 '43' < DataRow 12 #1 2 '44' < CommandComplete 13 "SELECT 3" < ParseComplete 4 < ParseComplete 4 < ParseComplete 4 < BindComplete 4 < RowDescription 40 #1 "generate_series" 0 #0 23 #4 -1 #0 < DataRow 12 #1 2 '42' < DataRow 12 #1 2 '43' < DataRow 12 #1 2 '44' < DataRow 12 #1 2 '45' < CommandComplete 13 "SELECT 4" < ParseComplete 4 < ParseComplete 4 < ParseComplete 4 < BindComplete 4 < RowDescription 40 #1 "generate_series" 0 #0 23 #4 -1 #0 < DataRow 12 #1 2 '42' < DataRow 12 #1 2 '43' < DataRow 12 #1 2 '44' < DataRow 12 #1 2 '45' < DataRow 12 #1 2 '46' < CommandComplete 13 "SELECT 5" < ReadyForQuery 5 I > Terminate 4