[PR #1997] [MERGED] test(http3): add real MITM capture verification lab #4958

Closed
opened 2026-10-31 00:57:22 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/1997
Author: @LuisTaffelli
Created: 10/12/2026
Status: ✅ Merged
Merged: 10/13/2026
Merged by: @morluto

Base: main ← Head: test/http3-capture-verification


📝 Commits (10+)

  • 20f7637 test(http3): add real MITM capture verification lab
  • 891c787 test(http3): register the optional verification command
  • 8b92214 fix(http3): preserve the latest verification attempt owner
  • e758846 Merge commit 'bd2c202dd9' into test/http3-capture-verification
  • 32e763a test(cli): admit the dyld slice fixture on x64 hosts
  • 0f7dc00 test(http3): verify exact producer TLS connection facts
  • e1a413b test(http3): integrate current main and preserve architecture selection
  • 095dbb0 test(http3): verify readable capture fields against observed bytes
  • f423173 chore(http3): sync captured main deadline and source contracts
  • 0ca2bd5 fix(comparison): recheck historical calls-only changes (#2223)

📊 Changes

20 files changed (+2308 additions, -21 deletions)

View changed files

➕ docs/http3-capture-lab.md (+183 -0)
📝 package.json (+1 -0)
➕ scripts/fixtures/http3-lab-requirements.txt (+10 -0)
➕ scripts/fixtures/http3-lab.py (+416 -0)
➕ scripts/fixtures/http3-lab.test.py (+56 -0)
➕ scripts/fixtures/observe-mitmproxy-http3.py (+64 -0)
📝 scripts/lib/clean-linux-hopper-runtime.d.mts (+1 -0)
📝 scripts/lib/clean-linux-hopper-runtime.mjs (+4 -3)
➕ scripts/lib/http3-capture-assertions.mjs (+243 -0)
➕ scripts/lib/http3-capture-assertions.test.mjs (+163 -0)
➕ scripts/lib/http3-verifier-lifecycle.mjs (+143 -0)
➕ scripts/lib/http3-verifier-lifecycle.test.mjs (+433 -0)
➕ scripts/verify-http3-network-captures.mjs (+408 -0)
📝 src/domain/android/androidAnalysis.ts (+1 -1)
📝 src/domain/functionComparison.test.ts (+3 -1)
📝 src/domain/reconstructionVerification.functionSources.test.ts (+116 -1)
📝 src/domain/reconstructionVerification.ts (+35 -11)
📝 src/ida/IdaOperationRunner.ts (+2 -1)
📝 tests/boundary/mcp/comparisonUnknownsMcp.test.ts (+3 -0)
📝 tests/process-global/cleanLinuxHopperRuntime.test.ts (+23 -3)

📄 Description

Problem and scope

REA can inspect native mitmproxy captures, but the existing capture verifier does not establish that traffic negotiated HTTP/3 through a MITM. A successful HTTP request may fall back to another protocol.

This PR adds an optional, reproducible Linux reverse-proxy laboratory using existing mitmproxy and aioquic implementations. It changes no production contracts or adapters. The ten changed files comprise the nine laboratory/guide files and one optional npm command, verify:web:http3; no HTTP/3 CI lane is added. Registering the command also resolves Knip's unused-verifier/export findings.

Two scenarios

  1. Real HTTP/3: three concurrent binary POSTs to the same URL through mitmproxy to an HTTP/3 origin, plus an independent cURL --http3-only smoke request. Responses are dispatched in reverse origin completion order; association is verified independently of client/capture arrival order.
  2. Fallback control: disable HTTP/3 in the proxy; cURL --http3 negotiates client HTTP/2 over TCP and reaches an HTTP/1.1 TLS origin. The same positive HTTP/3 assertion must reject this capture.

The positive case checks both legs' HTTP versions, transport, ALPN and TLS observations; endpoint-negotiated QUIC v1; native UUID preservation; request/response bytes, lengths and SHA-256; method, URL components and ordered duplicate regular headers; CLI/MCP parity; advertised schemas; and complete retained MCP Evidence. Both input captures must remain unchanged. Endpoint stream IDs remain scoped observations: no mitmproxy stream IDs or cross-leg mapping are invented.

UUID-specific reports and an atomic running/passed/failed marker prevent stale successes. Cleanup attempts all closes and audits while preserving the primary failure; success is published only after cleanup.

Reproduction

Follow the laboratory guide at the verified commit in a disposable Linux VM. It pins the image and mitmproxy archive by digest, cURL's HTTP/3 dependency profile and the Python runtime graph. Build from this checkout using its pinned Node/npm and locked dependencies; keep host directories unmounted and host trust/routes/packages unchanged. Before loopback traffic, ensure the guest has no IPv4 or IPv6 default route. The verified VM used IPv6 disabled in QEMU and removed its IPv4 default route. Clients/proxy receive explicit paths to generated test CAs.

REA_MITMDUMP_COMMAND=/absolute/lab/tools/mitmdump \
REA_HTTP3_PYTHON_COMMAND=/absolute/lab/venv/bin/python \
npm run verify:web:http3 -- /absolute/evidence/run-1

REA_MITMDUMP_COMMAND=/absolute/lab/tools/mitmdump \
npm run verify:web:http3 -- /absolute/evidence/run-1 --inspect-existing

The guide provides the Node/Python regression commands. Generated evidence and private keys stay outside Git. This PR publishes source and reviewed synthetic-result summaries, with no captures, certificates, VM disks or credentials attached.

Exact source and executed verification

Verified source: 891c7878dfd659437ba3c15799ef1d95abe3279c, based on upstream main e9fe6437a7da381f0aa5aa77571dcf03317122e7. Its locally retained git archive --format=tar.gz source has SHA-256 1942bc7d7f2180ddbddb074fea6466a21f18e7e42b983985a0fc20169a9dddd1. All 2,879 archived file digests matched the isolated worktree. Source bytes were compared inside the guest before execution and checked again afterward; the runtime was built inside the guest.

The exercised guest used Node 24.18.0 / npm 11.16.0, fixture Python 3.14.7, aioquic 1.2.0, cURL 8.22.0 (OpenSSL 3.6.4, ngtcp2 1.25.0, nghttp3 1.18.0), and standalone mitmproxy 12.2.3 (bundled Python 3.14.0 / OpenSSL 3.5.5).

On this source:

  • npm run check, including Knip, passed locally. Guest npm ci, npm run build:cached, and Python pip check passed.
  • npm run verify:web:http3: fresh real traffic passed with four HTTP/3 flows and one fallback flow, CLI/MCP byte/association/schema/session checks and empty owned proxy groups. Run UUID: 41849ea4-7b4a-4fb3-93f4-d583d99ff812.
  • Four Node and two Python verifier regressions passed.
  • Controlled oracle-digest and producer failures produced failed attempts without a new success, preserving original diagnostics, the earlier success and both capture digests. Cleanup had no failures or live owned groups. These additional injection drivers remain local, outside the PR.
  • Recovery through npm run verify:web:http3 -- ... --inspect-existing passed: UUID 80dc2ec6-2ae1-45c7-bfef-296ceedb5947. Final source hashes matched, the final laboratory process snapshot was empty, and the guest shut down cleanly.

The reviewed local evidence export has SHA-256 c40d80b123d573f35c993950da8407557f698e92fabb520ad030a392467141a5; every manifest digest was checked. It excludes PEM files, private keys and proxy configuration and is not attached. Another session reviewed reports and source digests, without independently rerunning the lab or exhaustively auditing every artifact.

Earlier real-provider results on production base 12ee785e5e61132898adecf9424ce6706a2e754a remain separately retained; they are not substituted for the new run. Earlier build/docs/discovery and 94 focused capture tests ran on PR head 20f763775fbc87b1fc752998ba930657495dbba7; CI for the new head is tracked separately in GitHub checks. The prior APPROVED review refers to that earlier head. The full local suite / check:pr was not rerun.

Coverage limits

This verifies only native captures, Linux reverse mode, QUIC v1 and the named clients/versions; it does not establish general HTTP/3 support in REA. Empty/absent/incomplete/redacted bodies, cancellations, resets, certificate failures, malformed/truncated captures, HAR, qlog, local/WireGuard modes, browsers, QUIC v2, migration, 0-RTT, mTLS, replay, sustained load and loss tolerance remain outside this increment.

Future options are being discussed separately in Discussion #2000, related to #774. They do not expand this PR or commit to future delivery.

Concurrent verification marker correction

Commit 8b92214ae567949227697007b9343a3cfcd5775a fixes the race reported in review comment. Attempt registration and current-owner check/replacement share a SQLite exclusive transaction lock. Only the most recently registered attempt may publish the current marker; earlier attempts retain their own reports and diagnostics.

Validation on the unchanged reviewed patch: seven lifecycle tests pass, including separate supervised processes finishing in reverse order, lock contention and lock release after an invalid marker. npm run check, npm run docs:check, targeted strict lint and the pre-push gate passed. The lock has no global wait deadline; a live stalled owner may delay publication until it exits. This is verifier bookkeeping only. Earlier real HTTP/3 evidence remains pinned to 891c7878dfd659437ba3c15799ef1d95abe3279c; no real-traffic rerun is claimed for the new commit. Fresh CI is pending.

CI baseline corrections (2026-10-13)

Run 38379313793 tested merge 4f726317d7f58c05ef6e91d78ca11b30e9fb73f5 against base d13c9f840d36a321a56917e75c48afcb8d72920e. Both the historical base and exact CI merge reproduce the same five failures (45 passing tests): four release preflight assertions and one same-named Mach-O slice fixture.

This branch now merges upstream bd2c202dd930548194cdbc55c27a797f22279db9, including release preflight fix 747e7299141cec0b03774c427f579889d5088d20. Commit 32e763a0765505ef567c565cff234c534e216ffe fixes the remaining fixture: a neutral x86_64 slice allows target admission on x64 runners, while explicit --architecture arm64e retains both ARM subtype roots and all original evidence assertions. Production target admission is unchanged.

Validated on the exact published tree 8d9f9def4878de0b9ccef889e5350febe5457216 with Node 24.18.0 / npm 11.16.0: 50/50 focused release/dylib tests, 7/7 HTTP/3 lifecycle regressions, 120/120 CI scope/required-lane tests, and typecheck/lint. Pre-push checks passed. The earlier native HTTP/3 evidence remains pinned to 891c7878dfd659437ba3c15799ef1d95abe3279c; no native traffic rerun is claimed for this CI integration. Fresh GitHub CI is pending.

Producer TLS fact regression (2026-10-13)

Commit 0f7dc00273bc469a4aa2bea7320856b8a07095bf addresses review comment 4257957176: positive records now preserve the UUID-matched producer's exact tls_version, timestamp_tls_setup, and connection error on both legs, alongside connection IDs. Producer version labels are compared as observations; timestamps are neither rounded nor given a tolerance.

Twelve mutations that previously passed are now rejected. All 20 verifier regressions, static checks, strict lint, formatting, documentation checks, and pre-push checks pass on the published tree e2f051f5bfbbbcac3cab18c7ec10fbfe9a8dfa44. The new assertions also pass on four retained CLI/MCP result views from the original real lab (runs 41849ea4-7b4a-4fb3-93f4-d583d99ff812 and 80dc2ec6-2ae1-45c7-bfef-296ceedb5947), with all six input-file digests unchanged. This is historical evidence from source 891c7878dfd659437ba3c15799ef1d95abe3279c; no new decoding or native traffic run is claimed for this commit. Fresh GitHub CI is pending.

Readable capture-field regression (2026-10-13)

Commit 095dbb00428766cb50c4c3e429b23b74ceed5b6c addresses review comment 4258507827. In addition to retained bytes, positive assertions now compare readable method/scheme/authority/path against observed pseudo-fields, ordered request/response header pairs including duplicate values, and h3 ALPN on both legs. Expected text preserves the native decoder's strict UTF-8 semantics, including null display values for non-UTF-8 bytes.

Fourteen readable-only mutations accepted before the fix are now rejected. All 34 verifier regressions pass; the guide runs both the lifecycle and newly separated assertion test files. Pinned Node 24.18.0 / npm 11.16.0 build, typecheck/lint, strict targeted lint, formatting, documentation and pre-push checks pass on tree 9626f7047c680e00d07234a308ca66ddaa65822e.

The new assertions also pass over the four retained CLI/MCP result views of the earlier real lab, with all six input digests unchanged. Historical native evidence still belongs to 891c7878dfd659437ba3c15799ef1d95abe3279c; no decoding or native traffic rerun is claimed for this fix. Fresh GitHub CI is pending.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/1997 **Author:** [@LuisTaffelli](https://github.com/LuisTaffelli) **Created:** 10/12/2026 **Status:** ✅ Merged **Merged:** 10/13/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `test/http3-capture-verification` --- ### 📝 Commits (10+) - [`20f7637`](https://github.com/morluto/rea/commit/20f763775fbc87b1fc752998ba930657495dbba7) test(http3): add real MITM capture verification lab - [`891c787`](https://github.com/morluto/rea/commit/891c7878dfd659437ba3c15799ef1d95abe3279c) test(http3): register the optional verification command - [`8b92214`](https://github.com/morluto/rea/commit/8b92214ae567949227697007b9343a3cfcd5775a) fix(http3): preserve the latest verification attempt owner - [`e758846`](https://github.com/morluto/rea/commit/e758846b131281dc89a89159fa578ed46b428506) Merge commit 'bd2c202dd930548194cdbc55c27a797f22279db9' into test/http3-capture-verification - [`32e763a`](https://github.com/morluto/rea/commit/32e763a0765505ef567c565cff234c534e216ffe) test(cli): admit the dyld slice fixture on x64 hosts - [`0f7dc00`](https://github.com/morluto/rea/commit/0f7dc00273bc469a4aa2bea7320856b8a07095bf) test(http3): verify exact producer TLS connection facts - [`e1a413b`](https://github.com/morluto/rea/commit/e1a413b22cb73fc5b21fc702b69ef17edf250e4c) test(http3): integrate current main and preserve architecture selection - [`095dbb0`](https://github.com/morluto/rea/commit/095dbb00428766cb50c4c3e429b23b74ceed5b6c) test(http3): verify readable capture fields against observed bytes - [`f423173`](https://github.com/morluto/rea/commit/f4231739d1995882a323567ee34cbcb3fa377dba) chore(http3): sync captured main deadline and source contracts - [`0ca2bd5`](https://github.com/morluto/rea/commit/0ca2bd56cfb7a262990bdc86b909d30b4d17cf5c) fix(comparison): recheck historical calls-only changes (#2223) ### 📊 Changes **20 files changed** (+2308 additions, -21 deletions) <details> <summary>View changed files</summary> ➕ `docs/http3-capture-lab.md` (+183 -0) 📝 `package.json` (+1 -0) ➕ `scripts/fixtures/http3-lab-requirements.txt` (+10 -0) ➕ `scripts/fixtures/http3-lab.py` (+416 -0) ➕ `scripts/fixtures/http3-lab.test.py` (+56 -0) ➕ `scripts/fixtures/observe-mitmproxy-http3.py` (+64 -0) 📝 `scripts/lib/clean-linux-hopper-runtime.d.mts` (+1 -0) 📝 `scripts/lib/clean-linux-hopper-runtime.mjs` (+4 -3) ➕ `scripts/lib/http3-capture-assertions.mjs` (+243 -0) ➕ `scripts/lib/http3-capture-assertions.test.mjs` (+163 -0) ➕ `scripts/lib/http3-verifier-lifecycle.mjs` (+143 -0) ➕ `scripts/lib/http3-verifier-lifecycle.test.mjs` (+433 -0) ➕ `scripts/verify-http3-network-captures.mjs` (+408 -0) 📝 `src/domain/android/androidAnalysis.ts` (+1 -1) 📝 `src/domain/functionComparison.test.ts` (+3 -1) 📝 `src/domain/reconstructionVerification.functionSources.test.ts` (+116 -1) 📝 `src/domain/reconstructionVerification.ts` (+35 -11) 📝 `src/ida/IdaOperationRunner.ts` (+2 -1) 📝 `tests/boundary/mcp/comparisonUnknownsMcp.test.ts` (+3 -0) 📝 `tests/process-global/cleanLinuxHopperRuntime.test.ts` (+23 -3) </details> ### 📄 Description ## Problem and scope REA can inspect native mitmproxy captures, but the existing capture verifier does not establish that traffic negotiated HTTP/3 through a MITM. A successful HTTP request may fall back to another protocol. This PR adds an optional, reproducible Linux reverse-proxy laboratory using existing mitmproxy and aioquic implementations. It changes no production contracts or adapters. The ten changed files comprise the nine laboratory/guide files and one optional npm command, `verify:web:http3`; no HTTP/3 CI lane is added. Registering the command also resolves Knip's unused-verifier/export findings. ## Two scenarios 1. **Real HTTP/3:** three concurrent binary POSTs to the same URL through mitmproxy to an HTTP/3 origin, plus an independent cURL `--http3-only` smoke request. Responses are dispatched in reverse **origin completion order**; association is verified independently of client/capture arrival order. 2. **Fallback control:** disable HTTP/3 in the proxy; cURL `--http3` negotiates client HTTP/2 over TCP and reaches an HTTP/1.1 TLS origin. The same positive HTTP/3 assertion must reject this capture. The positive case checks both legs' HTTP versions, transport, ALPN and TLS observations; endpoint-negotiated QUIC v1; native UUID preservation; request/response bytes, lengths and SHA-256; method, URL components and ordered duplicate regular headers; CLI/MCP parity; advertised schemas; and complete retained MCP Evidence. Both input captures must remain unchanged. Endpoint stream IDs remain scoped observations: no mitmproxy stream IDs or cross-leg mapping are invented. UUID-specific reports and an atomic running/passed/failed marker prevent stale successes. Cleanup attempts all closes and audits while preserving the primary failure; success is published only after cleanup. ## Reproduction Follow [the laboratory guide at the verified commit](https://github.com/LuisTaffelli/rea/blob/891c7878dfd659437ba3c15799ef1d95abe3279c/docs/http3-capture-lab.md) in a disposable Linux VM. It pins the image and mitmproxy archive by digest, cURL's HTTP/3 dependency profile and the Python runtime graph. Build from this checkout using its pinned Node/npm and locked dependencies; keep host directories unmounted and host trust/routes/packages unchanged. Before loopback traffic, ensure the guest has no IPv4 or IPv6 default route. The verified VM used IPv6 disabled in QEMU and removed its IPv4 default route. Clients/proxy receive explicit paths to generated test CAs. ```sh REA_MITMDUMP_COMMAND=/absolute/lab/tools/mitmdump \ REA_HTTP3_PYTHON_COMMAND=/absolute/lab/venv/bin/python \ npm run verify:web:http3 -- /absolute/evidence/run-1 REA_MITMDUMP_COMMAND=/absolute/lab/tools/mitmdump \ npm run verify:web:http3 -- /absolute/evidence/run-1 --inspect-existing ``` The guide provides the Node/Python regression commands. Generated evidence and private keys stay outside Git. This PR publishes source and reviewed synthetic-result summaries, with no captures, certificates, VM disks or credentials attached. ## Exact source and executed verification **Verified source:** `891c7878dfd659437ba3c15799ef1d95abe3279c`, based on upstream main `e9fe6437a7da381f0aa5aa77571dcf03317122e7`. Its locally retained `git archive --format=tar.gz` source has SHA-256 `1942bc7d7f2180ddbddb074fea6466a21f18e7e42b983985a0fc20169a9dddd1`. All 2,879 archived file digests matched the isolated worktree. Source bytes were compared inside the guest before execution and checked again afterward; the runtime was built inside the guest. The exercised guest used Node 24.18.0 / npm 11.16.0, fixture Python 3.14.7, aioquic 1.2.0, cURL 8.22.0 (OpenSSL 3.6.4, ngtcp2 1.25.0, nghttp3 1.18.0), and standalone mitmproxy 12.2.3 (bundled Python 3.14.0 / OpenSSL 3.5.5). On this source: - `npm run check`, including Knip, passed locally. Guest `npm ci`, `npm run build:cached`, and Python `pip check` passed. - `npm run verify:web:http3`: fresh real traffic passed with four HTTP/3 flows and one fallback flow, CLI/MCP byte/association/schema/session checks and empty owned proxy groups. Run UUID: `41849ea4-7b4a-4fb3-93f4-d583d99ff812`. - Four Node and two Python verifier regressions passed. - Controlled oracle-digest and producer failures produced failed attempts without a new success, preserving original diagnostics, the earlier success and both capture digests. Cleanup had no failures or live owned groups. These additional injection drivers remain local, outside the PR. - Recovery through `npm run verify:web:http3 -- ... --inspect-existing` passed: UUID `80dc2ec6-2ae1-45c7-bfef-296ceedb5947`. Final source hashes matched, the final laboratory process snapshot was empty, and the guest shut down cleanly. The reviewed local evidence export has SHA-256 `c40d80b123d573f35c993950da8407557f698e92fabb520ad030a392467141a5`; every manifest digest was checked. It excludes PEM files, private keys and proxy configuration and is not attached. Another session reviewed reports and source digests, without independently rerunning the lab or exhaustively auditing every artifact. Earlier real-provider results on production base `12ee785e5e61132898adecf9424ce6706a2e754a` remain separately retained; they are not substituted for the new run. Earlier build/docs/discovery and 94 focused capture tests ran on PR head `20f763775fbc87b1fc752998ba930657495dbba7`; CI for the new head is tracked separately in GitHub checks. The prior APPROVED review refers to that earlier head. The full local suite / `check:pr` was not rerun. ## Coverage limits This verifies only native captures, Linux reverse mode, QUIC v1 and the named clients/versions; it does not establish general HTTP/3 support in REA. Empty/absent/incomplete/redacted bodies, cancellations, resets, certificate failures, malformed/truncated captures, HAR, qlog, local/WireGuard modes, browsers, QUIC v2, migration, 0-RTT, mTLS, replay, sustained load and loss tolerance remain outside this increment. Future options are being discussed separately in [Discussion #2000](https://github.com/morluto/rea/discussions/2000), related to [#774](https://github.com/morluto/rea/issues/774). They do not expand this PR or commit to future delivery. ## Concurrent verification marker correction Commit `8b92214ae567949227697007b9343a3cfcd5775a` fixes the race reported in [review comment](https://github.com/morluto/rea/pull/1997#discussion_r4255536447). Attempt registration and current-owner check/replacement share a SQLite exclusive transaction lock. Only the most recently registered attempt may publish the current marker; earlier attempts retain their own reports and diagnostics. Validation on the unchanged reviewed patch: seven lifecycle tests pass, including separate supervised processes finishing in reverse order, lock contention and lock release after an invalid marker. `npm run check`, `npm run docs:check`, targeted strict lint and the pre-push gate passed. The lock has no global wait deadline; a live stalled owner may delay publication until it exits. This is verifier bookkeeping only. Earlier real HTTP/3 evidence remains pinned to `891c7878dfd659437ba3c15799ef1d95abe3279c`; no real-traffic rerun is claimed for the new commit. Fresh CI is pending. ### CI baseline corrections (2026-10-13) Run 38379313793 tested merge `4f726317d7f58c05ef6e91d78ca11b30e9fb73f5` against base `d13c9f840d36a321a56917e75c48afcb8d72920e`. Both the historical base and exact CI merge reproduce the same five failures (45 passing tests): four release preflight assertions and one same-named Mach-O slice fixture. This branch now merges upstream `bd2c202dd930548194cdbc55c27a797f22279db9`, including release preflight fix `747e7299141cec0b03774c427f579889d5088d20`. Commit `32e763a0765505ef567c565cff234c534e216ffe` fixes the remaining fixture: a neutral x86_64 slice allows target admission on x64 runners, while explicit `--architecture arm64e` retains both ARM subtype roots and all original evidence assertions. Production target admission is unchanged. Validated on the exact published tree `8d9f9def4878de0b9ccef889e5350febe5457216` with Node 24.18.0 / npm 11.16.0: 50/50 focused release/dylib tests, 7/7 HTTP/3 lifecycle regressions, 120/120 CI scope/required-lane tests, and typecheck/lint. Pre-push checks passed. The earlier native HTTP/3 evidence remains pinned to `891c7878dfd659437ba3c15799ef1d95abe3279c`; no native traffic rerun is claimed for this CI integration. Fresh GitHub CI is pending. ### Producer TLS fact regression (2026-10-13) Commit `0f7dc00273bc469a4aa2bea7320856b8a07095bf` addresses review comment 4257957176: positive records now preserve the UUID-matched producer's exact `tls_version`, `timestamp_tls_setup`, and connection `error` on both legs, alongside connection IDs. Producer version labels are compared as observations; timestamps are neither rounded nor given a tolerance. Twelve mutations that previously passed are now rejected. All 20 verifier regressions, static checks, strict lint, formatting, documentation checks, and pre-push checks pass on the published tree `e2f051f5bfbbbcac3cab18c7ec10fbfe9a8dfa44`. The new assertions also pass on four retained CLI/MCP result views from the original real lab (runs `41849ea4-7b4a-4fb3-93f4-d583d99ff812` and `80dc2ec6-2ae1-45c7-bfef-296ceedb5947`), with all six input-file digests unchanged. This is historical evidence from source `891c7878dfd659437ba3c15799ef1d95abe3279c`; no new decoding or native traffic run is claimed for this commit. Fresh GitHub CI is pending. ### Readable capture-field regression (2026-10-13) Commit `095dbb00428766cb50c4c3e429b23b74ceed5b6c` addresses review comment 4258507827. In addition to retained bytes, positive assertions now compare readable method/scheme/authority/path against observed pseudo-fields, ordered request/response header pairs including duplicate values, and h3 ALPN on both legs. Expected text preserves the native decoder's strict UTF-8 semantics, including null display values for non-UTF-8 bytes. Fourteen readable-only mutations accepted before the fix are now rejected. All 34 verifier regressions pass; the guide runs both the lifecycle and newly separated assertion test files. Pinned Node 24.18.0 / npm 11.16.0 build, typecheck/lint, strict targeted lint, formatting, documentation and pre-push checks pass on tree `9626f7047c680e00d07234a308ca66ddaa65822e`. The new assertions also pass over the four retained CLI/MCP result views of the earlier real lab, with all six input digests unchanged. Historical native evidence still belongs to `891c7878dfd659437ba3c15799ef1d95abe3279c`; no decoding or native traffic rerun is claimed for this fix. Fresh GitHub CI is pending. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 00:57:22 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#4958
No description provided.