rails-ai-context 4.3.1 → 4.3.3

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +84 -53
  3. data/CLAUDE.md +2 -2
  4. data/README.md +268 -197
  5. data/demo-trace.gif +0 -0
  6. data/demo-trace.tape +21 -0
  7. data/demo.gif +0 -0
  8. data/demo.tape +33 -0
  9. data/docs/GUIDE.md +9 -9
  10. data/lib/generators/rails_ai_context/install/install_generator.rb +2 -1
  11. data/lib/rails_ai_context/configuration.rb +1 -1
  12. data/lib/rails_ai_context/doctor.rb +4 -2
  13. data/lib/rails_ai_context/fingerprinter.rb +2 -1
  14. data/lib/rails_ai_context/introspectors/accessibility_introspector.rb +2 -1
  15. data/lib/rails_ai_context/introspectors/action_mailbox_introspector.rb +2 -1
  16. data/lib/rails_ai_context/introspectors/action_text_introspector.rb +2 -1
  17. data/lib/rails_ai_context/introspectors/active_storage_introspector.rb +6 -3
  18. data/lib/rails_ai_context/introspectors/api_introspector.rb +8 -4
  19. data/lib/rails_ai_context/introspectors/asset_pipeline_introspector.rb +6 -3
  20. data/lib/rails_ai_context/introspectors/auth_introspector.rb +14 -7
  21. data/lib/rails_ai_context/introspectors/config_introspector.rb +12 -6
  22. data/lib/rails_ai_context/introspectors/controller_introspector.rb +20 -10
  23. data/lib/rails_ai_context/introspectors/convention_detector.rb +2 -1
  24. data/lib/rails_ai_context/introspectors/design_token_introspector.rb +8 -4
  25. data/lib/rails_ai_context/introspectors/devops_introspector.rb +6 -3
  26. data/lib/rails_ai_context/introspectors/engine_introspector.rb +4 -2
  27. data/lib/rails_ai_context/introspectors/frontend_framework_introspector.rb +2 -1
  28. data/lib/rails_ai_context/introspectors/i18n_introspector.rb +2 -1
  29. data/lib/rails_ai_context/introspectors/job_introspector.rb +8 -4
  30. data/lib/rails_ai_context/introspectors/middleware_introspector.rb +4 -2
  31. data/lib/rails_ai_context/introspectors/migration_introspector.rb +2 -1
  32. data/lib/rails_ai_context/introspectors/model_introspector.rb +20 -10
  33. data/lib/rails_ai_context/introspectors/multi_database_introspector.rb +12 -6
  34. data/lib/rails_ai_context/introspectors/performance_introspector.rb +19 -19
  35. data/lib/rails_ai_context/introspectors/route_introspector.rb +4 -2
  36. data/lib/rails_ai_context/introspectors/schema_introspector.rb +14 -7
  37. data/lib/rails_ai_context/introspectors/seeds_introspector.rb +2 -1
  38. data/lib/rails_ai_context/introspectors/stimulus_introspector.rb +8 -4
  39. data/lib/rails_ai_context/introspectors/test_introspector.rb +8 -4
  40. data/lib/rails_ai_context/introspectors/turbo_introspector.rb +22 -11
  41. data/lib/rails_ai_context/introspectors/view_introspector.rb +8 -4
  42. data/lib/rails_ai_context/introspectors/view_template_introspector.rb +10 -5
  43. data/lib/rails_ai_context/serializers/claude_rules_serializer.rb +3 -3
  44. data/lib/rails_ai_context/serializers/claude_serializer.rb +3 -3
  45. data/lib/rails_ai_context/serializers/context_file_serializer.rb +2 -1
  46. data/lib/rails_ai_context/serializers/copilot_instructions_serializer.rb +3 -3
  47. data/lib/rails_ai_context/serializers/cursor_rules_serializer.rb +4 -4
  48. data/lib/rails_ai_context/serializers/opencode_rules_serializer.rb +3 -3
  49. data/lib/rails_ai_context/tasks/rails_ai_context.rake +8 -4
  50. data/lib/rails_ai_context/tools/analyze_feature.rb +90 -20
  51. data/lib/rails_ai_context/tools/base_tool.rb +22 -7
  52. data/lib/rails_ai_context/tools/dependency_graph.rb +4 -1
  53. data/lib/rails_ai_context/tools/diagnose.rb +9 -7
  54. data/lib/rails_ai_context/tools/generate_test.rb +32 -4
  55. data/lib/rails_ai_context/tools/get_callbacks.rb +4 -2
  56. data/lib/rails_ai_context/tools/get_concern.rb +12 -6
  57. data/lib/rails_ai_context/tools/get_context.rb +1 -0
  58. data/lib/rails_ai_context/tools/get_controllers.rb +10 -5
  59. data/lib/rails_ai_context/tools/get_conventions.rb +4 -2
  60. data/lib/rails_ai_context/tools/get_design_system.rb +2 -1
  61. data/lib/rails_ai_context/tools/get_env.rb +8 -4
  62. data/lib/rails_ai_context/tools/get_helper_methods.rb +6 -3
  63. data/lib/rails_ai_context/tools/get_job_pattern.rb +2 -1
  64. data/lib/rails_ai_context/tools/get_model_details.rb +11 -5
  65. data/lib/rails_ai_context/tools/get_partial_interface.rb +25 -11
  66. data/lib/rails_ai_context/tools/get_schema.rb +3 -1
  67. data/lib/rails_ai_context/tools/get_service_pattern.rb +2 -1
  68. data/lib/rails_ai_context/tools/get_stimulus.rb +2 -1
  69. data/lib/rails_ai_context/tools/get_test_info.rb +4 -2
  70. data/lib/rails_ai_context/tools/get_turbo_map.rb +22 -11
  71. data/lib/rails_ai_context/tools/get_view.rb +6 -3
  72. data/lib/rails_ai_context/tools/migration_advisor.rb +8 -4
  73. data/lib/rails_ai_context/tools/onboard.rb +107 -22
  74. data/lib/rails_ai_context/tools/performance_check.rb +46 -28
  75. data/lib/rails_ai_context/tools/query.rb +24 -0
  76. data/lib/rails_ai_context/tools/review_changes.rb +13 -12
  77. data/lib/rails_ai_context/tools/runtime_info.rb +10 -5
  78. data/lib/rails_ai_context/tools/search_code.rb +8 -4
  79. data/lib/rails_ai_context/tools/search_docs.rb +2 -1
  80. data/lib/rails_ai_context/tools/session_context.rb +15 -9
  81. data/lib/rails_ai_context/tools/validate.rb +21 -8
  82. data/lib/rails_ai_context/version.rb +1 -1
  83. metadata +5 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ba5dfa48fbbc7efaa498640785dd290523f434ed1f7244849f31046f8359e62
