Summary
_PYTHON_DECORATOR_NOISE (extractors/engine.py:74) excludes common stdlib decorators (property, dataclass, staticmethod, etc.) from decorator-reference-edge generation, with this rationale in the comment above it:
Builtin/stdlib decorators (@Property, @DataClass, @functools.wraps, …) are ambient vocabulary, not corpus symbols: emitting decorator edges for them fabricates sourceless stub nodes on nearly every class-heavy file, and the unique-function rewire can collapse them onto an unrelated local definition (a corpus defining its own def wraps(...) gets a false decorator edge).
pytest.fixture is not in that noise list, and it hits exactly the failure mode the comment describes — just from a third-party decorator instead of a stdlib one.
Repro
Corpus: a Python test suite using @pytest.fixture extensively across ~250 test files, one of which happens to define a local, non-decorator function literally named fixture() (workspace/tests/test_eodhd_readiness_check.py:22, unrelated to pytest — just a locally-named helper).
Result: that one fixture() node ends up with 44 edges (the #1 "God Node" in the report) — 42 of them relation: references, context: decorator, confidence: EXTRACTED — pointing to ~30 completely unrelated local pytest fixtures in other files (env(), db(), ob(), cb(), repo(), archive(), qt(), ns(), mod(), gs(), shape(), close(), keepalive(), caldb(), etc.). None of these functions call, import, or otherwise relate to each other — they're independent per-file pytest fixtures. The "unique-function rewire" for the @pytest.fixture decorator name is binding to that one same-named local function instead of correctly recognizing pytest.fixture as an external symbol.
Net effect: a completely spurious "god node" / architectural hub shows up in GRAPH_REPORT.md's God Nodes and (via BFS from it) Suggested Questions sections, pointing the user at a non-existent coupling.
Suggested fix
Add common third-party test-framework decorators to _PYTHON_DECORATOR_NOISE (or, more robustly, only emit a decorator reference edge when the decorator name resolves to a definition actually imported in that file — i.e. respect import scope instead of doing a same-bare-name global lookup). At minimum: fixture, mark, parametrize, pytest.fixture (pytest), plus maybe click.command, app.route / app.get / app.post (Flask/FastAPI) as other common third-party decorators likely to collide with locally-defined function names in real corpora.
Environment
- graphifyy 0.9.41
- Corpus: ~700-file mixed Python/docs personal project, code-only AST pass (no LLM involved in this specific extraction —
confidence: EXTRACTED, purely deterministic)
Summary
_PYTHON_DECORATOR_NOISE(extractors/engine.py:74) excludes common stdlib decorators (property,dataclass,staticmethod, etc.) from decorator-reference-edge generation, with this rationale in the comment above it:pytest.fixtureis not in that noise list, and it hits exactly the failure mode the comment describes — just from a third-party decorator instead of a stdlib one.Repro
Corpus: a Python test suite using
@pytest.fixtureextensively across ~250 test files, one of which happens to define a local, non-decorator function literally namedfixture()(workspace/tests/test_eodhd_readiness_check.py:22, unrelated to pytest — just a locally-named helper).Result: that one
fixture()node ends up with 44 edges (the #1 "God Node" in the report) — 42 of themrelation: references, context: decorator, confidence: EXTRACTED— pointing to ~30 completely unrelated local pytest fixtures in other files (env(),db(),ob(),cb(),repo(),archive(),qt(),ns(),mod(),gs(),shape(),close(),keepalive(),caldb(), etc.). None of these functions call, import, or otherwise relate to each other — they're independent per-file pytest fixtures. The "unique-function rewire" for the@pytest.fixturedecorator name is binding to that one same-named local function instead of correctly recognizingpytest.fixtureas an external symbol.Net effect: a completely spurious "god node" / architectural hub shows up in
GRAPH_REPORT.md's God Nodes and (via BFS from it) Suggested Questions sections, pointing the user at a non-existent coupling.Suggested fix
Add common third-party test-framework decorators to
_PYTHON_DECORATOR_NOISE(or, more robustly, only emit a decorator reference edge when the decorator name resolves to a definition actually imported in that file — i.e. respect import scope instead of doing a same-bare-name global lookup). At minimum:fixture,mark,parametrize,pytest.fixture(pytest), plus maybeclick.command,app.route/app.get/app.post(Flask/FastAPI) as other common third-party decorators likely to collide with locally-defined function names in real corpora.Environment
confidence: EXTRACTED, purely deterministic)