rails-ai-bridge 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/.reek.yml +137 -29
  3. data/.rubocop.yml +2 -0
  4. data/CONTRIBUTING.md +11 -6
  5. data/README.md +52 -4
  6. data/docs/BEST_PRACTICES.md +5 -0
  7. data/docs/GUIDE.md +27 -0
  8. data/lib/rails_ai_bridge/README.md +4 -0
  9. data/lib/rails_ai_bridge/config/rubydex.rb +30 -0
  10. data/lib/rails_ai_bridge/configuration.rb +18 -0
  11. data/lib/rails_ai_bridge/introspector.rb +2 -1
  12. data/lib/rails_ai_bridge/introspectors/convention_detector.rb +3 -2
  13. data/lib/rails_ai_bridge/introspectors/job_introspector.rb +2 -2
  14. data/lib/rails_ai_bridge/introspectors/model_introspector.rb +6 -0
  15. data/lib/rails_ai_bridge/introspectors/model_semantic_enrichment.rb +87 -0
  16. data/lib/rails_ai_bridge/introspectors/non_ar_models_introspector.rb +2 -2
  17. data/lib/rails_ai_bridge/introspectors/semantic_introspector.rb +222 -0
  18. data/lib/rails_ai_bridge/resources.rb +7 -0
  19. data/lib/rails_ai_bridge/rubydex_adapter/indexer.rb +40 -0
  20. data/lib/rails_ai_bridge/rubydex_adapter/method_counter.rb +45 -0
  21. data/lib/rails_ai_bridge/rubydex_adapter/serializer.rb +89 -0
  22. data/lib/rails_ai_bridge/rubydex_adapter.rb +259 -0
  23. data/lib/rails_ai_bridge/serializers/formatters/sections/models_formatter.rb +3 -0
  24. data/lib/rails_ai_bridge/serializers/formatters/sections/semantic_formatter.rb +97 -0
  25. data/lib/rails_ai_bridge/serializers/markdown_serializer.rb +1 -0
  26. data/lib/rails_ai_bridge/serializers/providers/base_provider_serializer.rb +34 -0
  27. data/lib/rails_ai_bridge/server.rb +1 -0
  28. data/lib/rails_ai_bridge/tools/search_semantic.rb +111 -0
  29. data/lib/rails_ai_bridge/version.rb +1 -1
  30. data/rails-ai-bridge.gemspec +5 -1
  31. metadata +12 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 181f3d197682eead1f7d4bcdbaf9ee507ee4604ec3bfd21b46a5255dce77d43c
4
- data.tar.gz: 177d42895020fe221a3d44523392ae21500928d47b7a400691975ff55cc24e34
3
+ metadata.gz: 70c4f4fa10f3ab710b0fc739366e9b68f30c309ad18759c8f7d0e25f5c5ba9c1
4
+ data.tar.gz: 6efeb017419fd80d4c4ea28631640067f46823b29f9e42a7a92fddb95dfcb2f9
5
5
  SHA512:
6
- metadata.gz: af082eeef430d215b7e5f96725d66466bf6a9bff353e0faaf9079d404ac24d676910131f37e9322b46e33f2d18ea2ebe8f3d6313e53c0b933882542c21e0ba9b
7
- data.tar.gz: 8cdba5c2b236a69d564d2af1cc6537bb8ed7e31ba74cd50ad66f4e16ae15727a3fcd2b477ebf378781e7eef8d05f35de21da8c86c8007317caea6313db34b502
6
+ metadata.gz: 30f13fd84f004af9056801f31444b657f57278628b49ce2fb9ee4e77a1ba2845dbc91f3e1f2092c42205f321d328f4b07a92a645d22e3095098a3a02be40975a
7
+ data.tar.gz: b8ca2fde28e9c545c8cd38359e56382d17dd0d942164d3ce3c26bb52cef3a575e34abc32e7f04321888898b40c44b21dc6cb2f962a62f54d51f8255928ff808c
data/.reek.yml CHANGED
@@ -43,6 +43,10 @@ detectors:
43
43
  - RailsAiBridge::Config::Server#http_port
44
44
  - RailsAiBridge::Config::Server#server_name
45
45
  - RailsAiBridge::Config::Server#server_version
46
+ - RailsAiBridge::Config::Rubydex#rubydex_enabled
47
+ - RailsAiBridge::Config::Rubydex#rubydex_index_path
48
+ - RailsAiBridge::Config::Rubydex#semantic_context_depth
49
+ - RailsAiBridge::Config::Rubydex#semantic_introspector_enabled
46
50
  - RailsAiBridge#configuration
47
51
  BooleanParameter:
48
52
  exclude:
@@ -50,6 +54,8 @@ detectors:
50
54
  - RailsAiBridge::Generators::InstallGenerator#generate_context_for_formats
51
55
  - RailsAiBridge::Serializers::ContextFileSerializer#initialize
52
56
  - RailsAiBridge#generate_context
57
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
58
+ - RailsAiBridge::Services::FileManagementService#validate_path!
53
59
  ControlParameter:
54
60
  exclude:
55
61
  - RailsAiBridge::ContextProvider#rebuild
@@ -64,13 +70,14 @@ detectors:
64
70
  - RailsAiBridge::Service::Result#initialize
65
71
  - RailsAiBridge::Tools::GetView#self.build_formatter
66
72
  - RailsAiBridge::Watcher#initialize
73
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
74
+ - RailsAiBridge::Services::FileManagementService#validate_path!
67
75
  DataClump:
68
76
  exclude:
69
77
  - RailsAiBridge::Serializers::RegenerationFooter
78
+ - RailsAiBridge::Introspectors::SemanticIntrospector
70
79
  DuplicateMethodCall:
71
80
  exclude:
72
- - RailsAiBridge::Generators::InstallGenerator#show_instructions
73
- - RailsAiBridge::Generators::InstallGenerator#show_full_instructions
74
81
  - RailsAiBridge::Config::Introspection#excluded_table?
75
82
  - RailsAiBridge::ContextProvider#fetch
76
83
  - RailsAiBridge::ContextProvider#rebuild
@@ -78,8 +85,9 @@ detectors:
78
85
  - RailsAiBridge::Doctor::Checkers::TestsChecker#call
79
86
  - RailsAiBridge::ExclusionHelper#table_pattern_match?
80
87
  - RailsAiBridge::Fingerprinter#snapshot
88
+ - RailsAiBridge::Generators::InstallGenerator#show_full_instructions
89
+ - RailsAiBridge::Generators::InstallGenerator#show_instructions
81
90
  - RailsAiBridge::HttpTransportApp#build
82
- - RailsAiBridge::Server#run_rack_server
83
91
  - RailsAiBridge::Introspector#app_name
84
92
  - RailsAiBridge::Introspector#call
85
93
  - RailsAiBridge::Introspectors::ActiveStorageIntrospector#extract_attachments
@@ -105,6 +113,8 @@ detectors:
105
113
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_associations
106
114
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_callbacks
107
115
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_source_macros
116
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#extract_semantic_summary
117
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
108
118
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#detect_model_connections
109
119
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_databases
110
120
  - RailsAiBridge::Introspectors::NonArModelsIntrospector#collect_safe_object_space_entries
@@ -115,6 +125,7 @@ detectors:
115
125
  - RailsAiBridge::Introspectors::RouteIntrospector#detect_api_namespaces
116
126
  - RailsAiBridge::Introspectors::RouteIntrospector#detect_mounted_engines
117
127
  - RailsAiBridge::Introspectors::RouteIntrospector#extract_routes
128
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_code_patterns
118
129
  - RailsAiBridge::Introspectors::ViewIntrospector#extract_partials
119
130
  - RailsAiBridge::Introspectors::ViewIntrospector#extract_templates
120
131
  - RailsAiBridge::Mcp::Authenticator#resolve_strategy
@@ -122,6 +133,10 @@ detectors:
122
133
  - RailsAiBridge::Mcp::HttpStructuredLog#target_logger
123
134
  - RailsAiBridge::ModelSemanticClassifier#call
124
135
  - RailsAiBridge::Resources#bridge_metadata
136
+ - RailsAiBridge::RubydexAdapter#codebase_stats
137
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
138
+ - RailsAiBridge::RubydexAdapter#definition_to_hash
139
+ - RailsAiBridge::RubydexAdapter#file_declarations
125
140
  - RailsAiBridge::Serializers::ContextFileSerializer#call
126
141
  - RailsAiBridge::Serializers::ContextFileSerializer#generate_split_rules
127
142
  - RailsAiBridge::Serializers::ContextSummary#top_columns
@@ -168,6 +183,7 @@ detectors:
168
183
  - RailsAiBridge::Serializers::Providers::RulesSerializer#render_compact
169
184
  - RailsAiBridge::Serializers::Providers::WindsurfSerializer#render
170
185
  - RailsAiBridge::Serializers::SharedAssistantGuidance#resolved_assistant_overrides_path
186
+ - RailsAiBridge::Server#run_rack_server
171
187
  - RailsAiBridge::Server#start_http
172
188
  - RailsAiBridge::Services::ContextGenerationService#call
173
189
  - RailsAiBridge::Services::FileManagementService#default_allowed_base_dir
@@ -197,13 +213,13 @@ detectors:
197
213
  - RailsAiBridge::Tools::GetTestInfo#self.call
198
214
  - RailsAiBridge::Tools::GetTestInfo::ResponseFormatter#format
199
215
  - RailsAiBridge::Tools::GetTestInfo::ResponseFormatter#format_helpers
216
+ - RailsAiBridge::Tools::GetView#self.call
200
217
  - RailsAiBridge::Tools::GetView::BaseFormatter#controller_key_for
201
218
  - RailsAiBridge::Tools::GetView::BaseFormatter#filter_view_data
202
219
  - RailsAiBridge::Tools::GetView::FullFormatter#call
203
220
  - RailsAiBridge::Tools::GetView::SpecificViewFormatter#call
204
221
  - RailsAiBridge::Tools::GetView::StandardFormatter#call
205
222
  - RailsAiBridge::Tools::GetView::SummaryFormatter#call
206
- - RailsAiBridge::Tools::GetView#self.call
207
223
  - RailsAiBridge::Tools::ModelDetails::FullFormatter#call
208
224
  - RailsAiBridge::Tools::ModelDetails::SingleModelFormatter#call
209
225
  - RailsAiBridge::Tools::ModelDetails::StandardFormatter#call
@@ -211,10 +227,11 @@ detectors:
211
227
  - RailsAiBridge::Tools::Schema::SummaryFormatter#call
212
228
  - RailsAiBridge::Tools::Schema::TableFormatter#call
213
229
  - RailsAiBridge::Tools::SearchCode#self.append_ripgrep_secret_excludes
230
+ - RailsAiBridge::Tools::SearchSemantic#self.format_results
214
231
  FeatureEnvy:
215
232
  exclude:
216
- - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
217
233
  - RailsAiBridge::Config::Introspection#excluded_table?
234
+ - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
218
235
  - RailsAiBridge::Introspectors::ActionMailboxIntrospector#extract_mailboxes
219
236
  - RailsAiBridge::Introspectors::ActionTextIntrospector#extract_rich_text_fields
