Thanks Norm. You were right about the underlying problem: Studio was still treating source names as globally unique in a few places, so two module-contained classes with the same short name could collide, and the package/VCS format was also too dependent on the visible source name.
This is now fixed following a pretty major refactor for the next release: https://feedback.objo.dev/feature/449
Source files now have stable IDs, and the compiler/Studio pipeline uses namespace/module-aware source keys, so A.Thing and B.Thing can coexist even though both files are named Thing. The project package format has also been bumped so sources are saved by ID rather than by short name, which avoids overwriting in the exported/VCS representation.
I also fixed the related Studio tooling paths: search results, diagnostics navigation, Go to Definition, debugger source lookup, and run-to-cursor now resolve the fully-qualified source key so Studio opens the correct Thing.
That was a lot of work!