No idea about `1`. Maybe `--force` flag will affect this? For `2`, your path is `app/version.txt` which suggests that it reads relative to your module. That makes sense to me. It's how `import` works.
For `3`, Nim can distinguish. Nim cannot perform FFI at compile-time though, and `readFile` requires it. We could implement `readFile` for the Nim compile-time VM, and I would prefer to do this to be honest. Having a different API for compile-time vs. run-time is an additional burden on the programmer.