220
237
  - RailsAiBridge::Introspectors::ActiveStorageIntrospector#extract_attachments
@@ -227,8 +244,6 @@ detectors:
227
244
  - RailsAiBridge::Introspectors::ConventionDetector#scan_directory_structure
228
245
  - RailsAiBridge::Introspectors::DevOpsIntrospector#extract_docker_info
229
246
  - RailsAiBridge::Introspectors::DevOpsIntrospector#extract_procfile
230
- - RailsAiBridge::Server#create_mcp_server
231
- - RailsAiBridge::Server#run_rack_server
232
247
  - RailsAiBridge::Introspectors::DevOpsIntrospector#extract_puma_config
233
248
  - RailsAiBridge::Introspectors::EngineIntrospector#discover_mounted_engines
234
249
  - RailsAiBridge::Introspectors::GemIntrospector#categorize_gems
@@ -239,6 +254,7 @@ detectors:
239
254
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_source_macros
240
255
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_validations
241
256
  - RailsAiBridge::Introspectors::ModelIntrospector#model_table_excluded?
257
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
242
258
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#detect_model_connections
243
259
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_databases
244
260
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#parse_database_yml
@@ -250,15 +266,24 @@ detectors:
250
266
  - RailsAiBridge::Introspectors::SchemaIntrospector#extract_foreign_keys
251
267
  - RailsAiBridge::Introspectors::SchemaIntrospector#extract_indexes
252
268
  - RailsAiBridge::Introspectors::SeedsIntrospector#analyze_seeds_file
269
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_patterns
270
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_complexity_hotspots
253
271
  - RailsAiBridge::Introspectors::TurboIntrospector#extract_model_broadcasts
254
272
  - RailsAiBridge::Introspectors::ViewIntrospector#detect_template_engines
273
+ - RailsAiBridge::RubydexAdapter#constant_references
274
+ - RailsAiBridge::RubydexAdapter#count_methods
275
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
276
+ - RailsAiBridge::RubydexAdapter#definition_to_hash
277
+ - RailsAiBridge::RubydexAdapter#format_location
255
278
  - RailsAiBridge::Serializers::ContextFileSerializer#generate_split_rules
256
279
  - RailsAiBridge::Serializers::Formatters::Sections::ConventionsFormatter#render
280
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render
257
281
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_architecture
258
282
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_compact
259
283
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_config_files
260
284
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_models
261
285
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_notable_gems
286
+ - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_semantic_insights
262
287
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_stack_overview
263
288
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#render_context_reference
264
289
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#render_models_reference
@@ -277,8 +302,11 @@ detectors:
277
302
  - RailsAiBridge::Serializers::Providers::WindsurfSerializer#call
278
303
  - RailsAiBridge::Serializers::Providers::WindsurfSerializer#render
279
304
  - RailsAiBridge::Server#build
305
+ - RailsAiBridge::Server#create_mcp_server
306
+ - RailsAiBridge::Server#run_rack_server
280
307
  - RailsAiBridge::Server#start_http
281
308
  - RailsAiBridge::Services::AppIntrospectionService#call
309
+ - RailsAiBridge::Services::FileManagementService#file_exists?
282
310
  - RailsAiBridge::Tools::GetControllers::ResponseFormatter#format_full
283
311
  - RailsAiBridge::Tools::GetGems::ResponseFormatter#format
284
312
  - RailsAiBridge::Tools::GetModelDetails::ResponseFormatter#pojo_detail_markdown
@@ -295,6 +323,8 @@ detectors:
295
323
  - RailsAiBridge::Tools::Schema::TableFormatter#call
296
324
  InstanceVariableAssumption:
297
325
  exclude:
326
+ - RailsAiBridge::Generators::InstallGenerator
327
+ - RailsAiBridge::RubydexAdapter
298
328
  - RailsAiBridge::Serializers::Providers::ClaudeSerializer
299
329
  - RailsAiBridge::Serializers::Providers::CodexSerializer
300
330
  - RailsAiBridge::Serializers::Providers::CopilotSerializer
@@ -304,7 +334,6 @@ detectors:
304
334
  - RailsAiBridge::Tools::GetView::FullFormatter
305
335
  - RailsAiBridge::Tools::GetView::StandardFormatter
306
336
  - RailsAiBridge::Tools::GetView::SummaryFormatter
307
- - RailsAiBridge::Generators::InstallGenerator
308
337
  IrresponsibleModule:
309
338
  exclude:
310
339
  - RailsAiBridge::Generators::InstallGenerator
@@ -348,6 +377,14 @@ detectors:
348
377
  - RailsAiBridge::Introspectors::RouteIntrospector#detect_mounted_engines
349
378
  - RailsAiBridge::Introspectors::RouteIntrospector#extract_routes
350
379
  - RailsAiBridge::Mcp::Auth::Strategies::Jwt#initialize
380
+ - RailsAiBridge::RubydexAdapter#ancestors
381
+ - RailsAiBridge::RubydexAdapter#constant_references
382
+ - RailsAiBridge::RubydexAdapter#count_methods
383
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
384
+ - RailsAiBridge::RubydexAdapter#definition_to_hash
385
+ - RailsAiBridge::RubydexAdapter#descendants
386
+ - RailsAiBridge::RubydexAdapter#format_location
387
+ - RailsAiBridge::RubydexAdapter#safe_count
351
388
  - RailsAiBridge::Services::FileManagementService#default_allowed_base_dir
352
389
  MissingSafeMethod:
353
390
  exclude:
@@ -356,13 +393,14 @@ detectors:
356
393
  - RailsAiBridge::Introspectors::ControllerIntrospector
357
394
  - RailsAiBridge::Introspectors::ModelIntrospector
358
395
  - RailsAiBridge::Introspectors::NonArModelsIntrospector
396
+ - RailsAiBridge::RubydexAdapter
359
397
  - RailsAiBridge::Services::FileManagementService
360
398
  - RailsAiBridge::Tools::BaseTool
361
399
  - RailsAiBridge::Watcher::BridgeRegenerator
362
400
  NestedIterators:
363
401
  exclude:
364
- - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
365
402
  - RailsAiBridge::Fingerprinter#snapshot
403
+ - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
366
404
  - RailsAiBridge::Introspectors::ActionMailboxIntrospector#extract_mailboxes
367
405
  - RailsAiBridge::Introspectors::ActionTextIntrospector#extract_rich_text_fields
368
406
  - RailsAiBridge::Introspectors::ActiveStorageIntrospector#detect_direct_upload
@@ -373,12 +411,15 @@ detectors:
373
411
  - RailsAiBridge::Introspectors::GemIntrospector#categorize_gems
374
412
  - RailsAiBridge::Introspectors::JobIntrospector#extract_channels
375
413
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_callbacks
414
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
376
415
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#detect_model_connections
377
416
  - RailsAiBridge::Introspectors::RouteIntrospector#group_by_controller
378
417
  - RailsAiBridge::Introspectors::SeedsIntrospector#detect_seeded_models
379
418
  - RailsAiBridge::Introspectors::TestIntrospector#detect_test_helpers
380
419
  - RailsAiBridge::Introspectors::TurboIntrospector#extract_turbo_frames
381
420
  - RailsAiBridge::ModelSemanticClassifier#self.through_join_model_names
421
+ - RailsAiBridge::RubydexAdapter#count_methods
422
+ - RailsAiBridge::RubydexAdapter#ruby_source_files
382
423
  - RailsAiBridge::Serializers::Formatters::Sections::ControllersFormatter#render
383
424
  - RailsAiBridge::Serializers::Formatters::Sections::ModelsFormatter#render
384
425
  - RailsAiBridge::Serializers::Formatters::Sections::RoutesFormatter#render
@@ -400,11 +441,13 @@ detectors:
400
441
  - RailsAiBridge::Tools::ModelDetails::FullFormatter#call
401
442
  - RailsAiBridge::Tools::ModelDetails::SingleModelFormatter#call
402
443
  - RailsAiBridge::Tools::Schema::StandardFormatter#call
444
+ - RailsAiBridge::Tools::SearchSemantic#self.format_results
403
445
  NilCheck:
404
446
  exclude:
405
447
  - RailsAiBridge::AssistantFormatsPreference#formats_for_default_bridge_task
406
448
  - RailsAiBridge::Config::Introspection#excluded_table?
407
449
  - RailsAiBridge::Config::Mcp#effective_http_rate_limit_max_requests
450
+ - RailsAiBridge::Generators::InstallGenerator#profile_from_option
408
451
  - RailsAiBridge::Introspectors::ControllerIntrospector#discover_controllers
409
452
  - RailsAiBridge::Introspectors::ControllerIntrospector#extract_respond_to
410
453
  - RailsAiBridge::Introspectors::ControllerIntrospector#extract_strong_params
@@ -419,21 +462,24 @@ detectors:
419
462
  - RailsAiBridge::Mcp::Auth::Strategies::Jwt#initialize
420
463
  - RailsAiBridge::Mcp::Authenticator#call
421
464
  - RailsAiBridge::Mcp::HttpStructuredLog#emit
465
+ - RailsAiBridge::RubydexAdapter#available?
422
466
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_non_ar_models_to_rules
423
467
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_tier_model_bullets
424
468
  - RailsAiBridge::Serializers::SharedAssistantGuidance#mergeable_override_content?
425
469
  - RailsAiBridge::Serializers::SharedAssistantGuidance#resolved_assistant_overrides_path
426
470
  - RailsAiBridge::Services::FileManagementService#call
427
471
  - RailsAiBridge::Tools::SearchCode#self.normalize_and_validate_file_type
428
- - RailsAiBridge::Generators::InstallGenerator#profile_from_option
429
472
  RepeatedConditional:
430
473
  exclude:
431
474
  - RailsAiBridge::Introspectors::AssetPipelineIntrospector
432
475
  - RailsAiBridge::Introspectors::Schema::StaticSchemaParser
476
+ - RailsAiBridge::Introspectors::SemanticIntrospector
433
477
  - RailsAiBridge::Introspectors::StimulusIntrospector
434
478
  - RailsAiBridge::Introspectors::TestIntrospector
435
479
  - RailsAiBridge::Introspectors::ViewIntrospector
480
+ - RailsAiBridge::RubydexAdapter
436
481
  - RailsAiBridge::Tools::GetStimulus::ResponseFormatter
482
+ - RailsAiBridge::Tools::SearchSemantic
437
483
  TooManyInstanceVariables:
438
484
  exclude:
439
485
  - RailsAiBridge::Config::Introspection
@@ -442,25 +488,23 @@ detectors:
442
488
  - RailsAiBridge::Config::Server
443
489
  - RailsAiBridge::Configuration
444
490
  - RailsAiBridge::Mcp::HttpRateLimiter
491
+ - RailsAiBridge::RubydexAdapter
445
492
  - RailsAiBridge::Tools::GetModelDetails::ResponseFormatter
446
493
  - RailsAiBridge::Tools::GetRoutes::ResponseFormatter
447
494
  - RailsAiBridge::Tools::GetSchema::ResponseFormatter
448
495
  TooManyMethods:
449
496
  exclude:
450
- - RailsAiBridge::Introspectors::ModelIntrospector
451
497
  - RailsAiBridge::Generators::InstallGenerator
