------------------------------------------------------------------------------
Uriel changelog
https://uriel.foo/
------------------------------------------------------------------------------

VERSION 1.5.0 (Jun 15 22:30 2026)
------------------------------------------------------------------------------
- Fix node URL bug where "index" name suffix would be elided from URL
- Add Require-Tags header
- Add Sitemap-Index root node header to optionally build multiple sitemaps
- Add Sitemap-Max-Files root node header
- Add {{oldest:%B %d, %Y}} substitution parameter
- Add {{latest:%B %d, %Y}} substitution parameter
- Add case canonicalization to Node header methods
- Change sort order in sitemap contents to order by URL
- Change warnings to errors when sitemap capacity is exceeded

VERSION 1.4.1 (Jun 11 18:41 2026)
------------------------------------------------------------------------------
- Fix regression for 'Template: null' + {{include:*}} combination on node
- Explicitly prevent {{include:null}} to preserve null template semantics

VERSION 1.4.0 (Jun 11 12:14 2026)
------------------------------------------------------------------------------
- Add comprehensive Uriel documentation, in the form of a Uriel project
- Change all website URL references to https://uriel.foo/
- Change tag validation to be more permissive
- Correct {{node:name}} example in man page
- Add additional header +/- inheritance examples in man page
- Add various man page improvements
- Add optional RSS-Max-Entries header
- Add optional Sitemap-Max-Entries header
- Add {{breadcrumbs-root:*}} substitution parameter
- Add optional include_root parameter to Page create_breadcrumbs() method
- Add version and documentation references to program usage information
- Add log message with how many pages were created when building a project
- Add Uriel website link to templates/default.html when creating projects
- Add <meta charset="UTF-8"> to templates/default.html when creating projects
- Add gzip compression option when writing sitemap (auto-detect .gz extension)
- Add GzipFileWriter class
- Improve error messages when nodes have invalid Created or Modified headers
- Remove unused "subprocess" module import from uriel

VERSION 1.3.13 (Mar 28 17:00 2026)
------------------------------------------------------------------------------
- Change 'make install' target in Makefile for greater OS compatibility

VERSION 1.3.12 (Feb 2 23:06 2026)
------------------------------------------------------------------------------
- Modify write_rss() to improve path handling when called from handler code

VERSION 1.3.11 (Jan 8 23:16 2026)
------------------------------------------------------------------------------
- Remove typing.Self reference for better Python compatibility
- Change datetime.UTC to datetime.timezone.utc for better Python compatibility
- Uriel is compatible with Python 3.9 and later (instead of 3.11 and later)

VERSION 1.3.10 (Jan 7 23:15 2026)
------------------------------------------------------------------------------
- Add type hints to all functions and methods in uriel
- Update Makefile with 'make mypy' target to run type checking
- Update Makefile with 'make check' target to run unit tests and type checking
- Add ImpossibleError to act as an assertion and hint to the type checker
- Add print_impossible_error() function
- Add ImpossibleError handler in handle_project(), just in case

VERSION 1.3.9 (Nov 22 17:38 2025)
------------------------------------------------------------------------------
- Improve error messages related to file not found and permissions errors

VERSION 1.3.8 (Nov 21 21:12 2025)
------------------------------------------------------------------------------
- Add improved error message if node subdirectory exists without index file

VERSION 1.3.7 (Nov 21 17:04 2025)
------------------------------------------------------------------------------
- Add log_filtered_traceback() function
- Refactor filtered tracebacks for soju and handlers to use common function

VERSION 1.3.6 (Nov 20 22:07 2025)
------------------------------------------------------------------------------
- Improve error messages around user-defined handler function errors
- Add date(1), strftime(3) references to man page

VERSION 1.3.5 (Nov 19 23:20 2025)
------------------------------------------------------------------------------
- Update uriel man page with various improvements

VERSION 1.3.4 (Nov 19 19:46 2025)
------------------------------------------------------------------------------
- Add uriel man page

VERSION 1.3.3 (Nov 18 19:27 2025)
------------------------------------------------------------------------------
- Allow setting RSS-Add-Node-Title-Header on any node
- Fix test/node.py test_get_datetime_from_date_str_without_timezone for DST

VERSION 1.3.2 (Sep 27 16:56 2025)
------------------------------------------------------------------------------
- Fix unit tests by adding explicit 'import importlib.util' to tests/util.py

VERSION 1.3.1 (Sep 6 17:26 2025)
------------------------------------------------------------------------------
- Remove duplicate get_node_type() method in Node abstract parent class

VERSION 1.3.0 (Aug 30 20:25 2025)
------------------------------------------------------------------------------
- Add unit tests in testsuite.py
- Move get_datetime_from_date_str() method from FileNode into Node
- Move most of main() function into handle_project()
- Make printable_path() handle corner case with /
- Make TemplateStack pop() method return value
- Improve input validation in copy_file_if_different()
- Improve symlink handling in copy_files_recursive()
- Improve symlink handling in copy_files_recursive_overwrite()
- Remove unused require_unique_url() function
- Add root node to node_path_cache
- Define Node rendered_body field in constructor
- Optimize the Page tokenize() method to skip empty string literal tokens
- Fix "Format: text" rendering bug in Page merge_token_node_body()
- Fix Canonical-URL link generation in create_child_node_list_html()
- Improve node table message formatting when building projects
- Improve comment formatting in default created lib/soju.py file

VERSION 1.2.4 (Jun 24 19:15 2025)
------------------------------------------------------------------------------
- Assorted minor performance optimizations

VERSION 1.2.3 (Jun 23 19:08 2025)
------------------------------------------------------------------------------
- Optimize performance when dealing with large numbers of tags and nodes

VERSION 1.2.2 (Jun 22 23:14 2025)
------------------------------------------------------------------------------
- Make sure non-blank rendered HTML pages always end with a newline character
- Strip trailing newlines from content in RSS item description fields
- Improved numerous error messages
- Improved corner cases in file copying code, especially involving symlinks

VERSION 1.2.1 (Jun 21 01:08 2025)
------------------------------------------------------------------------------
- Improve soju traceback error message when functions do not exist

VERSION 1.2.0 (Jun 21 11:51 2025)
------------------------------------------------------------------------------
- Removed rsync dependency, uriel now has no dependencies other than Python

VERSION 1.1.2 (Jun 21 19:35 2025)
------------------------------------------------------------------------------
- Improved error messages for errors originating in user-defined soju code
- Handle KeyboardInterrupt exceptions cleanly

VERSION 1.1.1 (Jun 20 21:09 2025)
------------------------------------------------------------------------------
- Fix minor bug where more than one parameter error could be printed
- Change parameter error formatting to use nicer indenting rules
- Indicate in parameter error when the node body is the source of the error
- Add the node name to all "node not found" error messages

VERSION 1.1.0 (Jun 20 00:08 2025)
------------------------------------------------------------------------------
- Make as many project files and directories optional as reasonably possible
- lib/soju.py is now optional
- lib/handlers.py is now optional
- The lib directory is now optional
- The static directory is now optional
- The Makefile is now optional, and will not be regenerated if deleted
- Add 'preview' target to initial generated Makefile
- Print nicer looking filesystem paths in log messages

VERSION 1.0.6 (Jun 19 16:52 2025)
------------------------------------------------------------------------------
- Make Canonical-URL header optional in more situations
- Improve error log messages when generating RSS feed

VERSION 1.0.5 (Jan 18 18:55 2025)
------------------------------------------------------------------------------
- Add a series of internal performance improvements

VERSION 1.0.4 (Jan 17 17:07 2025)
------------------------------------------------------------------------------
- Add Escape-Title header to cache invalidation in Node class

VERSION 1.0.3 (Jan 16 18:28 2025)
------------------------------------------------------------------------------
- Add performance optimizations to Node class

VERSION 1.0.2 (Nov 20 17:07 2024)
------------------------------------------------------------------------------
- Fix SyntaxWarning in tag validation regex on Python 3.12
- Fix DeprecationWarning for UTC date handling on Python 3.12

VERSION 1.0.1 (Apr 02 22:01 2024)
------------------------------------------------------------------------------
- Fix typo in README file

VERSION 1.0.0 (Nov 05 18:27 2022)
------------------------------------------------------------------------------
- Initial release