4
- data.tar.gz: 2dca436c86b470b51b38e745a47c64ee3908b7e342677c842940b9515dcf57f2
3
+ metadata.gz: 5568327e1027266892b2514cad27a3665532acfa1405236caecda030ff313739
4
+ data.tar.gz: 6be68e0d310f9a42aafc47161a676d162debba0cfe8a8f4087ee6051f79900cc
5
5
  SHA512:
6
- metadata.gz: 64c07284bc9d61136ff8dee427396fd0237fc628e9ca8cd08524022a7d9031521360b49526a93205cb6c3990284e9096aedead5d88d2fc0d75ad2f58475d30c6
7
- data.tar.gz: d82fbfea6afbe2e7c44f22afa1b8f4201fbb6cf9fda17362675f46000e911bece69a3384133b19bc30d5ffe3c553e4cbb935cbd6031df92f21c6dfc3eb32aa78
6
+ metadata.gz: 151fec5402860aa577e1c21af3ece8c0378a3f5b50f3e18e34236a43061d01da945a869972347e07d2748601c4e7965a449596fecb04cf1eecb0915a0ef73463
7
+ data.tar.gz: 18f46e2c0c1d638c3822687f949588dc5f9874cb61cf3f827827205e472456c95d7c55f74cec6a157bfa99531ab4849a9e14a9c23fce7676fc554463a934d9d3
data/CHANGELOG.md CHANGED
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [4.3.3] — 2026-04-02
9
+
10
+ ### Fixed
11
+ - **100 bare rescue statements across 46 files** — all replaced with `rescue => e` + conditional debug logging (`$stderr.puts ... if ENV["DEBUG"]`); errors are now visible instead of silently swallowed
12
+ - **database_stats introspector orphaned** — `DatabaseStatsIntrospector` was unreachable (not in any preset); added to `:full` preset (32 → 33 introspectors)
13
+ - **CHANGELOG date errors** — v4.0.0 corrected from 2026-03-26 to 2026-03-27, v4.2.0 from 2026-03-26 to 2026-03-30 (verified against git commit timestamps)
14
+ - **CHANGELOG missing v3.0.1 entry** — added (RubyGems republish, no code changes)
15
+ - **CHANGELOG date separator inconsistency** — normalized all 61 version entries to em dash (`—`)
16
+ - **Documentation preset counts** — CLAUDE.md, README, GUIDE all corrected: `:full` 32→33, `:standard` 14→19 (turbo, auth, accessibility, performance, i18n were added in v4.3.1 but docs not updated)
17
+ - **GUIDE.md standard preset table** — added 5 missing introspectors (turbo, auth, accessibility, performance, i18n) to match `configuration.rb`
18
+
19
+ ### Changed
20
+ - Full preset: 32 → 33 introspectors (added :database_stats)
21
+
22
+ ## [4.3.2] — 2026-04-02
23
+
24
+ ### Fixed
25
+ - **review_changes undefined variable** — `changed_tests` (NameError at runtime) replaced with correct `test_files` variable in `detect_warnings`
26
+ - **N+1 introspector O(n*m*k) view scan** — `detect_n_plus_one` now pre-loads all view file contents once via `preload_view_contents` instead of re-globbing per model+association pair
27
+ - **atomic write collision** — temp filenames now include `SecureRandom.hex(4)` suffix to prevent concurrent process collisions on the same file
28
+ - **bare rescue; end across 7 serializers + 2 tools** — all 16 occurrences replaced with `rescue => e` + stderr logging so errors are visible instead of silently swallowed
29
+
30
+ ### Changed
31
+ - Test count: 1176 → 1529 (+353 new tests)
32
+ - 26 new spec files covering previously untested tools, serializer helpers, introspectors, and infrastructure (server, engine, resources, watcher)
33
+
8
34
  ## [4.3.1] — 2026-04-02