498
+ - RailsAiBridge::Introspectors::ModelIntrospector
499
+ - RailsAiBridge::RubydexAdapter
500
+ - RailsAiBridge::Serializers::Providers::BaseProviderSerializer
452
501
  TooManyConstants:
453
502
  exclude:
454
503
  - RailsAiBridge::Resources
455
504
  - RailsAiBridge::Server
456
505
  TooManyStatements:
457
506
  exclude:
458
- - initialize
459
- - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
460
- - RailsAiBridge::Generators::InstallGenerator#create_assistant_overrides_template
461
- - RailsAiBridge::Generators::InstallGenerator#generate_context_files
462
- - RailsAiBridge::Generators::InstallGenerator#show_full_instructions
463
- - RailsAiBridge::Generators::InstallGenerator#show_instructions
507
+ - RailsAiBridge#validate_auto_mount_configuration!
464
508
  - RailsAiBridge::AssistantFormatsPreference#formats_for_default_bridge_task
465
509
  - RailsAiBridge::AssistantFormatsPreference#write!
466
510
  - RailsAiBridge::Config::Mcp#effective_http_rate_limit_max_requests
@@ -469,6 +513,11 @@ detectors:
469
513
  - RailsAiBridge::ContextProvider#rebuild
470
514
  - RailsAiBridge::Doctor#compute_score
471
515
  - RailsAiBridge::Fingerprinter#snapshot
516
+ - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
517
+ - RailsAiBridge::Generators::InstallGenerator#create_assistant_overrides_template
518
+ - RailsAiBridge::Generators::InstallGenerator#generate_context_files
519
+ - RailsAiBridge::Generators::InstallGenerator#show_full_instructions
520
+ - RailsAiBridge::Generators::InstallGenerator#show_instructions
472
521
  - RailsAiBridge::HttpTransportApp#build
473
522
  - RailsAiBridge::Introspector#call
474
523
  - RailsAiBridge::Introspectors::ActionMailboxIntrospector#extract_mailboxes
@@ -514,6 +563,10 @@ detectors:
514
563
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_callbacks
515
564
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_model_details
516
565
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_source_macros
566
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#calculate_complexity_score
567
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#extract_semantic_data
568
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#extract_semantic_summary
569
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
517
570
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#detect_model_connections
518
571
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_databases
519
572
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_replicas
@@ -529,6 +582,13 @@ detectors:
529
582
  - RailsAiBridge::Introspectors::Schema::StaticSchemaParser#parse_table_line
530
583
  - RailsAiBridge::Introspectors::SeedsIntrospector#analyze_seeds_file
531
584
  - RailsAiBridge::Introspectors::SeedsIntrospector#detect_seeded_models
585
+ - RailsAiBridge::Introspectors::SemanticIntrospector#analyze_relationships
586
+ - RailsAiBridge::Introspectors::SemanticIntrospector#build_inheritance_tree
587
+ - RailsAiBridge::Introspectors::SemanticIntrospector#call
588
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_code_patterns
589
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_patterns
590
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_complexity_hotspots
591
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_most_extended
532
592
  - RailsAiBridge::Introspectors::StimulusIntrospector#call
533
593
  - RailsAiBridge::Introspectors::StimulusIntrospector#parse_controller
534
594
  - RailsAiBridge::Introspectors::TestIntrospector#detect_ci
@@ -551,6 +611,15 @@ detectors:
551
611
  - RailsAiBridge::ModelSemanticClassifier#call
552
612
  - RailsAiBridge::ModelSemanticClassifier#metadata_column_names
553
613
  - RailsAiBridge::ModelSemanticClassifier#self.through_join_model_names
614
+ - RailsAiBridge::RubydexAdapter#codebase_stats
615
+ - RailsAiBridge::RubydexAdapter#constant_references
616
+ - RailsAiBridge::RubydexAdapter#count_methods
617
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
618
+ - RailsAiBridge::RubydexAdapter#declaration_type
619
+ - RailsAiBridge::RubydexAdapter#file_declarations
620
+ - RailsAiBridge::RubydexAdapter#index!
621
+ - RailsAiBridge::RubydexAdapter#instance
622
+ - RailsAiBridge::RubydexAdapter#search
554
623
  - RailsAiBridge::Serializers::ContextFileSerializer#call
555
624
  - RailsAiBridge::Serializers::ContextFileSerializer#generate_split_rules
556
625
  - RailsAiBridge::Serializers::ContextFileSerializer#serialize
@@ -575,6 +644,11 @@ detectors:
575
644
  - RailsAiBridge::Serializers::Formatters::Sections::RoutesFormatter#render
576
645
  - RailsAiBridge::Serializers::Formatters::Sections::SchemaFormatter#render
577
646
  - RailsAiBridge::Serializers::Formatters::Sections::SeedsFormatter#render
647
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render
648
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_codebase_stats
649
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_complexity_hotspots
650
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_patterns
651
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_relationships
578
652
  - RailsAiBridge::Serializers::Formatters::Sections::TestsFormatter#render
579
653
  - RailsAiBridge::Serializers::Formatters::Sections::TurboFormatter#render
580
654
  - RailsAiBridge::Serializers::Formatters::Sections::ViewsFormatter#render
@@ -584,6 +658,7 @@ detectors:
584
658
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_config_files
585
659
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_models
586
660
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_notable_gems
661
+ - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_semantic_insights
587
662
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_stack_overview
588
663
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_non_ar_models_to_rules
589
664
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_tier_model_bullets
@@ -617,6 +692,7 @@ detectors:
617
692
  - RailsAiBridge::Services::ConfigurationService#call
618
693
  - RailsAiBridge::Services::ContextGenerationService#call
