Standalone TLS: /auth/session returns 401 right after passkey registration #149
Closed
opened 2026-10-10 07:08:15 +00:00 by kayg
·
45 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#149
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?
Found during the canvas zoom benchmarks (#121), on the production binary. In standalone TLS mode, a new owner cannot get a session right after passkey registration. Behind a proxy the same flow works.
Failing:
--listen 127.0.0.1:47699 --public-origin https://localhost:47699 --tls-cert c.pem --tls-key k.pem --web-root … --data …(self-signed cert, CN and SANlocalhost).Working:
--listen 127.0.0.1:47698 --public-origin https://localhost:47699 --behind-proxy --trusted-proxy 127.0.0.1, with a TLS pass-through front on 47699.Sequence (identical in both modes until the last step):
GET /→ 200;POST /auth/status→ 200.POST /auth/setup-check→ 204.POST /auth/setup-start→ 200,Set-Cookie: __Host-infraternal-ceremony=…; Secure; HttpOnly; SameSite=Strict; Path=/; Max-Age=300.POST /auth/registration-finish→ 200,Set-Cookie: __Host-infraternal=…; Secure; HttpOnly; SameSite=Strict; Path=/; Max-Age=2592000.POST /auth/session→ 401 standalone, 200 proxied. The request carries both cookies in both modes.The page then shows "Could not reach the server — Could not read this server's name".
Lead:
auth/sessions.rsreturns Denied for a session that is not unlocked. The session issued by registration-finish may stay pending in standalone mode, for example if a peer-address or client-IP binding differs when no proxy headers are present.Production runs behind a proxy, so it is not affected. Self-hosters who use
--tls-certdirectly would be.Starting #149 on branch tls-session, base
d82d0fb9cd. Read #149 (no previous comments) and originating #121 with all six comments. Reproducing native TLS registration/session using the existing software authenticator; investigating split HTTP/2 Cookie fields, which current readers access with HeaderMap::get. No deployment or push.Reproduced on
d82d0fb9with a real axum-server/OpenSSL localhost TLS listener, trusted self-signed cert, ALPN h2, and the existing ES256 software passkey/PRF-wrap fixtures. registration-finish=200; joined Cookie session=200; two HTTP/2 Cookie fields (ceremony first, session second) session=401. Regression standalone_tls_registration_session_split_cookies fails: 0 passed; 1 failed; finished in 1.75s (crates/infraternal-server/src/auth/tls_tests.rs). Precise cause: auth/http.rs:106-111 uses HeaderMap::get(COOKIE), reads only the first field. This excludes the session cookie on HTTP/2; the proxy recombines fields on its HTTP/1 hop. The joined request proves registration already issues an unlocked session, excluding the initial pending-state lead. auth/binding.rs:8-13 and websocket.rs:223-227 have the same first-field limitation and miss cross-field duplicates. Fix: one allocation-free reader over get_all(COOKIE), requiring exactly one canonical capability across all fields; keep Origin, unlock, cookie flags and forwarded-address policy unchanged.Paired real TLS-terminating proxy regression passed before the fix: registration=200, joined session=200, split HTTP/2 Cookie fields=200 after the front recombines them on a real plaintext HTTP/1 upstream connection. proxy_tls_registration_session_split_cookies: 1 passed; 0 failed; 1.58s. Standalone/native h2 remained 401 (1.75s). Both use a trusted self-signed localhost cert and the same software authenticator. Source ingress receives malformed forwarded metadata in standalone (ignored), and valid replaced client metadata only from the explicitly trusted loopback proxy.
Initial fast gates found a worktree fixture prerequisite, not a timing regression: scripts/verify-agent-attach-credit.py:17 creates target/ac without first creating target; this worktree had no target directory because CARGO_TARGET_DIR is under the required home scratch path. Added an ignored local target symlink to that same job-specific scratch build directory; no tracked gate code changes. Clippy now passes. Baseline static x86_64 musl production binary is 16435312 bytes, already 30496 bytes over the 16404816-byte budget (D205); PT_INTERP absent. Native TLS reproducer fails 401, real proxy reproducer passes 200. Re-running the complete gate with the fixture prerequisite satisfied.
Paired #118 audit, same load window on infraternal-dev (load 6.02/7.33/14.96 at end):
tls-session, round 1: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 155 filtered out; finished in 0.75s
detached dev
0510bd85, round 1: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.55stls-session, round 2: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 155 filtered out; finished in 0.55s
detached dev
0510bd85, round 2: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.57stls-session, round 3: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 155 filtered out; finished in 0.50s
detached dev
0510bd85, round 3: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.59sBoth binaries fail the identical socket_tests.rs:206 deadline assertion; source diff for socket_tests.rs/websocket.rs/auth/runtime between
d82d0fb9and dev is empty. The baseline exception is now established, unlike the first standalone baseline pass. Full fast gate: fmt PASS, VT native fmt PASS, clippy PASS, cargo-deny PASS; server test row 140 passed/1 pre-existing deadline failure/15 ignored; static size 16435312 bytes already over budget before the fix. Dependency step reuses already-locked h2 0.4.19 and tokio-openssl 0.6.5 as dev dependencies only; release size delta 0 bytes.Completed dependency step
c66adfccon tls-session: existing h2/tokio-openssl are now dev-only direct dependencies; no new versions or release dependencies. x86_64 static binary 16435312 bytes, delta 0. Native pre-fix regression: registration=200/joined session=200/split session=401; real proxy split session=200. #118 exception established by paired current/dev failures at socket_tests.rs:206. scripts/verify fast output (verbatim summary; exit 1 from the documented auth timeout and existing D205 size row):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Completed test foundation
4f3ebcf8: real native TLS/h2 and TLS-front/HTTP1 proxy registration probes, shared software passkey RP selector, cookie boundary tests and optimized 50-session benchmark. Pre-fix native: 0 passed/1 failed, registration=200/joined session=200/split session=401 (0.82s); proxy: 1 passed, split session=200. RUST_TEST_THREADS=1 runs every test and stabilizes the prior socket deadline flake; test row now PASS. Release size unchanged at 16435312 bytes. scripts/verify fast verbatim summary (exit 1 solely for existing size row):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Completed ceremony reader step
31540288: activates the tested get_all(COOKIE) reader for binding reuse/verification. No plaintext copies or allocations; canonical capability shape and constant-time hash comparison retained. Static x86_64 size 16435824 bytes (+512 versus test foundation). The current gate socket deadline failure was matched on detached dev0510bd85in this window (baseline retry round 2, socket_tests.rs:206, 0 passed/1 failed in 0.54s). All other checks pass; earlier complete test row also passed. scripts/verify fast verbatim summary:+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Baseline output (verbatim):
detached dev
0510bd85round 1running 1 test
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.50s
detached dev
0510bd85round 2running 1 test
thread 'auth::tests::socket_tests::expired_handshake_releases_user_permits' (1172629) panicked at crates/infraternal-server/src/auth/socket_tests.rs:206:5:
assertion failed: matches!(connect_async(test_ws_request(address, &cookie)).await,
Err(tokio_tungstenite::tungstenite::Error::Http(ref response)) if
response.status() == axum::http::StatusCode::SERVICE_UNAVAILABLE)
note: run with
RUST_BACKTRACE=1environment variable to display a backtracetest auth::tests::socket_tests::expired_handshake_releases_user_permits ... FAILED
failures:
failures:
auth::tests::socket_tests::expired_handshake_releases_user_permits
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.54s
HTTP session adapter now uses the same allocation-free whole-request cookie reader; native TLS/h2 and real proxy tests are enabled. Joined and split session cookies both return 200, either field order works, duplicates/missing cookie/foreign Origin remain 401 in both modes. Native malformed X-Forwarded-For remains ignored. No change to Secure/HttpOnly/SameSite/Path flags, unlock state, exact Origin or trusted proxy policy. First post-fix real-server test output (verbatim):
running 2 tests
test auth::tests::tls_tests::proxy_tls_registration_session_split_cookies ... TLS_HTTP2 proxy=true registration=200 joined_session=200 split_session=200 OK
ok
test auth::tests::tls_tests::standalone_tls_registration_session_split_cookies ... TLS_HTTP2 proxy=false registration=200 joined_session=200 split_session=200 OK
ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 154 filtered out; finished in 1.47s
Completed HTTP fix
8e6c6198: every session-cookie action uses the strict all-field reader; native/proxy TLS regression tests are enabled. Real server regressions: 2 passed/0 failed (1.47s), each native h2 and TLS-front/HTTP1 flow returns 200 with joined or split cookies; duplicate/missing/foreign-Origin cases stay 401. Native forwarded metadata stays untrusted. Browser auth 4 scenarios and recovery 2 scenarios pass. Full server suite 143 passed/0 failed/13 ignored (164.99s). Static size 16435632 bytes (-192 this step, +320 total), PT_INTERP absent. scripts/verify fast verbatim summary (exit 1 solely for pre-existing size row):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Additional same-cause security finding: websocket.rs:223-227 also reads only the first Cookie field. Before replacement, split_cookie_fields_preserve_socket_session and duplicate_cookie_fields_deny_socket_session both fail (0 passed/2 failed in 0.00s). Socket upgrades now delegate to exactly the same capability reader as HTTP/session and ceremony binding, so field splitting preserves the capability and duplicates fail closed. Full gate in progress. Pre-fix output (verbatim; token is a fixed, non-authorizing public test vector):
running 2 tests
test websocket::cookie_tests::duplicate_cookie_fields_deny_socket_session ... FAILED
test websocket::cookie_tests::split_cookie_fields_preserve_socket_session ... FAILED
failures:
---- websocket::cookie_tests::duplicate_cookie_fields_deny_socket_session stdout ----
thread 'websocket::cookie_tests::duplicate_cookie_fields_deny_socket_session' (1264918) panicked at crates/infraternal-server/src/websocket_cookie_tests.rs:29:5:
assertion failed: session_cookie(&headers).is_none()
note: run with
RUST_BACKTRACE=1environment variable to display a backtrace---- websocket::cookie_tests::split_cookie_fields_preserve_socket_session stdout ----
thread 'websocket::cookie_tests::split_cookie_fields_preserve_socket_session' (1264919) panicked at crates/infraternal-server/src/websocket_cookie_tests.rs:17:5:
assertion
left == rightfailedleft: None
right: Some("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG")
failures:
websocket::cookie_tests::duplicate_cookie_fields_deny_socket_session
websocket::cookie_tests::split_cookie_fields_preserve_socket_session
test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 156 filtered out; finished in 0.00s
error: test failed, to rerun pass
-p infraternal-server --libCompleted socket-reader step
dd0d7a6b: HTTP, ceremony and socket adapters share one all-field strict reader. Both socket boundary tests fail before and pass after; 144 other server tests pass. Sole auth socket deadline failure (#118) also fails on detached dev0510bd85, same window: baseline round 4, 0 passed/1 failed in 0.48s; current isolated 0 passed/1 failed in 0.52s. Static x86_64 size 16434800 bytes (-832 this step; -512 from starting build), PT_INTERP absent. Registering/running the parser fuzz target next. scripts/verify fast verbatim summary:+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Paired baseline output (verbatim):
infraternal-dev load 2.26 2.91 2.92 3/9681 1359307
running 1 test
thread 'auth::tests::socket_tests::expired_handshake_releases_user_permits' (1359309) panicked at crates/infraternal-server/src/auth/socket_tests.rs:206:5:
assertion failed: matches!(connect_async(test_ws_request(address, &cookie)).await,
Err(tokio_tungstenite::tungstenite::Error::Http(ref response)) if
response.status() == axum::http::StatusCode::SERVICE_UNAVAILABLE)
note: run with
RUST_BACKTRACE=1environment variable to display a backtracetest auth::tests::socket_tests::expired_handshake_releases_user_permits ... FAILED
failures:
failures:
auth::tests::socket_tests::expired_handshake_releases_user_permits
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 157 filtered out; finished in 0.52s
detached dev
0510bd85round 1running 1 test
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.58s
detached dev
0510bd85round 2running 1 test
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.46s
detached dev
0510bd85round 3running 1 test
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.46s
detached dev
0510bd85round 4running 1 test
thread 'auth::tests::socket_tests::expired_handshake_releases_user_permits' (1359620) panicked at crates/infraternal-server/src/auth/socket_tests.rs:206:5:
assertion failed: matches!(connect_async(test_ws_request(address, &cookie)).await,
Err(tokio_tungstenite::tungstenite::Error::Http(ref response)) if
response.status() == axum::http::StatusCode::SERVICE_UNAVAILABLE)
note: run with
RUST_BACKTRACE=1environment variable to display a backtracetest auth::tests::socket_tests::expired_handshake_releases_user_permits ... FAILED
failures:
failures:
auth::tests::socket_tests::expired_handshake_releases_user_permits
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.48s
Completed fuzz step
7d564415: auth_cookie is registered in the existing harness and includes the production reader source. Existing axum lockfile version reused; production dependency and binary delta 0. Instrumented nightly/ASAN libFuzzer: 1781320 runs in 61s, cov=290/ft=1384, corpus=352/58KiB, RSS=366MiB, no crash; max_len=4096 and rss_limit_mb=512. infraternal-dev CPUWeight=10000 scope, load 3.87/2.86/2.87 before build/run and 7.64/9.95/6.56 after. Server suite 145 passed/0 failed/13 ignored (224.38s); all Rust checks pass except the existing size row. Static size remains 16434800 bytes (-512 total). Documentation/reviewer checklist and final gate in progress. scripts/verify fast verbatim summary (exit 1 solely for size):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Finished #149 on tls-session. Head 15801e9e9a6ae2d6ead6d9af760187cb3104574a; base
d82d0fb9cd. Seven atomic commits; no push/deploy; issue remains open.Cause: base auth/http.rs:106-111 used HeaderMap::get(COOKIE), reading only the first field. Native HTTP/2 splits ceremony/session cookies; the TLS proxy recombines them on its HTTP/1 hop. Registration is already unlocked: before the fix joined session=200 but split session=401. One allocation-free get_all reader now serves HTTP, ceremony binding and socket upgrades, requiring one canonical capability across the entire request. Duplicate/non-text capabilities fail closed. Origin, Secure cookie flags, unlock/expiry and native distrust of forwarded metadata are preserved.
Evidence: docs/verification/tls-session.md and fuzz/README.md. Native TLS and real TLS-front/HTTP1 proxy regressions both pass; joined/split/reordered cookies succeed, duplicate/missing/foreign-Origin cases remain 401. Standalone ignores malformed forwarded metadata. Server suite 145 passed/0 failed/13 pre-existing ignored measurements (354.46s). Real Chromium auth 4 scenarios and recovery 2 scenarios pass. TS compiler/tracer/build/budgets pass; protocol 36 passed/0 failed/34462 assertions. Instrumented ASAN/libFuzzer 1781320 runs in 61s, cov=290/ft=1384, no crash. B1/S1/S2/N1 self-review complete.
Local CPUWeight=10000 parser benchmark: medians 66.65 -> 148.97 ns/request (+82.32 ns), 50 requests add 4.12 us; 0 retained bytes/session x 50 = 0. Static stripped x86_64 musl binary 16434800 bytes, -512 from base; existing limit 16404816 exceeded by 29984. Size row exits before aarch64, so only x86_64 is measured. No new production dependency or version. Prior socket deadline flakes were matched on detached dev
0510bd85under #118; the final test row passes.How to test:
Final scripts/verify fast output, verbatim summary (exit 1 solely for existing size):
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Final documentation head
d4aa1ea3e2supersedes 15801e9e (amended only to clarify the ignored-test count). Final suite: 145 passed/0 failed/13 ignored; those 13 comprise 12 existing measurements plus the new optimized cookie benchmark, which was executed separately at 50 sessions. Both TLS regressions and socket boundary tests are enabled and pass. All implementation, browser, TS, fuzz, size/performance evidence and review findings in the preceding completion comment remain unchanged. Seven atomic commits; no push/deploy; #149 stays open. Final scripts/verify fast verbatim summary, exit 1 only for pre-existing D205 size row:+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Independent verification review started on local branch review-tls-session at
d4aa1ea3e2; merge base with devd82d0fb9cd. Read all 15 comments on #149 and all 6 parent #121 comments, contract, architecture/process and report. No earlier review findings. Running unmodified-head fast gate, checking native/proxy TLS, all-field capability validation and performance/fuzz evidence. No implementation edits, push or deployment.Independent source/contract review at
d4aa1ea3: all production HTTP session, ceremony binding and socket readers delegate to cookies::capability; no remaining first-field reader, wire/schema change or new production dependency version. No confirmed finding yet. Unmodified-head fast attempts stopped at RTT self-test (p99 372.60 and 691.00 ms); a CPUWeight=10000 scoped retry passed and is compiling. Host has 8 cores, load 25-36 during review. Bounded auth_cookie fuzz build is in progress with synthetic split/distinct-duplicate/non-text seeds. Additional real-TLS ceremony assertions prepared; not applied until head gate completes.Independent auth_cookie fuzz verification at
d4aa1ea3completed under local CPUWeight=10000 scope: 914987 runs in 61 seconds, cov=290, ft=1351, corpus=347/51KiB, RSS=317MiB, max_len=4096, rss_limit_mb=512, no crash. Seeds cover split session/ceremony, distinct duplicates and non-text fields. Host infraternal-dev, 8 cores; observed load 34.66/30.97/28.86 near build start, 24.95/27.00/27.94 after run. No production or test source changed yet; unmodified-head gate still compiles vendored OpenSSL. TS tracer compiler/build/transfer budget passed; differential stream test awaits Rust oracle build.Independent real native TLS/h2 and TLS-front/HTTP1 proxy regression run on untouched
d4aa1ea3: 2 passed; 0 failed; 0 ignored; 156 filtered out; finished in 5.27s. Both registration=200, joined session=200 and split session=200. The fixtures also enforce reordered acceptance, duplicate/missing/foreign-Origin denial, trusted localhost certificate and h2 ALPN. Host load 23.67/25.59/25.53 after run. Full head fast gate and browser/TS differential tests continue. No confirmed finding.Independent unmodified-head browser verification at
d4aa1ea3passed: auth browser PASS, 4 isolated scenarios; native recovery PASS, 2 real-verifier scenarios; Chromium 149.0.7827.55, original DEK preserved. Isolated full TypeScript/tracer gate passed: protocol 36 pass/0 fail/34462 assertions in 3.88s. Initial parallel TS run timed out only because src/stream.test.ts:76 invokes cargo run while another gate holds the same target lock; using a separate job scratch CARGO_TARGET_DIR removes the contention without changing any threshold/source. Full Rust head suite is running, including auth authority/revocation tests; no confirmed finding.Independent 50-session cookie measurement at
d4aa1ea3, compiled against gate optimized musl axum/dependencies, local CPUWeight=10000 scope, 200000 requests/session x 50 per run x 3 runs/profile. opt=3 old/new ns/request: 128.16/252.55, 118.07/223.99, 89.38/214.01; medians 118.07 -> 223.99 (+105.92ns/request; +5.296us/50). Server profile opt=s: 308.40/318.65, 229.81/296.43, 211.86/290.40; medians 229.81 -> 296.43 (+66.62ns/request; +3.331us/50). Host infraternal-dev, 8 cores; load start 19.32/29.08/29.28, end 20.96/28.72/29.15. Parser adds no allocation or retained session state, 0 bytes x 50. Averages exclude TLS/SQLite/browser and are not end-to-end percentile claims. The small admission cost is explained by all-field duplicate rejection and alphabet validation. Full unmodified-head Rust tests passed (server 145/0/13 ignored, 303.79s); release size build is in progress.Independent stripped x86_64 musl size comparison completed in local CPUWeight=10000 scope: detached merge base
d82d0fb9= 16435312 bytes; job headd4aa1ea3= 16434800 bytes; delta -512 bytes, matching the report. Both have no PT_INTERP. Head remains 29984 bytes above unchanged 16404816-byte limit; this is the D205 pre-existing size row, not a new regression. Head binary SHA256 479708572b8a47bde97137b73ec2f3c9b4eebd18817a2d350692126c21a35e4d; baseline e57ef9d7c7db41f72ac99ad98dce22f36bb6e7666259c9ddca8b4d185a93cfd3. Size baseline used the same Cargo configuration/toolchain as head; restored the captured head artifact before subsequent gate static checks. Extra native/proxy ceremony assertions pass 2/0 in 2.78s: split-field binding reuse, distinct/malformed duplicate denial in either field order, then success with the same signed proof. Test-only diff; full review gate in progress. No confirmed finding.Independent #118 audit: final review gate's sole Rust test failure is expired_handshake_releases_user_permits at socket_tests.rs:206 (144 passed/1 failed/13 ignored, 228.29s). Detached dev
f91517019areproduces the identical assertion on paired trial 4 (0 passed/1 failed, 0.64s), same load window 17.51/17.55/20.03. Socket test file diff is empty. Earlier untouched-head and expanded-fixture full server suites both passed 145/0. No timeout/source changed or test skipped. Brief's #118 exception is established; other rows pass except independently reproduced D205 size. Test-only boolean diagnostic adjustment passes Clippy without printing capabilities.Review failure, verbatim:
---- auth::tests::socket_tests::expired_handshake_releases_user_permits stdout ----
thread 'auth::tests::socket_tests::expired_handshake_releases_user_permits' (1115812) panicked at crates/infraternal-server/src/auth/socket_tests.rs:206:5:
assertion failed: matches!(connect_async(test_ws_request(address, &cookie)).await,
Err(tokio_tungstenite::tungstenite::Error::Http(ref response)) if
response.status() == axum::http::StatusCode::SERVICE_UNAVAILABLE)
note: run with
RUST_BACKTRACE=1environment variable to display a backtracefailures:
auth::tests::socket_tests::expired_handshake_releases_user_permits
test result: FAILED. 144 passed; 1 failed; 13 ignored; 0 measured; 0 filtered out; finished in 228.29s
Detached dev, verbatim:
PAIRED_TRIAL=4 source=dev load=17.51 17.55 20.03 7/2916 1188843
running 1 test
test auth::tests::socket_tests::expired_handshake_releases_user_permits ...
thread 'auth::tests::socket_tests::expired_handshake_releases_user_permits' (1188845) panicked at crates/infraternal-server/src/auth/socket_tests.rs:206:5:
assertion failed: matches!(connect_async(test_ws_request(address, &cookie)).await,
Err(tokio_tungstenite::tungstenite::Error::Http(ref response)) if
response.status() == axum::http::StatusCode::SERVICE_UNAVAILABLE)
note: run with
RUST_BACKTRACE=1environment variable to display a backtraceFAILED
failures:
failures:
auth::tests::socket_tests::expired_handshake_releases_user_permits
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 150 filtered out; finished in 0.64s
DEV_MATCH trial=4 exit=101
Review test evidence committed locally:
59c72a4952on review-tls-session. Reuses the existing native/proxy real TLS fixtures for split-field ceremony reuse and distinct/malformed duplicate refusal before signed-proof consumption; both TLS tests pass. Final diagnostic asserts a boolean, preserving no-capability logging, and Clippy passes. No production change/dependency, intended runtime size delta 0. Full suites passed 145/0 twice; later named #118 timeout matched detached dev on paired trial 4 (0/1, 0.64s). No confirmed finding. Final verification is running after clearing only server release artifacts: shared cross-checkout Cargo caching had reused the baseline binary in a later size row (exact baseline SHA256), so final evidence must use a fresh review-source release build. Head's independent original size remains 16434800 vs baseline 16435312 (-512). No push/deploy.Finished independent #149 review: MERGE (no P0/P1). Counts: P0=0, P1=0, P2=0, P3=0.
Target tls-session
d4aa1ea3e2; merge based82d0fb9cd. Local review-tls-session head68dbb1fcb2: test evidence59c72a49, report68dbb1fc. Worktree clean, temporary build targets/baseline worktrees removed; no implementation fix, push/deploy or issue closure.Evidence: docs/verification/tls-session-review.md. Native/proxy TLS 2/0; expanded split ceremony reuse + malformed/distinct duplicate refusal preserves signed proof. Final server suite 145/0/13 ignored, 293.58s; Chromium auth/recovery 4+2 pass; TS/protocol/tracer pass, 36 tests/34462 assertions. ASAN/nightly fuzz 914987 inputs/61s, no crash, cov=290/ft=1351. Local CPUWeight=10000 50-request median added parser cost: 5.296us (opt=3), 3.331us (opt=s), load 19.32/29.08/29.28 -> 20.96/28.72/29.15; retained reader state 0 bytes x 50.
Independent static x86_64 sizes: base 16435312 -> head 16434800 (-512 bytes), no PT_INTERP. Review tests/docs add 0 runtime bytes. D205 existing limit 16404816 exceeded by 29984; final gate exit 1 solely for that row. Intermediate #118 deadline failure reproduced at socket_tests.rs:206 on detached dev
f9151701, paired trial 4 (0/1, 0.64s); final full test row passes. Shared-release cache contamination was corrected by clearing server release artifacts and rebuilding review source; final size is the correct head value.scripts/verify fast on untouched job head and final review source produced the identical verbatim summary:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Starting production integration #149 / D206 on tls-session-prod, base
04cdc52a01. Read all 25 #149 comments and parent #121 (6 comments), CLAUDE/DECISIONS/ARCHITECTURE/PROCESS. Preserve #158 final Close 4404, #151 bounds and all production auth modules/tests. Carry review test commit59c72a49separately. Production-only bootstrap_api.rs:158 rejects multiple Cookie fields before shared socket reader; will reproduce and route through strict capability parser in a separate fix. Push each completed commit; no deploy.Merge resolutions prepared: Cargo.lock retains every production entry and adds only already-locked h2 to server test dependencies and axum to fuzz; metadata regeneration changed no versions (2 added dependency edges). Cargo.toml retains remote_ca_bench and existing workspace tokio-openssl, adds h2 dev dependency. auth/http.rs and websocket.rs retain pub(crate) visibility for production CA/remote/removal/bootstrap consumers while delegating to strict all-field parser. auth/mod.rs keeps bootstrap_authorization plus cookies; auth/tests.rs keeps every production module plus TLS fixtures; fuzz manifest keeps all production dependencies/targets plus auth_cookie. websocket session lifecycle/frame/admission code unchanged from
04cdc52a. Running merge fast gate with serial tests, job-owned target and CPUWeight=10000; host infraternal-dev load 17.71/19.61/24.42 at gate start.Tracer bun run check passes. Initial unscoped bun test src: 141 pass/1 fail, unchanged 1,000-node layout timing assertion (3473.41ms), 22.11s suite. Immediate CPUWeight=10000 scoped run: 142 pass/0 fail, 10901 expectations, 640ms suite; no threshold/source changes or waiver. Cargo.lock package/version/source sets exactly match
04cdc52a(zero additions/removals). Native merge gate and exact04cdc52astatic baseline cold builds continue on infraternal-dev; load reached 46.08/32.91/28.15.Exact
04cdc52abaseline fresh static x86_64 build: 19,992,512 bytes, no PT_INTERP (separate baseline-target; artifact baseline-infraternal). Merge workspace server suite: 277 passed/0 failed/31 ignored, 418.07s; both native h2 and TLS-front/HTTP1 session regressions pass, handshake timeout passes. Local CPUWeight=10000 unchanged strict parser probe (opt=3, production musl dependencies), 200,000 requests x 50 sessions x 3 rounds: old [110.27, 139.65, 92.41], strict [225.79, 181.41, 219.53] ns/request; median 110.27 -> 219.53, +109.26 ns/request, +5.463 us/50 requests. Retained reader state 0 bytes/session x 50 = 0. Machine/load lines in parser-bench.log; these are parser-only averages under shared host load. Tracer production transfer passes: critical Brotli 241134/256000, deferred 44733/45056 bytes.Confirmed production-only bootstrap bug after merged shared reader: bootstrap_api.rs:158 rejects any second Cookie field, including unrelated ceremony cookies, so both Settings auth and bootstrap upgrades still reject a canonical session. Temporary real-passkey/live SQLite + loopback WebSocket regression prepared in bootstrap_api_tests.rs; before fix it fails the shared admission assertion in 1.07s (0 passed/1 failed). Test addition saved as bootstrap-test.patch and removed from merge tree; no capability values in diagnostics. Will remove only the field-count guard after merge and retain strict request-wide duplicate/malformed/non-text rejection, exact Origin, owner/unlock/revocation and admission bounds.
running 1 test
test bootstrap_api::tests::split_cookie_fields_preserve_bootstrap_owner_authority ... FAILED
failures:
---- bootstrap_api::tests::split_cookie_fields_preserve_bootstrap_owner_authority stdout ----
thread 'bootstrap_api::tests::split_cookie_fields_preserve_bootstrap_owner_authority' (2934028) panicked at crates/infraternal-server/src/bootstrap_api_tests.rs:866:9:
assertion failed: authenticate_headers(&api, &headers).await.is_ok()
note: run with
RUST_BACKTRACE=1environment variable to display a backtracefailures:
bootstrap_api::tests::split_cookie_fields_preserve_bootstrap_owner_authority
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 193 filtered out; finished in 1.07s
error: test failed, to rerun pass
-p infraternal-server --libCompleted/pushed merge
1694e11f7bon tls-session-prod. All seven conflict resolutions described in commit body; #158 Close 4404/#151 bounds/newer auth paths and every test retained. 607 workspace tests pass, 0 fail, 64 ignored; server 277/0/31 in 418.07s. Separate auth 110/0/8 plus one integration match; native/proxy TLS 2/0 in 1.88s, both registration/joined/split session=200. Static x86_64 19991552 bytes, -960 versus exact04cdc52a19992512, PT_INTERP absent. Tracer 142/0; protocol 36/0/34462 assertions; production transfer passes. No #118 waiver. Fast gate summary verbatim (exit 1 solely known size):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Bootstrap regression now passes after removing only the Cookie field-count guard (bootstrap_api.rs:158). Shared adapter accepts unrelated/session split fields in either order with live SQLite owner authority; real loopback WebSocket upgrades succeed. Same/different-shaped duplicate capabilities and non-text fields deny in either order. Existing owner/unlock/revocation and exact single-Origin checks remain. Before 0/1 in 1.07s; after:
running 1 test
test bootstrap_api::tests::split_cookie_fields_preserve_bootstrap_owner_authority ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 193 filtered out; finished in 0.70s
Final source audit: all production Cookie parsing occurs only at auth/cookies.rs:8; remaining HeaderMap::get(COOKIE) is the intentionally ignored old-reader benchmark. Full follow-up fast gate running; Clippy passes.
Completed/pushed bootstrap follow-up
0e6899c545. Removed only field-count guard and added live authority/real socket regression: before 0/1 (1.07s), after 1/0 (0.70s). Full workspace 608 passed/0 failed/64 ignored; exact Origin/owner/unlock/revocation/component-disable cases pass. Static 19991488 bytes, -64 this step, -1024 versus exact04cdc52a; PT_INTERP absent. No dependencies/budgets/timeouts changed; no #118 waiver. Next: replay independent TLS ceremony tests59c72a49. Fast summary verbatim (exit 1 solely known size):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Independent test commit
59c72a49replayed without conflicts on production + bootstrap fix. Expanded native/proxy real TLS fixtures pass split ceremony-binding reuse, distinct/malformed duplicate denial in either order, then successful redemption of the same signed proof. Boolean diagnostics do not print capabilities. Test-only change; no new production dependency/runtime code. Full gate underway; fmt/Clippy pass. Targeted output verbatim:running 2 tests
test auth::tests::tls_tests::proxy_tls_registration_session_split_cookies ... TLS_HTTP2 proxy=true registration=200 joined_session=200 split_session=200 OK
ok
test auth::tests::tls_tests::standalone_tls_registration_session_split_cookies ... TLS_HTTP2 proxy=false registration=200 joined_session=200 split_session=200 OK
ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 192 filtered out; finished in 2.38s
Review-test full gate found one failure outside the permitted #118 exception: unchanged Mesh headroom test at auth/tests.rs:1731, server closed websocket unexpectedly: None. Server row 277 pass/1 fail/31 ignored, 298.27s. Native/proxy TLS and bootstrap split regression pass; every non-test row passes except known size. The Mesh test/source and post-handshake socket code are unchanged by #149; both preceding full merge/bootstrap gates passed this test. No waiver, timeout or source change: isolating the test and requiring a new passing full gate before the review-test commit. Failure evidence verbatim:
---- auth::tests::socket_tests::scale::review_mesh_headroom_snapshot_does_not_close_shared_socket stdout ----
nodes=10000 grants=30000 snapshot_event_bytes=64595 frame_limit=4194304 load=13.08 14.17 16.39 22/3006 3382238
liveness_resyncs=1 expiry_frame_bytes=64602
thread 'auth::tests::socket_tests::scale::review_mesh_headroom_snapshot_does_not_close_shared_socket' (3381712) panicked at crates/infraternal-server/src/auth/tests.rs:1731:17:
server closed websocket unexpectedly: None
note: run with
RUST_BACKTRACE=1environment variable to display a backtracefailures:
auth::tests::socket_tests::scale::review_mesh_headroom_snapshot_does_not_close_shared_socket
test result: FAILED. 277 passed; 1 failed; 31 ignored; 0 measured; 0 filtered out; finished in 298.27s
Mesh isolation passes unchanged in both runs. Exact failing workspace test binary: 1 passed/0 failed, 81.73s; 10000 nodes/30000 grants assembled in 88 pages, maximum frame 64612 bytes (<65536), shared socket Pong=true; liveness resync handled. cargo test --locked -p infraternal-server --lib --features remote matching test: 1 passed/0 failed, 76.87s, same 88 pages/64612 max/Pong=true. Logs mesh-exact-retry.log and mesh-retry.log; host load 10.98/13.19/15.66 and 14.13/13.73/15.76 during fixtures. No source/threshold/timeout changes or exception. Full fast gate retry running and must pass test row before commit.
Exact binary output verbatim:
running 1 test
test auth::tests::socket_tests::scale::review_mesh_headroom_snapshot_does_not_close_shared_socket ... nodes=10000 grants=30000 snapshot_event_bytes=64595 frame_limit=4194304 load=10.98 13.19 15.66 14/2847 3398961
liveness_resyncs=1 expiry_frame_bytes=64602
assembled_nodes=10000 assembled_grants=30000 pages=88 max_frame_bytes=64612 total_frame_bytes=5630655 shared_socket_pong=true
ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 308 filtered out; finished in 81.73s
Completed/pushed review-test replay
abb80a0536(from59c72a49). Expanded native/proxy TLS 2/0, 2.38s; split binding reuse and duplicate refusal preserve signed proof. Full retry: 608 passed/0 failed/64 ignored. Earlier unchanged Mesh snapshot close failure is recorded; exact binary and cargo isolation both pass (88 pages, 10000 nodes/30000 grants, 64612-byte max, shared socket Pong), and full retry passes the row. No waiver/threshold/source adjustment. Runtime delta 0; static 19991488 (-1024 from exact04cdc52a), PT_INTERP absent. Short result.md and final gate next. Fast retry summary verbatim (exit 1 solely known size):+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Added local CPUWeight=10000 50-session probe with the existing production server opt-level=s (Cargo.toml:92-93), no profile/source changes. Three rounds old [342.43, 275.47, 287.49], strict [409.88, 313.39, 308.72] ns/request; medians 287.49 -> 313.39, +25.90 ns/request, +1.295 us/50. Retained 0 B/session x expected 200 = 0 B. Machine infraternal-dev, 8 CPUs, 200000 requests/session x50 x3. Load 22.76 18.03 17.24 25/2903 3544091 -> 24.41 18.72 17.49 28/2919 3545929. This supplements opt=3 +5.463us/50 and remains a parser-only average, not a production end-to-end percentile. result.md now distinguishes both profiles. Raw log parser-bench-size.log.
Finished #149 / D206 production integration. Head
5d02b8d6b9on tls-session-prod; remote SHA matches, worktree clean. Four atomic commits, each pushed: merge1694e11f(all seven resolutions in body), bootstrap strict-reader follow-up0e6899c5, review test replayabb80a05(59c72a49), result.md5d02b8d6. No deployment or issue closure.Preserved #158 final Close 4404, #151 bounds, newer CA/remote/removal/bootstrap paths and every test. Every production Cookie reader now delegates to the same strict all-field capability parser; duplicate/malformed/non-text fields deny. Bootstrap regression before 0/1 (1.07s), after 1/0 (0.70s), including live owner/SQLite and real socket field-order checks. Expanded native/proxy TLS tests 2/0 (2.38s): registration/joined/split session=200, ceremony binding reuse, duplicate refusal without consuming signed proof. Existing Origin, cookie flags, ingress, unlock/expiry/revocation and admission policies unchanged. Auth B1/S1/S2/N1 self-review complete; reviewed auth_cookie fuzz target retained, parser source unchanged from tls-session.
Final workspace: 608 passed/0 failed/64 ignored. Required auth run: 110 unit +1 matching integration passed. Tracer check/142 src tests pass; protocol compiler/36 tests/34462 assertions pass; production build/transfer pass (critical Brotli 241134/256000, deferred 44733/45056 bytes). Workspace lockfile regeneration byte-identical, Cargo locked 0 new packages; --locked metadata passes, package/version/source sets unchanged from
04cdc52a.Exact fresh x86_64 static baseline
04cdc52a: 19992512 bytes -> final 19991488 (-1024); no PT_INTERP. Known 16404816-byte limit remains unchanged; size row stops before aarch64. Separate build roots prevented baseline artifact reuse. Local CPUWeight=10000 parser probes, 3x200000 requests/session x50: production opt=s median 287.49->313.39 ns/request (+25.90ns; +1.295us/50); opt=3 +5.463us/50. Retained state 0 B/session x200=0 B. infraternal-dev, 8 CPUs; opt=s load 22.76/18.03/17.24 ->24.41/18.72/17.49. Parser-only averages, not end-to-end percentiles.Initial tracer timing failure passed scoped rerun. Initial review Mesh snapshot socket-close failure passed two unchanged isolated runs and both complete retry/final gates; no waiver or timeout change. Mesh evidence: 10000 nodes/30000 grants, 88 pages, 64612-byte maximum frame, shared socket Pong=true. All failures/findings and outputs remain in preceding comments.
Short report: result.md. Logs/evidence under $HOME/.cache/codex-scratch/tls-session-prod/; job-owned targets, baseline checkout, probes and local target symlink removed. Final scripts/verify fast summary verbatim (exit 1 solely known size):
Independent delta review started on review-tls-session-prod at
5d02b8d6b9; production review base04cdc52a01, merge base with current dev2eaaaa36a2. Read all 39 #149 comments and all 6 parent #121 comments, required repo documents and previous review report. Earlier review records zero findings; independent test commit59c72a49is already replayed asabb80a05. Scope restricted to delta and earlier tests. Running untouched job-head fast gate with unique TRACER_TEST_PORT=4397 and job-owned scratch; no implementation edits, push or deployment.Delta review checkpoint at untouched
5d02b8d6: independent test patch59c72a49and replayabb80a05are byte-identical; zero earlier confirmed findings to replay. All production readers route through cookies::capability; contracts and steady terminal socket processing unchanged from04cdc52a. Independent nightly/ASAN run of exact repository auth_cookie target completed 1901880 inputs in 67s, cov=300/ft=1279/corpus=266, oom/timeout/crash=0/0/0, exit 0; max_len=4096, rss_limit_mb=512. Isolated scratch manifest reuses locked axum 0.8.9/libfuzzer-sys 0.4.13 and includes the original target source; no repo dependency edits. Local infraternal-dev CPUWeight=10000, 8 CPUs, observed load 21.80/18.69/17.61 near start and 16.77/18.55/17.90 after run. Full job-head fast gate continues. No confirmed finding.Independent local parser remeasurement completed on untouched
5d02b8d6under CPUWeight=10000: 3 rounds x 200000 requests/session x 50. Production reader opt=s median old 204.73 -> strict 229.89 ns/request, +1.258 us/50; opt=3 79.41 -> 172.38, +4.649 us/50. Native GNU rustc 1.99.0 with independently rebuilt opt=3 axum 0.8.9 dependencies; unlike author musl probes, this is a target-different corroboration, not an exact timing comparison. infraternal-dev /8 cores, load 20.97/18.85/18.11 ->19.55/18.66/18.07. No allocation or retained parser state: 0 B/session x 200 = 0 B. Parser averages only; not end-to-end percentile claims. Scope/source/security review found no confirmed gap; required untouched-head test/gate run continues.Untouched
5d02b8d6independent fast gate: all 608 Rust tests passed, 0 failed, 64 ignored; fmt, VT native fmt, Clippy and cargo-deny passed. Retained native/proxy TLS tests both pass, including earlier59c72a49ceremony binding reuse/refusal-before-proof-consumption assertions. Bootstrap split-field owner-authority regression passes. No #118 exception needed. Static musl build is still running; no implementation/test source changed and no confirmed finding.Finished independent delta review #149: MERGE (no P0/P1); verdict merge. Counts P0=0, P1=0, P2=0, P3=0.
Target tls-session-prod
5d02b8d6b9; scope 04cdc52a..5d02b8d6. Local review-tls-session-prod head91f1979a27; one documentation-only evidence commit, worktree clean. No implementation fix, push, deployment or issue closure. Temporary build targets/corpus removed.Earlier review had no confirmed findings. Independent test patch
59c72a49is already replayed byte-for-byte asabb80a05. Both retained real native/proxy TLS tests pass: split ceremony reuse and duplicate/malformed refusal preserve signed proof. Bootstrap split-owner regression and both socket cookie tests pass. Supplemental normal-location live-authority probe passes 1/0 in 0.71s: both cookie orders refuse owner removal, pending unlock, expiry and deletion through direct admission and real WebSocket handshakes (16 assertions); temporary source restored, patch/log retained. No gap requiring a failing test commit.Untouched job-head fast gate: 608 passed/0 failed/64 ignored; server 278/0/31 in 300.56s. No #118 exception. Exact fresh static x86_64 head 19991488 B, stripped/no PT_INTERP; matches author head and is 1024 B below author's recorded
04cdc52abaseline (baseline not rebuilt in this delta review). Existing 16404816 B limit fails by 3586672 B; D205 row stops before aarch64/TS. No TS/UI delta. Review documentation adds 0 runtime bytes.Independent exact-source nightly/ASAN fuzz: 1901880 inputs/67s, cov=300/ft=1279, oom/timeout/crash=0/0/0, exit 0. Local CPUWeight=10000 parser probe, 3x200000 requests/session x50: opt=s medians 204.73->229.89 ns/request (+1.258us/50), opt=3 +4.649us/50; 0 B retained x200. infraternal-dev/8 CPUs; load 20.97/18.85/18.11 ->19.55/18.66/18.07. GNU probe versus author's musl: corroborating parser averages, not an identical-target or end-to-end percentile claim.
Evidence: docs/verification/tls-session-prod-review.md; findings.md under job state; logs/reproduction patch under $HOME/.cache/codex-scratch/tls-session-prod-review/.
scripts/verify fast on job head, verbatim summary (exit 1 solely known static size):
Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: TLS session fix merged and deployed in prod-batch (
6320f5b52/5d02b8d6bancestor of release-prod-live and dev); delta review found no gap. Reopen if anything is still missing.kayg referenced this issue2026-10-28 17:53:55 +00:00