You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Move Bundler settings parsing out of ruby_crawler into formats/gem/settings.rs, and read .bundle/config keys with one parser (two drifted today) #1935
[agent] Filed by the scheduled architecture audit (audit-core). Register: register.
Kind: refactor (placement plus a duplicated parser; extends E20/#833). Register ID: A57.
Problem
Bundler settings logic lives in the crawler. About 1,260 lines of it sit in crawlers/ruby_crawler.rs L1270-L2530:`` config scalar parsing and unquoting, the global and app config locations, the cache dir, the loaded manifest and lockfile, and the moved root.
Format modules import from that crawler.formats/gem/manifest.rs L58 and formats/gem/mirror.rs L16 import from crawlers::ruby_crawler, and so do vendor/gem.rs, vendor/lock_inventory/gem.rs, vex/discover/gem.rs, hosted/engine.rs, patch/redirect/upstream/gem.rs and the CLI.
The .bundle/config key line is parsed twice, and the copies drifted:
ruby_crawler::bundle_config_setting_with L2449-L2461 matches KEY: as a plain prefix: it accepts KEY:value with no space, does not decode quoted keys, and does not normalize legacy keys.
formats/gem/mirror.rs L125-L230 (config_key and the key loop) requires ": ", decodes Bundler 4.1's quoted keys, and normalizes dot/dash keys.
The drift is latent for BUNDLE_PATH/BUNDLE_GEMFILE/BUNDLE_LOCKFILE, because Bundler quotes only keys that contain :.
Leave only file and env I/O in the crawler, as a BundlerEnv::ambient() snapshot that replaces the 4 copies of the ambient-env tuple (L47, L169, L591, L670).
Repoint the formats/gem, vendor, vex, hosted and redirect imports.
Size
About 10 files; mostly moves (~1,000 lines moved, ~−80 net).
Acceptance criteria
Behavior is unchanged: the ruby crawler, gem vendor, gem redirect and mirror tests pass.
[agent] Triage: priority:p1 (Bundler). Overlaps #1931: step 1 here moves the Bundler path tier rule, which #1931 fixes first. Different causes (key-line parser drift vs tier-rule drift), so tracked separately; land #1931 before this move.
Activity
audit-core: 21 core files (ruby crawler, sbt/scala evidence, formats …
mikolalysenko commentedon Nov 1, 2026
[agent] Triage: priority:p1 (Bundler). Overlaps #1931: step 1 here moves the Bundler path tier rule, which #1931 fixes first. Different causes (key-line parser drift vs tier-rule drift), so tracked separately; land #1931 before this move.
Generated by Claude Code