619
694
  - RailsAiBridge::Services::FileManagementService#call
695
+ - RailsAiBridge::Services::FileManagementService#file_exists?
620
696
  - RailsAiBridge::Services::FileManagementService#validate_path!
621
697
  - RailsAiBridge::Services::FileManagementService#write_file
622
698
  - RailsAiBridge::Tools::BaseTool#text_response
@@ -641,13 +717,13 @@ detectors:
641
717
  - RailsAiBridge::Tools::GetStimulus::ResponseFormatter#format_full
642
718
  - RailsAiBridge::Tools::GetStimulus::ResponseFormatter#format_standard
643
719
  - RailsAiBridge::Tools::GetTestInfo::ResponseFormatter#format
720
+ - RailsAiBridge::Tools::GetView#self.call
644
721
  - RailsAiBridge::Tools::GetView::BaseFormatter#apply_partial_filter
645
722
  - RailsAiBridge::Tools::GetView::BaseFormatter#filter_view_data
646
723
  - RailsAiBridge::Tools::GetView::FullFormatter#call
647
724
  - RailsAiBridge::Tools::GetView::SpecificViewFormatter#call
648
725
  - RailsAiBridge::Tools::GetView::StandardFormatter#call
649
726
  - RailsAiBridge::Tools::GetView::SummaryFormatter#call
650
- - RailsAiBridge::Tools::GetView#self.call
651
727
  - RailsAiBridge::Tools::ModelDetails::FullFormatter#call
652
728
  - RailsAiBridge::Tools::ModelDetails::NonArModelsAppendix#append_markdown
653
729
  - RailsAiBridge::Tools::ModelDetails::SingleModelFormatter#call
@@ -657,19 +733,20 @@ detectors:
657
733
  - RailsAiBridge::Tools::Schema::StandardFormatter#call
658
734
  - RailsAiBridge::Tools::Schema::SummaryFormatter#call
659
735
  - RailsAiBridge::Tools::Schema::TableFormatter#call
660
- - RailsAiBridge::Tools::SearchCode::Formatter#call
661
736
  - RailsAiBridge::Tools::SearchCode#self.build_ripgrep_command
662
737
  - RailsAiBridge::Tools::SearchCode#self.call
663
738
  - RailsAiBridge::Tools::SearchCode#self.prepare_search
664
739
  - RailsAiBridge::Tools::SearchCode#self.process_file_for_search
665
740
  - RailsAiBridge::Tools::SearchCode#self.search_with_ruby
741
+ - RailsAiBridge::Tools::SearchCode::Formatter#call
742
+ - RailsAiBridge::Tools::SearchSemantic#self.call
743
+ - RailsAiBridge::Tools::SearchSemantic#self.format_results
666
744
  - RailsAiBridge::ViewFileAnalyzer#call
667
745
  - RailsAiBridge::Watcher#handle_change
668
746
  - RailsAiBridge::Watcher#start
669
- - RailsAiBridge#validate_auto_mount_configuration!
747
+ - initialize
670
748
  UncommunicativeVariableName:
671
749
  exclude:
672
- - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
673
750
  - RailsAiBridge::AssistantFormatsPreference#formats_for_default_bridge_task
674
751
  - RailsAiBridge::AssistantFormatsPreference#write!
675
752
  - RailsAiBridge::Config::Introspection#effective_introspectors
@@ -677,6 +754,7 @@ detectors:
677
754
  - RailsAiBridge::Config::Mcp#effective_http_rate_limit_window_seconds
678
755
  - RailsAiBridge::Doctor::Checkers::McpBuildableChecker#call
679
756
  - RailsAiBridge::Doctor::Checkers::ViewsChecker#call
757
+ - RailsAiBridge::Generators::InstallGenerator#add_to_gitignore
680
758
  - RailsAiBridge::HttpTransportApp#build
681
759
  - RailsAiBridge::Introspector#call
682
760
  - RailsAiBridge::Introspectors::ActionMailboxIntrospector#call
@@ -722,6 +800,7 @@ detectors:
722
800
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_public_instance_methods
723
801
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_source_macros
724
802
  - RailsAiBridge::Introspectors::ModelIntrospector#sanitize_options
803
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
725
804
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#call
726
805
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#detect_model_connections
727
806
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_replicas
@@ -737,6 +816,12 @@ detectors:
737
816
  - RailsAiBridge::Introspectors::SchemaIntrospector#table_names
738
817
  - RailsAiBridge::Introspectors::SeedsIntrospector#analyze_seeds_file
739
818
  - RailsAiBridge::Introspectors::SeedsIntrospector#call
819
+ - RailsAiBridge::Introspectors::SemanticIntrospector#analyze_relationships
820
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_code_patterns
821
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_patterns
822
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_complexity_hotspots
823
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_most_extended
824
+ - RailsAiBridge::Introspectors::SemanticIntrospector#namespace_distribution
740
825
  - RailsAiBridge::Introspectors::StimulusIntrospector#call
741
826
  - RailsAiBridge::Introspectors::StimulusIntrospector#extract_actions
742
827
  - RailsAiBridge::Introspectors::StimulusIntrospector#parse_controller
@@ -753,6 +838,10 @@ detectors:
753
838
  - RailsAiBridge::ModelSemanticClassifier#call
754
839
  - RailsAiBridge::ModelSemanticClassifier#metadata_column_names
755
840
  - RailsAiBridge::Resources#read_view_resource
841
+ - RailsAiBridge::RubydexAdapter#codebase_stats
842
+ - RailsAiBridge::RubydexAdapter#count_methods
843
+ - RailsAiBridge::RubydexAdapter#declaration_to_hash
844
+ - RailsAiBridge::RubydexAdapter#file_declarations
756
845
  - RailsAiBridge::Serializers::ContextSummary#recently_migrated?
757
846
  - RailsAiBridge::Serializers::ContextSummary#top_columns
758
847
  - RailsAiBridge::Serializers::Formatters::Sections::ActionMailboxFormatter#render
@@ -775,12 +864,14 @@ detectors:
775
864
  - RailsAiBridge::Serializers::Formatters::Sections::RoutesFormatter#render
776
865
  - RailsAiBridge::Serializers::Formatters::Sections::SchemaFormatter#render
777
866
  - RailsAiBridge::Serializers::Formatters::Sections::SeedsFormatter#render
867
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_complexity_hotspots
778
868
  - RailsAiBridge::Serializers::Formatters::Sections::TurboFormatter#render
779
869
  - RailsAiBridge::Serializers::Formatters::Sections::ViewsFormatter#render
780
870
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_architecture
781
871
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_config_files
782
872
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_key_models
783
873
  - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_notable_gems
874
+ - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#render_semantic_insights
784
875
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_tier_model_bullets
785
876
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#group_models_by_semantic_tier
786
877
  - RailsAiBridge::Serializers::Providers::CodexSerializer#append_compact_codex_models_section
@@ -821,15 +912,16 @@ detectors:
821
912
  - RailsAiBridge::Tools::ModelDetails::SingleModelFormatter#call
822
913
  - RailsAiBridge::Tools::ModelDetails::SummaryFormatter#call
823
914
  - RailsAiBridge::Tools::Schema::StandardFormatter#call
824
- - RailsAiBridge::Tools::SearchCode::Formatter#call
825
915
  - RailsAiBridge::Tools::SearchCode#self.add_excluded_paths_to_command
826
916
  - RailsAiBridge::Tools::SearchCode#self.allowed_search_file_types
827
917
  - RailsAiBridge::Tools::SearchCode#self.search_with_ripgrep
828
918
  - RailsAiBridge::Tools::SearchCode#self.search_with_ruby
829
919
  - RailsAiBridge::Tools::SearchCode#self.validate_pattern_size
830
- - RailsAiBridge::Watcher::WatchDirectories#self.resolve
920
+ - RailsAiBridge::Tools::SearchCode::Formatter#call
921
+ - RailsAiBridge::Tools::SearchSemantic#self.format_results
831
922
  - RailsAiBridge::Watcher#handle_change
832
923
  - RailsAiBridge::Watcher#start
924
+ - RailsAiBridge::Watcher::WatchDirectories#self.resolve
833
925
  UnusedParameters:
834
926
  exclude:
835
927
  - RailsAiBridge::Tools::GetConfig#self.call
@@ -844,18 +936,13 @@ detectors:
844
936
  - RailsAiBridge::Tools::GetView#self.call
845
937
  UtilityFunction:
846
938
  exclude:
939
+ - RailsAiBridge::Doctor#compute_score
847
940
  - RailsAiBridge::Doctor::Checkers::BaseChecker#new_check
848
941
  - RailsAiBridge::Doctor::Checkers::StimulusMcpToolChecker#tool_registered?
849
- - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#extract_notable_gems
850
942
  - RailsAiBridge::Doctor::Checkers::ViewMcpToolChecker#tool_registered?
851
- - RailsAiBridge::Doctor#compute_score
852
943
  - RailsAiBridge::Introspectors::ControllerIntrospector#api_controller?
853
944
  - RailsAiBridge::Introspectors::ControllerIntrospector#discover_controllers
854
945
  - RailsAiBridge::Introspectors::ControllerIntrospector#eager_load_controllers!
855
- - RailsAiBridge::Server#create_stdio_transport
856
- - RailsAiBridge::Server#create_http_transport
857
- - RailsAiBridge::Server#register_resources
858
- - RailsAiBridge::Server#validate_http_server_in_production
859
946
  - RailsAiBridge::Introspectors::ControllerIntrospector#extract_action_condition
860
947
  - RailsAiBridge::Introspectors::ControllerIntrospector#extract_actions
861
948
  - RailsAiBridge::Introspectors::ControllerIntrospector#extract_concerns
@@ -877,6 +964,9 @@ detectors:
877
964
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_public_class_methods
878
965
  - RailsAiBridge::Introspectors::ModelIntrospector#extract_public_instance_methods
879
966
  - RailsAiBridge::Introspectors::ModelIntrospector#sanitize_options
967
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#calculate_complexity_score
968
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#extract_semantic_summary
969
+ - RailsAiBridge::Introspectors::ModelSemanticEnrichment#find_similar_models
880
970
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#anonymize_db_name
881
971
  - RailsAiBridge::Introspectors::MultiDatabaseIntrospector#discover_replicas
882
972
  - RailsAiBridge::Introspectors::NonArModelsIntrospector#eager_load_app_models_dir
@@ -890,6 +980,12 @@ detectors:
890
980
  - RailsAiBridge::Introspectors::SchemaIntrospector#active_record_connected?
891
981
  - RailsAiBridge::Introspectors::SchemaIntrospector#adapter_name
892
982
  - RailsAiBridge::Introspectors::SchemaIntrospector#connection
983
+ - RailsAiBridge::Introspectors::SemanticIntrospector#build_inheritance_tree
984
+ - RailsAiBridge::Introspectors::SemanticIntrospector#calculate_hotspot_score
985
+ - RailsAiBridge::Introspectors::SemanticIntrospector#detect_code_patterns
986
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_most_extended
987
+ - RailsAiBridge::Introspectors::SemanticIntrospector#find_orphan_classes
988
+ - RailsAiBridge::Introspectors::SemanticIntrospector#namespace_distribution
893
989
  - RailsAiBridge::Introspectors::StimulusIntrospector#extract_actions
