Context
The real-world audit against Rails exposed a resolution gap. When the repository root contains multiple gems, imports between sibling gems are currently classified as external. For example,
equire 'active_support' from Action Pack is not resolved to �ctivesupport/lib/active_support.rb because extraction currently searches only the repository root and its top-level lib directory.
Goal
Support Ruby monorepos and non-standard project layouts without executing application code or gemspecs.
Starting approach
- Discover *.gemspec files under the project root.
- Add each existing sibling lib directory to the internal feature search roots.
- Allow users to supply additional explicit load paths for layouts such as components//lib or plugins//lib.
- Normalize and deduplicate paths deterministically.
- Include analysis-affecting load-path options in the graph-cache key.
The public API shape should remain idiomatic and follow the existing options-bag/fluent conventions.
Acceptance criteria
- A multi-gem fixture resolves a cross-gem
equire as an internal edge.
- Explicit custom load paths resolve internal imports.
- A normal single-gem project behaves exactly as before.
- Gemspec files are discovered but never evaluated.
- Windows and POSIX path behavior are covered.
- Cache reuse and invalidation remain correct.
- README/API documentation explains automatic discovery, explicit paths, and limitations.
Observed during the 0.0.1 real-world audit of Rails (3,445 Ruby files).
Context
The real-world audit against Rails exposed a resolution gap. When the repository root contains multiple gems, imports between sibling gems are currently classified as external. For example,
equire 'active_support' from Action Pack is not resolved to �ctivesupport/lib/active_support.rb because extraction currently searches only the repository root and its top-level lib directory.
Goal
Support Ruby monorepos and non-standard project layouts without executing application code or gemspecs.
Starting approach
The public API shape should remain idiomatic and follow the existing options-bag/fluent conventions.
Acceptance criteria
equire as an internal edge.
Observed during the 0.0.1 real-world audit of Rails (3,445 Ruby files).