9
35
 
10
36
  ### Fixed
@@ -101,7 +127,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
101
127
  ### Changed
102
128
  - Test count: 983 → 998
103
129
 
104
- ## [4.2.0] — 2026-03-26
130
+ ## [4.2.0] — 2026-03-30
105
131
 
106
132
  ### Added
107
133
  - New `rails_search_docs` tool: bundled topic index with weighted keyword search, on-demand GitHub fetch for Rails documentation
@@ -157,7 +183,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
157
183
  - Test count: 817 → 893
158
184
  - Install generator always writes `config.ai_tools` and `config.tool_mode` uncommented for re-install detection
159
185
 
160
- ## [4.0.0] — 2026-03-26
186
+ ## [4.0.0] — 2026-03-27
161
187
 
162
188
  ### Added
163
189
 
@@ -195,7 +221,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
195
221
  - Test count: 681 → 806 examples
196
222
  - Combustion test app expanded with Stimulus controllers, ViewComponents, accessible views, factories
197
223
 
198
- ## [3.1.0] - 2026-03-26
224
+ ## [3.1.0] 2026-03-26
199
225
 
200
226
  ### Fixed
201
227
 
@@ -211,7 +237,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
211
237
  - **File path suggestions in validate** — `files=["cook.rb"]` now suggests `app/models/cook.rb` when the file isn't found at the given path.
212
238
  - **Empty parameter validation** — `edit_context` now returns friendly messages for empty `file` or `near` parameters instead of hard errors.
213
239
 
214
- ## [3.0.0] - 2026-03-26
240
+ ## [3.0.1] 2026-03-26
241
+
242
+ ### Changed
243
+ - Patch for RubyGems publish — no code changes from v3.0.0.
244
+
245
+ ## [3.0.0] — 2026-03-26
215
246
 
216
247
  ### Removed
217
248
 
@@ -238,14 +269,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
238
269
  - All CLI examples use zsh-safe quoting: `rails 'ai:tool[X]'` (brackets are glob patterns in zsh).
239
270
  - README rewritten with real-world workflow examples, categorized tool table, MCP vs CLI showcase.
240
271
 
241
- ## [2.0.5] - 2026-03-25
272
+ ## [2.0.5] 2026-03-25
242
273
 
243
274
  ### Changed
244
275
 
245
276
  - **Task-based MCP tool instructions** — all 6 serializers (Claude, Cursor, Copilot, Windsurf, OpenCode) rewritten from tool-first to task-first: "What are you trying to do?" → exact tool call. 7 task categories: understand a feature, trace a method, add a field, fix a controller, build a view, write tests, find code. Every AI agent now understands which tool to use for any task.
246
277
  - **Concern detail:"full" bug fix** — `\b` after `?`/`!` prevented 13 of 15 method bodies from being extracted. All methods now show source code.
247
278
 
248
- ## [2.0.4] - 2026-03-25
279
+ ## [2.0.4] 2026-03-25
249
280
 
250
281
  ### Added
251
282
 
@@ -256,14 +287,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
256
287
  - **analyze_feature: service test gaps** — checks services for missing test files, not just models/controllers/jobs.
257
288
  - **All 6 serializers updated** — Claude, Cursor, Copilot, Windsurf, OpenCode all document trace mode, concern source, orphaned tables, inherited filters.
258
289
 
259
- ## [2.0.3] - 2026-03-25
290
+ ## [2.0.3] 2026-03-25
260
291
 
261
292
  ### Added
262
293
 
263
294
  - **Trace mode 100%** — `match_type:"trace"` now shows 7 sections: definition with class/module context, source code, internal calls, sibling methods (same file), app callers with route chain hints, and test coverage (separated from app code). Zero follow-up calls needed.
264
295
  - **README rewrite** — neuro marketing techniques: loss aversion hook, measured token savings table, trace output inline, architecture diagram. 456→261 lines.
265
296
 
266
- ## [2.0.2] - 2026-03-25
297
+ ## [2.0.2] 2026-03-25
267
298
 
268
299
  ### Added
269
300
 
@@ -281,7 +312,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
281
312
 
282
313
  - **Documentation audit** — fixed max_tool_response_chars reference (120K→200K), added missing search_code params to GUIDE, added config.ai_tools to config reference.
283
314
 
284
- ## [2.0.1] - 2026-03-25
315
+ ## [2.0.1] 2026-03-25
285
316
 
286
317
  ### Fixed
287
318
 
@@ -292,7 +323,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
292
323
  - **Issue #14** — `multi_db[:databases].keys` crash on Array fixed.
293
324
  - **Search code NON_CODE_GLOBS** — excludes lock files, docs, CI configs, generated context from all searches.
294
325
 
295
- ## [2.0.0] - 2026-03-24
326
+ ## [2.0.0] 2026-03-24
296
327
 
297
328
  ### Added
298
329
 
@@ -337,14 +368,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
337
368
 
338
369
  - **JS fallback validator false-positives** — escaped backslashes before string-closing quotes (`"path\\"`) no longer cause false bracket mismatch errors. Replaced `prev_char` check with proper `escaped` toggle flag.
339
370
 
340
- ## [1.3.1] - 2026-03-23
371
+ ## [1.3.1] 2026-03-23
341
372
 
342
373
  ### Fixed
343
374
 
344
375
  - **Documentation audit** — updated tool count from 14 to 15 across README, GUIDE, CONTRIBUTING, server.json. Added `rails_get_design_system` documentation section to GUIDE.md. Updated SECURITY.md supported versions. Fixed spec count in CLAUDE.md. Added `rails_get_design_system` to README tool table. Updated `rails_analyze_feature` description to reflect full-stack discovery (services, jobs, views, Stimulus, tests, related models, env deps).
345
376
  - **analyze_feature crash on complex models** — added type guards (`is_a?(Hash)`, `is_a?(Array)`) to all data access points preventing `no implicit conversion of Symbol into Integer` errors on models with many associations or complex data.
346
377
 
347
- ## [1.3.0] - 2026-03-23
378
+ ## [1.3.0] 2026-03-23
348
379
 
349
380
  ### Added
350
381
 
@@ -366,7 +397,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
366
397
  - **Rules serializer methods cap raised to 20** (RS1) — uses introspector's pre-filtered methods directly instead of redundant re-filtering
367
398
  - **oklch token noise filtered** (DS21) — complex color values (oklch, calc, var) hidden from summary, only shown in `detail:"full"`
368
399
 
369
- ## [1.2.1] - 2026-03-23
400
+ ## [1.2.1] 2026-03-23
370
401
 
371
402
  ### Fixed
372
403
 
@@ -380,7 +411,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
380
411
  - **Column defaults shown in generated rules** — columns with non-nil defaults now show `(=value)` inline.
381
412
  - **`analyze_feature` matches models by table name and underscore form** — `feature:"share"` now finds `CookShare` (via `cook_shares` table and `cook_share` underscore form), not just exact model name substring.
382
413
 
383
- ## [1.2.0] - 2026-03-23
414
+ ## [1.2.0] 2026-03-23
384
415
 
385
416
  ### Added
386
417
 
@@ -394,7 +425,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
394
425
  - **"UI Patterns" section renamed to "Design System"** — richer content with color palette, typography, components, spacing conventions, interactive states, and design rules.
395
426
  - **Design tokens consumed for the first time** — `context[:design_tokens]` data was previously extracted but never rendered. Now merged into design system output in all serializers and the new MCP tool.
396
427
 
397
- ## [1.1.1] - 2026-03-23
428
+ ## [1.1.1] 2026-03-23
398
429
 
399
430
  ### Added
400
431
 
