Discovered by @Magnus when porting the reasonator tool to --canonical.
The default lighttpd config contains a directive to strip the legacy tool name prefix from the URL path when looking for files on disk:
alias.url = ( "/{toolname}" => "{home}/public_html/" )
{toolname} and {home} here are template values which are replaced by the webservice script with values like 'reasonator' and '/data/project/reasonator'.
This alias directive is needed for the legacy URL scheme, and mostly harmless for the new canonical URL scheme except when the tool serves a file that starts with the tool's exact name.
In the case of reasonator, the URL https://reasonator.toolforge.org/reasonator_types.js ends up being translated into the file path '/data/project/reasonator/public_html/_types.js' rather than the expected '/data/project/reasonator/public_html/reasonator_types.js' when this directive is included in the lighttpd config.