------------------------------------------------------------------------------
Uriel changelog
https://nathanrosenquist.com/uriel/
------------------------------------------------------------------------------

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