@@ -405,13 +436,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
405
436
 
406
437
  - **Tool count corrected from 13 to 14** across all serializers to reflect `rails_analyze_feature` added in v1.0.0.
407
438
 
408
- ## [1.1.0] - 2026-03-23
439
+ ## [1.1.0] 2026-03-23
409
440
 
410
441
  ### Changed
411
442
 
412
443
  - **Default preset changed to `:full`** — all 28 introspectors now run by default, giving AI assistants richer context out of the box. Introspectors that don't find relevant data return empty hashes with zero overhead. Use `config.preset = :standard` for the previous 13-core default.
413
444
 
414
- ## [1.0.0] - 2026-03-23
445
+ ## [1.0.0] 2026-03-23
415
446
 
416
447
  ### Added
417
448
 
@@ -424,25 +455,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
424
455
 
425
456
  - **LLM-optimized tool descriptions (all 14 tools)** — every description now follows "what it does / Use when: / key params" format so AI agents pick the right tool on first try.
426
457
 
427
- ## [0.15.10] - 2026-03-23
458
+ ## [0.15.10] 2026-03-23
428
459
 
429
460
  ### Changed
430
461
 
431
462
  - **Gemspec description rewritten** — repositioned from feature list to value proposition: mental model, semantic validation, cross-file error detection.
432
463
 
433
- ## [0.15.9] - 2026-03-23
464
+ ## [0.15.9] 2026-03-23
434
465
 
435
466
  ### Added
436
467
 
437
468
  - **Deep diagnostic checks in `rails ai:doctor`** — upgraded from 13 shallow file-existence checks to 20 deep checks: pending migrations, context file freshness, .mcp.json validation, introspector health (dry-runs each one), preset coverage (detects features not in preset), .env/.master.key gitignore check, auto_mount production warning, schema/view size vs limits.
438
469
 
439
- ## [0.15.8] - 2026-03-23
470
+ ## [0.15.8] 2026-03-23
440
471
 
441
472
  ### Added
442
473
 
443
474
  - **Semantic validation (`level:"rails"`)** — `rails_validate` now supports `level:"rails"` for deep semantic checks beyond syntax: partial existence, route helper validity, column references vs schema, strong params vs schema columns, callback method existence, route-action consistency, `has_many` dependent options, missing FK indexes, and Stimulus controller file existence.
444
475
 
445
- ## [0.15.7] - 2026-03-22
476
+ ## [0.15.7] 2026-03-22
446
477
 
447
478
  ### Improved
448
479
 
@@ -454,7 +485,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
454
485
  - **Concern test lookup** — `rails_get_test_info(model:"PlanLimitable")` searches concern test paths.
455
486
  - **Controller flexible matching** — underscore-based normalization handles CamelCase, snake_case, and slash notation consistently.
456
487
 
457
- ## [0.15.6] - 2026-03-22
488
+ ## [0.15.6] 2026-03-22
458
489
 
459
490
  ### Added
460
491
 
@@ -470,7 +501,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
470
501
  - **Concern methods inline** — shows public methods from concern source files (e.g. `PlanLimitable — can_cook?, increment_cook_count!`).
471
502
  - **MCP tool error messages** — all tools now show available values on error/not-found for AI self-correction.
472
503
 
473
- ## [0.15.5] - 2026-03-22
504
+ ## [0.15.5] 2026-03-22
474
505
 
475
506
  ### Fixed
476
507
 
@@ -483,7 +514,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
483
514
  - **Namespace test lookup** — supports `bonus/crises` format and flat test directories.
484
515
  - **Empty inputs** — `near:""` in edit_context and `pattern:""` in search return helpful errors.
485
516
 
486
- ## [0.15.4] - 2026-03-22
517
+ ## [0.15.4] 2026-03-22
487
518
 
488
519
  ### Fixed
489
520
 
@@ -500,7 +531,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
500
531
 
501
532
  - **Pagination on models, controllers, stimulus** — `limit`/`offset` params (default 50) with "end of results" hints. Prevents token bombs on large apps.
502
533
 
503
- ## [0.15.3] - 2026-03-22
534
+ ## [0.15.3] 2026-03-22
504
535
 
505
536
  ### Fixed
506
537
 
@@ -511,20 +542,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
511
542
 
512
543
  - **Documentation** — updated all docs (README, CLAUDE.md, GUIDE.md, SECURITY.md, CHANGELOG, server.json, install generator) to match v0.15.x codebase. Fixed spec counts, file counts, preset counts, config options, and supported versions.
513
544
 
514
- ## [0.15.2] - 2026-03-22
545
+ ## [0.15.2] 2026-03-22
515
546
 
