~0x64616E69656C
nxTLS · EXP 07 / Response HPACK × Early Flush · 2026-10-21

Smaller headers.
Earlier response?

Does response HPACK make a complete HTTP/2 reply usable sooner when combined with G0A, or does it primarily shift the HEADERS and TLS-output boundaries? The two mechanisms now run together with intact responses under bounded state changes and backpressure. The timing question is still open.

Research in progress · integration evidence.
E7-1 integration: 8/8 cells.
E7-2A bounded safety: 24/24 cells.
E7-2B stateful controls: 32 cells executed.
Server-side graceful GOAWAY: OPEN.
E7-3 performance: NOT STARTED.
nginx 1.31.7 · pinned BoringSSL · HTTP/2 / TLS 1.3 experimental correctness controls · no performance or release decision
Research checkpoint · 21 October 2026. This public report draws on the E7-0, E7-1, E7-2A and E7-2B primary reports. Raw trial evidence is not reproduced or independently reanalysed here. All builds are isolated experiment artifacts; no production change, HPACK/G0A adoption or completed performance comparison is asserted.

The combined path works in the tested cases.

Experiment 7 brings together EXP 01's response HPACK encoder and EXP 06's G0A output boundary. The combined variant PG retains the observed header-table behavior of HPACK and the selective early-output behavior of G0A. Under the checked workloads, decoded HEADERS, body hashes, HTTP/2 frame order and TLS plaintext accounting remained consistent.

Integration E7-1
8/8
Four variants × two workloads, 52 complete responses
Safety E7-2A
156
Responses verified in 24/24 bounded test cells
Stateful E7-2B
376
Completed responses; 12 intentional cancellations, G2 still open
Performance E7-3
HOLD
No latency or synergy campaign has run
Result so far: HPACK and G0A can coexist under the tested controls. Smaller HEADERS change the selected G0A short-write size. That is a mechanism interaction, not evidence that their client-visible latency benefits add up. E7-2 remains open; E7-3 is blocked.

One boundary or two independent gains?

Response HPACK reduces the bytes needed to represent certain repeated HTTP/2 response headers. G0A chooses a bounded nginx output boundary after a small, urgent DATA frame; it does not change BoringSSL's TLS-fragment policy. The experiment asks whether reducing the HEADERS portion moves a complete decoded response earlier, or simply changes how much plaintext is assembled before the same early output boundary.

Neither a smaller HEADERS block nor a smaller TLS record on its own establishes when the client can decode the complete response. That endpoint is reserved for the gated performance comparison.

One factorial comparison, four variants.

All tested cells use the same pinned nginx 1.31.7/BoringSSL baseline, HTTP/2 over TLS 1.3 and 16-KiB stock TLS fragment policy. The existing H2 harness exercises simultaneous and late-request workloads. The experimental patches are staged into isolated nginx builds, not the project’s vendored upstream source.

CaseResponse HPACKPriority-aware early flushWhat it isolates
Bstockoffnginx baseline
PexperimentaloffHeader encoding / reuse
GstockG0ASelected early output boundary
PGexperimentalG0ACombined behavior and interactions

The comparison is useful even if PG eventually proves no faster: it separates compression, output batching and their interaction rather than attributing every improvement to a single combined build.

Smaller HEADERS change the G0A record.

The E7-2A safety campaigns provide a concrete mechanism observation. With the peer HPACK table size set to zero, P and PG make no dynamic insertions or hits, HEADERS do not shrink, and the G and PG short-write sizes match. At 1024 bytes the encoder reuses eligible entries but also evicts and reinserts them; at 4096 bytes it retains them throughout the tested fixture.

E7-2A conditionMeasured HEADERS, BMeasured HEADERS, PSelected short write, G → PG
Table 0 / simultaneous245, 241, 245 B245, 241, 245 B4,627 → 4,627 B
Table 1024 / simultaneous245, 241, 245 B148, 144, 245 B4,627 → 4,530 B
Table 4096 / 350-ms pause / simultaneous245, 241, 245 B148, 144, 148 B4,627 → 4,433 B

The repeated warm response example decreases from 241 B to 144 B, roughly 40%. The selected G0A short write likewise changes when the preceding HEADERS shrink, without forcing all subsequent TLS writes to become small. This is a byte-boundary result, not a latency result. A different record split is possible in some cells; frame and plaintext accounting remain correct.

