Right now, when computing a WORM key from a relative path or a URL key from a URL, if the original string is longer than a SHA256 checksum, its tail is replaced with its md5. Unfortunately, this eats up the file extension(s) at the end, causing the issues that *E backends solve. It would be better to keep the tail of the path and replace the start or the middle with the md5, preserving extensions (as configured in annex.maxextensionlength) the same way *E backends do. Maybe also, add a config option for the length beyond which the replacement-with-checksum happens?
I think it would be safe to make this change for WORM keys, which certianly don't need to generate the same key for 2 files with the same name.
Less sure about URL keys, if two git-annex addurls versions pick different keys for the same url, then there would be a merge conflict, where currently there is not. I think I've addurled the same url in different clones of a repo before, probably. Although addurl with and without --fast or --relaxed also causes that problem and maybe it's not worth worrying about it.