Following up on #4795, dune is still lacking convenient way to manage vendored foreign source trees that might include underscores.
I'm currently vendoring a bunch of Rust crates into my OCaml project and use the following stanza to depend on it in the rule, invoking cargo: (source_tree ../vendor). After adding new dependencies, cargo started to complain about missing files, after quick research (good thing I know dune has some oddities regarding underscores!) I found the issue linked above and applied a fix in my dune file:
(vendored_dirs vendor)
(subdir vendor/futures-core/src/task/ (dirs :standard __internal))
This behavior with underscores is certainly confusing, and lack of decent workaround is disappointing.