The P and PG variants exhibited matching HPACK table hit/insertion/eviction progressions, including limited-table churn. The G and PG variants preserved the G0A cut, HEADER wire order and 16-KiB bulk-record capability. This supports coexistence for the tested workloads rather than unrestricted correctness for all state transitions.

The tested state machines survived.

E7-0 and E7-1: staging and integration

All four B/P/G/PG variants staged and built. E7-0 passed its 16 existing checks. E7-1 then completed eight integration cells with 52/52 complete responses, demonstrating both response-header reuse and the intended G0A output cut in the combined PG build.

E7-2A: bounded pressure and HPACK capacity

Across 24 cells, 156/156 responses decoded correctly. The tests covered initial table sizes 0 and 1024, plus 4096-byte tables under a 350-ms application receive pause. The trace audit correlated 641 recoverable SSL_ERROR_WANT_WRITE events with subsequent successful writes, without missing/duplicate frames or mismatched TLS plaintext. The 24-test suite passed. The pause did not produce a native selected-prefix WANT_WRITE.

E7-2B: dynamic state and lifecycle controls

The subsequent bounded stateful controls executed 32 cells over 48 connections, completed 376 responses and intentionally cancelled 12 requests, without a reported integrity defect. They exercised peer SETTINGS changes 4096 → 0 → 4096, cancellation/RST_STREAM with HPACK replay, client-side GOAWAY and bounded fairness with two/four connections. The E7-2B report records 1,514 recovered WANT_WRITE events and 38/38 tests passed.

E7-2B is nonetheless INCONCLUSIVE: the server-side graceful GOAWAY control (G2) remains unverified. One G2/PG shutdown was actually attempted: SIGQUIT with master_process off caused an immediate nginx exit, without a server GOAWAY; the client encountered EOF inside a TLS record while bulk streams 9 and 13 were unfinished. Subsequent G2 limitation records were source-checked, not additional executed trials. This is a limitation of the single-process shutdown fixture, not a demonstrated HPACK or G0A defect.

The E7-2B figures come from its full gate report; the underlying raw campaign artifacts were not independently reanalysed for this public summary.

The timing question is deliberately unanswered.

E7-2 / G2 server GOAWAY openE6 native prefix WANT_WRITE openfresh-record retry opensanitizers not completedE7-3 performance blocked

EXP 06 Phase 3E subsequently demonstrated four successful deterministically injected selected-prefix retries with the original G0A patch unchanged. Those tests started with already pending TLS output and used a test-specific readiness rearm. They do not substitute for a native socket prefix retry or fresh-record first-ciphertext acceptance; neither independent gate is closed.

The measured figures above concern sizes, completed response integrity and bounded negative paths. They do not show that HPACK makes PG faster than G, that G0A makes PG faster than P, that the two benefits add, or that the combined policy should be adopted in production. E7-3 remains intentionally blocked until the relevant safety gates are resolved.

Current decision: Publish the experimental integration and safety evidence, retain the existing patch and upstream pins, and keep E7-2, E7-3 and production adoption separate. No new architecture decision is implied by this report.

Reproduction and provenance

Primary experiment sources, kept in the local nxTLS repository:

  • experiments/hpack-priority-early-flush/README.md and run.py — controlled B/P/G/PG stages.
  • experiments/hpack-priority-early-flush/GATE_E7_2A_2026-10-21.md — the detailed 24-cell safety report and raw evidence inventory.
  • experiments/hpack-priority-early-flush/GATE_E7_0_2026-10-21.md and GATE_E7_1_2026-10-21.md — staging/build and integration evidence.
  • experiments/hpack-priority-early-flush/GATE_E7_2B_2026-10-21.md — full stateful safety report, executed G2/PG attempt, source-checked G2 limitations and raw evidence inventory.
  • experiments/priority-aware-dynamic-tls-record-sizing/PHASE3E_2026-10-21.md — independent G0A prefix retry evidence.

Environment: nginx 1.31.7, BoringSSL 594a44291086dcc7cef06cabec4c0b47afd674c0, Debian Testing amd64, Clang 21.1.8, HTTP/2 / TLS 1.3 / TCP. The E7-2A controls used existing verified debug binaries, stock 16-KiB nginx SSL buffering and TLS fragment sizes. The experiments preserved upstream source trees, original patches, pins and earlier evidence.

← EXP 07 summary