Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC 7230] Expect header #533

Open
krizhanovsky opened this issue May 26, 2016 · 2 comments · May be fixed by #2343
Open

[RFC 7230] Expect header #533

krizhanovsky opened this issue May 26, 2016 · 2 comments · May be fixed by #2343
Assignees
Milestone

Comments

@krizhanovsky
Copy link
Contributor

krizhanovsky commented May 26, 2016

Tempesta must properly implement large uploads using Expect header. See What Proxies Must Do, "5. Meet Expectations", for motivation.

There were ambiguity in RFC 2616 "8.2.1 Persistent Connections and Flow Control" regarding affecting Expect header on POST requests retrying, which lead to serious problems. RFC 7230 explicitly prohibit the statement in A.2.:

The requirement to retry requests under certain circumstances when
the server prematurely closes the connection has been removed.

Expect must also correctly work for Upgrade header, see RFC 7230 6.7

@krizhanovsky krizhanovsky added this to the 0.5.0 Web Server milestone May 26, 2016
@krizhanovsky krizhanovsky assigned vankoven and unassigned keshonok Dec 20, 2016
@krizhanovsky krizhanovsky modified the milestones: 0.6 WebOS, 0.5.0 Web Server Mar 7, 2017
@krizhanovsky krizhanovsky modified the milestones: backlog, 0.8 TDB v0.2 Jan 15, 2018
@krizhanovsky krizhanovsky modified the milestones: 1.2 TDB v0.2, 1.1 QUIC Aug 8, 2018
@krizhanovsky krizhanovsky modified the milestones: 0.8 - TBD, 1.1 - TLS 1.3 Jan 3, 2022
@krizhanovsky krizhanovsky modified the milestones: 1.2 - TBD, 0.8 - Beta Feb 6, 2025
@krizhanovsky
Copy link
Contributor Author

Required for S3 operation, so crucial to deliver in this milestone

@symstu-tempesta
Copy link
Contributor

Here is an investigation of how the Expect header is processed in Tempesta and Nginx:

Tempesta:

  1. The client sends a request with the header "Expect: 100-continue".
  2. Tempesta receives the request, sends a TCP response to the client A, but seems to set some flags incorrectly or fails to set them when needed.
  3. The client sends the request body to Tempesta.
  4. Tempesta forwards the headers as they are to the upstream.
  5. Tempesta forwards the BODY to the upstream.
  6. The upstream sends 100 Continue to Tempesta multiple times.
  7. Tempesta sends a 100 Continue response to the client.
  8. The client acknowledges receiving 100-continue but does nothing.
  9. The upstream sends a response to Tempesta.
  10. Tempesta receives the data and closes the connection with the upstream.
  11. For some reason, Tempesta reopens the connection with the client. The client responds, but no data transmission occurs.

Nginx:

  1. The client sends a request with the header "Expect: 100-continue".
  2. Nginx receives the headers.
  3. Nginx itself sends 100 Continue to the client.
  4. The client sends the BODY.
  5. Nginx receives the rest of the request.
  6. Nginx establishes a connection with the upstream and immediately sends the entire request at once.
  7. The upstream responds to Nginx.
  8. Nginx receives the data from the upstream and closes the connection with it.
  9. Nginx sends the data to the client.
  10. The client receives the data, and the connection is closed.

Here is the tempesta tcpdump:

root@qa-reds3-via-tfw:/home/user/tempesta# tcpdump -A src port 18001 or host 192.168.50.189 or dst port 18002
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes
12:10:38.066081 IP redt.my.com.52494 > qa-reds3-via-tfw.com.18001: Flags [S], seq 248969466, win 64240, options [mss 1460,sackOK,TS val 2389736048 ecr 0,nop,wscale 8], length 0
E..<@.@[email protected].......................
.pzp........
12:10:38.066170 IP qa-reds3-via-tfw.com.18001 > redt.my.com.52494: Flags [S.], seq 1292287278, ack 248969467, win 65160, options [mss 1460,sackOK,TS val 2488429087 ecr 2389736048,nop,wscale 7], length 0
E..<..@[email protected]......................
.Rj..pzp....
12:10:38.066299 IP redt.my.com.52494 > qa-reds3-via-tfw.com.18001: Flags [.], ack 1, win 251, options [nop,nop,TS val 2389736048 ecr 2488429087], length 0
E..4@.@[email protected]../...........
.pzp.Rj.
12:10:38.066505 IP redt.my.com.52494 > qa-reds3-via-tfw.com.18001: Flags [P.], seq 1:858, ack 1, win 251, options [nop,nop,TS val 2389736048 ecr 2488429087], length 857
E...@.@[email protected]../...........
.pzp.Rj.PUT /brussels8452/pleased2838 HTTP/1.1
Host: redt.my.com:18001
Accept: */*
Accept-Encoding: identity
X-Amz-Meta-Purpose: test
User-Agent: Boto3/1.35.99 md/Botocore#1.35.99 ua/2.0 os/linux#6.8.0-52-generic md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.99
Content-Md5: tqko9U/zjvYv0x7KrNw4kg==
Expect: 100-continue
X-Amz-Date: 20250205T211821Z
X-Amz-Content-Sha256: 1e9415183638cd30c03fb2cff9ba7d85a3604dccd1cbc1b7d32355174e2858b8
Authorization: AWS4-HMAC-SHA256 Credential=3VJTIQ8OQG642KKXLLMG/20250205/us-east-1/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-meta-purpose, Signature=717bf26945806cfc48b2a392110ac96b5e587fb0149c6df8e8b8db7c794b3b48
Amz-Sdk-Invocation-Id: 8c3e4ebb-0dc8-49a6-b0ab-afbfcb22b649
Amz-Sdk-Request: attempt=2; max=2
Content-Length: 8


12:10:38.066553 IP qa-reds3-via-tfw.com.18001 > redt.my.com.52494: Flags [.], ack 858, win 503, options [nop,nop,TS val 2488429087 ecr 2389736048], length 0
E..4".@[email protected]../...T...........
.Rj..pzp
12:10:39.069075 IP redt.my.com.52494 > qa-reds3-via-tfw.com.18001: Flags [P.], seq 858:866, ack 1, win 251, options [nop,nop,TS val 2389737051 ecr 2488429087], length 8
E..<@.@.@..?..2...2w..FQ...TM../...........
.p~[.Rj.limits66
12:10:39.069146 IP qa-reds3-via-tfw.com.18001 > redt.my.com.52494: Flags [.], ack 866, win 503, options [nop,nop,TS val 2488430090 ecr 2389737051], length 0
E..4".@[email protected]../...\...........
.Rn
.p~[
12:10:39.069256 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [.], seq 2565620414:2565621370, ack 2992685955, win 502, options [nop,nop,TS val 2488430090 ecr 2389369634], length 956
E.....@[email protected][email protected]..`.......g.....
.Rn
.j."PUT /brussels8452/pleased2838 HTTP/1.1
Host: redt.my.com:18001
Accept: */*
Accept-Encoding: identity
X-Amz-Meta-Purpose: test
User-Agent: Boto3/1.35.99 md/Botocore#1.35.99 ua/2.0 os/linux#6.8.0-52-generic md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.99
Content-Md5: tqko9U/zjvYv0x7KrNw4kg==
Expect: 100-continue
X-Amz-Date: 20250205T211821Z
X-Amz-Content-Sha256: 1e9415183638cd30c03fb2cff9ba7d85a3604dccd1cbc1b7d32355174e2858b8
Authorization: AWS4-HMAC-SHA256 Credential=3VJTIQ8OQG642KKXLLMG/20250205/us-east-1/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-meta-purpose, Signature=717bf26945806cfc48b2a392110ac96b5e587fb0149c6df8e8b8db7c794b3b48
Amz-Sdk-Invocation-Id: 8c3e4ebb-0dc8-49a6-b0ab-afbfcb22b649
Amz-Sdk-Request: attempt=2; max=2
Content-Length: 8
X-Forwarded-For: 192.168.50.189
via: 1.1 tempesta_fw (Tempesta FW 0.8.0)
Connection: keep-alive


12:10:39.069293 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [P.], seq 956:964, ack 1, win 502, options [nop,nop,TS val 2488430090 ecr 2389369634], length 8
E..<..@[email protected][email protected].`.............
.Rn
.j."limits66
12:10:39.069398 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [.], ack 956, win 262, options [nop,nop,TS val 2389737051 ecr 2488430090], length 0
E..4.]@[email protected].@.`....Fz...........
.p~[.Rn

12:10:39.069398 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [.], ack 964, win 262, options [nop,nop,TS val 2389737051 ecr 2488430090], length 0
E..4.^@[email protected].@.`....F............
.p~[.Rn

12:10:39.069802 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [P.], seq 1:26, ack 964, win 262, options [nop,nop,TS val 2389737051 ecr 2488430090], length 25
E..M._@[email protected].@.`....F............
.p~[.Rn
HTTP/1.1 100 Continue


12:10:39.069819 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [.], ack 26, win 502, options [nop,nop,TS val 2488430090 ecr 2389737051], length 0
E..4..@[email protected][email protected]..`.............
.Rn
.p~[
12:10:39.069904 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [P.], seq 26:51, ack 964, win 262, options [nop,nop,TS val 2389737052 ecr 2488430090], length 25
E..M.`@[email protected].@.`....F............
.p~\.Rn
HTTP/1.1 100 Continue


12:10:39.074340 IP qa-reds3-via-tfw.com.18001 > redt.my.com.52494: Flags [P.], seq 1:132, ack 866, win 503, options [nop,nop,TS val 2488430095 ecr 2389737051], length 131
E...".@[email protected]../...\...........
.Rn..p~[HTTP/1.1 100 Continue
Server: Tempesta FW/0.8.0
date: Thu, 06 Feb 2025 12:10:39 GMT
via: 1.1 tempesta_fw (Tempesta FW 0.8.0)


12:10:39.074356 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [.], ack 51, win 502, options [nop,nop,TS val 2488430095 ecr 2389737052], length 0
E..4..@[email protected][email protected]..`.............
.Rn..p~\
12:10:39.074466 IP redt.my.com.52494 > qa-reds3-via-tfw.com.18001: Flags [.], ack 132, win 251, options [nop,nop,TS val 2389737056 ecr 2488430095], length 0
E..4@.@[email protected]...\M..............
.p~`.Rn.
12:10:39.074466 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [P.], seq 51:234, ack 964, win 262, options [nop,nop,TS val 2389737056 ecr 2488430095], length 183
E....a@.@..&..2...2wFR.@.`....F......b.....
.p~`.Rn.HTTP/1.1 200 OK
Server: Werkzeug/3.1.3 Python/3.12.3
Date: Thu, 06 Feb 2025 12:10:39 GMT
Content-Type: application/json
Content-Length: 18
Connection: close

{"hello": "world"}
12:10:39.075816 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [.], ack 234, win 501, options [nop,nop,TS val 2488430096 ecr 2389737056], length 0
E..4..@[email protected][email protected]..`.l...........
.Rn..p~`
12:10:39.075859 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [F.], seq 964, ack 234, win 501, options [nop,nop,TS val 2488430096 ecr 2389737056], length 0
E..4..@[email protected][email protected]..`.l...........
.Rn..p~`
12:10:39.076105 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43072: Flags [F.], seq 234, ack 965, win 262, options [nop,nop,TS val 2389737058 ecr 2488430096], length 0
E..4.b@[email protected].@.`.l..F............
.p~b.Rn.
12:10:39.076126 IP qa-reds3-via-tfw.com.43072 > redt.my.com.18002: Flags [.], ack 235, win 501, options [nop,nop,TS val 2488430097 ecr 2389737058], length 0
E..4..@[email protected][email protected]..`.m...........
.Rn..p~b
12:10:39.080281 IP qa-reds3-via-tfw.com.43134 > redt.my.com.18002: Flags [S], seq 3393926385, win 64240, options [mss 1460,sackOK,TS val 2488430101 ecr 0,nop,wscale 7], length 0
E..<.=@[email protected]..~FR.K4....................
.Rn.........
12:10:39.080440 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43134: Flags [S.], seq 3820262053, ack 3393926386, win 65160, options [mss 1460,sackOK,TS val 2389737062 ecr 2488430101,nop,wscale 8], length 0
E..<..@[email protected].~.....K4................
.p~f.Rn.....
12:10:39.080478 IP qa-reds3-via-tfw.com.43134 > redt.my.com.18002: Flags [.], ack 1, win 502, options [nop,nop,TS val 2488430101 ecr 2389737062], length 0
E..4.>@[email protected]..~FR.K4................
.Rn..p~f

Here is the nginx tcp dump

root@qa-reds3-via-tfw:/home/user/tempesta# tcpdump -A src port 18001 or host 192.168.50.189 or dst port 18002
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes
12:15:34.770489 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [S], seq 1330874029, win 64240, options [mss 1460,sackOK,TS val 2390032752 ecr 0,nop,wscale 8], length 0
E..<..@[email protected].....................
.u.p........
12:15:34.770555 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [S.], seq 3338533165, ack 1330874030, win 65160, options [mss 1460,sackOK,TS val 2488725791 ecr 2390032752,nop,wscale 7], length 0
E..<..@[email protected].................
.V...u.p....
12:15:34.770661 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [.], ack 1, win 251, options [nop,nop,TS val 2390032752 ecr 2488725791], length 0
E..4..@[email protected].................
.u.p.V..
12:15:34.770747 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [P.], seq 1:858, ack 1, win 251, options [nop,nop,TS val 2390032752 ecr 2488725791], length 857
E.....@[email protected].................
.u.p.V..PUT /brussels8452/pleased2838 HTTP/1.1
Host: redt.my.com:18001
Accept: */*
Accept-Encoding: identity
X-Amz-Meta-Purpose: test
User-Agent: Boto3/1.35.99 md/Botocore#1.35.99 ua/2.0 os/linux#6.8.0-52-generic md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.99
Content-Md5: tqko9U/zjvYv0x7KrNw4kg==
Expect: 100-continue
X-Amz-Date: 20250205T211821Z
X-Amz-Content-Sha256: 1e9415183638cd30c03fb2cff9ba7d85a3604dccd1cbc1b7d32355174e2858b8
Authorization: AWS4-HMAC-SHA256 Credential=3VJTIQ8OQG642KKXLLMG/20250205/us-east-1/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-meta-purpose, Signature=717bf26945806cfc48b2a392110ac96b5e587fb0149c6df8e8b8db7c794b3b48
Amz-Sdk-Invocation-Id: 8c3e4ebb-0dc8-49a6-b0ab-afbfcb22b649
Amz-Sdk-Request: attempt=2; max=2
Content-Length: 8


12:15:34.770760 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [.], ack 858, win 503, options [nop,nop,TS val 2488725791 ecr 2390032752], length 0
E..4.O@[email protected].............
.V...u.p
12:15:34.770884 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [P.], seq 1:26, ack 858, win 503, options [nop,nop,TS val 2488725791 ecr 2390032752], length 25
E..M.P@[email protected].............
.V...u.pHTTP/1.1 100 Continue


12:15:34.770984 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [.], ack 26, win 251, options [nop,nop,TS val 2390032752 ecr 2488725791], length 0
E..4..@[email protected]...........
.u.p.V..
12:15:34.771195 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [P.], seq 858:866, ack 26, win 251, options [nop,nop,TS val 2390032753 ecr 2488725791], length 8
E..<..@[email protected]...........
.u.q.V..limits66
12:15:34.771211 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [.], ack 866, win 503, options [nop,nop,TS val 2488725792 ecr 2390032753], length 0
E..4.Q@[email protected].............
.V. .u.q
12:15:34.771282 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [S], seq 368598259, win 64240, options [mss 1460,sackOK,TS val 2488725792 ecr 0,nop,wscale 7], length 0
E..</.@.@.$o..2w..2...FR..\....................
.V. ........
12:15:34.771352 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43136: Flags [S.], seq 1704204992, ack 368598260, win 65160, options [mss 1460,sackOK,TS val 2390032753 ecr 2488725792,nop,wscale 8], length 0
E..<..@[email protected].....\................
.u.q.V. ....
12:15:34.771385 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [.], ack 1, win 502, options [nop,nop,TS val 2488725792 ecr 2390032753], length 0
E..4/.@.@.$v..2w..2...FR..\.e..............
.V. .u.q
12:15:34.771418 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [P.], seq 1:857, ack 1, win 502, options [nop,nop,TS val 2488725792 ecr 2390032753], length 856
E.../.@.@.!...2w..2...FR..\.e..............
.V. .u.qPUT /brussels8452/pleased2838 HTTP/1.0
Host: redt.my.com
Connection: close
Content-Length: 8
Accept: */*
Accept-Encoding: identity
X-Amz-Meta-Purpose: test
User-Agent: Boto3/1.35.99 md/Botocore#1.35.99 ua/2.0 os/linux#6.8.0-52-generic md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.99
Content-Md5: tqko9U/zjvYv0x7KrNw4kg==
X-Amz-Date: 20250205T211821Z
X-Amz-Content-Sha256: 1e9415183638cd30c03fb2cff9ba7d85a3604dccd1cbc1b7d32355174e2858b8
Authorization: AWS4-HMAC-SHA256 Credential=3VJTIQ8OQG642KKXLLMG/20250205/us-east-1/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-meta-purpose, Signature=717bf26945806cfc48b2a392110ac96b5e587fb0149c6df8e8b8db7c794b3b48
Amz-Sdk-Invocation-Id: 8c3e4ebb-0dc8-49a6-b0ab-afbfcb22b649
Amz-Sdk-Request: attempt=2; max=2

limits66
12:15:34.771473 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43136: Flags [.], ack 857, win 252, options [nop,nop,TS val 2390032753 ecr 2488725792], length 0
E..4. @[email protected].....`L...........
.u.q.V.
12:15:34.773253 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43136: Flags [P.], seq 1:166, ack 857, win 252, options [nop,nop,TS val 2390032755 ecr 2488725792], length 165
E....!@[email protected].....`L.....P.....
.u.s.V. HTTP/1.1 200 OK
Server: Werkzeug/3.1.3 Python/3.12.3
Date: Thu, 06 Feb 2025 12:15:34 GMT
Content-Type: application/json
Content-Length: 18
Connection: close


12:15:34.773275 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [.], ack 166, win 501, options [nop,nop,TS val 2488725794 ecr 2390032755], length 0
E..4/.@.@.$t..2w..2...FR..`Le..f...........
.V.".u.s
12:15:34.773354 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43136: Flags [P.], seq 166:184, ack 857, win 252, options [nop,nop,TS val 2390032755 ecr 2488725794], length 18
E..F."@[email protected]
..2...2wFR..e..f..`L...........
.u.s.V."{"hello": "world"}
12:15:34.773365 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [.], ack 184, win 501, options [nop,nop,TS val 2488725794 ecr 2390032755], length 0
E..4/.@.@.$s..2w..2...FR..`Le..x...........
.V.".u.s
12:15:34.773430 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [F.], seq 857, ack 184, win 501, options [nop,nop,TS val 2488725794 ecr 2390032755], length 0
E..4/.@.@.$r..2w..2...FR..`Le..x...........
.V.".u.s
12:15:34.773458 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [P.], seq 26:207, ack 866, win 503, options [nop,nop,TS val 2488725794 ecr 2390032753], length 181
E....R@[email protected].......`.....
.V.".u.qHTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Thu, 06 Feb 2025 12:15:34 GMT
Content-Type: application/json
Content-Length: 18
Connection: keep-alive

{"hello": "world"}
12:15:34.773601 IP redt.my.com.18002 > qa-reds3-via-tfw.com.43136: Flags [F.], seq 184, ack 858, win 252, options [nop,nop,TS val 2390032755 ecr 2488725794], length 0
E..4.#@[email protected]..`M...........
.u.s.V."
12:15:34.773622 IP qa-reds3-via-tfw.com.43136 > redt.my.com.18002: Flags [.], ack 185, win 501, options [nop,nop,TS val 2488725794 ecr 2390032755], length 0
E..4/.@.@.$q..2w..2...FR..`Me..y...........
.V.".u.s
12:15:34.773908 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [F.], seq 866, ack 207, win 251, options [nop,nop,TS val 2390032755 ecr 2488725794], length 0
E..4..@[email protected].................
.u.s.V."
12:15:34.773966 IP qa-reds3-via-tfw.com.18001 > redt.my.com.47214: Flags [F.], seq 207, ack 867, win 503, options [nop,nop,TS val 2488725795 ecr 2390032755], length 0
E..4.S@[email protected].............
.V.#.u.s
12:15:34.774015 IP redt.my.com.47214 > qa-reds3-via-tfw.com.18001: Flags [.], ack 208, win 251, options [nop,nop,TS val 2390032755 ecr 2488725795], length 0
E..4..@[email protected].................
.u.s.V.#

@const-t const-t self-assigned this Feb 10, 2025
@const-t const-t linked a pull request Feb 20, 2025 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants