# This file documents the revision history for Perl extension PAGI
0.001013 - 2026-01-04
[New Features]
- Add PAGI::Utils::handle_lifespan utility for simplified lifespan handling
- Add Response getters (status, headers, content_type, body) and try setters
- Support static path rewrites in PAGI::App::File
- Add full-demo example demonstrating lifespan, HTTP, WebSocket, and SSE
[Bug Fixes]
- Fix POD formatting of nested angle brackets
- Make handle_lifespan croak on wrong scope type for clearer error messages
[Improvements]
- Match plackup FindBin behavior for app loading
- Refactor PAGI::Response to use exists() for lazy defaults
- Remove deprecated path_param/path_params from PAGI::Response
- Document state method in PAGI::Request
- Normalize spec docs to ASCII
[Build/Distribution]
- Add .editorconfig for consistent editor settings
- Add Thunderhorse to implementations documentation
0.001012 - 2026-01-01
[New Features]
- PAGI 0.2 specification: Loop-agnostic apps, SSE POST support, keepalive events
- Send-side backpressure to prevent unbounded memory growth under slow clients
- Configurable write_high_watermark (64KB) and write_low_watermark (16KB)
matching Python asyncio defaults for optimal memory/throughput balance
- SSE disconnect reasons (client_closed, timeout, write_error, shutdown)
[Bug Fixes]
- Fix Lint middleware to preserve original app errors instead of masking them
- Fix SSE keepalive to use chunked transfer encoding
- Fix missing IO::Async::Timer::Periodic use statement
- Fix missing 'method' field in SSE test scopes (per spec line 624)
- Fix WebSocket scope incorrectly including 'method' field in test client
- Fix middleware class resolution for nested namespaces (Auth::Basic, etc.)
using ^ prefix for fully-qualified class names
[Improvements]
- Improved event loop portability (Future::IO now fully optional)
- Improve max_connections auto-detection using getrlimit(RLIMIT_NOFILE)
instead of sysconf(_SC_OPEN_MAX) for accuracy
- Add fd_headroom config option (default 100) for max_connections calculation
- Add TTY warning at startup when access_log goes to terminal
- Security fixes from code review
- PAGI spec compliance fixes for event validation
[Build/Distribution]
- Replace Markdown::Pod with App::sdview for spec POD generation
- Fixes =item - to =item * (proper POD bullet points)
- Converts module names to L<> links for metacpan
0.001011 - 2025-12-28
- Switch license from Perl_5 to Artistic_2_0 (cleaner language, OSI recommended)
- Fix Ctrl-C signal handling for multi-worker mode: lifespan.shutdown now runs
for all workers ensuring proper cleanup
- Add -e and -M flags to Runner for inline apps (like perl -e/-M)
- Add .pl and .md to MIME types in PAGI::App::File
- Add exception trapping to PAGI::Test::Client (default behavior)
- Add SIGNAL HANDLING documentation to PAGI::Server POD
- Add SECURITY.md and CONTRIBUTING.md to repository
- Document async completion contract and detect missing responses
- Cookbook improvements: JWT validation, Redis sessions, redirect behavior,
WebSocket heartbeat example, IO::File::WithPath for filehandles
0.001010 - 2025-12-26
- BREAKING: Removed sendfile() from PAGI::Server - use PAGI::Middleware::XSendfile
with nginx/Apache X-Sendfile/X-Accel-Redirect instead for large file serving
- Added handle_ranges option to PAGI::App::File for byte-range request support
- Added FreeBSD CI testing
- Documentation fixes for phantom module references
0.001009 - 2025-12-26
- BREAKING: PAGI::Response constructor now takes ($scope, $send) instead of ($send, $scope)
for consistency with Request, SSE, and WebSocket APIs
- Added request_timeout for stalled requests, ws_idle_timeout and sse_idle_timeout
for idle connection cleanup (all disabled by default for performance)
- Test::Client: multi-value headers/query/form support, fixed arrayref headers with form/json
- Scope-based caching for Request, Response, SSE, WebSocket objects
- Replace retain() with adopt_future() for proper async error handling
- Added on_error callback to heartbeat and rate limit middleware
- Restructured Tutorial, added Cookbook for advanced patterns
0.001008 - 2025-12-25
- Fixed 32-bit Perl compatibility in WebSocket test (pack 'Q' → 'NN')
- Fixed sendfile on non-blocking sockets for FreeBSD/BSD systems
- Added sendfile documentation and production recommendations
- Improved test reliability: skip lsof/timing-dependent tests by default
- Normalized test environment variables to use RELEASE_TESTING
0.001007 - 2025-12-24
- More broken dist metadata fixes (part 2)
0.001006 - 2025-12-24
- More broken dist metadata fixes
0.001005 - 2025-12-24
- trying to get the indexer to ignore my test libs
0.001004 - 2025-12-24
- More fixes to the code that generates the POD version of the specification
in improve readability
- exclude test and example libs from the CPAN indexer.
0.001003 - 2025-12-24
- Fixes to the code that generates the POD version of the specification
to try and fix UTF8 and other formatting issues.
0.001002 - 2025-12-24
- Initial release. See README.md for a starting point
0.001001 - 2025-12-17
- Placeholder release