516
547
  ### Fixed
517
548
 
518
549
  - **Test command detection** — Serializers now use detected test framework (minitest → `rails test`, rspec → `bundle exec rspec`) instead of hardcoding `bundle exec rspec`. Default is `rails test` (the Rails default). Contributed by @curi (PR #13).
519
550
 
520
- ## [0.15.1] - 2026-03-22
551
+ ## [0.15.1] 2026-03-22
521
552
 
522
553
  ### Fixed
523
554
 
524
555
  - **Copilot serializer** — Show all model associations (not capped at 3), use human-readable architecture/pattern labels.
525
556
  - **OpenCode rules serializer** — Filter framework controllers (Devise) from AGENTS.md output, show all associations, match `before_action` with `!`/`?` suffixes.
526
557
 
527
- ## [0.15.0] - 2026-03-22
558
+ ## [0.15.0] 2026-03-22
528
559
 
529
560
  ### Security
530
561
 
@@ -565,7 +596,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
565
596
  - **Strong params body** — Action detail now shows the actual `permit(...)` call.
566
597
  - **AR-generated methods** — Filter `build_*`, `*_ids=`, etc. from model instance methods.
567
598
 
568
- ## [0.14.0] - 2026-03-20
599
+ ## [0.14.0] 2026-03-20
569
600
 
570
601
  ### Fixed
571
602
 
@@ -583,7 +614,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
583
614
  - **Stimulus dash/underscore normalization** — Both `weekly-chart` and `weekly_chart` work for controller lookup. Output shows HTML `data-controller` attribute.
584
615
  - **Model public method signatures** — `rails_get_model_details(model: "Cook")` shows method names with params from source, stopping at private boundary.
585
616
 
586
- ## [0.13.1] - 2026-03-20
617
+ ## [0.13.1] 2026-03-20
587
618
 
588
619
  ### Changed
589
620
 
@@ -591,7 +622,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
591
622
  - **Model details** — shows method signatures (name + parameters) instead of just method names.
592
623
  - Removed unused demo files; fixed GUIDE.md preset tables.
593
624
 
594
- ## [0.13.0] - 2026-03-20
625
+ ## [0.13.0] 2026-03-20
595
626
 
596
627
  ### Added
597
628
 
@@ -612,7 +643,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
612
643
  - ERB validation was broken due to shell quoting bug (backticks + nested quotes). Replaced with `Open3.capture2e("ruby", "-e", script, ARGV[0])`.
613
644
  - Rubocop offenses in validate.rb (18 spacing issues auto-corrected).
614
645
 
615
- ## [0.12.0] - 2026-03-20
646
+ ## [0.12.0] 2026-03-20
616
647
 
617
648
  ### Added
618
649
 
@@ -645,7 +676,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
645
676
  - Progress bars misclassified as badges.
646
677
  - Input detection picking up alert divs instead of actual inputs.
647
678
 
648
- ## [0.11.0] - 2026-03-20
679
+ ## [0.11.0] 2026-03-20
649
680
 
650
681
  ### Added
651
682
 
@@ -653,20 +684,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
653
684
  - **View partial structure** — `rails_get_view(detail: "standard")` shows model fields and helper methods used by each partial.
654
685
  - **Schema column names** — `.claude/rules/rails-schema.md` shows key column names with types, foreign keys, indexes, and enum values. Keeps polymorphic `_type`, STI `type`, and soft-delete `deleted_at` columns.
655
686
 
656
- ## [0.10.2] - 2026-03-20
687
+ ## [0.10.2] 2026-03-20
657
688
 
658
689
  ### Security
659
690
 
660
691
  - **ReDoS protection** — added regex timeout and converted greedy quantifiers to non-greedy across all pattern matching.
661
692
  - **File size limits** — added size caps on parsed files to prevent memory exhaustion from oversized inputs.
662
693
 
663
- ## [0.10.1] - 2026-03-19
694
+ ## [0.10.1] 2026-03-19
664
695
 
665
696
  ### Changed
666
697
 
667
698
  - Patch release for RubyGems republish (no code changes).
668
699
 
669
- ## [0.10.0] - 2026-03-19
700
+ ## [0.10.0] 2026-03-19
670
701
 
671
702
  ### Added
672
703
 
@@ -677,7 +708,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
677
708
  - **ViewTemplateIntrospector** — new introspector that reads view file contents and extracts partial references and Stimulus data attributes.
678
709
  - **Stimulus and view_templates in standard preset** — both introspectors now in `:standard` preset (11 introspectors, was 10).
679
710
 
680
- ## [0.9.0] - 2026-03-19
711
+ ## [0.9.0] 2026-03-19
681
712
 
682
713
  ### Added
683
714
 
@@ -690,7 +721,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
690
721
  - **Removed `.cursorrules` root file** — Cursor officially deprecated `.cursorrules` in favor of `.cursor/rules/`. The `:cursor` format now generates only `.cursor/rules/*.mdc` split rules. The `rails-project.mdc` split rule (with `alwaysApply: true`) already provides the project overview.
691
722
  - **License changed from AGPL-3.0 to MIT** — removes the copyleft blocker for SaaS and commercial projects.
692
723
 
693
- ## [0.8.5] - 2026-03-19
724
+ ## [0.8.5] 2026-03-19
694
725
 
695
726
  ### Fixed
696
727
 
@@ -703,27 +734,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
703
734
 
704
735
  - **Standalone CLI documented** — the `rails-ai-context` executable (serve, context, inspect, watch, doctor, version) is now documented in README, GUIDE, and CLAUDE.md.
705
736
 
706
- ## [0.8.4] - 2026-03-19
737
+ ## [0.8.4] 2026-03-19
707
738
 
708
739
  ### Added
709
740
 
710
741
  - **`structure.sql` support** — the schema introspector now parses `db/structure.sql` when no `db/schema.rb` exists and no database connection is available. Extracts tables, columns (with SQL type normalization), indexes, and foreign keys from PostgreSQL dump format. Prefers `schema.rb` when both exist.
711
742
  - **Fingerprinter watches `db/structure.sql`** — file changes to `structure.sql` now trigger cache invalidation and live reload.
712
743
 
713
- ## [0.8.3] - 2026-03-19
744
+ ## [0.8.3] 2026-03-19
714
745
 
715
746
  ### Changed
716
747
 
717
748
  - **License published to RubyGems** — v0.8.2 changed the license from MIT to AGPL-3.0 but the gem was not republished. This release ensures the AGPL-3.0 license is reflected on RubyGems.
718
749
 
719
- ## [0.8.2] - 2026-03-19
750
+ ## [0.8.2] 2026-03-19
720
751
 
721
752
  ### Changed
722
753
 
723
754
  - **License** — changed from MIT to AGPL-3.0 to protect against unauthorized clones and ensure derivative works remain open source.
724
755
  - **CI: auto-publish to MCP Registry** — the release workflow now automatically publishes to the MCP Registry via `mcp-publisher` with GitHub OIDC auth. No manual `mcp-publisher login` + `publish` needed.
725
756
 
726
- ## [0.8.1] - 2026-03-19
757
+ ## [0.8.1] 2026-03-19
727
758
 
728
759
  ### Added
729
760
 
@@ -734,14 +765,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
734
765
  - **Live reload LoadError in HTTP mode** — when `live_reload = true` and the `listen` gem was missing, the `start_http` method's rescue block (for rackup fallback) swallowed the live reload error, producing a confusing rack error instead of the correct "listen gem required" message. The rescue is now scoped to the rackup require only.
735
766
  - **Dangling @live_reload reference** — `@live_reload` was assigned before `start` was called. If `start` raised LoadError, the instance variable pointed to a non-functional object. Now only assigned after successful start.
736
767
 
737
- ## [0.8.0] - 2026-03-19
768
+ ## [0.8.0] 2026-03-19
738
769
 
739
770
  ### Added
740
771
 
741
772
  - **MCP Live Reload** — when running `rails ai:serve`, file changes automatically invalidate tool caches and send MCP notifications (`notifications/resources/list_changed`) to connected AI clients. The AI's context stays fresh without manual re-querying. Requires the `listen` gem (enabled by default when available). Configurable via `config.live_reload` (`:auto`, `true`, `false`) and `config.live_reload_debounce` (default: 1.5s).
742
773
  - **Live reload doctor check** — `rails ai:doctor` now warns when the `listen` gem is not installed.
743
774
 
744
- ## [0.7.1] - 2026-03-19
775
+ ## [0.7.1] 2026-03-19
745
776
 
746
777
  ### Added
747
778
 
@@ -753,7 +784,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
753
784
  - **Schema version parsing** — versions with underscores (e.g. `2024_01_15_123456`) were truncated to the first digit group. Now captures the full version string.
754
785
  - **Documentation** — updated README (detail levels, pagination, generated file tree, config options), SECURITY.md (supported versions), CONTRIBUTING.md (project structure), gemspec (post-install message), demo_script.sh (all 17 generated files).
755
786
 
756
- ## [0.7.0] - 2026-03-19
787
+ ## [0.7.0] 2026-03-19
757
788
 
758
789
  ### Added
759
790
 
@@ -776,7 +807,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
776
807
  - All tools return pagination hints when results are truncated.
777
808
  - `.windsurfrules` now uses dedicated `WindsurfSerializer` instead of sharing `RulesSerializer` with Cursor.
778
809
 
779
- ## [0.6.0] - 2026-03-18
810
+ ## [0.6.0] 2026-03-18
780
811
 
781
812
  ### Added
782
813
 
@@ -797,7 +828,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
797
828
  - Doctor checks expanded from 11 to 12
798
829
  - Static MCP resources expanded from 7 to 9
799
830
 
800
- ## [0.5.2] - 2026-03-18
831
+ ## [0.5.2] 2026-03-18
801
832
 
802
833
  ### Fixed
803
834
 
@@ -805,14 +836,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
805
836
  - **Zeitwerk dependency** — Changed from open-ended `>= 2.6` to pessimistic `~> 2.6` per RubyGems best practices
806
837
  - **Documentation** — Updated CONTRIBUTING.md, CHANGELOG.md, and CLAUDE.md to reflect Zeitwerk autoloading, introspector presets, and `.mcp.json` auto-discovery changes
807
838
 
808
- ## [0.5.1] - 2026-03-18
839
+ ## [0.5.1] 2026-03-18
809
840
 
810
841
  ### Fixed
811
842
 
812
843
  - Documentation updates and animated demo GIF added to README.
813
844
  - Zeitwerk autoloading fixes for edge cases.
814
845
 
815
- ## [0.5.0] - 2026-03-18
846
+ ## [0.5.0] 2026-03-18
816
847
 
817
848
  ### Added
818
849
 
@@ -833,7 +864,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
833
864
  - Default introspectors reduced from 21 to 8 (`:standard` preset) for faster boot; use `config.preset = :full` for all 21
834
865
  - New files auto-loaded by Zeitwerk — no manual `require_relative` needed when adding introspectors or tools
835
866
 
836
- ## [0.4.0] - 2026-03-18
867
+ ## [0.4.0] 2026-03-18
837
868
 
838
869
  ### Added
839
870
 
@@ -870,7 +901,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
870
901
  - Doctor checks expanded from 7 to 11
871
902
  - Test suite expanded from 149 to 247 examples with exact value assertions
872
903
 
873
- ## [0.3.0] - 2026-03-18
904
+ ## [0.3.0] 2026-03-18
874
905
 
875
906
  ### Added
876
907
 
@@ -895,7 +926,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
895
926
  - `generate_context` now returns `{ written: [], skipped: [] }` instead of flat array
896
927
  - Default introspectors now include `:stimulus`
897
928
 
898
- ## [0.2.0] - 2026-03-18
929
+ ## [0.2.0] 2026-03-18
899
930
 
900
931
  ### Added
901
932
 
@@ -909,7 +940,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
909
940
  - `rails ai:context_for[claude]` failing in zsh due to bracket glob interpretation
910
941
  - Double introspection in `ai:context` and `ai:context_for` tasks (removed unused `RailsAiContext.introspect` calls)
911
942
 
912
- ## [0.1.0] - 2026-03-18
943
+ ## [0.1.0] 2026-03-18
913
944
 
914
945
  ### Added
915
946
 
data/CLAUDE.md CHANGED
@@ -34,7 +34,7 @@ structure to AI assistants via the Model Context Protocol (MCP).
34
34
  7. **Diff-aware** — context regeneration skips unchanged files
35
35
  8. **Per-assistant serializers** — each AI tool gets tailored output format
36
36
  9. **Zeitwerk autoloading** — files loaded on-demand, not all upfront
37
- 10. **Introspector presets** — `:full` (32) default, `:standard` (14 core) for lightweight usage
37
+ 10. **Introspector presets** — `:full` (33) default, `:standard` (19) for lightweight usage
38
38
  11. **MCP auto-discovery** — `.mcp.json` generated by install generator
39
39
  12. **Compact by default** — context files ≤150 lines, MCP tools use `detail` parameter (summary/standard/full)
40
40
  13. **Per-tool split rules** — `.claude/rules/`, `.cursor/rules/`, `.github/instructions/`
@@ -60,7 +60,7 @@ structure to AI assistants via the Model Context Protocol (MCP).
60
60
  ## Testing
61
61
 
62
62
  ```bash
63
- bundle exec rspec # Run specs (1170 examples)
63
+ bundle exec rspec # Run specs (1529 examples)
64
64
  bundle exec rubocop # Lint
65
65
  ```
66
66