Skip to content

Remove faulty GitHub Actions Workflow for Python, fix: resolve explain-ambiguity, fix(ruby): resolve compact syntax mixin targets and prevent phantom concern hubs. - #1394

Closed
FolatheDuckofDuckingburg wants to merge 33 commits into
Graphify-Labs:v8from
FolatheDuckofDuckingburg:v8

Conversation

@FolatheDuckofDuckingburg

@FolatheDuckofDuckingburg FolatheDuckofDuckingburg commented Jun 19, 2026

Copy link
Copy Markdown

Resolves issue #2302 where Ruby include targets declared with compact syntax (module Foo::Bar) never resolve, and extend ActiveSupport::Concern collides with any local module named Concern. Normalizes compact and nested class/module declarations during AST extraction, and resolves mixin references via lexical lookup.

google-labs-jules Bot and others added 10 commits July 27, 2026 15:03
1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy resolution if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy resolution if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy matching if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.
6. Remove faulty non-standard .github/workflows/python-app.yml file to prevent broken CI check suites.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy matching if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy matching if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy matching if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.
6. Delete faulty python-app.yml workflow file to prevent CI check failures.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…ake8 checks

1. Resolve explain-ambiguity handling in the `graphify explain` command. When multiple matches tie for the top score, the command lists those ambiguous nodes and exits with code 2.
2. Allow deterministic bypass of fuzzy matching if an exact node ID is passed.
3. Fix test_semantic_prune_removes_orphan_entries in tests/test_cache.py by varying the file content/length between consecutive writes to bypass the stat fastpath.
4. Add regression test for explain-ambiguity tied top-scores.
5. Remove unused global variable declaration in graphify/cache.py to pass flake8 static analysis checks.
6. Remove faulty non-standard python-app.yml workflow file.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…61486418-7b0fe8a2

fix: resolve explain-ambiguity and stat resolution cache test failure
Merge 'origin/v9' into current branch using 'ours' merge strategy to resolve conflicts on graphify/cache.py, graphify/__main__.py, and uv.lock. Keeps the newer 'v8' implementation intact while preserving the clean merge history.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…584917657-3015880b

Merge branch origin/v9 into v8
google-labs-jules Bot and others added 2 commits July 28, 2026 15:33
Integrates Windsurf's `.codeium/config.json` configuration manager natively into `graphify/__main__.py`. This enables `graphify install --platform windsurf` and `graphify windsurf install|uninstall` commands. Existing custom configurations in `.codeium/config.json` are parsed and merged gracefully on install, and safely unmerged on uninstall, preventing data loss. Extensive unit tests have been added to verify these behaviors under various scenarios.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…568688589-1fd6de31

