Production CPU lacks PCLMULQDQ: measure AES-GCM vs ChaCha20 and pick suite order by CPU #203

Open
opened 2026-10-13 06:41:38 +00:00 by kayg · 23 comments
Owner

Production (monitor01, a rented VPS — no control over its CPU model) reports QEMU Virtual CPU version 2.5+ with aes=1, avx2=1 but pclmulqdq=0 and sha_ni=0. AES-GCM's fast path needs carry-less multiply for GHASH; without it every TLS/QUIC byte the server encrypts or decrypts takes a slower path. Both TLS 1.3 suites we offer are safe; only their order matters.

Plan:

  1. Measure on monitor01 (nice 19, under 60 s total, no restart, nothing installed system-wide; a static benchmark binary in /tmp removed afterwards) and on the perf VM: AES-128-GCM, AES-256-GCM and ChaCha20-Poly1305 seal/open throughput (1 KiB, 16 KiB, 64 KiB) and per-record latency for keystroke-sized records (≤64 B), with the exact crypto library build we ship.
  2. If ChaCha20-Poly1305 is faster on CPUs without PCLMULQDQ, make the server prefer it for TLS and QUIC when its own CPU lacks carry-less multiply (detected at start, logged once), and keep AES-GCM first everywhere else. No new dependency, no suite added or removed.
  3. Report before/after for a real browser session (keystroke echo and bulk output throughput) measured against a build running on a no-PCLMUL CPU.
Production (monitor01, a rented VPS — no control over its CPU model) reports `QEMU Virtual CPU version 2.5+` with aes=1, avx2=1 but **pclmulqdq=0** and sha_ni=0. AES-GCM's fast path needs carry-less multiply for GHASH; without it every TLS/QUIC byte the server encrypts or decrypts takes a slower path. Both TLS 1.3 suites we offer are safe; only their order matters. Plan: 1. Measure on monitor01 (nice 19, under 60 s total, no restart, nothing installed system-wide; a static benchmark binary in /tmp removed afterwards) and on the perf VM: AES-128-GCM, AES-256-GCM and ChaCha20-Poly1305 seal/open throughput (1 KiB, 16 KiB, 64 KiB) and per-record latency for keystroke-sized records (≤64 B), with the exact crypto library build we ship. 2. If ChaCha20-Poly1305 is faster on CPUs without PCLMULQDQ, make the server prefer it for TLS and QUIC when its own CPU lacks carry-less multiply (detected at start, logged once), and keep AES-GCM first everywhere else. No new dependency, no suite added or removed. 3. Report before/after for a real browser session (keystroke echo and bulk output throughput) measured against a build running on a no-PCLMUL CPU.
Author
Owner

Starting cipher-order at base dcf9dbb94b (origin/dev). #203 has zero comments and no parent listed. NetBird SSH access to the perf VM and the production benchmark host succeeds. Browser HTTPS currently uses vendored OpenSSL (Cargo.toml:31, server/runtime.rs:303); QUIC uses rustls/ring (plugins/remote/src/remote_quic.rs:123); fallback TLS uses OpenSSL. Measuring both shipped backends before any suite-order change. D5/D41/D243/D262 apply. No deploy; pushes only to cipher-order.

Starting cipher-order at base dcf9dbb94b52d5d2e805a0474e74dd42764159fe (origin/dev). #203 has zero comments and no parent listed. NetBird SSH access to the perf VM and the production benchmark host succeeds. Browser HTTPS currently uses vendored OpenSSL (Cargo.toml:31, server/runtime.rs:303); QUIC uses rustls/ring (plugins/remote/src/remote_quic.rs:123); fallback TLS uses OpenSSL. Measuring both shipped backends before any suite-order change. D5/D41/D243/D262 apply. No deploy; pushes only to cipher-order.
Author
Owner

AEAD measurement finding: static release benchmark, base dcf9dbb9, OpenSSL 3.6.3 / rustls 0.23.45 / ring 0.17.14; 3 × 50 ms batches per row, reusable key/context and buffers. Open includes copy and plaintext verification; this is AEAD work, not browser latency. Production run completed inside a 45 s timeout at nice 19, temporary binary removed by EXIT trap. No service/files/sessions touched.

production: machine=monitor01 load=0.52 0.27 0.20 2/872 212723 arch=x86_64

Backend Bytes Suite Seal MiB/s Open MiB/s ns/seal ns/open
openssl 1 AES-128-GCM 1.51 1.61 632.29 591.72
openssl 1 AES-256-GCM 2.17 1.90 439.96 502.36
openssl 1 ChaCha20-Poly1305 1.20 1.19 797.37 801.86
openssl 16 AES-128-GCM 31.75 30.48 480.66 500.53
openssl 16 AES-256-GCM 31.90 30.33 478.36 503.14
openssl 16 ChaCha20-Poly1305 23.80 22.29 641.16 684.59
openssl 64 AES-128-GCM 94.95 87.96 642.84 693.90
openssl 64 AES-256-GCM 85.92 90.32 710.38 675.76
openssl 64 ChaCha20-Poly1305 85.31 80.05 715.48 762.47
openssl 1024 AES-128-GCM 289.03 224.53 3378.76 4349.46
openssl 1024 AES-256-GCM 271.83 218.99 3592.57 4459.31
openssl 1024 ChaCha20-Poly1305 616.07 388.45 1585.15 2513.97
openssl 16384 AES-128-GCM 323.15 237.57 48352.83 65768.87
openssl 16384 AES-256-GCM 326.97 209.97 47787.00 74413.62
openssl 16384 ChaCha20-Poly1305 1051.28 450.02 14862.78 34720.70
openssl 65536 AES-128-GCM 305.78 251.18 204397.16 248829.00
openssl 65536 AES-256-GCM 323.30 242.46 193319.86 257769.79
openssl 65536 ChaCha20-Poly1305 1095.57 514.71 57047.95 121427.58
ring 1 AES-128-GCM 1.74 1.91 549.58 500.63
ring 1 AES-256-GCM 1.74 1.68 547.64 567.83
ring 1 ChaCha20-Poly1305 3.89 4.05 245.28 235.44
ring 16 AES-128-GCM 33.60 34.77 454.06 438.84
ring 16 AES-256-GCM 28.39 27.65 537.42 551.79
ring 16 ChaCha20-Poly1305 68.43 65.75 222.97 232.06
ring 64 AES-128-GCM 68.81 69.85 886.95 873.79
ring 64 AES-256-GCM 73.57 68.07 829.66 896.69
ring 64 ChaCha20-Poly1305 244.66 183.93 249.47 331.85
ring 1024 AES-128-GCM 104.78 104.63 9320.16 9333.26
ring 1024 AES-256-GCM 103.70 74.89 9417.04 13040.85
ring 1024 ChaCha20-Poly1305 982.66 494.40 993.79 1975.25
ring 16384 AES-128-GCM 118.26 107.25 132124.60 145694.11
ring 16384 AES-256-GCM 95.51 87.69 163602.12 178186.81
ring 16384 ChaCha20-Poly1305 1292.59 507.77 12088.12 30771.60
ring 65536 AES-128-GCM 123.32 114.50 506811.66 545830.16
ring 65536 AES-256-GCM 100.46 92.50 622115.82 675680.34
ring 65536 ChaCha20-Poly1305 1256.79 530.21 49729.69 117878.65

perf: machine=infraternal-perf-test load=0.35 0.64 0.64 2/2285 2619494 arch=x86_64

Backend Bytes Suite Seal MiB/s Open MiB/s ns/seal ns/open
openssl 1 AES-128-GCM 5.62 5.05 169.77 188.86
openssl 1 AES-256-GCM 5.53 4.88 172.32 195.51
openssl 1 ChaCha20-Poly1305 2.29 2.15 417.01 444.23
openssl 16 AES-128-GCM 85.69 79.29 178.07 192.45
openssl 16 AES-256-GCM 83.08 78.53 183.66 194.29
openssl 16 ChaCha20-Poly1305 39.70 36.88 384.33 413.75
openssl 64 AES-128-GCM 316.17 276.28 193.04 220.92
openssl 64 AES-256-GCM 303.01 264.94 201.43 230.37
openssl 64 ChaCha20-Poly1305 156.33 132.56 390.42 460.44
openssl 1024 AES-128-GCM 2743.50 1181.52 355.95 826.53
openssl 1024 AES-256-GCM 2381.88 1059.88 410.00 921.39
openssl 1024 ChaCha20-Poly1305 1299.62 777.18 751.42 1256.55
openssl 16384 AES-128-GCM 5798.15 1458.82 2694.83 10710.71
openssl 16384 AES-256-GCM 4434.88 1258.92 3523.21 12411.44
openssl 16384 ChaCha20-Poly1305 2327.05 1081.81 6714.51 14443.45
openssl 65536 AES-128-GCM 6393.98 1412.16 9774.81 44258.44
openssl 65536 AES-256-GCM 4728.26 1399.59 13218.39 44655.98
openssl 65536 ChaCha20-Poly1305 2449.43 1114.75 25516.10 56066.39
ring 1 AES-128-GCM 6.24 7.23 152.95 131.83
ring 1 AES-256-GCM 5.98 6.74 159.58 141.42
ring 1 ChaCha20-Poly1305 6.65 6.91 143.43 137.97
ring 16 AES-128-GCM 159.70 143.47 95.55 106.35
ring 16 AES-256-GCM 148.52 142.42 102.74 107.14
ring 16 ChaCha20-Poly1305 111.48 107.91 136.88 141.40
ring 64 AES-128-GCM 581.01 445.52 105.05 137.00
ring 64 AES-256-GCM 558.46 440.70 109.29 138.50
ring 64 ChaCha20-Poly1305 413.16 347.51 147.73 175.64
ring 1024 AES-128-GCM 3551.54 1338.74 274.97 729.47
ring 1024 AES-256-GCM 2859.14 1195.19 341.56 817.08
ring 1024 ChaCha20-Poly1305 1737.27 933.29 562.12 1046.37
ring 16384 AES-128-GCM 5344.86 1474.87 2923.37 10594.17
ring 16384 AES-256-GCM 4185.70 1356.26 3732.95 11520.63
ring 16384 ChaCha20-Poly1305 2322.61 1091.62 6727.34 14313.56
ring 65536 AES-128-GCM 5580.48 1519.12 11199.75 41142.11
ring 65536 AES-256-GCM 4239.34 1383.25 14742.86 45183.37
ring 65536 ChaCha20-Poly1305 2334.88 1109.00 26767.93 56357.27

