The introduction points are not chosen by calculating the descriptor-id and finding the 3 HSDirs next to it (by sorted fingerprint).
tldr: HSDir != IntroPoint.
Introduction points are chosen by random by an onion service and unknown in advance. What is known in advance is only the onion address. Descriptor ID determines which HSDirs are responsible for storing corresponding descriptor. List of the current IntroPoints are embedded into descriptor (that's the reason we have descriptor thing in the first place).
Thanks for confirming!
(running an adhoc tor client in at 'info' log level was useful since it outputs descriptor-id and actual hsdir it is contacting)