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
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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:
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.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
perf: machine=infraternal-perf-test load=0.35 0.64 0.64 2/2285 2619494 arch=x86_64
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
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.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
Completed shared preference API steps
7267a4ccand6eb822a2, 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 standalone TLS
b2de34aa, QUICddeeb152, fallback TLS3b76d6b2; 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.
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.
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.
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.
dcf9dbb9No 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
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
Final source head
72fe9f34on cipher-order, all 11 atomic steps pushed. ICF step4afb6f8fpasses actual static musl standalone TLS test (1/1) and remote transport tests (13/13). Fixture6b7abf1cpasses clippy and real browser runs; receipt helper017a358cand browser driver72fe9f34pass syntax/bundle/protocol/tracer checks. An overlapping local commit operation temporarily bundled two test modules inee25f39d; 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):




Resuming cipher-order at head
72fe9f349c, basedcf9dbb94b; 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.Baseline
9894aff6and 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
9894aff6with #198 size reductions and exact ratchets. Rebased the 11 atomic #203 commits without conflicts; new head6da70e9f9f, 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.Rebased head
6da70e9ffast: 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 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.
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 and pushed separate steps:
1d4fdea2metadata sharing (fmt/clippy, 24 unit + 2 integration PASS);e47dff95pinned LLD -O2 (shell syntax, Cargo static remote 13/13 and standalone 1/1 PASS);97e0ad60exact ratchets (both exact/one-byte-over/one-byte-under and unsupported-target fixtures PASS);71162dacprocess table/evidence pointers (diff check PASS). Scalar cache step723285aewas recorded separately. Final head71162dac; full fast running with serial Rust tests and CPU-weighted scope. No deploy.9894aff6No 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
dcf9dbb9receipt: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
Finished cipher-order at
71162dac0c, pushed only cipher-order, based on dev9894aff6. 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:
Verbatim final protocol row:
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:
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.
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 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
12640fe9on 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.Review step complete at
12640fe9(target71162dac): origin/dev merge base is9894aff6c0; 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 vs9894aff6is 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.
Independent static transport verification complete, review head
12640fe9/ product source71162dac: 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:
Full static transport log. Test elapsed fields are functional-run diagnostics, not perf-VM measurements.
MERGE (no P0/P1). Verdict: merge. Counts: P0=0, P1=0, P2=1, P3=0.
Independent review finished on review-cipher-order at
12640fe908; target71162dac0c, origin/dev merge base9894aff6c0. 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:
Verbatim final protocol result:
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.
kayg referenced this issue2026-10-28 17:53:56 +00:00