pypi graphifyy 0.9.101
graphify 0.9.101

one hour ago

graphify 0.9.101

Resolution-accuracy and cache-correctness release across C++, Rust, Python, Go, the build write guard, and incremental rebuilds.

C++

  • A member call x.m() binds by the receiver's type, now typed from function parameters and class fields and not only locals (void render(Base* b){ b->draw(); } resolves to Base::draw); an untyped or ambiguous receiver keeps its in-file binding (#3215, #4946).
  • An out-of-line or split-header definition attaches to the unique owner whose class file is in its include set, instead of cross-binding to an unrelated same-named function; ambiguous owners fail closed (#4916, #4920).
  • A local callable value (a lambda or std::function) is kept out of global call resolution by byte-range binding lifetimes, so it no longer mints a spurious INFERRED call to a same-named global; a later legitimate global call survives (#4917, #4921).
  • A type-alias reference (using Foo = Bar; then Foo x;) binds by exact spelling and a salted alias keeps its own contains edge (#4951).

Rust

  • A module-qualified call (crate::b::helper(), super::m::f()) resolves through qualifier-verified cross-file resolution, staying inside the caller's crate (#2135, #4944).
  • A call written inside an expression macro's arguments (println!("{}", f()), vec![g()]) is linked, gated to an allowlist so macro_rules! bodies and custom DSLs are left alone (#4945).

Python / Go

  • A bare call inside a method no longer self-binds to a same-named method; it resolves to the imported or module-level function it names (#4933).
  • Imports resolve across PEP 420 namespace packages split over multiple src/ roots (#4929).
  • A Go method value reached through a receiver field is linked as an indirect_call (#1566, #4931).
  • A Go package-level var initialiser references the types it names (#2360, #4932).

Build / cache / rebuild / watch

  • The write guard no longer refuses a healthy graph when entity dedup folds a saved node into a surviving twin; a genuine loss is still refused (#4940, #4952).
  • Independently sourced semantic file evidence survives a fold into an AST file-self node; ordinary INFERRED mention ghosts still fold so graphs do not accumulate duplicates (#4896, #4927).
  • The file-stem alias index only rebinds an edge when the edge's file and the alias target share a language family (#4949).
  • Cache keys keep their written case so README.md and readme.md no longer collide, and hashed/word-count files are opened through os_long_path (#4925, #4937).
  • A --code-only graph stays code-only across hook, update and watch rebuilds (#4923, #4939).
  • A rebuild no longer waits forever when msvcrt.locking is unsupported (#4924, #4926).
  • A full reconcile evicts source records for an excluded linked git worktree (#4919).
  • AST-only updates preserve cross-file semantic evidence whose node id collides with a code definition (#4950).
  • A sliced file is cached only once every slice has succeeded and is assembled in chunk order (#4943, #4947).

The AST cache schema is bumped to 36; warm caches re-run the affected extractions.

Thanks to @nothariharan, @Deepjyoti-Sarmah, @azizur100389, @andrebrait, @ayushcodes10, @madhusudanpatnaik, @Ethan-Ethan-Ethan and @AndresDiagoM.

Don't miss a new graphifyy release

NewReleases is sending notifications on new releases.