feat: complete bounded TLS client/server streams - #3
Draft
Joshua Tenner (jtenner) wants to merge 17 commits into
Draft
feat: complete bounded TLS client/server streams#3Joshua Tenner (jtenner) wants to merge 17 commits into
Joshua Tenner (jtenner) wants to merge 17 commits into
Conversation
added 9 commits
July 20, 2026 13:09
added 6 commits
July 22, 2026 01:43
This was referenced Jul 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Complete the bounded standard-Go TLS client/server stream and listener foundation while preserving the existing outbound release-readiness work. HTTP, HTTPS, and a portable TinyGo cryptographic TLS engine are explicitly outside this checkpoint.
This is a stacked draft on top of
agent/tls-release-readiness. It must not be merged or described as completing the broader TLS/HTTPS/TinyGo grid.Published state
agent/tls-full-grideddbfa6agent/tls-release-readinessat138411c76158704b80bc4e930acdfa048d8ee9ec30184215804passed every required check for headeddbfa6on July 26, 202630179421788passed every required check for head634d471on July 25, 2026No existing commits were amended, squashed, reordered, force-pushed, or otherwise rewritten.
What changed
tls.Config.Timecallbacks with immutabletls.ValidationTime; nonnil clock callbacks are rejected before profile publicationcrypto.Signercallbacks are rejected because they cannot be deterministically canceledconnection_info_v1compatibility: offset 68 remains a boolean resumed value of exactly 0 or 1connection_info_v2role and peer-authentication flags without exposing certificate chains or private keystls.AllowListeners()authority separately from server-profile storage; raw-TCP authority is never implied and applicable raw-TCP denies still constrain private listenerslisten/acceptwago_net_tlsto 14 imports: additiveconnection_info_v2plus a fixed 32-byte RFC 9266channel_binding; accepted streams use the bounded handshake, read, write, shutdown, metadata, channel-binding, close, and poll operationsclose_notify, abrupt truncation, listener reuse, quota/lease release, close/accept races, and namespace teardown29757140541, job88402308965, by pumping the final TLS 1.3 client flight before waiting for the peer handshake[new, old]to[new]rotationtls-exporterchannel binding; exporter label, context, and length are not guest-selectableTryFinishConnectafter TLS has started; this preserves abrupt EOF forcrypto/tlstruncation classification rather than allowing a retired TCP stream to surface a later connection-refused resultCommits added in this completion pass
ba8b247— fix: flush the final TLS client handshake flight0a29624— fix: preserve TLS connection info v1 ABIf5184e6— feat: require explicit TLS listener authoritybeac180— test: exercise live TLS client server lifecycle0acb287— docs: record TLS server foundation evidenced1e87c7— test: preserve TLS metadata output atomicitya99aa77— docs: record final TLS signoff target counte40fb5e— fix: harden TLS cloning and DHCP leases27a766f— ci: bound TinyGo package hangs2f9c2e5— feat: add bounded TLS session resumption634d471— feat: expose fixed TLS channel binding1d0ebcc— fix: bound TLS profile callbacks530b011— test: certify bounded TLS certificate rotation06b2514— fix: retain established TLS transport stateeddbfa6— docs: describe bidirectional TLS authorityThe earlier PR commits
35b2fcfand52c9d8dremain unchanged and in their original order.Local validation
Passed on the current head:
go test ./...go test -shuffle=on -count=1 ./...go vet ./...internal/namespace/tlstargeted tests; the exact five real-TLS packages remain standard-Go-onlyinternal/backend/gotlsandinternal/backend/lneto/tls; the public TLS package remains blocked only by the accepted pinned-Wagoruntime.HostCtrlFrameBytesdiagnosticCurrent hosted run
30184215804completed the full exact 123-package TinyGo-supported matrix in 37m39s and passed custom test/shuffle/vet/source-boundary, race, standard-Go TLS signoff, and checkptr/386 jobs. Prior retained evidence also covers custom CLI inspection and the four-binary arm64 cross-build.Hosted CI note
Run
30183264224on intermediate head530b011found one shuffle-only lifecycle race: after the raw TCP peer half-closed without TLSclose_notify, a laterTryFinishConnectrecheck could observe the retired TCP stream before the TLS engine consumed EOF, returning connection-refused instead of TLS protocol truncation. Commit06b2514caches the successful transport-establishment transition, adds client/server regression transports that fail any second finish-connect call, passes focused race tests, and passes 500 consecutive live truncation runs. Replacement run30184215804passed every required check after the follow-up comment-only authority correction ineddbfa6.Explicitly incomplete
TLS remains granular-only and outside aggregate
register. No insecure TinyGo stub, plaintext shim, or device-offload-only substitution is included or claimed.