flaukowski
d4531f3d25
fix(python): resolve submodule imports inside PEP 420 namespace packages
...
`from . import brain, ledger` in a directory with no __init__.py — a
namespace package, which `python -m pkg.mod` runs without complaint —
emitted nothing: _resolve_python_module_path returns None when there is
no module file to probe, and the #1146 submodule branch sits behind that
None. So every `brain.think()` / `ledger.write()` call in such a repo was
invisible to the #1883 module arm, and the most-called functions carried
in-degree 0 in the graph.
_resolve_python_namespace_dir mirrors the module-path walk (relative
base, scan root, then sys.path-root ancestors per #2072 ) and returns only
a directory that exists inside the root and has no __init__.py. The fact
collector uses it when the module path resolves to no file; the existing
submodule probe then emits the same imports_from edges a regular package
gets. A name that is not a module file on disk still emits nothing, and
a namespace package binds no symbols of its own.
Measured on a 275-node Python repo laid out this way, same graphify
version with and without the change: calls 201 -> 307, nodes unchanged;
think() 0 -> 15 callers, remember() 0 -> 10, ledger write() 0 -> 20.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KTNEBgonu6ASph6w8R2Wcp
(cherry picked from commit e2ec796bfd )
2026-09-09 17:20:55 +01:00
..
2026-08-30 15:14:33 +01:00
2026-08-12 20:56:28 +01:00
2026-08-15 17:16:53 +01:00
2026-07-30 17:13:48 +01:00
2026-08-13 14:17:41 +01:00
2026-08-12 20:57:39 +01:00
2026-07-26 11:52:20 +01:00
2026-09-05 01:18:59 +01:00
2026-09-05 01:18:59 +01:00
2026-09-06 16:17:36 +01:00
2026-07-27 10:46:47 +01:00
2026-08-12 14:20:21 +01:00
2026-08-25 18:06:46 +01:00
2026-08-06 17:29:18 +01:00
2026-09-09 11:30:29 +01:00
2026-08-21 19:21:20 +01:00
2026-08-06 17:29:18 +01:00
2026-08-28 01:20:10 +01:00
2026-09-05 21:55:34 +01:00
2026-07-18 19:07:16 +01:00
2026-09-05 01:18:59 +01:00
2026-08-29 19:32:51 +01:00
2026-08-28 01:19:45 +01:00
2026-07-18 19:07:16 +01:00
2026-08-05 22:08:29 +01:00
2026-08-18 16:02:02 +01:00
2026-08-20 15:42:36 +01:00
2026-08-12 20:56:28 +01:00
2026-07-18 12:04:23 +01:00
2026-09-02 14:58:01 +01:00
2026-08-24 14:12:53 +01:00
2026-09-05 01:18:59 +01:00
2026-08-25 15:45:06 +01:00
2026-08-21 16:50:25 +01:00
2026-09-09 11:30:27 +01:00
2026-08-24 13:22:09 +01:00
2026-08-18 18:07:12 +01:00
2026-08-24 14:08:25 +01:00
2026-08-24 13:17:23 +01:00
2026-08-05 01:41:12 +01:00
2026-09-07 20:21:35 +01:00
2026-08-17 15:35:53 +01:00
2026-09-09 11:30:29 +01:00
2026-09-05 21:55:33 +01:00
2026-09-02 03:05:59 +01:00
2026-08-25 15:52:10 +01:00
2026-08-29 18:38:33 +01:00
2026-09-05 01:18:59 +01:00
2026-07-30 17:13:48 +01:00
2026-08-20 16:09:00 +01:00
2026-08-14 14:26:12 +01:00
2026-08-18 22:27:27 +01:00
2026-08-21 19:21:20 +01:00
2026-08-28 01:20:57 +01:00
2026-09-09 17:20:55 +01:00
2026-08-27 20:20:16 +01:00
2026-07-20 16:35:14 +01:00
2026-09-05 21:55:33 +01:00
2026-08-25 18:09:25 +01:00
2026-07-30 17:13:48 +01:00
2026-08-16 18:35:46 +01:00
2026-07-20 15:35:40 +01:00
2026-09-02 14:49:03 +01:00
2026-08-28 01:20:27 +01:00
2026-07-27 10:46:47 +01:00
2026-09-06 16:17:37 +01:00
2026-08-30 15:11:40 +01:00
2026-08-30 15:11:40 +01:00
2026-08-19 14:05:58 +01:00
2026-07-18 19:07:16 +01:00
2026-09-07 18:42:57 +01:00
2026-08-05 22:08:29 +01:00
2026-08-05 22:08:29 +01:00
2026-08-16 18:28:53 +01:00
2026-08-17 19:00:46 +01:00
2026-08-17 15:40:19 +01:00
2026-08-18 22:20:19 +01:00
2026-07-20 11:29:22 +01:00
2026-09-05 21:55:33 +01:00
2026-07-25 22:53:43 +01:00
2026-08-13 14:21:22 +01:00
2026-07-27 10:46:47 +01:00
2026-08-11 15:18:33 +01:00
2026-08-11 16:54:35 +01:00
2026-08-15 16:43:11 +01:00
2026-08-13 13:30:24 +01:00
2026-08-15 20:11:13 +01:00
2026-07-28 09:37:39 +01:00
2026-08-05 01:41:12 +01:00
2026-08-18 16:02:02 +01:00
2026-09-05 01:18:59 +01:00
2026-08-29 16:14:47 +01:00
2026-08-30 15:11:24 +01:00
2026-08-13 14:17:42 +01:00
2026-08-16 18:34:11 +01:00
2026-08-30 15:11:40 +01:00
2026-08-29 18:36:56 +01:00
2026-09-09 17:20:54 +01:00
2026-08-29 16:14:47 +01:00
2026-08-06 17:29:18 +01:00
2026-08-09 23:19:08 +01:00
2026-08-10 18:07:20 +01:00
2026-08-14 14:49:56 +01:00
2026-07-30 17:13:48 +01:00
2026-08-12 14:20:21 +01:00
2026-09-09 11:30:28 +01:00
2026-08-21 16:49:55 +01:00
2026-08-11 15:18:12 +01:00
2026-08-01 12:21:04 +01:00
2026-09-07 19:03:11 +01:00
2026-09-02 04:00:08 +01:00
2026-08-20 15:45:18 +01:00
2026-08-20 15:44:56 +01:00
2026-08-11 16:54:35 +01:00
2026-09-05 01:19:09 +01:00
2026-08-25 18:09:58 +01:00
2026-09-06 16:31:40 +01:00
2026-08-20 16:13:45 +01:00
2026-07-29 17:25:08 +01:00
2026-08-13 14:20:36 +01:00
2026-08-01 11:36:30 +01:00
2026-08-10 18:06:50 +01:00
2026-08-29 16:14:29 +01:00
2026-08-10 18:06:50 +01:00
2026-08-10 18:06:50 +01:00
2026-08-19 14:05:58 +01:00
2026-08-21 19:22:21 +01:00
2026-08-14 21:09:32 +01:00
2026-08-21 16:57:29 +01:00
2026-09-05 21:13:54 +01:00
2026-09-07 19:02:18 +01:00
2026-08-08 23:37:49 +01:00
2026-08-19 14:05:58 +01:00
2026-08-05 22:08:29 +01:00
2026-08-11 14:40:01 +01:00
2026-08-21 16:57:29 +01:00
2026-08-21 16:50:44 +01:00
2026-08-25 15:44:52 +01:00
2026-08-29 16:15:58 +01:00
2026-08-12 14:20:21 +01:00
2026-09-05 21:55:35 +01:00
2026-08-17 15:33:34 +01:00
2026-07-25 22:53:43 +01:00
2026-08-13 13:30:24 +01:00
2026-09-05 21:55:32 +01:00
2026-07-21 21:45:53 +01:00
2026-08-01 11:36:30 +01:00
2026-09-07 18:42:56 +01:00
2026-08-18 22:36:42 +01:00
2026-09-05 21:13:53 +01:00
2026-08-17 15:25:39 +01:00
2026-08-30 15:11:24 +01:00
2026-08-13 13:30:24 +01:00
2026-08-25 18:12:02 +01:00
2026-07-28 09:37:39 +01:00
2026-07-18 19:07:16 +01:00
2026-07-18 19:09:53 +01:00
2026-08-29 18:38:05 +01:00
2026-09-05 01:18:59 +01:00
2026-07-25 22:53:43 +01:00
2026-08-25 18:07:40 +01:00
2026-07-21 14:22:50 +01:00
2026-07-27 10:46:47 +01:00
2026-08-28 01:18:04 +01:00
2026-08-11 14:40:01 +01:00
2026-07-25 15:44:50 +01:00
2026-07-27 10:22:48 +01:00
2026-08-09 23:19:08 +01:00
2026-08-18 16:02:02 +01:00
2026-08-07 22:49:25 +01:00
2026-09-07 20:30:19 +01:00
2026-08-30 15:48:40 +01:00
2026-08-27 20:57:16 +01:00
2026-08-11 15:18:12 +01:00
2026-08-08 23:37:32 +01:00
2026-08-29 16:16:09 +01:00
2026-08-25 15:45:33 +01:00
2026-07-27 10:46:47 +01:00
2026-09-06 16:17:38 +01:00
2026-08-30 15:12:10 +01:00
2026-07-26 11:52:20 +01:00
2026-08-01 11:36:30 +01:00
2026-09-05 21:55:35 +01:00
2026-08-14 14:21:34 +01:00
2026-08-30 15:11:23 +01:00
2026-08-14 14:20:04 +01:00
2026-08-11 14:40:01 +01:00