Revision history for Future-IO-Redis

0.001005  2026-03-15
    - Feature: Unix domain socket connections
        - Connect via path parameter or redis+unix:// URI scheme
        - Constructor stores path and skips host/port for unix sockets
        - Added docker-compose redis-unix service for testing
    - Feature: PubSub auto-resubscribe on reconnect
        - Subscriptions automatically re-established after connection drop
        - on_reconnect callback on Subscription object for notification
        - _read_pubsub_frame checks connected state to fail fast
        - _reset_connection now clears in_pubsub flag
    - Bug Fix: _reset_connection left in_pubsub=1 after disconnect
        - Prevented reconnection because AUTH/SELECT blocked by pubsub guard

0.001004  2026-02-02
    - Bug Fix: Socket close ordering
        - Fixed Future::IO corruption when disconnect() called with active watchers
        - Cancel _current_read_future before socket close ensures Future::IO
          unregisters watchers while fileno is still valid
        - Let Perl's DESTROY handle close() after futures are cancelled
    - Breaking Change: Future::IO configuration
        - Removed Future::IO->load_best_impl from module
        - Libraries should not configure Future::IO - only application entry
          points should (following LeoNerd's guidance)
        - Added comprehensive EVENT LOOP CONFIGURATION documentation section
        - Updated SYNOPSIS with proper configuration guidance
    - Improvements:
        - Apply connect_timeout to Redis handshake (AUTH, SELECT, CLIENT SETNAME)
        - Removed unused read_timeout and write_timeout settings
    - Examples:
        - Updated pagi-chat example for PAGI 0.001016 auto-configured Future::IO
    - Testing:
        - New t/93-socket-cleanup/close-with-watchers.t for disconnect scenarios
        - Enhanced t/10-connection/socket-cleanup.t

0.001003  2026-01-18
    - New Feature: Enhanced Lua Script Helper API
        - define_command() for registering named scripts with metadata
        - run_script() for executing registered scripts by name
        - get_script(), list_scripts() for registry access
        - preload_scripts() for pipeline optimization
        - Automatic EVALSHA with EVAL fallback (NOSCRIPT handling)
        - Pipeline integration via $pipe->run_script()
        - Optional method installation (install => 1)
        - Support for fixed or dynamic key counts
    - Script.pm Enhancements:
        - New run() method with explicit keys/args arrays
        - New run_on() method for explicit connection targeting
        - Metadata fields: name, num_keys, description
    - Documentation:
        - New LUA SCRIPTING section in Async::Redis POD
        - Comprehensive examples for all script methods
        - Pipeline integration examples
    - Testing:
        - t/60-scripting/define-command.t (18 tests)
        - t/60-scripting/script-registry.t (17 tests)
        - t/60-scripting/pipeline-scripts.t (16 tests)
        - t/60-scripting/pagi-channels.t (16 tests) - realistic channel layer scenarios

0.001002  2026-01-17
    - Bug Fix: Concurrent command response matching
        - Fixed race condition where multiple async commands on a single
          connection could receive mismatched responses
        - Implemented Response Queue pattern with FIFO ordering
        - Commands now register in inflight queue before sending
        - Single reader coroutine processes responses in order
    - New Features:
        - Added inflight_count() method to check pending commands
        - Added _wait_for_inflight_drain() for pipeline/PubSub synchronization
    - Documentation:
        - Added CONCURRENT COMMANDS section to POD
        - Documented Response Queue pattern and best practices
    - Testing:
        - Added t/92-concurrency/response-ordering.t test suite
        - Tests for concurrent SET, GET, mixed command types
        - Stress test with 100 concurrent commands
        - Inflight tracking verification

0.001001  2026-01-03
    - Initial release
    - Core Features:
        - Full async/await support via Future::IO
        - Event loop agnostic (IO::Async, AnyEvent, UV, etc.)
        - RESP2 protocol support via Protocol::Redis
        - All Redis commands via auto-generated methods
    - Connection Features:
        - TCP and TLS/SSL connections
        - URI connection strings
        - Automatic reconnection with exponential backoff
        - Connection pooling with health checks
        - Fork-safe for pre-fork servers
    - Command Features:
        - Pipelining for improved throughput
        - Transactions (MULTI/EXEC/WATCH)
        - Lua scripting with EVALSHA optimization
        - SCAN iterators (SCAN, HSCAN, SSCAN, ZSCAN)
        - Key prefixing
    - PubSub:
        - Channel and pattern subscriptions
        - Sharded subscriptions (Redis 7+)
    - Observability:
        - OpenTelemetry tracing and metrics
        - Debug logging
        - Credential redaction
    - Testing:
        - Comprehensive test suite
        - Integration tests
        - Performance benchmarks