At 16 KiB on production, ChaCha seal/open vs AES-128 is 3.25×/1.89× with OpenSSL and 10.93×/4.74× with ring. OpenSSL tiny-record AES remains slightly faster; ring tiny records favor ChaCha. Accelerated perf VM favors AES. Proceed with CPU-conditional server preference, preserving suites, TLS verification, and QUIC Initial AES requirements. Browser comparison pending a CPU-masked KVM guest on the perf VM. D5/D41/D176/D243/D250/D262.

production.csv
perf.csv

AEAD measurement finding: static release benchmark, base dcf9dbb9, OpenSSL 3.6.3 / rustls 0.23.45 / ring 0.17.14; 3 × 50 ms batches per row, reusable key/context and buffers. Open includes copy and plaintext verification; this is AEAD work, not browser latency. Production run completed inside a 45 s timeout at nice 19, temporary binary removed by EXIT trap. No service/files/sessions touched. production: machine=monitor01 load=0.52 0.27 0.20 2/872 212723 arch=x86_64 | Backend | Bytes | Suite | Seal MiB/s | Open MiB/s | ns/seal | ns/open | |---|---:|---|---:|---:|---:|---:| | openssl | 1 | AES-128-GCM | 1.51 | 1.61 | 632.29 | 591.72 | | openssl | 1 | AES-256-GCM | 2.17 | 1.90 | 439.96 | 502.36 | | openssl | 1 | ChaCha20-Poly1305 | 1.20 | 1.19 | 797.37 | 801.86 | | openssl | 16 | AES-128-GCM | 31.75 | 30.48 | 480.66 | 500.53 | | openssl | 16 | AES-256-GCM | 31.90 | 30.33 | 478.36 | 503.14 | | openssl | 16 | ChaCha20-Poly1305 | 23.80 | 22.29 | 641.16 | 684.59 | | openssl | 64 | AES-128-GCM | 94.95 | 87.96 | 642.84 | 693.90 | | openssl | 64 | AES-256-GCM | 85.92 | 90.32 | 710.38 | 675.76 | | openssl | 64 | ChaCha20-Poly1305 | 85.31 | 80.05 | 715.48 | 762.47 | | openssl | 1024 | AES-128-GCM | 289.03 | 224.53 | 3378.76 | 4349.46 | | openssl | 1024 | AES-256-GCM | 271.83 | 218.99 | 3592.57 | 4459.31 | | openssl | 1024 | ChaCha20-Poly1305 | 616.07 | 388.45 | 1585.15 | 2513.97 | | openssl | 16384 | AES-128-GCM | 323.15 | 237.57 | 48352.83 | 65768.87 | | openssl | 16384 | AES-256-GCM | 326.97 | 209.97 | 47787.00 | 74413.62 | | openssl | 16384 | ChaCha20-Poly1305 | 1051.28 | 450.02 | 14862.78 | 34720.70 | | openssl | 65536 | AES-128-GCM | 305.78 | 251.18 | 204397.16 | 248829.00 | | openssl | 65536 | AES-256-GCM | 323.30 | 242.46 | 193319.86 | 257769.79 | | openssl | 65536 | ChaCha20-Poly1305 | 1095.57 | 514.71 | 57047.95 | 121427.58 | | ring | 1 | AES-128-GCM | 1.74 | 1.91 | 549.58 | 500.63 | | ring | 1 | AES-256-GCM | 1.74 | 1.68 | 547.64 | 567.83 | | ring | 1 | ChaCha20-Poly1305 | 3.89 | 4.05 | 245.28 | 235.44 | | ring | 16 | AES-128-GCM | 33.60 | 34.77 | 454.06 | 438.84 | | ring | 16 | AES-256-GCM | 28.39 | 27.65 | 537.42 | 551.79 | | ring | 16 | ChaCha20-Poly1305 | 68.43 | 65.75 | 222.97 | 232.06 | | ring | 64 | AES-128-GCM | 68.81 | 69.85 | 886.95 | 873.79 | | ring | 64 | AES-256-GCM | 73.57 | 68.07 | 829.66 | 896.69 | | ring | 64 | ChaCha20-Poly1305 | 244.66 | 183.93 | 249.47 | 331.85 | | ring | 1024 | AES-128-GCM | 104.78 | 104.63 | 9320.16 | 9333.26 | | ring | 1024 | AES-256-GCM | 103.70 | 74.89 | 9417.04 | 13040.85 | | ring | 1024 | ChaCha20-Poly1305 | 982.66 | 494.40 | 993.79 | 1975.25 | | ring | 16384 | AES-128-GCM | 118.26 | 107.25 | 132124.60 | 145694.11 | | ring | 16384 | AES-256-GCM | 95.51 | 87.69 | 163602.12 | 178186.81 | | ring | 16384 | ChaCha20-Poly1305 | 1292.59 | 507.77 | 12088.12 | 30771.60 | | ring | 65536 | AES-128-GCM | 123.32 | 114.50 | 506811.66 | 545830.16 | | ring | 65536 | AES-256-GCM | 100.46 | 92.50 | 622115.82 | 675680.34 | | ring | 65536 | ChaCha20-Poly1305 | 1256.79 | 530.21 | 49729.69 | 117878.65 | perf: machine=infraternal-perf-test load=0.35 0.64 0.64 2/2285 2619494 arch=x86_64 | Backend | Bytes | Suite | Seal MiB/s | Open MiB/s | ns/seal | ns/open | |---|---:|---|---:|---:|---:|---:| | openssl | 1 | AES-128-GCM | 5.62 | 5.05 | 169.77 | 188.86 | | openssl | 1 | AES-256-GCM | 5.53 | 4.88 | 172.32 | 195.51 | | openssl | 1 | ChaCha20-Poly1305 | 2.29 | 2.15 | 417.01 | 444.23 | | openssl | 16 | AES-128-GCM | 85.69 | 79.29 | 178.07 | 192.45 | | openssl | 16 | AES-256-GCM | 83.08 | 78.53 | 183.66 | 194.29 | | openssl | 16 | ChaCha20-Poly1305 | 39.70 | 36.88 | 384.33 | 413.75 | | openssl | 64 | AES-128-GCM | 316.17 | 276.28 | 193.04 | 220.92 | | openssl | 64 | AES-256-GCM | 303.01 | 264.94 | 201.43 | 230.37 | | openssl | 64 | ChaCha20-Poly1305 | 156.33 | 132.56 | 390.42 | 460.44 | | openssl | 1024 | AES-128-GCM | 2743.50 | 1181.52 | 355.95 | 826.53 | | openssl | 1024 | AES-256-GCM | 2381.88 | 1059.88 | 410.00 | 921.39 | | openssl | 1024 | ChaCha20-Poly1305 | 1299.62 | 777.18 | 751.42 | 1256.55 | | openssl | 16384 | AES-128-GCM | 5798.15 | 1458.82 | 2694.83 | 10710.71 | | openssl | 16384 | AES-256-GCM | 4434.88 | 1258.92 | 3523.21 | 12411.44 | | openssl | 16384 | ChaCha20-Poly1305 | 2327.05 | 1081.81 | 6714.51 | 14443.45 | | openssl | 65536 | AES-128-GCM | 6393.98 | 1412.16 | 9774.81 | 44258.44 | | openssl | 65536 | AES-256-GCM | 4728.26 | 1399.59 | 13218.39 | 44655.98 | | openssl | 65536 | ChaCha20-Poly1305 | 2449.43 | 1114.75 | 25516.10 | 56066.39 | | ring | 1 | AES-128-GCM | 6.24 | 7.23 | 152.95 | 131.83 | | ring | 1 | AES-256-GCM | 5.98 | 6.74 | 159.58 | 141.42 | | ring | 1 | ChaCha20-Poly1305 | 6.65 | 6.91 | 143.43 | 137.97 | | ring | 16 | AES-128-GCM | 159.70 | 143.47 | 95.55 | 106.35 | | ring | 16 | AES-256-GCM | 148.52 | 142.42 | 102.74 | 107.14 | | ring | 16 | ChaCha20-Poly1305 | 111.48 | 107.91 | 136.88 | 141.40 | | ring | 64 | AES-128-GCM | 581.01 | 445.52 | 105.05 | 137.00 | | ring | 64 | AES-256-GCM | 558.46 | 440.70 | 109.29 | 138.50 | | ring | 64 | ChaCha20-Poly1305 | 413.16 | 347.51 | 147.73 | 175.64 | | ring | 1024 | AES-128-GCM | 3551.54 | 1338.74 | 274.97 | 729.47 | | ring | 1024 | AES-256-GCM | 2859.14 | 1195.19 | 341.56 | 817.08 | | ring | 1024 | ChaCha20-Poly1305 | 1737.27 | 933.29 | 562.12 | 1046.37 | | ring | 16384 | AES-128-GCM | 5344.86 | 1474.87 | 2923.37 | 10594.17 | | ring | 16384 | AES-256-GCM | 4185.70 | 1356.26 | 3732.95 | 11520.63 | | ring | 16384 | ChaCha20-Poly1305 | 2322.61 | 1091.62 | 6727.34 | 14313.56 | | ring | 65536 | AES-128-GCM | 5580.48 | 1519.12 | 11199.75 | 41142.11 | | ring | 65536 | AES-256-GCM | 4239.34 | 1383.25 | 14742.86 | 45183.37 | | ring | 65536 | ChaCha20-Poly1305 | 2334.88 | 1109.00 | 26767.93 | 56357.27 | At 16 KiB on production, ChaCha seal/open vs AES-128 is 3.25×/1.89× with OpenSSL and 10.93×/4.74× with ring. OpenSSL tiny-record AES remains slightly faster; ring tiny records favor ChaCha. Accelerated perf VM favors AES. Proceed with CPU-conditional server preference, preserving suites, TLS verification, and QUIC Initial AES requirements. Browser comparison pending a CPU-masked KVM guest on the perf VM. D5/D41/D176/D243/D250/D262. [production.csv](https://git.kayg.org/attachments/a0fb9ab8-4c07-460f-b391-272238f2f389) [perf.csv](https://git.kayg.org/attachments/97a5f1fd-63c8-4a9d-8e8f-2dbb388c1bdb)
Author
Owner

Completed AEAD harness step ec0a2b8a (pushed cipher-order). cargo fmt --all --check and example clippy pass; remote transport library tests: 11 passed, 0 failed. Static release benchmark completed 216 authenticated measurement rows on each authorized host, attached in prior finding. Production reports aes=true, pclmulqdq=false, avx2=true; perf VM reports carry-less multiply present. Full milestone fast gate and unchanged-runtime static size baseline are building. No suite change yet.

Completed AEAD harness step ec0a2b8a (pushed cipher-order). cargo fmt --all --check and example clippy pass; remote transport library tests: 11 passed, 0 failed. Static release benchmark completed 216 authenticated measurement rows on each authorized host, attached in prior finding. Production reports aes=true, pclmulqdq=false, avx2=true; perf VM reports carry-less multiply present. Full milestone fast gate and unchanged-runtime static size baseline are building. No suite change yet.
Author
Owner

Negotiation finding: rustls 0.23.45 ServerConfig defaults ignore_client_order=false (server/builder.rs:110); server/hs.rs:629 selects client order unless that flag is true. OpenSSL modern/intermediate-v5 constructors likewise omit SSL_OP_CIPHER_SERVER_PREFERENCE. Reordering a list alone would have no effect for AES-first browsers/host clients. Both server builders must explicitly select server preference. The suite membership and peer validation remain unchanged; regressions will use an opposing client preference and clients supporting only a non-preferred suite. The no-PCLMUL KVM AEAD fixture completed all 216 rows with aes=true/pclmulqdq=false/avx2=true; guest was powered down.
perf-masked-guest.log

Negotiation finding: rustls 0.23.45 ServerConfig defaults ignore_client_order=false (server/builder.rs:110); server/hs.rs:629 selects client order unless that flag is true. OpenSSL modern/intermediate-v5 constructors likewise omit SSL_OP_CIPHER_SERVER_PREFERENCE. Reordering a list alone would have no effect for AES-first browsers/host clients. Both server builders must explicitly select server preference. The suite membership and peer validation remain unchanged; regressions will use an opposing client preference and clients supporting only a non-preferred suite. The no-PCLMUL KVM AEAD fixture completed all 216 rows with aes=true/pclmulqdq=false/avx2=true; guest was powered down. [perf-masked-guest.log](https://git.kayg.org/attachments/b9d6f03c-0cc6-4869-8bea-59d283bdfcdd)
Author
Owner

Completed shared preference API steps 7267a4cc and 6eb822a2, pushed to cipher-order. Shared API fmt/clippy/tests pass, including cached safe CPUID equivalence to standard detection. The pinned compiler exposes __cpuid safely; no unsafe code or dependency additions. First wired x86 static size: baseline 22,612,848 -> 22,618,992 bytes (+6,144); optimizing within this change to meet D243, not raising the gate.

Standalone opposing-client-order regression: before 0 passed / 1 failed (selected ChaCha on AES-preferred CPU); after 1 passed / 0 failed with real sockets, trusted certificates and TCP_NODELAY. QUIC regression: before 0 passed / 1 failed; after static module suite 12 passed / 0 failed. Fallback TLS opposing-order regression: before 1 passed / 1 failed; after complete static transport suite 13 passed / 0 failed. Includes authenticated handshakes for both CPU choices, nonpreferred-only clients, exact suite membership and QUIC Initial availability, wrong-name/untrusted peer refusals.

Browser guest currently boots but standalone HTTPS is unreachable; investigating only disposable guest fixture. No production changes.
preference-red-direct.log
preference-green-direct.log
quic-red-direct.log
fallback-red-direct.log
fallback-green-direct.log

Completed shared preference API steps 7267a4cc and 6eb822a2, pushed to cipher-order. Shared API fmt/clippy/tests pass, including cached safe CPUID equivalence to standard detection. The pinned compiler exposes __cpuid safely; no unsafe code or dependency additions. First wired x86 static size: baseline 22,612,848 -> 22,618,992 bytes (+6,144); optimizing within this change to meet D243, not raising the gate. Standalone opposing-client-order regression: before 0 passed / 1 failed (selected ChaCha on AES-preferred CPU); after 1 passed / 0 failed with real sockets, trusted certificates and TCP_NODELAY. QUIC regression: before 0 passed / 1 failed; after static module suite 12 passed / 0 failed. Fallback TLS opposing-order regression: before 1 passed / 1 failed; after complete static transport suite 13 passed / 0 failed. Includes authenticated handshakes for both CPU choices, nonpreferred-only clients, exact suite membership and QUIC Initial availability, wrong-name/untrusted peer refusals. Browser guest currently boots but standalone HTTPS is unreachable; investigating only disposable guest fixture. No production changes. [preference-red-direct.log](https://git.kayg.org/attachments/5b056fea-6cb0-43b9-8d4e-b5666830d705) [preference-green-direct.log](https://git.kayg.org/attachments/02c5374a-cde0-427c-b62c-8457507864bf) [quic-red-direct.log](https://git.kayg.org/attachments/5b32a8de-33f5-4488-b71b-c5214ed66763) [fallback-red-direct.log](https://git.kayg.org/attachments/59aa2d43-2770-4f7b-a49a-4ae18aa5e8df) [fallback-green-direct.log](https://git.kayg.org/attachments/668b24e2-1daf-43c3-8829-7a93f94dd1f9)
Author
Owner

Completed standalone TLS b2de34aa, QUIC ddeeb152, fallback TLS 3b76d6b2; all pushed to cipher-order. Each module is a separate commit with fmt, touched-crate clippy, and its real-engine regression. Static transport module suite: 13 passed / 0 failed. Standalone socket test: 1 passed / 0 failed. No dependency/suite additions, no peer validation changes, no client ordering change. Shared safe CPUID equivalence test passes.

Browser fixture finding: masked guest network is up, but startup waits on a pipe (guest /proc//syscall: read fd7). TLS helper originally allocated its certificate pipe at reserved fd3; reserving that descriptor is being tested. Only disposable guest state is involved. Full milestone fast gate has passed fmt/clippy/tests/deny; static x86 size remains over the pre-existing ceiling (22,619,056 vs 16,404,816), ARM build still running. No gate baseline raised. Own final size delta still being optimized/measured.

Completed standalone TLS b2de34aa, QUIC ddeeb152, fallback TLS 3b76d6b2; all pushed to cipher-order. Each module is a separate commit with fmt, touched-crate clippy, and its real-engine regression. Static transport module suite: 13 passed / 0 failed. Standalone socket test: 1 passed / 0 failed. No dependency/suite additions, no peer validation changes, no client ordering change. Shared safe CPUID equivalence test passes. Browser fixture finding: masked guest network is up, but startup waits on a pipe (guest /proc/<own-process>/syscall: read fd7). TLS helper originally allocated its certificate pipe at reserved fd3; reserving that descriptor is being tested. Only disposable guest state is involved. Full milestone fast gate has passed fmt/clippy/tests/deny; static x86 size remains over the pre-existing ceiling (22,619,056 vs 16,404,816), ARM build still running. No gate baseline raised. Own final size delta still being optimized/measured.
Author
Owner

Correction to the previous milestone note: the test row has a startup-timeout failure in infraternal::remote_server::tests::failed_restart_endpoint_does_not_prevent_http_serving (remote_server_tests.rs:249), not a pass. It logged SQLite connection setup at 2.87 s before the 5 s deadline. This test is outside the brief's #118 waiver list, so it will be rerun in the final full gate with RUST_TEST_THREADS=1; no waiver is claimed. The final static binary currently measures 22,619,632 bytes (+6,784 vs initial base); D243 is still unmet and remains an open item.

Correction to the previous milestone note: the test row has a startup-timeout failure in infraternal::remote_server::tests::failed_restart_endpoint_does_not_prevent_http_serving (remote_server_tests.rs:249), not a pass. It logged SQLite connection setup at 2.87 s before the 5 s deadline. This test is outside the brief's #118 waiver list, so it will be rerun in the final full gate with RUST_TEST_THREADS=1; no waiver is claimed. The final static binary currently measures 22,619,632 bytes (+6,784 vs initial base); D243 is still unmet and remains an open item.
Author
Owner

Size finding: marking TLS configuration factories cold increased x86 size further (22,619,632 -> 22,620,336); rejecting that experiment. Trying safe identical-code folding in the existing pinned LLD linker to offset the ordering change without removing suites or changing engines/dependencies. This is a build-setting trial, subject to the functional gate and perf-VM measurements, not a new linker choice.

Final fast run currently passes all Rust rows except static size: x86 22,619,632 vs ceiling 16,404,816; ARM 20,023,312 vs 13,817,816. The startup-timeout test passes when rerun serially (1 passed, 0 failed); full test row also passes with RUST_TEST_THREADS=1. TS checks will be run separately because the existing size failure stops the dispatcher.

Browser baseline: 500/500 real painted echoes, p99 16.10 ms, TLS AES_128_GCM on the CPU-masked guest. Unpaced 50 MiB rendered output substituted 3 snapshots and stopped after 12,976,946 payload bytes; the credited browser receipt oracle instead reported attachment ended after 155,616 bytes. These are baseline failures, not successful bulk numbers. Testing bounded bursts so a comparative number can be reported without pretending the unpaced flood passed.

Size finding: marking TLS configuration factories cold increased x86 size further (22,619,632 -> 22,620,336); rejecting that experiment. Trying safe identical-code folding in the existing pinned LLD linker to offset the ordering change without removing suites or changing engines/dependencies. This is a build-setting trial, subject to the functional gate and perf-VM measurements, not a new linker choice. Final fast run currently passes all Rust rows except static size: x86 22,619,632 vs ceiling 16,404,816; ARM 20,023,312 vs 13,817,816. The startup-timeout test passes when rerun serially (1 passed, 0 failed); full test row also passes with RUST_TEST_THREADS=1. TS checks will be run separately because the existing size failure stops the dispatcher. Browser baseline: 500/500 real painted echoes, p99 16.10 ms, TLS AES_128_GCM on the CPU-masked guest. Unpaced 50 MiB rendered output substituted 3 snapshots and stopped after 12,976,946 payload bytes; the credited browser receipt oracle instead reported attachment ended after 155,616 bytes. These are baseline failures, not successful bulk numbers. Testing bounded bursts so a comparative number can be reported without pretending the unpaced flood passed.
Author
Owner

CPU-masked KVM browser comparison completed on perf VM (host CPU i9-9900K, 4 vCPU; guest 2 vCPU/768 MiB, host,-pclmulqdq). Real production tracer, real static server/embedded infraternal agent/shim/PTY, virtual resident passkey, standalone TLS, localhost:4403. No production deployment.

Metric Before dcf9dbb9 After ordering + safe ICF
Negotiated browser TLS cipher AES_128_GCM CHACHA20_POLY1305
Painted echoes 500/500 500/500
Paint latency p50 / p99 15.50 / 16.00 ms 15.50 / 16.00 ms
Browser received payload 52,428,800 B 52,428,800 B
Lost / duplicated / snapshots 0 / 0 / 0 0 / 0 / 0
Receipt throughput at 1 MiB/s producer 0.956187 MiB/s 0.956372 MiB/s
Bulk duration 52.2910 s 52.2809 s

No measured paint-latency improvement. The bounded bulk row is producer-limited and measures browser TLS receipt, not renderer capacity. Unpaced/10 MiB/s baseline testing closes with code 1013 or substitutes snapshots; it cannot be called a successful capacity/D41 result. That pre-existing overload is outside this cipher-ordering change. Raw receipt reuses the production codec and normal browser cookie/Origin admission.

Before host load: 0.63/0.21/0.18; after: 2.20/0.97/0.47. After x86 binary SHA256 b484a14441ff8385153fed1304e7990e748584f664e1da0daa1bd2ef9ee9844d, 22,605,104 B vs base 22,612,848 B (-7,744). Safe ICF leaves invalid ring address-significance metadata unfolded and preserves callback address identity. Accelerated perf-VM large-record seal rates remain within the short-run variation: 16 KiB AES OpenSSL 5798 -> 5887 MiB/s; ring 5345 -> 5590; ChaCha OpenSSL 2327 -> 2300; ring 2323 -> 2293. Tiny AES OpenSSL varies 316 -> 292 MiB/s and needs cautious interpretation rather than claiming all rows are statistically identical.
browser-before.log
browser-after.log
perf-icf.csv

CPU-masked KVM browser comparison completed on perf VM (host CPU i9-9900K, 4 vCPU; guest 2 vCPU/768 MiB, host,-pclmulqdq). Real production tracer, real static server/embedded infraternal agent/shim/PTY, virtual resident passkey, standalone TLS, localhost:4403. No production deployment. | Metric | Before dcf9dbb9 | After ordering + safe ICF | |---|---:|---:| | Negotiated browser TLS cipher | AES_128_GCM | CHACHA20_POLY1305 | | Painted echoes | 500/500 | 500/500 | | Paint latency p50 / p99 | 15.50 / 16.00 ms | 15.50 / 16.00 ms | | Browser received payload | 52,428,800 B | 52,428,800 B | | Lost / duplicated / snapshots | 0 / 0 / 0 | 0 / 0 / 0 | | Receipt throughput at 1 MiB/s producer | 0.956187 MiB/s | 0.956372 MiB/s | | Bulk duration | 52.2910 s | 52.2809 s | No measured paint-latency improvement. The bounded bulk row is producer-limited and measures browser TLS receipt, not renderer capacity. Unpaced/10 MiB/s baseline testing closes with code 1013 or substitutes snapshots; it cannot be called a successful capacity/D41 result. That pre-existing overload is outside this cipher-ordering change. Raw receipt reuses the production codec and normal browser cookie/Origin admission. Before host load: 0.63/0.21/0.18; after: 2.20/0.97/0.47. After x86 binary SHA256 b484a14441ff8385153fed1304e7990e748584f664e1da0daa1bd2ef9ee9844d, 22,605,104 B vs base 22,612,848 B (-7,744). Safe ICF leaves invalid ring address-significance metadata unfolded and preserves callback address identity. Accelerated perf-VM large-record seal rates remain within the short-run variation: 16 KiB AES OpenSSL 5798 -> 5887 MiB/s; ring 5345 -> 5590; ChaCha OpenSSL 2327 -> 2300; ring 2323 -> 2293. Tiny AES OpenSSL varies 316 -> 292 MiB/s and needs cautious interpretation rather than claiming all rows are statistically identical. [browser-before.log](https://git.kayg.org/attachments/4e072b69-844d-4fcd-9306-b1adbaee8a27) [browser-after.log](https://git.kayg.org/attachments/5e93f910-015d-4a23-809c-7bbcec9e95bd) [perf-icf.csv](https://git.kayg.org/attachments/f7bc97b0-7825-42ff-b117-ed6ca2e13c2b)
Author
Owner

Safe-ICF repeat measurement on the perf VM: 64 B OpenSSL AES-128 seal median 193.045 ns before, 209.024 ns after, 211.235 ns in the repeat. Treat the observed +18.190 ns/record conservatively: 200 simultaneous records add 3.638 us, far below D41's 5 ms overhead budget. The real 500-key paint p99 remains 16.00 ms. Large AES seal remains 5.8–6.4 GiB/s and ChaCha roughly 2.3–2.4 GiB/s on the accelerated perf VM; production no-PCLMUL ChaCha is much faster as previously measured.

This measured small-record tradeoff buys 7,744 B net reduction vs the job base, satisfies D243 no growth, and adds no engine/dependency/suite. All cryptographic peer and suite tests are retained; static musl tests with ICF are building. The warning is conservative ignored address-significance metadata from existing ring objects; those objects are not folded. No broad warning suppression or unsafe function-address equality is enabled.
perf-icf-repeat.csv
icf-build.log

Safe-ICF repeat measurement on the perf VM: 64 B OpenSSL AES-128 seal median 193.045 ns before, 209.024 ns after, 211.235 ns in the repeat. Treat the observed +18.190 ns/record conservatively: 200 simultaneous records add 3.638 us, far below D41's 5 ms overhead budget. The real 500-key paint p99 remains 16.00 ms. Large AES seal remains 5.8–6.4 GiB/s and ChaCha roughly 2.3–2.4 GiB/s on the accelerated perf VM; production no-PCLMUL ChaCha is much faster as previously measured. This measured small-record tradeoff buys 7,744 B net reduction vs the job base, satisfies D243 no growth, and adds no engine/dependency/suite. All cryptographic peer and suite tests are retained; static musl tests with ICF are building. The warning is conservative ignored address-significance metadata from existing ring objects; those objects are not folded. No broad warning suppression or unsafe function-address equality is enabled. [perf-icf-repeat.csv](https://git.kayg.org/attachments/77ce7a81-64e7-498e-bb64-090739245361) [icf-build.log](https://git.kayg.org/attachments/2758fd28-b4cb-48b2-bd47-1d2868c8a09b)
Author
Owner

Final source head 72fe9f34 on cipher-order, all 11 atomic steps pushed. ICF step 4afb6f8f passes actual static musl standalone TLS test (1/1) and remote transport tests (13/13). Fixture 6b7abf1c passes clippy and real browser runs; receipt helper 017a358c and browser driver 72fe9f34 pass syntax/bundle/protocol/tracer checks. An overlapping local commit operation temporarily bundled two test modules in ee25f39d; it was replaced with the two separate commits using an exact branch lease. No code/evidence was lost.

Head fast invocation hit 5 s timeouts in two unchanged release deployment tests before reaching Rust. Those are outside #118 exceptions and are not waived. Rerunning the exact full gate in a CPU-weighted user scope, with serial Rust tests; the prior full Rust run passed every row except existing static size ceilings. Separate TS fast checks pass: 37 protocol tests, 34,463 assertions, 0 failures.

Author security/transport checklist: same OpenSSL/ring engines and versions; no dependency/suite additions; peer roots/EKU/name checks and mTLS strictness preserved; QUIC Initial AES retained; client configs and 0-RTT behavior preserved; no new parser/unsafe code; CPU query agrees with standard detection; ordering is server-selected and supports nonpreferred-only clients; TLS admission/ALPN/TCP_NODELAY preserved; one startup diagnostic; no per-session retained state or background tasks; runtime/build-removable plugin wiring retained. Keys/capabilities remain memory/IPC-only. Production touched only by the nice-19 bounded benchmark; its temporary binary removed. No deploy.

Real production-build screenshots attached for external review (no author visual-quality verdict):
before-echo.png
after-echo.png
before-bulk.png
after-bulk.png

Final source head 72fe9f34 on cipher-order, all 11 atomic steps pushed. ICF step 4afb6f8f passes actual static musl standalone TLS test (1/1) and remote transport tests (13/13). Fixture 6b7abf1c passes clippy and real browser runs; receipt helper 017a358c and browser driver 72fe9f34 pass syntax/bundle/protocol/tracer checks. An overlapping local commit operation temporarily bundled two test modules in ee25f39d; it was replaced with the two separate commits using an exact branch lease. No code/evidence was lost. Head fast invocation hit 5 s timeouts in two unchanged release deployment tests before reaching Rust. Those are outside #118 exceptions and are not waived. Rerunning the exact full gate in a CPU-weighted user scope, with serial Rust tests; the prior full Rust run passed every row except existing static size ceilings. Separate TS fast checks pass: 37 protocol tests, 34,463 assertions, 0 failures. Author security/transport checklist: same OpenSSL/ring engines and versions; no dependency/suite additions; peer roots/EKU/name checks and mTLS strictness preserved; QUIC Initial AES retained; client configs and 0-RTT behavior preserved; no new parser/unsafe code; CPU query agrees with standard detection; ordering is server-selected and supports nonpreferred-only clients; TLS admission/ALPN/TCP_NODELAY preserved; one startup diagnostic; no per-session retained state or background tasks; runtime/build-removable plugin wiring retained. Keys/capabilities remain memory/IPC-only. Production touched only by the nice-19 bounded benchmark; its temporary binary removed. No deploy. Real production-build screenshots attached for external review (no author visual-quality verdict): ![before-echo.png](https://git.kayg.org/attachments/d99bf9ab-9f2b-469b-8653-0bdcf5dace3b) ![after-echo.png](https://git.kayg.org/attachments/56fcd1d8-5f23-4c5d-83bb-9d74c36b0b9f) ![before-bulk.png](https://git.kayg.org/attachments/66614c06-0697-4269-9048-b91694e27d63) ![after-bulk.png](https://git.kayg.org/attachments/09e8d50a-1f84-4848-813a-aec9104b336a)
Author
Owner

Resuming cipher-order at head 72fe9f349c, base dcf9dbb94b; all 11 prior comments read, no parent listed. Completed pending fast run: fmt/clippy/deny pass; Rust test row has one unchanged session_gone socket close failure (418 passed, 1 failed, 46 ignored); static size ceilings fail at x86 22,605,104 B and ARM 20,013,312 B. Job x86 delta remains -7,744 B. Checking socket failure against a detached dev baseline and rerunning final gate; no failure is being hidden or baseline raised. No deploy.

Resuming cipher-order at head 72fe9f349c4b5c6fe75f2f148de24e20cebf30f3, base dcf9dbb94b52d5d2e805a0474e74dd42764159fe; all 11 prior comments read, no parent listed. Completed pending fast run: fmt/clippy/deny pass; Rust test row has one unchanged session_gone socket close failure (418 passed, 1 failed, 46 ignored); static size ceilings fail at x86 22,605,104 B and ARM 20,013,312 B. Job x86 delta remains -7,744 B. Checking socket failure against a detached dev baseline and rerunning final gate; no failure is being hidden or baseline raised. No deploy.
Author
Owner

Baseline 9894aff6 and exact former-head server test binary both pass the previously failing session_gone test (1/1 each); no #118 waiver claimed. Fresh TS compiler/tracer/build/differential checks pass: 37 protocol tests, 34,463 assertions, 0 failures. Receipts: baseline, head, TS.

Found origin/dev advanced to 9894aff6 with #198 size reductions and exact ratchets. Rebased the 11 atomic #203 commits without conflicts; new head 6da70e9f9f, pushed only cipher-order with an exact old-head lease. Stopped only our redundant gate scope run-p622280-i29978064; rebuilding/rerunning fast on the new base, then ratcheting measured size reductions under D243. Existing browser/AEAD tables remain receipts for the earlier build, not claims about the new artifact. No deploy.

Baseline 9894aff6 and exact former-head server test binary both pass the previously failing session_gone test (1/1 each); no #118 waiver claimed. Fresh TS compiler/tracer/build/differential checks pass: 37 protocol tests, 34,463 assertions, 0 failures. Receipts: [baseline](https://git.kayg.org/attachments/5262c17f-e504-4159-9d10-e4d2fe88095d), [head](https://git.kayg.org/attachments/4bf334c2-0e21-496e-8566-f1a04f56a69c), [TS](https://git.kayg.org/attachments/2495f396-f1e2-4af9-b09a-013f540a0ba3). Found origin/dev advanced to 9894aff6 with #198 size reductions and exact ratchets. Rebased the 11 atomic #203 commits without conflicts; new head 6da70e9f9fa91b176f586bc4f4967288377791c9, pushed only cipher-order with an exact old-head lease. Stopped only our redundant gate scope run-p622280-i29978064; rebuilding/rerunning fast on the new base, then ratcheting measured size reductions under D243. Existing browser/AEAD tables remain receipts for the earlier build, not claims about the new artifact. No deploy.
Author
Owner

Rebased head 6da70e9f fast: fmt, VT fmt, CLI compile-out, clippy, full workspace tests, cargo-deny PASS. Both session_gone tests pass in the complete row. Static artifacts build and pass trust/key-memory checks, but exceed current dev exact ceilings: x86 22,226,032 vs 22,204,304 (+21,728 B); ARM 19,661,504 vs 19,638,744 (+22,760 B). Not done; no ceilings raised. Testing pinned LLD -O2 string-table merging alongside safe ICF to meet D243; no engine/dependency/suite change. Final browser check will use the eventual measured artifact.

Rebased head 6da70e9f fast: fmt, VT fmt, CLI compile-out, clippy, full workspace tests, cargo-deny PASS. Both session_gone tests pass in the complete row. Static artifacts build and pass trust/key-memory checks, but exceed current dev exact ceilings: x86 22,226,032 vs 22,204,304 (+21,728 B); ARM 19,661,504 vs 19,638,744 (+22,760 B). Not done; no ceilings raised. Testing pinned LLD -O2 string-table merging alongside safe ICF to meet D243; no engine/dependency/suite change. Final browser check will use the eventual measured artifact.
Author
Owner

Rebased milestone gate (6da70e9f): full Rust fmt, VT fmt, CLI compile-out, clippy, workspace test, deny all PASS; only size fails. Full receipt.

Retained size trials so far: pinned LLD -O2 -12,288 B x86; small-map insertion -5,248 B; cold object-field helper -2,816 B; immutable scalar CPU cache -256 B; sharing object/empty-object wrappers -3,840 B. X86 now 22,201,584 B vs current dev ceiling 22,204,304 (-2,720). ARM 19,641,624 vs 19,638,744 (+2,880), so D243 is not yet met for both targets. Measuring array/description wrapper sharing next. Rejected: noinline result envelope (0 B), erased iterators (+76,992 B), extra cold entry/scalar annotations (+352 B), specialized empty-field initializer (+512 B). No ceilings raised, engines/dependencies/suites unchanged.

Perf VM, 4 vCPU, load 0.02/0.05/0.01: 51 alternating CLI metadata runs, exact JSON equality (4,603 canonical bytes); median 2.737942 -> 2.748945 ms (+0.011003), p95 3.701085 -> 3.081689 ms. Whole CLI construction is once per process, not per session. Receipt. API checks fmt/clippy pass; 24 unit + 2 integration tests pass (receipt).

Browser recheck of x86 artifact SHA256 8844db7831dba062e8638aca1ab06d9a408b5e15c9a76565d8c57b7a8a4024d8 on perf-VM CPU-masked guest: CHACHA20_POLY1305, 500/500 painted echoes; p50 15.50 / p99 16.30 ms; 52,428,800 B bounded receipt, 0 lost/duplicated/snapshots, 0.957524 MiB/s at 1 MiB/s producer. Host load 0.16/0.09/0.03. No latency improvement claimed; bulk is still producer-limited, not renderer-capacity acceptance. Receipt. No production deployment or further production access.

Rebased milestone gate (6da70e9f): full Rust fmt, VT fmt, CLI compile-out, clippy, workspace test, deny all PASS; only size fails. [Full receipt](https://git.kayg.org/attachments/47daa789-70f9-4836-9d1a-944825eae0b6). Retained size trials so far: pinned LLD -O2 -12,288 B x86; small-map insertion -5,248 B; cold object-field helper -2,816 B; immutable scalar CPU cache -256 B; sharing object/empty-object wrappers -3,840 B. X86 now 22,201,584 B vs current dev ceiling 22,204,304 (-2,720). ARM 19,641,624 vs 19,638,744 (+2,880), so D243 is not yet met for both targets. Measuring array/description wrapper sharing next. Rejected: noinline result envelope (0 B), erased iterators (+76,992 B), extra cold entry/scalar annotations (+352 B), specialized empty-field initializer (+512 B). No ceilings raised, engines/dependencies/suites unchanged. Perf VM, 4 vCPU, load 0.02/0.05/0.01: 51 alternating CLI metadata runs, exact JSON equality (4,603 canonical bytes); median 2.737942 -> 2.748945 ms (+0.011003), p95 3.701085 -> 3.081689 ms. Whole CLI construction is once per process, not per session. [Receipt](https://git.kayg.org/attachments/d008a0e0-a04c-42a0-aece-68847dc363ae). API checks fmt/clippy pass; 24 unit + 2 integration tests pass ([receipt](https://git.kayg.org/attachments/d28aec66-ede1-4ca3-a837-4d9ea919a70f)). Browser recheck of x86 artifact SHA256 8844db7831dba062e8638aca1ab06d9a408b5e15c9a76565d8c57b7a8a4024d8 on perf-VM CPU-masked guest: CHACHA20_POLY1305, 500/500 painted echoes; p50 15.50 / p99 16.30 ms; 52,428,800 B bounded receipt, 0 lost/duplicated/snapshots, 0.957524 MiB/s at 1 MiB/s producer. Host load 0.16/0.09/0.03. No latency improvement claimed; bulk is still producer-limited, not renderer-capacity acceptance. [Receipt](https://git.kayg.org/attachments/d10bee10-eff4-424c-8869-eb014caa78bd). No production deployment or further production access.
Author
Owner

Completed scalar preference cache step 723285ae, pushed cipher-order. fmt/clippy pass; API tests 24 unit + 2 integration pass, including 16 simultaneous first CPU-preference callers matching standard CPUID detection. Only an immutable scalar is published; no other payload, dependency, cipher or per-session state change. ARM retained trial now 19,638,168 B vs dev 19,638,744 (-576); final x86 link and metadata/perf validation remain in progress. No ceiling raised or deploy.

Completed scalar preference cache step 723285ae, pushed cipher-order. fmt/clippy pass; API tests 24 unit + 2 integration pass, including 16 simultaneous first CPU-preference callers matching standard CPUID detection. Only an immutable scalar is published; no other payload, dependency, cipher or per-session state change. ARM retained trial now 19,638,168 B vs dev 19,638,744 (-576); final x86 link and metadata/perf validation remain in progress. No ceiling raised or deploy.
Author
Owner

Completed and pushed separate steps: 1d4fdea2 metadata sharing (fmt/clippy, 24 unit + 2 integration PASS); e47dff95 pinned LLD -O2 (shell syntax, Cargo static remote 13/13 and standalone 1/1 PASS); 97e0ad60 exact ratchets (both exact/one-byte-over/one-byte-under and unsupported-target fixtures PASS); 71162dac process table/evidence pointers (diff check PASS). Scalar cache step 723285ae was recorded separately. Final head 71162dac; full fast running with serial Rust tests and CPU-weighted scope. No deploy.

Target dev 9894aff6 final artifact delta
x86_64 musl 22,204,304 B 22,196,208 B -8,096 B
aarch64 musl 19,638,744 B 19,638,168 B -576 B

No allowance or increased ceiling. X86 SHA256 eb1ef87edb982e1cd46740cd94b52f2ed5039b6a870331e0c79fe625307a37e5; ARM ac8dee58442b9889da5689b08ebe080639aaa24d518b9683cbb8ff07d08559f2.

Final metadata benchmark: perf VM 4 vCPU, load 0.00/0.00/0.05, 51 alternating runs, exact stdout equality (6,260 B). Whole CLI median 2.837956 -> 2.991474 ms (+0.153518); p95 3.725091 -> 3.631888. This measured startup tradeoff meets D243, outside terminal record processing. No per-session allocation/task added by cipher selection. JSON schema/authorization values remain unchanged.

Final exact-artifact browser recheck: perf VM CPU-masked guest (host,-pclmulqdq, 2 vCPU/768 MiB), production tracer/static server/embedded infraternal agent/shim/PTY. Host load 0.00/0.00/0.04. Compared with original dcf9dbb9 receipt:

Metric before final
TLS cipher AES_128_GCM CHACHA20_POLY1305
Painted echoes 500/500 500/500
Paint p50 / p99 15.50 / 16.00 ms 15.50 / 16.10 ms
Bounded receipt 52,428,800 B 52,428,800 B
Lost / duplicate / snapshots 0 / 0 / 0 0 / 0 / 0
Receipt at 1 MiB/s producer 0.956187 MiB/s 0.955356 MiB/s

No measured latency improvement. Producer-limited bulk, not a renderer-capacity/D41 claim; original unpaced/10 MiB/s baseline overload remains recorded earlier. Final build also inherits #198 size work. Screenshots attached for independent review, no author visual verdict.

Manual rustc harness finding: picking newest rlibs paired Quinn 0932 (requires Tokio fingerprint 14240587487627299435) with Tokio 6cb7 (fingerprint 13565607122375305947), yielding no async runtime found in 5 QUIC tests. Cargo-built static suite resolves dependencies consistently and passes all 13; no product failure is waived.

metadata-final-perf.log
browser-final2.log
retained-cargo-static-remote.log
retained-static-standalone.log
final-committed-api-tests.log
ratchet-tests.log
final2-echo.png
final2-bulk.png

Completed and pushed separate steps: 1d4fdea2 metadata sharing (fmt/clippy, 24 unit + 2 integration PASS); e47dff95 pinned LLD -O2 (shell syntax, Cargo static remote 13/13 and standalone 1/1 PASS); 97e0ad60 exact ratchets (both exact/one-byte-over/one-byte-under and unsupported-target fixtures PASS); 71162dac process table/evidence pointers (diff check PASS). Scalar cache step 723285ae was recorded separately. Final head 71162dac; full fast running with serial Rust tests and CPU-weighted scope. No deploy. | Target | dev 9894aff6 | final artifact | delta | |---|---:|---:|---:| | x86_64 musl | 22,204,304 B | 22,196,208 B | -8,096 B | | aarch64 musl | 19,638,744 B | 19,638,168 B | -576 B | No allowance or increased ceiling. X86 SHA256 eb1ef87edb982e1cd46740cd94b52f2ed5039b6a870331e0c79fe625307a37e5; ARM ac8dee58442b9889da5689b08ebe080639aaa24d518b9683cbb8ff07d08559f2. Final metadata benchmark: perf VM 4 vCPU, load 0.00/0.00/0.05, 51 alternating runs, exact stdout equality (6,260 B). Whole CLI median 2.837956 -> 2.991474 ms (+0.153518); p95 3.725091 -> 3.631888. This measured startup tradeoff meets D243, outside terminal record processing. No per-session allocation/task added by cipher selection. JSON schema/authorization values remain unchanged. Final exact-artifact browser recheck: perf VM CPU-masked guest (host,-pclmulqdq, 2 vCPU/768 MiB), production tracer/static server/embedded infraternal agent/shim/PTY. Host load 0.00/0.00/0.04. Compared with original dcf9dbb9 receipt: | Metric | before | final | |---|---:|---:| | TLS cipher | AES_128_GCM | CHACHA20_POLY1305 | | Painted echoes | 500/500 | 500/500 | | Paint p50 / p99 | 15.50 / 16.00 ms | 15.50 / 16.10 ms | | Bounded receipt | 52,428,800 B | 52,428,800 B | | Lost / duplicate / snapshots | 0 / 0 / 0 | 0 / 0 / 0 | | Receipt at 1 MiB/s producer | 0.956187 MiB/s | 0.955356 MiB/s | No measured latency improvement. Producer-limited bulk, not a renderer-capacity/D41 claim; original unpaced/10 MiB/s baseline overload remains recorded earlier. Final build also inherits #198 size work. Screenshots attached for independent review, no author visual verdict. Manual rustc harness finding: picking newest rlibs paired Quinn 0932 (requires Tokio fingerprint 14240587487627299435) with Tokio 6cb7 (fingerprint 13565607122375305947), yielding no async runtime found in 5 QUIC tests. Cargo-built static suite resolves dependencies consistently and passes all 13; no product failure is waived. [metadata-final-perf.log](https://git.kayg.org/attachments/73d5a847-4bf8-40b0-8fb7-9124785404f6) [browser-final2.log](https://git.kayg.org/attachments/55ae7948-7c61-439c-824f-a00cc5044a56) [retained-cargo-static-remote.log](https://git.kayg.org/attachments/da4079b3-84e4-434c-9d3d-d0734b898a82) [retained-static-standalone.log](https://git.kayg.org/attachments/6a80c175-36c4-42ab-aec9-a555696f9564) [final-committed-api-tests.log](https://git.kayg.org/attachments/b5565244-35cb-4614-bab1-d65ed2552da8) [ratchet-tests.log](https://git.kayg.org/attachments/58e0be16-5d0d-4642-8642-21c0ea55e21b) ![final2-echo.png](https://git.kayg.org/attachments/1c5c712e-c4e5-441f-98c3-823cc4f5790a) ![final2-bulk.png](https://git.kayg.org/attachments/30b54689-8b4e-4405-9d86-8134738061e4)
Author
Owner

Finished cipher-order at 71162dac0c, pushed only cipher-order, based on dev 9894aff6. All 16 atomic commits retained; no deploy, issue stays open. Final scripts/verify fast exits 0; no failures waived. Full verbatim output: final-head-fast.log.

Verbatim Rust gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

Verbatim final protocol row:

 37 pass
 0 fail
 34463 expect() calls
Ran 37 tests across 10 files. [2.53s]

Result: CPU-conditional preference is active for standalone TLS, QUIC and fallback TLS, explicitly server-selected. Carry-less multiply present keeps AES first; absent prefers ChaCha. Same engines, dependencies, suite sets, peer verification, QUIC Initial AES and client configs. One startup diagnostic, no timer/task/session state. API metadata schema and authorization remain unchanged; concurrent scalar-cache callers match standard CPUID. Author transport/security checklist completed, including real authenticated handshakes, wrong-name/untrusted-peer rejection, nonpreferred-only interoperability, compile-out and key-memory checks.

Binary size versus dev: x86 22,204,304 -> 22,196,208 B (-8,096); ARM 19,638,744 -> 19,638,168 (-576). Exact caps ratcheted downward, zero allowance. Final x86 SHA256 eb1ef87edb982e1cd46740cd94b52f2ed5039b6a870331e0c79fe625307a37e5; ARM ac8dee58442b9889da5689b08ebe080639aaa24d518b9683cbb8ff07d08559f2. Perf-VM metadata startup tradeoff: whole CLI median +0.153518 ms over 51 paired runs, identical 6,260-byte output; no terminal-record work added.

Original production AEAD table remains above: at 16 KiB ChaCha seal/open beats AES-128 by 3.25x/1.89x OpenSSL and 10.93x/4.74x ring on no-PCLMUL monitor01. Tiny OpenSSL AES records are slightly faster; accelerated perf CPU favors AES. Production touched only by the original nice-19 bounded benchmark, temporary binary removed, no service/files/sessions changed.

Final exact-artifact browser comparison remains above with receipts and screenshots: no-PCLMUL guest negotiates AES before / ChaCha after; 500/500 painted echoes both, paint p99 16.00 -> 16.10 ms, 50 MiB receipt both with 0 loss/duplicates/snapshots, 0.956187 -> 0.955356 MiB/s at a 1 MiB/s producer. No measured latency improvement and no renderer-capacity claim: baseline unpaced/10 MiB/s overload remains a limitation. Screenshots are for independent review, not an author visual verdict.

How to test:

  1. Run standalone TLS or remote transport on a no-PCLMUL CPU and check the one startup preference diagnostic.
  2. Offer AES-first, ChaCha-first and nonpreferred-only clients; verify the server's choice and authenticated peer refusal cases.
  3. On an accelerated CPU confirm AES remains preferred; run fast and the linked static/browser fixtures.

Temporary baseline/build targets and only this job's perf-VM fixture directory removed; selected receipts remain outside the checkout under the job evidence directory and attached above. Worktree clean.

Finished cipher-order at 71162dac0c963ed57dabf3217e3eef15b8bba095, pushed only cipher-order, based on dev 9894aff6. All 16 atomic commits retained; no deploy, issue stays open. Final scripts/verify fast exits 0; no failures waived. Full verbatim output: [final-head-fast.log](https://git.kayg.org/attachments/2c244c85-3d86-4a07-994d-5c29ec88c111). Verbatim Rust gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` Verbatim final protocol row: ``` 37 pass 0 fail 34463 expect() calls Ran 37 tests across 10 files. [2.53s] ``` Result: CPU-conditional preference is active for standalone TLS, QUIC and fallback TLS, explicitly server-selected. Carry-less multiply present keeps AES first; absent prefers ChaCha. Same engines, dependencies, suite sets, peer verification, QUIC Initial AES and client configs. One startup diagnostic, no timer/task/session state. API metadata schema and authorization remain unchanged; concurrent scalar-cache callers match standard CPUID. Author transport/security checklist completed, including real authenticated handshakes, wrong-name/untrusted-peer rejection, nonpreferred-only interoperability, compile-out and key-memory checks. Binary size versus dev: x86 22,204,304 -> 22,196,208 B (-8,096); ARM 19,638,744 -> 19,638,168 (-576). Exact caps ratcheted downward, zero allowance. Final x86 SHA256 eb1ef87edb982e1cd46740cd94b52f2ed5039b6a870331e0c79fe625307a37e5; ARM ac8dee58442b9889da5689b08ebe080639aaa24d518b9683cbb8ff07d08559f2. Perf-VM metadata startup tradeoff: whole CLI median +0.153518 ms over 51 paired runs, identical 6,260-byte output; no terminal-record work added. Original production AEAD table remains above: at 16 KiB ChaCha seal/open beats AES-128 by 3.25x/1.89x OpenSSL and 10.93x/4.74x ring on no-PCLMUL monitor01. Tiny OpenSSL AES records are slightly faster; accelerated perf CPU favors AES. Production touched only by the original nice-19 bounded benchmark, temporary binary removed, no service/files/sessions changed. Final exact-artifact browser comparison remains above with receipts and screenshots: no-PCLMUL guest negotiates AES before / ChaCha after; 500/500 painted echoes both, paint p99 16.00 -> 16.10 ms, 50 MiB receipt both with 0 loss/duplicates/snapshots, 0.956187 -> 0.955356 MiB/s at a 1 MiB/s producer. No measured latency improvement and no renderer-capacity claim: baseline unpaced/10 MiB/s overload remains a limitation. Screenshots are for independent review, not an author visual verdict. How to test: 1. Run standalone TLS or remote transport on a no-PCLMUL CPU and check the one startup preference diagnostic. 2. Offer AES-first, ChaCha-first and nonpreferred-only clients; verify the server's choice and authenticated peer refusal cases. 3. On an accelerated CPU confirm AES remains preferred; run fast and the linked static/browser fixtures. Temporary baseline/build targets and only this job's perf-VM fixture directory removed; selected receipts remain outside the checkout under the job evidence directory and attached above. Worktree clean.
Author
Owner

Independent review started on review-cipher-order at target 71162dac0c. Local dev merge base: 8e7467c07c; author-reported/rebased base: 9894aff6. Read all 18 comments; no parent listed. Functional/security review and head fast gate only; brief prohibits perf VM, pushes, deployment and implementation fixes. Performance receipts will be assessed without claiming independent timings. No previous review findings file present unless noted in next update.

Independent review started on review-cipher-order at target 71162dac0c963ed57dabf3217e3eef15b8bba095. Local dev merge base: 8e7467c07cd2ec1668a775a846076b278f68ef38; author-reported/rebased base: 9894aff6. Read all 18 comments; no parent listed. Functional/security review and head fast gate only; brief prohibits perf VM, pushes, deployment and implementation fixes. Performance receipts will be assessed without claiming independent timings. No previous review findings file present unless noted in next update.
Author
Owner

Independent review C203-R1 (P2): scripts/cipher-browser-bulk.mjs ignores payload after its 52,428,800-byte limit, then reports duplicated=0. Actual helper + production-codec test delivers 52,428,802 valid payload bytes with contiguous offsets followed by DONE; expected rejection but promise resolves. Test scripts/cipher-browser-bulk.test.ts, commit 12640fe9 on local review-cipher-order, 0 pass / 1 fail. Raw receipt: /home/kayg/.cache/codex-scratch/cipher-order-review/evidence/bulk-oracle-test.log. Recorded in review findings.md. No product data corruption or timing regression claimed; implementation untouched, no push.

Independent review C203-R1 (P2): scripts/cipher-browser-bulk.mjs ignores payload after its 52,428,800-byte limit, then reports duplicated=0. Actual helper + production-codec test delivers 52,428,802 valid payload bytes with contiguous offsets followed by DONE; expected rejection but promise resolves. Test scripts/cipher-browser-bulk.test.ts, commit 12640fe9 on local review-cipher-order, 0 pass / 1 fail. Raw receipt: /home/kayg/.cache/codex-scratch/cipher-order-review/evidence/bulk-oracle-test.log. Recorded in review findings.md. No product data corruption or timing regression claimed; implementation untouched, no push.
Author
Owner

Review step complete at 12640fe9 (target 71162dac): origin/dev merge base is 9894aff6c0; local dev is stale. The relevant lane is 16 implementation commits / 16 files; inherited changes are distinguished. Independent plugin API tests: 24 unit + 2 integration pass (concurrent scalar detection and metadata order/duplicate/serialization included). Dependency diff vs 9894aff6 is empty; cargo tree -d receipt retained. Transport/security inspection: same engines/suite membership, QUIC Initial AES, roots/name/EKU/mTLS setup, client configurations, ALPN and TCP_NODELAY; no new decoder or unsafe code, no database/wire changes, no session timers or tasks. Shared CPU cache is one immutable scalar. Full head fast gate continues; no failure waived.

P2 oracle failure receipt: bulk-oracle-test.log. API receipt: api-tests.log. No independent performance numbers: this brief forbids the perf VM. Existing author timings are reviewed as receipts only; bounded producer-limited bulk is not D41 capacity proof. No pushes or implementation changes.

Review step complete at 12640fe9 (target 71162dac): origin/dev merge base is 9894aff6c0b2d9c49b5eef0bea008f55b1a2759b; local dev is stale. The relevant lane is 16 implementation commits / 16 files; inherited changes are distinguished. Independent plugin API tests: 24 unit + 2 integration pass (concurrent scalar detection and metadata order/duplicate/serialization included). Dependency diff vs 9894aff6 is empty; cargo tree -d receipt retained. Transport/security inspection: same engines/suite membership, QUIC Initial AES, roots/name/EKU/mTLS setup, client configurations, ALPN and TCP_NODELAY; no new decoder or unsafe code, no database/wire changes, no session timers or tasks. Shared CPU cache is one immutable scalar. Full head fast gate continues; no failure waived. P2 oracle failure receipt: [bulk-oracle-test.log](https://git.kayg.org/attachments/1f95c050-44d5-4f06-9ea4-4338c557fe87). API receipt: [api-tests.log](https://git.kayg.org/attachments/14654152-63f5-4afb-b789-e425e8e9547a). No independent performance numbers: this brief forbids the perf VM. Existing author timings are reviewed as receipts only; bounded producer-limited bulk is not D41 capacity proof. No pushes or implementation changes.
Author
Owner

Independent static transport verification complete, review head 12640fe9 / product source 71162dac: Cargo-built x86_64-musl release suite passes 13/13 under the shipping --icf=safe/-O2 linker wrapper. Includes both CPU preference branches, exact suite membership/QUIC Initial support, nonpreferred-only interoperability, mTLS byte exchange, wrong-name/untrusted-peer refusals and transport cleanup. No failure waived. Full fast gate continues with both shipping artifacts. No implementation changes or pushes.

Verbatim result:

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.69s

Full static transport log. Test elapsed fields are functional-run diagnostics, not perf-VM measurements.

Independent static transport verification complete, review head 12640fe9 / product source 71162dac: Cargo-built x86_64-musl release suite passes 13/13 under the shipping --icf=safe/-O2 linker wrapper. Includes both CPU preference branches, exact suite membership/QUIC Initial support, nonpreferred-only interoperability, mTLS byte exchange, wrong-name/untrusted-peer refusals and transport cleanup. No failure waived. Full fast gate continues with both shipping artifacts. No implementation changes or pushes. Verbatim result: ``` test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.69s ``` [Full static transport log](https://git.kayg.org/attachments/daf3026f-fca6-4ec5-8092-fda99e3184e5). Test elapsed fields are functional-run diagnostics, not perf-VM measurements.
Author
Owner

MERGE (no P0/P1). Verdict: merge. Counts: P0=0, P1=0, P2=1, P3=0.

Independent review finished on review-cipher-order at 12640fe908; target 71162dac0c, origin/dev merge base 9894aff6c0. All product sources and verification scripts match the target; only the failing review test is committed locally. No push, deploy, implementation fix or issue closure.

C203-R1 (P2, fix forward): scripts/cipher-browser-bulk.mjs ignores two excess payload bytes after 52,428,800 bytes and still reports duplicated=0. Failing test scripts/cipher-browser-bulk.test.ts::browser bulk receipt refuses payload beyond the declared byte count, commit 12640fe9. Actual helper + production codec: expected rejection, received resolved promise (0 pass / 1 fail). Failure receipt. Findings recorded in /home/kayg/.local/state/codex-jobs/infraternal/review-cipher-order/findings.md. This is an oracle gap; no product data corruption is asserted.

Independent validation: plugin API 24 unit + 2 integration pass; real musl release transport tests 13/13 pass under safe ICF/string merging. Cipher membership, both preferences, QUIC Initial availability, nonpreferred-only clients, wrong names/untrusted peers, mTLS byte integrity, metadata duplicate/order semantics and concurrent CPU cache checked. No new dependency/decoder/unsafe code, no wire/schema change or new session task found. API log, static transport log.

scripts/verify fast on the target product sources exits 0. No failure waived. Fresh static artifacts match both exact ceilings: x86 22,196,208 B; ARM 19,638,168 B, respectively -8,096 B / -576 B against the lane base. Static linkage and production trust pass; native x86 locked/dump-excluded key memory passes. ARM runtime key memory is not checked on this x86 host, as stated by the gate. Artifact sizes/hashes.

Full verbatim fast output: verify-fast-head.log.

Verbatim Rust gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

Verbatim final protocol result:

 37 pass
 0 fail
 34463 expect() calls
Ran 37 tests across 10 files. [4.57s]

Performance scope: no independent timings/latency/capacity measurements; this brief prohibits the perf VM. Reviewed the author receipts and their stated limits: no latency improvement claimed, bounded bulk is producer-limited and not D41 capacity proof. Functional log elapsed fields are not performance evidence. Reviewer transport/security checklist completed. Temporary build targets removed; attached raw evidence retained; worktree clean.

MERGE (no P0/P1). Verdict: merge. Counts: P0=0, P1=0, P2=1, P3=0. Independent review finished on review-cipher-order at 12640fe908b557c6f06465d7a9bf6eca7a861ab0; target 71162dac0c963ed57dabf3217e3eef15b8bba095, origin/dev merge base 9894aff6c0b2d9c49b5eef0bea008f55b1a2759b. All product sources and verification scripts match the target; only the failing review test is committed locally. No push, deploy, implementation fix or issue closure. C203-R1 (P2, fix forward): scripts/cipher-browser-bulk.mjs ignores two excess payload bytes after 52,428,800 bytes and still reports duplicated=0. Failing test scripts/cipher-browser-bulk.test.ts::browser bulk receipt refuses payload beyond the declared byte count, commit 12640fe9. Actual helper + production codec: expected rejection, received resolved promise (0 pass / 1 fail). [Failure receipt](https://git.kayg.org/attachments/1f95c050-44d5-4f06-9ea4-4338c557fe87). Findings recorded in /home/kayg/.local/state/codex-jobs/infraternal/review-cipher-order/findings.md. This is an oracle gap; no product data corruption is asserted. Independent validation: plugin API 24 unit + 2 integration pass; real musl release transport tests 13/13 pass under safe ICF/string merging. Cipher membership, both preferences, QUIC Initial availability, nonpreferred-only clients, wrong names/untrusted peers, mTLS byte integrity, metadata duplicate/order semantics and concurrent CPU cache checked. No new dependency/decoder/unsafe code, no wire/schema change or new session task found. [API log](https://git.kayg.org/attachments/14654152-63f5-4afb-b789-e425e8e9547a), [static transport log](https://git.kayg.org/attachments/daf3026f-fca6-4ec5-8092-fda99e3184e5). scripts/verify fast on the target product sources exits 0. No failure waived. Fresh static artifacts match both exact ceilings: x86 22,196,208 B; ARM 19,638,168 B, respectively -8,096 B / -576 B against the lane base. Static linkage and production trust pass; native x86 locked/dump-excluded key memory passes. ARM runtime key memory is not checked on this x86 host, as stated by the gate. [Artifact sizes/hashes](https://git.kayg.org/attachments/28cad6b7-1388-4a80-82e7-bece245ed787). Full verbatim fast output: [verify-fast-head.log](https://git.kayg.org/attachments/e0afd7b8-fde4-4a73-9375-8e80f86444cd). Verbatim Rust gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` Verbatim final protocol result: ``` 37 pass 0 fail 34463 expect() calls Ran 37 tests across 10 files. [4.57s] ``` Performance scope: no independent timings/latency/capacity measurements; this brief prohibits the perf VM. Reviewed the author receipts and their stated limits: no latency improvement claimed, bounded bulk is producer-limited and not D41 capacity proof. Functional log elapsed fields are not performance evidence. Reviewer transport/security checklist completed. Temporary build targets removed; attached raw evidence retained; worktree clean.
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#203
No description provided.