Really shouldn't have made this mistake...
After moving things around to resolve circular dependency issue, I accidentally started using the tHexEncodedRolePermission check in threadPermissionsFromBitmaskHex instead of the tHexEncodedPermissionsBitmask check...
This required that we have >=3 hex characters, when there's no such minimum for thread permissions.
Caught this during native testing thanks to thread where permissions for some user were "3", which should have been valid.
I read through minimally-encoded-thread-permissions again very carefully to see if there were any other mistakes I could find. I think part of the reason for the error may have been the similar-ish naming of all the utilities/etc. I'll see if I can update those to be more clear.
Also went ahead and included unit test that would've caught the issue earlier.
Depends on D10295