feat(install): add native windsurf configuration management

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This pull request rolls back the CHANGELOG to move the previously documented 0.9.13/0.9.12 release entries into an "Unreleased" section, and touches a wide range of extractor, analysis, export, and skill-generation code along with their corresponding tests. The changed surface spans multiple language extractors (Fortran, C#, Kotlin, Ruby/rake, Bash, etc.), graph build/reconciliation logic, HTML/Canvas/viz export, security/path validation, and skillgen fragment/expected-output files, plus a Persian translation doc update. Given the truncated diff, the changes appear to be a broad rework across extraction, serving, and rationale-generation areas rather than a single feature. A reviewer should verify the CHANGELOG restructuring is intentional and check that the symbol renames and test updates are consistent across the affected modules.

No blocking issues surfaced.

Analysis details — impact, health, verification

Impact & health

graphify review

Impact — 5735 function(s) in the blast radius of 4710 changed node(s).

Health — regressions introduced by this change:

  • worsened (Ca·Ce 240→7011): main() (Ca=57 Ce=123) — fans out to 123 callees (efferent coupling); 57 callers depend on it (afferent coupling)
  • new offender: _extract_generic() (Ca=18 Ce=14) — fans out to 14 callees (efferent coupling); 18 callers depend on it (afferent coupling)
  • new offender: to_html() (Ca=17 Ce=8) — fans out to 8 callees (efferent coupling); 17 callers depend on it (afferent coupling)
  • new offender: install() (Ca=12 Ce=11) — fans out to 11 callees (efferent coupling); 12 callers depend on it (afferent coupling)
  • new offender: _resolve_js_module_path() (Ca=29 Ce=4) — 29 callers depend on it (afferent coupling)
  • new offender: extract_objc() (Ca=26 Ce=4) — 26 callers depend on it (afferent coupling)
  • new offender: codebuddy_install() (Ca=21 Ce=4) — 21 callers depend on it (afferent coupling)
  • new offender: extract_bash() (Ca=19 Ce=4) — 19 callers depend on it (afferent coupling)
  • new offender: gemini_install() (Ca=11 Ce=6) — fans out to 6 callees (efferent coupling); 11 callers depend on it (afferent coupling)
  • new offender: extract_fortran() (Ca=14 Ce=4) — 14 callers depend on it (afferent coupling)
  • new offender: extract_json() (Ca=13 Ce=4) — 13 callers depend on it (afferent coupling)
  • new offender: _collect_js_symbol_resolution_facts() (Ca=2 Ce=25) — fans out to 25 callees (efferent coupling)
  • new offender: extract_go() (Ca=16 Ce=3) — 16 callers depend on it (afferent coupling)
  • new offender: extract_julia() (Ca=15 Ce=3) — 15 callers depend on it (afferent coupling)
  • new offender: extract_rust() (Ca=15 Ce=3) — 15 callers depend on it (afferent coupling)
  • new offender: claude_install() (Ca=15 Ce=3) — 15 callers depend on it (afferent coupling)
  • new offender: extract_dm() (Ca=14 Ce=3) — 14 callers depend on it (afferent coupling)
  • new offender: extract_pascal() (Ca=14 Ce=3) — 14 callers depend on it (afferent coupling)
  • new offender: extract_powershell() (Ca=14 Ce=3) — 14 callers depend on it (afferent coupling)
  • new offender: _project_uninstall() (Ca=3 Ce=13) — fans out to 13 callees (efferent coupling)
  • new offender: _project_install() (Ca=3 Ce=12) — fans out to 12 callees (efferent coupling)
  • new offender: extract_verilog() (Ca=9 Ce=4) — 9 callers depend on it (afferent coupling)
  • new offender: _copy_skill_file() (Ca=12 Ce=3) — 12 callers depend on it (afferent coupling)
  • new offender: _agents_install() (Ca=7 Ce=5) — 7 callers depend on it (afferent coupling)
  • new offender: extract_apex() (Ca=14 Ce=2) — 14 callers depend on it (afferent coupling)
  • new offender: codebuddy_uninstall() (Ca=14 Ce=2) — 14 callers depend on it (afferent coupling)
  • new offender: extract_dmm() (Ca=6 Ce=4) — 6 callers depend on it (afferent coupling)
  • worsened (Ca·Ce 0→21): _agents_install() (Ca=21 Ce=1) — 21 callers depend on it (afferent coupling)
  • new offender: extract_markdown() (Ca=10 Ce=2) — 10 callers depend on it (afferent coupling)
  • new offender: extract_dmf() (Ca=6 Ce=3) — 6 callers depend on it (afferent coupling)
  • new offender: _resolve_js_import_target() (Ca=6 Ce=3) — 6 callers depend on it (afferent coupling)
  • new offender: extract_delphi_form() (Ca=9 Ce=2) — 9 callers depend on it (afferent coupling)
  • new offender: extract_sln() (Ca=9 Ce=2) — 9 callers depend on it (afferent coupling)
  • new offender: claude_uninstall() (Ca=9 Ce=2) — 9 callers depend on it (afferent coupling)
  • new offender: extract_dmi() (Ca=4 Ce=4) — high coupling complexity (Ca·Ce = 16)
  • new offender: extract_dart() (Ca=8 Ce=2) — 8 callers depend on it (afferent coupling)
  • new offender: extract_lazarus_form() (Ca=8 Ce=2) — 8 callers depend on it (afferent coupling)
  • new offender: _remove_skill_file() (Ca=16 Ce=1) — 16 callers depend on it (afferent coupling)
  • new offender: _agents_uninstall() (Ca=7 Ce=2) — 7 callers depend on it (afferent coupling)
  • new offender: gemini_uninstall() (Ca=7 Ce=2) — 7 callers depend on it (afferent coupling)
  • new offender: uninstall_all() (Ca=1 Ce=13) — fans out to 13 callees (efferent coupling)
  • new offender: extract_sql() (Ca=4 Ce=3) — high coupling complexity (Ca·Ce = 12)
  • new offender: _resolve_tsconfig_alias() (Ca=4 Ce=3) — high coupling complexity (Ca·Ce = 12)
  • worsened (Ca·Ce 0→12): _install() (Ca=12 Ce=1) — 12 callers depend on it (afferent coupling)
  • new offender: _collect_python_symbol_resolution_facts() (Ca=1 Ce=10) — fans out to 10 callees (efferent coupling)
  • new offender: _extract_pascal_regex() (Ca=1 Ce=10) — fans out to 10 callees (efferent coupling)
  • new offender: _js_extra_walk() (Ca=1 Ce=6) — fans out to 6 callees (efferent coupling)
  • new offender: walk() (Ca=0 Ce=41) — fans out to 41 callees (efferent coupling)
  • new offender: walk_calls() (Ca=0 Ce=12) — fans out to 12 callees (efferent coupling)
  • new offender: walk() (Ca=0 Ce=6) — fans out to 6 callees (efferent coupling)
  • new offender: walk() (Ca=0 Ce=6) — fans out to 6 callees (efferent coupling)
  • new offender: walk() (Ca=0 Ce=6) — fans out to 6 callees (efferent coupling)

Verification — 5735 function(s) need re-proving (callee-first):
tools_skillgen_gen_write_artifacts → tools_skillgen_gen_v8_baseline_ref → tools_skillgen_gen_v8_available → tools_skillgen_gen_render_frontmatter → tools_skillgen_gen_normalise → tools_skillgen_gen_read_fragment → tools_skillgen_gen_render_core → tools_skillgen_gen_render_agents_md_hooks → tools_skillgen_gen_platform_reference_sources → tools_skillgen_gen_render …

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not enforced this run (re-run with --prove to verify the blast radius)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 5726 function(s) in blast radius — re-run with --prove to formally verify them

· 52 more finding(s) on lines outside this diff (see the check run).

@FolatheDuckofDuckingburg FolatheDuckofDuckingburg changed the title Add GitHub Actions workflow for Python with linting and tests Remove faulty GitHub Actions Workflow for Python, fix: resolve explain-ambiguity. Jul 28, 2026
google-labs-jules Bot and others added 2 commits July 29, 2026 15:13
…oncern hubs

- Maintain an active `ruby_namespace` stack during Ruby AST extraction to normalize both compact (`module A::B`) and nested (`module A; module B; end; end`) module/class definitions to the same fully qualified names (e.g. `Billing::TotalsConcern`).
- Update the Ruby cross-file resolver in `graphify/ruby_resolution.py` to parse full constant reference paths, performing scoped lexical lookup.
- Restrict fallback to last-segment matching to single-segment mixin constants only, avoiding phantom mixes_in edges from `extend ActiveSupport::Concern` to unrelated local modules named `Concern`.
- Add comprehensive TDD tests reproducing the compact syntax mixin resolution and active support concern hub isolation.

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…981953082-422f3bef

fix(ruby): resolve compact syntax mixin targets and prevent phantom concern hubs

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This pull request replaces the top of the CHANGELOG, collapsing several previously released version sections into a new "Unreleased" section (with a 0.4.21 (2026-04-17) changelog symbol referenced). It also touches a broad set of extraction, build, resolution, serve, LLM, and CLI modules across the graphify codebase, along with a correspondingly large set of test files and skillgen tooling fixtures. The changes span many areas including language extractors (JS imports, XAML/Terraform, member-call resolution for C#/Java/SystemVerilog), graph build/merge/prune/cache logic, community labeling, the serve/search path, and install/detect utilities. Reviewers should treat this as a wide surface-area change and verify each module's edits against its associated tests rather than assuming a single focused intent.

No blocking issues surfaced.

Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 5739 functions depend on the 4714 node(s) this change touches.

Health — this change adds coupling hotspots:

  • worse: main() — 57 callers, 123 callees
  • new: _extract_generic() — 18 callers, 14 callees
  • new: to_html() — 17 callers, 8 callees
  • new: install() — 12 callers, 11 callees
  • new: _resolve_js_module_path() — 29 callers, 4 callees
  • new: extract_objc() — 26 callers, 4 callees
  • new: codebuddy_install() — 21 callers, 4 callees
  • new: extract_bash() — 19 callers, 4 callees
  • …and 44 more

Verification — 5739 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 5730 function(s) in the blast radius were not formally verified this run

· 52 more finding(s) on lines outside this diff (see the check run).

@FolatheDuckofDuckingburg FolatheDuckofDuckingburg changed the title Remove faulty GitHub Actions Workflow for Python, fix: resolve explain-ambiguity. Remove faulty GitHub Actions Workflow for Python, fix: resolve explain-ambiguity, fix(ruby): resolve compact syntax mixin targets and prevent phantom concern hubs. Jul 29, 2026

@FolatheDuckofDuckingburg FolatheDuckofDuckingburg left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@FolatheDuckofDuckingburg approves (bc im not a maintainer)

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This PR adds a new benchmarks/ directory containing a framework for measuring Graphify's impact on coding agent performance. It introduces documentation (README, methodology), a .gitignore, a test runner (runner.py), and an evaluator (evaluator.py) with task categories, metrics, and fixture/task structure. The changed symbol list also references numerous existing tests and graphify extraction/install modules, suggesting accompanying modifications across the caching, Ruby resolution, install, and extraction code paths. Reviewer surface area spans the new benchmark tooling plus touched areas in test suites (cache, install, ruby resolution), extraction logic, and main install entry points.

Worth a look

  • _check_imports executes arbitrary top-level imports of agent-supplied codebenchmarks/evaluator.py · Escalate · high
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
  • Missing imports are reported as resolvedbenchmarks/evaluator.py:93 · Escalate · medium
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 1605 functions depend on the 688 node(s) this change touches.

Health — this change adds coupling hotspots:

  • worse: extract() — 345 callers, 27 callees
  • new: walk() — 2 callers, 41 callees
  • worse: collect_files() — 14 callers, 5 callees
  • worse: _extract_python_rationale() — 1 callers, 56 callees
  • new: install() — 8 callers, 5 callees
  • worse: _install() — 12 callers, 1 callees
  • worse: _xaml_csharp_class_nodes() — 1 callers, 6 callees
  • new: walk_calls() — 0 callers, 12 callees
  • …and 1 more

Verification — 1605 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 1604 function(s) in the blast radius were not formally verified this run

· 9 more finding(s) on lines outside this diff (see the check run).

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This PR adds a new benchmarks/ directory containing a framework to compare coding-agent performance with and without Graphify. It introduces a README documenting the methodology and metrics, a .gitignore, and an evaluator.py module that scores agent solutions via syntax/import/test/semantic checks. The changed-symbols list also references edits across graphify extraction, cache, ruby resolution, and install test modules, so the surface area extends beyond the benchmark additions into those areas as well.

Worth a look

  • _check_imports always returns True regardless of import resolutionbenchmarks/evaluator.py · Escalate · medium
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
  • _check_imports executes arbitrary imports from agent-provided codebenchmarks/evaluator.py · Escalate · medium
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 1631 functions depend on the 713 functions this change touches.

Health — this change adds coupling hotspots:

  • worse: extract() — 346 callers, 28 callees
  • new: walk() — 2 callers, 41 callees
  • worse: collect_files() — 14 callers, 5 callees
  • worse: _extract_python_rationale() — 1 callers, 56 callees
  • new: install() — 8 callers, 5 callees
  • worse: _install() — 12 callers, 1 callees
  • worse: _xaml_csharp_class_nodes() — 1 callers, 6 callees
  • new: walk_calls() — 0 callers, 12 callees
  • …and 1 more

Verification — 1631 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 1630 function(s) in the blast radius were not formally verified this run

· 9 more finding(s) on lines outside this diff (see the check run).

@FolatheDuckofDuckingburg FolatheDuckofDuckingburg left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:D

…and conflicts

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This PR adds a new benchmarks/ directory intended to measure whether Graphify improves coding-agent performance on large repositories. It introduces supporting files including a .gitignore, a README documenting methodology, and evaluator/runner harness code, along with associated changes across extraction, caching, Ruby resolution, and install-related modules and their tests. The surface area spans new benchmark tooling plus modifications to core graphify extract/cache logic and multiple test files (install, cache, ruby resolution). The intent appears to be establishing a reproducible benchmark framework while adjusting related symbols across the codebase.

Worth a look

  • _check_imports actually imports arbitrary modules (side effects / RCE)benchmarks/evaluator.py · Escalate · high
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
  • Unresolved imports are reported as passingbenchmarks/evaluator.py:91 · Escalate · medium
    • agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 1646 functions depend on the 713 functions this change touches.

Health — this change adds coupling hotspots:

  • worse: extract() — 352 callers, 28 callees
  • new: walk() — 2 callers, 41 callees
  • worse: collect_files() — 14 callers, 5 callees
  • worse: _extract_python_rationale() — 1 callers, 55 callees
  • new: install() — 8 callers, 5 callees
  • worse: _install() — 12 callers, 1 callees
  • worse: _xaml_csharp_class_nodes() — 1 callers, 6 callees
  • new: walk_calls() — 0 callers, 12 callees
  • …and 1 more

Verification — 1646 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 1645 function(s) in the blast radius were not formally verified this run

· 9 more finding(s) on lines outside this diff (see the check run).

…OML parse error

Co-authored-by: FolatheDuckofDuckingburg <268987568+FolatheDuckofDuckingburg@users.noreply.github.com>
…8-568248997009349138

Sync Fork with Upstream/v8

@graphify-labs graphify-labs Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

I don't see a unified diff included in your message. Could you paste the diff (or the PR contents) you'd like me to summarize? Once you share it, I'll provide a 2-3 sentence plain-language summary of the intent and surface area.

No blocking issues surfaced.

Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 0 functions depend on the 0 functions this change touches.

Health — grade A; no new coupling hotspots.

Verification — 0 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

safishamsi added a commit that referenced this pull request Aug 1, 2026
…ern hub (#2302)

module Foo::Bar and nested module Foo; module Bar are canonicalized to
one fully-qualified label, and include/extend/prepend keep the full
constant path, so include Foo::Bar resolves. Mixin resolution is scoped
and lexical: a qualified external name (extend ActiveSupport::Concern)
no longer binds to a local module named Concern, while a genuine
in-corpus include Foo::Concern still resolves. Nested-declared classes
keep a last-segment index so typed-receiver calls (Processor.new) keep
resolving.

Adapts the approach from #1394 (thanks @FolatheDuckofDuckingburg) to the
post-refactor extractors/engine.py, with an added last-segment guard for
nested-class receiver resolution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@safishamsi

Copy link
Copy Markdown
Collaborator

Thanks for this, and for the diagnosis of the Ruby mixin bug in particular.

The branch has diverged from v8 through several upstream-sync merges, so its computed diff against v8 is now empty and it cannot be merged as-is. Rather than lose the work, I recovered the Ruby fix: #2302 (compact/nested module Foo::Bar mixin resolution + the phantom Concern hub) is fixed and shipped in v0.9.32 (graphifyy==0.9.32), with you credited in the changelog and release notes. Your approach (canonicalizing compact and nested declarations to one label, keeping the full constant path for mixin callees, and the scoped lexical lookup that stops a qualified external name binding to a bare local module) is what landed, adapted to the current extractor layout with an added guard so nested-declared classes keep resolving as typed receivers.

The explain-ambiguity change was already shipped separately in v0.9.31 (#2305), and the GitHub Actions workflow removal is tracked in your #2264. Closing this one in favour of the shipped fix. Really appreciate the contribution.

@safishamsi safishamsi closed this Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants