Revision history for Hypersonic

0.16    2026-05-26
	- Fix CPAN-tester bailouts on t/0035-e2e-streaming.t (perl
	  5.12..5.42 on the k93msid smoker): bumped wait_for_port
	  default from 5s to 60s and t/0035 to 120s so slow debugging
	  perls have time to JIT-compile the largest test server
	  (regular + streaming + 2 SSE + 2 WebSocket routes)
	- HypersonicTest spawn_server now sets HYPERSONIC_COMPILE_DIAG
	  so the child prints a 'compiling JIT module ...' breadcrumb
	  before the slow gcc invocation; wait_for_port diag is no
	  longer empty when the timeout hits mid-compile
	- Hypersonic compile() wraps XS::JIT->compile() in
	  'no warnings "redefine"' to silence the
	  'Subroutine Hypersonic::Stream::* redefined at
	   Hypersonic.pm line 881' noise when the boot xsub installs
	  its xsubs into the same package as Hypersonic/Stream.pm

0.15    2026-05-22
	- Requires XS::JIT with the functions_already_loaded() fix
	- Hypersonic compile() now verifies the dispatch xsub is
	  defined after dlopen and dies with the full link line if not
	- HypersonicTest forked-server helper now POSIX::dup2()s the
	  log fd over stdout/stderr (fd 1/2) so C-level fprintf(stderr,
	  ...) from the JIT'd .so is captured
	- Fix Hypersonic::UA::Async C codegen: AV *ready was declared
	  twice in the same scope, breaking the build on gcc 14+
	- Fix Hypersonic::UA::Async passing an io_uring_cqe* buffer to
	  epoll_wait(): event backends now expose slot_event_struct()
	  which IOUring overrides to 'epoll_event' 
	- t/2011-ua-blocking-methods.t now uses HypersonicTest's
	  spawn_server + wait_for_port with extended retries and a
	  request-level readiness probe

0.14    2026-05-17
	- Fix Hypersonic::Event::IOUring missing async-slot methods
	  (gen_create_loop, gen_add_with_slot, gen_get_slot,
	  gen_wait_once). 
	- Improve IOUring backend detection: read
	  /proc/sys/kernel/io_uring_disabled and reject if non-zero
	  (RHEL9 sets this to 2 by default); add a runtime probe via
	  Hypersonic::JIT::Util->can_run that actually opens and closes
	  a ring, catching kernels that link liburing but reject
	  io_uring_setup().
	- Fix `return -1;` leaking into the void XS body of
	  hypersonic_run_event_loop from IOUring's and Select's
	  gen_create. 
	- Fix Hypersonic::Compress::get_zlib_flags using `//` (defined-or)
	  where it needed `||` (string-falsy)
	- Fix pthread linking for Hypersonic::Future: Future->compile now
	  passes -pthread / -lpthread. Linux+glibc auto-resolves the
	  symbols via libc; FreeBSD, OpenBSD and Linux+musl don't, and the
	  JIT-compiled .so failed at dlopen with "Undefined symbol
	  'pthread_create'".
	- Diagnostics: Hypersonic::Socket::create_listen_socket now
	  croak()s with strerror(errno) on socket/bind/listen failure
	  instead of returning silent -1; new t/lib/HypersonicTest.pm
	  helper captures the forked server child's STDERR/STDOUT and
	  diag()s it when wait_for_port times out. 

0.13    2026-05-09
	- Fix Hypersonic::Event::Epoll gen_add_with_slot using out-of-scope
	  'ev' variable
	- Fix Hypersonic::SSE call_method() return handling: SvTRUE(POPs)
	- Bump XS::JIT to 0.22

0.11    2026-01-31
	- Fix can_link() to properly pass headers to Devel::CheckLib
	- Fix can_link() test to work reliably with compiler builtins (libm sin)
	- Add missing C includes to UA.pm for socket/networking types
	- Attempt a portable strcasestr implementation for non-GNU systems
	- Fix compilation failures on Linux (missing headers, GNU extensions)
	- Fix WebSocket g_websocket_handlers not declared when no dynamic routes
	- Fix WebSocket requires Stream module (set needs_streaming for WebSocket)
	- Fix WebSocket test to handle frame arriving with HTTP handshake

0.10    2026-01-29
	- RequestID Middleware
	- More C89 compliance refactoring

0.09    2026-01-29
	- Fix io_uring backend to check for liburing library (not just headers)
	- Add event backend ldflags to XS compile options
	- Fix test race conditions with active port probing instead of sleep()
	- Fix OpenSSL check to verify library is actually linkable
	- Fix zlib check to verify library is actually linkable
	- Fix SSE test includes for FreeBSD/BSD compatibility

0.08    2026-01-28
	- Add Hypersonic::UA HTTP client with JIT-compiled XS
	- Optional feature compilation (async, parallel, tls, http2, compression)
	- Connection pooling with keep-alive support
	- Async request support (currently only kqueue/epoll supported)
        - Benchmark static get against python, rust and go.

0.07    2026-01-28
	- Adds c_helpers for reusable c functions
	- Adds need_xs_builder as an endpoint feature...
	- Refactor Future::Pool so you can have more than one
	- Centralise the caching
	- Be a little more JIT but some improvements can still be made..

0.06    2026-01-28
        - Async/Future Enhancements in preparation to remove the next bottle

0.05    2026-01-28
        - Fix G_LIST -> G_ARRAY for Perl 5.32+ compatibility (CPAN testers fix)

0.04    2026-01-27
        - Split out event loops
        - Split out http1 protocol
        - Add HTTP/2 support via nghttp2
        - Add some SSE support
        - Add Websockets (only v13 currently)
        - Some will know what we need next...

0.03    2026-01-26
        - Response
        - Request
        - TLS
        - Session
        - Compress

0.02    2025-01-26
        - Dynamic route support for real request handling
        - Path parameters (e.g., /users/:id) automatically extract values
        - Handlers receive $req hashref with method, path, body, id
        - Mixed static/dynamic routes in same server
        - Static routes still ~290K req/sec, dynamic routes call Perl per-request

0.01    2025-01-26
        - Initial release
        - JIT-compiled XS functions via XS::JIT (not Perl custom ops)
        - Handlers run once at compile time, full HTTP responses baked into C
        - Pure C event loop (kqueue on macOS/BSD, epoll on Linux)
        - ~290K requests/second on single core
        - Zero Perl in the hot path - recv/dispatch/send all in C
        - Support for GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
        - Keep-alive connection support
        - TCP_NODELAY for low latency
