# Revision history for WebDyne

## 3.011 - 2026-08-07

- Extended `wdrender --quiet`/`--silent` to suppress advisory warnings about
  missing optional `HTML::Tidy5` or syntax-highlighting modules while
  leaving rendering behaviour unchanged.
- Updated `wdrender` regression coverage so `--header` output remains clean
  on machines without `libtidy-devel` and `HTML::Tidy5` installed.
- Made `wdrender` head-insert tests tolerant of harmless HTML/CSS
  whitespace differences while still checking that the default head insert
  is present or absent as requested.

## 3.010 - 2026-08-07

- Fixed duplicate response header emission when WebDyne handlers set
  headers through the request object, avoiding malformed HTTP response
  headers in PSGI and other runtimes.
- Fixed `wdrender --header` output so response headers are included
  consistently regardless of colour, line-number, pretty-print, or tidy
  settings.
- Added `wdrender` regression coverage for duplicate `Content-Type` headers
  and for `--header` behaviour with colour/tidy output enabled and
  disabled.
- Added explicit `filename` override support for `WebDyne::PSGI` and
  `WebDyne::PAGI` helper applications, allowing tools such as `wdrender` to
  render a fixed source file while still exercising PSGI or PAGI request
  handling.
- Documented that the `WebDyne::PSGI` and `WebDyne::PAGI` `filename`
  option is an application-level source-file override and always wins over
  normal request-path filename derivation.
- Propagated `wdrender --no-head-insert`/`--head-insert` handling through
  PSGI, PAGI, and temporary Apache/mod_perl render paths.
- Simplified `wdrender` test-file routing for PSGI and PAGI helper modes
  by passing an explicit `filename` override instead of depending on request
  path rewriting.

## 3.009 - 2026-08-06

- Added `style_prepend`/`style_append` and
  `script_prepend`/`script_append` pseudo attributes for `<start_html>`,
  allowing pages to add resources around configured
  `WEBDYNE_START_HTML_PARAM` defaults without replacing them.
- Clarified `<start_html>` default-attribute override behaviour: page
  attributes replace matching `WEBDYNE_START_HTML_PARAM` values, while the
  new prepend/append variants preserve and extend configured style/script
  resources.
- Documented `<start_html>` resource ordering for linked styles versus
  `include_style` content, and external scripts versus `include_script`
  content.
- Made PSGI and PAGI wrapper configuration loading consistent by loading
  `DOCUMENT_ROOT/.webdyne.conf.pl` when the app is built, including when
  `webdyne.psgi` or `webdyne.pagi` is loaded by an external server.
- Clarified root `.webdyne.conf.pl` loading versus per-request directory
  `.webdyne.conf.pl` handling, where only `WEBDYNE_DIR_CONFIG` is read from
  PSP-directory config files.
- Added regression coverage for `<start_html>` style/script extension
  attributes and PSGI/PAGI external-loader root configuration loading.

## 3.008 - 2026-08-04

- Added REST-style `<api>` route discovery and `PATH_INFO` mapping to
  `WebDyne::PAGI`, bringing PAGI API support in line with PSGI.
- Added per-application API filename caches for PSGI and PAGI. API
  filename or route-structure changes may require a server restart.
- Ensured PAGI emits a valid empty HTTP response when an API document
  produces no body, avoiding PAGI lint errors.
- Clarified that Apache mod_perl does not provide automatic extensionless
  API route discovery without additional Apache rewrite or routing rules.
- Added integration coverage for PSGI and PAGI API routing, caching,
  normal PSP requests, and 404 handling.
- Fixed labelled `<textfield>` rendering so label-wrapped text inputs
  retain the correct HTML input type.
- Added `default`/`defaults` handling for grouped form controls and popup
  menus, aligning generated form state with the documented attributes.
- Added labelled textfield render fixtures and included them in the
  distribution manifest.
- Updated the XML and generated Markdown documentation for the latest API,
  form-control, and demo example behaviour.

## 3.005 - 2026-08-02

Major Version 3 release.

- Added PAGI runtime support through `WebDyne::PAGI` and the
  `webdyne.pagi` wrapper, including HTTP, server-sent event, WebSocket,
  and lifespan request handling.
- Added a common request abstraction for standalone, Apache/mod_perl,
  PSGI, and PAGI execution environments.
- Refactored PSGI support into `WebDyne::PSGI` and expanded runtime
  handling for document roots, default documents, directory indexes,
  static files, and API routes.
- Added `webdyne.apache` for temporary local Apache/mod_perl execution
  without requiring a permanent system Apache configuration.
- Expanded `wdapacheinit` to support broader Apache installations,
  APXS discovery, installation and uninstall workflows, dry-run
  operation, and platform-specific configuration layouts.
- Expanded `wdrender` to exercise multiple request backends, including
  fake, PSGI, PAGI, and mod_perl, with support for request methods,
  headers, parameters, response inspection, and comparison testing.
- Added test-file modes to command-line compilation and rendering
  utilities.
- Added a bundled default stylesheet for generated WebDyne pages and
  improved the appearance of default directory index output.
- Added Docker runtime selection between PSGI and PAGI, with
  environment-variable tuning for server workers, timeouts, backlog,
  connection limits, and request body sizes.
- Improved request and static-file safety, including path traversal,
  upload, multipart, error handling, and binary response coverage.
- Reworked the documentation into a DocBook/MkDocs build with generated
  utility and module reference pages.
- Added extensive examples and expanded automated test coverage for
  runtime backends, wrappers, static handling, APIs, SSE, WebSockets,
  and command-line utilities.
- Removed the old `WebDyne::CGI::PSGI` adapter in favour of the new
  request and runtime abstraction.

## 2.021 - 2025-11-07

- Added multi-line `<start_html>` attributes for scripts, styles, and
  related inclusions.
- Prevented WebDyne substitution inside executable JavaScript blocks.
- Added default viewport metadata and expanded head inclusion support,
  including array-valued includes.
- Added Alpine/Vue attribute compatibility handling.

## 2.018 - 2025-10-29

- Added the `<htmx>` tag for request-aware HTML fragment rendering.
- Made directory indexes and static files available by default through
  the PSGI wrapper.
- Improved HTML tree handling, constant importing, and error reporting.

## 2.017 - 2025-10-27

- Added the `<api>` tag for lightweight JSON API responses using
  `Router::Simple` path matching.

## 2.015 - 2025-10-22

- Added the `wdlint` utility for checking Perl syntax in `__PERL__`
  sections of PSP files.
- Added the default PSGI directory index page and `--index` support.

## 2.014 - 2025-10-18

- Replaced the CGI.pm-based HTML generation path with `CGI::Simple` and
  `WebDyne::HTML::Tiny`.
- Refactored compilation and evaluation handling around the new HTML
  generation backend.
- Added the JSON tag, alternate div-based WebDyne syntax,
  `application/perl` script blocks, and expanded HTML5 tag handling.
- Added PSGI/Plack support to the main WebDyne distribution, including
  command-line document-root and default-document selection.
- Added exported `WebDyne::html()` and `WebDyne::html_sr()` functions for
  standalone PSP rendering.
- Added `WebDyne::Template` to the core distribution and added PSGI
  static-file serving through `--static`.
- Added `WEBDYNE_HEAD_INSERT` for injecting common content into generated
  document heads.
- Added Docker build files and container-oriented development support,
  including automatic dependency installation from a mounted `cpanfile`.
