Skip to content

fix(smoketests): instrument node:http2 in verify-http2.mjs, not undici - #814

Merged
gautam-rl merged 1 commit into
mainfrom
fix/verify-http2-node-http2-instrumentation
Jul 6, 2026
Merged

fix(smoketests): instrument node:http2 in verify-http2.mjs, not undici#814
gautam-rl merged 1 commit into
mainfrom
fix/verify-http2-node-http2-instrumentation

Conversation

@gautam-rl

@gautam-rl gautam-rl commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

User description

Summary

The dev smoketest job test-sdk / smoke-tests (http2) (dispatched from runloopai/runloop deploys) has been failing deterministically with:

FAIL: h2: TLS ALPN negotiated 'h2' (saw: none)

The environment is healthy — api.runloop.pro negotiates h2 via ALPN (verified with openssl s_client and curl --http2). The harness is what broke: verify-http2.mjs detects ALPN by subscribing to undici's undici:client:connected diagnostics channel, but since 1.24.0 (#799, #800) the http2: true transport is built on node:http2. Undici is never involved, so:

  • the ALPN check always sees none and fails, and
  • the Pass-D "connections opened" counter always reads 0, making the multiplexing check pass vacuously.

The harness last ran green against dev on 2026-06-10 — before 1.24.0 shipped.

Fix

Wrap http2.connect (a singleton core module shared with the CJS dist bundle) before requiring the SDK, and record session.socket.alpnProtocol on each session's connect event. The same wrapper's call count now drives the Pass-D connection assertion, restoring its teeth: the pool eagerly opens minConnections (4) sessions, so 25 concurrent requests on a fresh client open exactly 4.

Test plan

  • Built the package and ran the harness against https://api.runloop.pro with a deliberately invalid key (no dev key available locally):
    • PASS: h2: TLS ALPN negotiated 'h2' (saw: h2, h2, h2, h2) (previously saw: none)
    • PASS: h2: 25 concurrent requests multiplexed over <= 4 connections (opened 4) (previously opened 0)
    • PASS on both Pass-B error-path checks (401 rejects cleanly with readable body)
    • The only failing checks were the three that require a valid RUNLOOP_API_KEY; CI injects DEV_KEY and should go fully green.
  • smoke-tests (http2) green in CI

🤖 Generated with Claude Code


CodeAnt-AI Description

Fix the HTTP/2 smoke test so it checks the real transport again

What Changed

  • The HTTP/2 verification script now watches the SDK’s actual node:http2 connections instead of an unrelated undici signal
  • It records the negotiated TLS protocol for each HTTP/2 session and uses that to confirm h2 is really in use
  • The concurrent request check now counts real HTTP/2 sessions again, so it can catch cases where too many connections are opened
  • The script comments and expectations were updated to match the current HTTP/2 transport behavior

Impact

✅ Reliable HTTP/2 smoke tests
✅ Fewer false test failures
✅ Stronger multiplexing checks

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

The http2 verify harness detected ALPN by subscribing to undici's
undici:client:connected diagnostics channel, but since 1.24.0 (#799, #800)
the http2 transport is built on node:http2 — the channel never fires, so
the ALPN check fails deterministically everywhere ('saw: none') and the
Pass-D connection counter reads 0. Wrap http2.connect before loading the
SDK and read session.socket.alpnProtocol instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codeant-ai

codeant-ai Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

CodeAnt AI is reviewing your PR.

@codeant-ai

codeant-ai Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@reflex-loop

reflex-loop Bot commented Jul 4, 2026

Copy link
Copy Markdown

🤖 This PR was created by Reflex.

View the agent run →

@codeant-ai codeant-ai Bot added the size:S This PR changes 10-29 lines, ignoring generated files label Jul 4, 2026
@reflex-loop

reflex-loop Bot commented Jul 4, 2026

Copy link
Copy Markdown

🔄 Reflex agent status: Working

The agent is working on this pull request.

View the agent run →

@codeant-ai

codeant-ai Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

CodeAnt AI finished reviewing your PR.

@gautam-rl
gautam-rl requested a review from jason-rl July 6, 2026 22:44
@gautam-rl
gautam-rl merged commit 6ceb236 into main Jul 6, 2026
8 checks passed
@gautam-rl
gautam-rl deleted the fix/verify-http2-node-http2-instrumentation branch July 6, 2026 22:46
@stainless-app stainless-app Bot mentioned this pull request Jul 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants