Purpose
-------
OI-521 regression coverage — ``oct.deps.oct_deps.build_dependency_graph``
must key modules by their dotted import path (``pkg.sub.module``) rather
than the bare file stem (``module``). The old behaviour silently dropped
every occurrence of a repeated stem on top of a single graph entry,
hiding both modules and their dependencies.
Responsibilities
----------------
- Verify ``module_name_for`` returns the dotted import path.
- Verify ``__init__.py`` resolves to its parent package's dotted name.
- Verify two files with the same stem in different packages produce
distinct graph keys.
Diagnostics
-----------
Domain: DEPS-TESTS
Levels:
L2 — test lifecycle
L3 — assertion details
L4 — deep tracing
Contracts
---------
- ``module_name_for(py_file, root)`` returns the dotted path.
- ``__init__.py`` resolves to its parent package's dotted name.
- Two files with the same stem in different packages both appear in the
graph with distinct dotted keys (no collision).