894
990
  - RailsAiBridge::Introspectors::StimulusIntrospector#extract_classes
895
991
  - RailsAiBridge::Introspectors::StimulusIntrospector#extract_outlets
@@ -900,6 +996,8 @@ detectors:
900
996
  - RailsAiBridge::ModelSemanticClassifier#metadata_column_names
901
997
  - RailsAiBridge::ModelSemanticClassifier#safe_column_names
902
998
  - RailsAiBridge::ModelSemanticClassifier#tier
999
+ - RailsAiBridge::RubydexAdapter#declaration_type
1000
+ - RailsAiBridge::RubydexAdapter#safe_count
903
1001
  - RailsAiBridge::Serializers::Formatters::Providers::CodexFooterFormatter#call
904
1002
  - RailsAiBridge::Serializers::Formatters::Providers::CopilotFooterFormatter#call
905
1003
  - RailsAiBridge::Serializers::Formatters::Providers::FooterFormatter#call
@@ -929,9 +1027,14 @@ detectors:
929
1027
  - RailsAiBridge::Serializers::Formatters::Sections::RoutesFormatter#render
930
1028
  - RailsAiBridge::Serializers::Formatters::Sections::SchemaFormatter#render
931
1029
  - RailsAiBridge::Serializers::Formatters::Sections::SeedsFormatter#render
1030
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_codebase_stats
1031
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_complexity_hotspots
1032
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_patterns
1033
+ - RailsAiBridge::Serializers::Formatters::Sections::SemanticFormatter#render_relationships
932
1034
  - RailsAiBridge::Serializers::Formatters::Sections::TestsFormatter#render
933
1035
  - RailsAiBridge::Serializers::Formatters::Sections::TurboFormatter#render
934
1036
  - RailsAiBridge::Serializers::Formatters::Sections::ViewsFormatter#render
1037
+ - RailsAiBridge::Serializers::Providers::BaseProviderSerializer#extract_notable_gems
935
1038
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_non_ar_models_to_rules
936
1039
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#append_tier_model_bullets
937
1040
  - RailsAiBridge::Serializers::Providers::ClaudeRulesSerializer#group_models_by_semantic_tier
@@ -942,9 +1045,14 @@ detectors:
942
1045
  - RailsAiBridge::Serializers::Providers::CursorRulesSerializer#render_mcp_tools_rule
943
1046
  - RailsAiBridge::Serializers::Providers::WindsurfRulesSerializer#render_mcp_tools_rule
944
1047
  - RailsAiBridge::Server#build_rack_app
1048
+ - RailsAiBridge::Server#create_http_transport
1049
+ - RailsAiBridge::Server#create_stdio_transport
1050
+ - RailsAiBridge::Server#register_resources
945
1051
  - RailsAiBridge::Server#tool_classes
1052
+ - RailsAiBridge::Server#validate_http_server_in_production
946
1053
  - RailsAiBridge::Services::ConfigurationService#call
947
1054
  - RailsAiBridge::Services::FileManagementService#default_allowed_base_dir
1055
+ - RailsAiBridge::Services::FileManagementService#root_directory?
948
1056
  - RailsAiBridge::Tools::GetConventions::ResponseFormatter#humanize_arch
949
1057
  - RailsAiBridge::Tools::GetConventions::ResponseFormatter#humanize_pattern
950
1058
  - RailsAiBridge::Tools::GetView::BaseFormatter#controller_key_for
data/.rubocop.yml CHANGED
@@ -32,6 +32,8 @@ Metrics/AbcSize:
32
32
  Max: 110
33
33
  RSpec/MultipleExpectations:
34
34
  Max: 25
35
+ RSpec/MultipleMemoizedHelpers:
36
+ Max: 6
35
37
  RSpec/ExampleLength:
36
38
  Max: 40
37
39
  RSpec/NamedSubject:
data/CONTRIBUTING.md CHANGED
@@ -18,12 +18,17 @@ The test suite uses [Combustion](https://github.com/pat/combustion) to boot a mi
18
18
 
19
19
  ```
20
20
  lib/rails_ai_bridge/
21
- ├── introspectors/ # Built-in introspectors (schema, models, non_ar_models, routes, …)
22
- ├── tools/ # 11 built-in MCP tools (detail levels, pagination, extensible)
23
- ├── serializers/ # Per-assistant formatters (claude, cursor, windsurf, copilot, JSON)
24
- ├── server.rb # MCP server setup (stdio + HTTP)
25
- ├── engine.rb # Rails Engine for auto-integration
26
- └── configuration.rb # User-facing config (presets, context_mode, limits)
21
+ ├── introspectors/ # Built-in introspectors (schema, models, non_ar_models, routes, …)
22
+ ├── tools/ # 11 built-in MCP tools (detail levels, pagination, extensible)
23
+ ├── rubydex_adapter.rb # Rubydex API wrapper (singleton + query interface + stats)
24
+ ├── rubydex_adapter/ # Extracted collaborators (one concern each)
25
+ ├── serializer.rb # Hash serialization (declaration_to_hash, definition_to_hash, …)
26
+ │ ├── indexer.rb # Graph building + source file scanning
27
+ │ └── method_counter.rb # Flat method counting pipeline (no nested conditionals)
28
+ ├── serializers/ # Per-assistant formatters (claude, cursor, windsurf, copilot, JSON)
29
+ ├── server.rb # MCP server setup (stdio + HTTP)
30
+ ├── engine.rb # Rails Engine for auto-integration
31
+ └── configuration.rb # User-facing config (presets, context_mode, limits)
27
32
  ```
28
33
 
29
34
  ## Adding a New Introspector