rails-ai-context 4.3.2 → 4.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +127 -53
- data/CLAUDE.md +3 -1
- data/README.md +268 -197
- data/demo-trace.gif +0 -0
- data/demo-trace.tape +21 -0
- data/demo.gif +0 -0
- data/demo.tape +33 -0
- data/docs/GUIDE.md +9 -9
- data/lib/generators/rails_ai_context/install/install_generator.rb +2 -1
- data/lib/rails_ai_context/cli/tool_runner.rb +1 -1
- data/lib/rails_ai_context/configuration.rb +25 -1
- data/lib/rails_ai_context/doctor.rb +4 -2
- data/lib/rails_ai_context/fingerprinter.rb +6 -1
- data/lib/rails_ai_context/introspectors/accessibility_introspector.rb +52 -1
- data/lib/rails_ai_context/introspectors/action_mailbox_introspector.rb +10 -2
- data/lib/rails_ai_context/introspectors/action_text_introspector.rb +22 -2
- data/lib/rails_ai_context/introspectors/active_storage_introspector.rb +50 -4
- data/lib/rails_ai_context/introspectors/api_introspector.rb +41 -5
- data/lib/rails_ai_context/introspectors/asset_pipeline_introspector.rb +10 -4
- data/lib/rails_ai_context/introspectors/auth_introspector.rb +62 -7
- data/lib/rails_ai_context/introspectors/component_introspector.rb +6 -0
- data/lib/rails_ai_context/introspectors/config_introspector.rb +59 -9
- data/lib/rails_ai_context/introspectors/controller_introspector.rb +45 -13
- data/lib/rails_ai_context/introspectors/convention_detector.rb +25 -2
- data/lib/rails_ai_context/introspectors/database_stats_introspector.rb +58 -4
- data/lib/rails_ai_context/introspectors/design_token_introspector.rb +27 -5
- data/lib/rails_ai_context/introspectors/devops_introspector.rb +15 -8
- data/lib/rails_ai_context/introspectors/engine_introspector.rb +12 -3
- data/lib/rails_ai_context/introspectors/frontend_framework_introspector.rb +36 -1
- data/lib/rails_ai_context/introspectors/gem_introspector.rb +47 -1
- data/lib/rails_ai_context/introspectors/i18n_introspector.rb +49 -3
- data/lib/rails_ai_context/introspectors/job_introspector.rb +48 -5
- data/lib/rails_ai_context/introspectors/middleware_introspector.rb +24 -3
- data/lib/rails_ai_context/introspectors/migration_introspector.rb +4 -1
- data/lib/rails_ai_context/introspectors/model_introspector.rb +108 -11
- data/lib/rails_ai_context/introspectors/multi_database_introspector.rb +57 -12
- data/lib/rails_ai_context/introspectors/performance_introspector.rb +34 -9
- data/lib/rails_ai_context/introspectors/rake_task_introspector.rb +12 -2
- data/lib/rails_ai_context/introspectors/route_introspector.rb +25 -8
- data/lib/rails_ai_context/introspectors/schema_introspector.rb +45 -7
- data/lib/rails_ai_context/introspectors/seeds_introspector.rb +5 -2
- data/lib/rails_ai_context/introspectors/stimulus_introspector.rb +59 -6
- data/lib/rails_ai_context/introspectors/test_introspector.rb +50 -5
- data/lib/rails_ai_context/introspectors/turbo_introspector.rb +44 -13
- data/lib/rails_ai_context/introspectors/view_introspector.rb +46 -7
- data/lib/rails_ai_context/introspectors/view_template_introspector.rb +25 -7
- data/lib/rails_ai_context/resources.rb +1 -1
- data/lib/rails_ai_context/server.rb +6 -3
- data/lib/rails_ai_context/tasks/rails_ai_context.rake +8 -4
- data/lib/rails_ai_context/tools/analyze_feature.rb +66 -19
- data/lib/rails_ai_context/tools/base_tool.rb +1 -1
- data/lib/rails_ai_context/tools/diagnose.rb +4 -2
- data/lib/rails_ai_context/tools/get_callbacks.rb +4 -2
- data/lib/rails_ai_context/tools/get_concern.rb +12 -6
- data/lib/rails_ai_context/tools/get_controllers.rb +10 -5
- data/lib/rails_ai_context/tools/get_conventions.rb +4 -2
- data/lib/rails_ai_context/tools/get_design_system.rb +2 -1
- data/lib/rails_ai_context/tools/get_env.rb +8 -4
- data/lib/rails_ai_context/tools/get_helper_methods.rb +6 -3
- data/lib/rails_ai_context/tools/get_job_pattern.rb +2 -1
- data/lib/rails_ai_context/tools/get_model_details.rb +10 -5
- data/lib/rails_ai_context/tools/get_partial_interface.rb +14 -7
- data/lib/rails_ai_context/tools/get_schema.rb +2 -1
- data/lib/rails_ai_context/tools/get_service_pattern.rb +2 -1
- data/lib/rails_ai_context/tools/get_stimulus.rb +2 -1
- data/lib/rails_ai_context/tools/get_test_info.rb +4 -2
- data/lib/rails_ai_context/tools/get_turbo_map.rb +22 -11
- data/lib/rails_ai_context/tools/get_view.rb +6 -3
- data/lib/rails_ai_context/tools/migration_advisor.rb +2 -1
- data/lib/rails_ai_context/tools/onboard.rb +2 -1
- data/lib/rails_ai_context/tools/performance_check.rb +2 -1
- data/lib/rails_ai_context/tools/query.rb +5 -1
- data/lib/rails_ai_context/tools/read_logs.rb +3 -0
- data/lib/rails_ai_context/tools/runtime_info.rb +10 -5
- data/lib/rails_ai_context/tools/search_code.rb +8 -4
- data/lib/rails_ai_context/tools/search_docs.rb +2 -1
- data/lib/rails_ai_context/tools/session_context.rb +2 -1
- data/lib/rails_ai_context/tools/validate.rb +16 -8
- data/lib/rails_ai_context/version.rb +1 -1
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6fa4865cb6081dbc1a243371d270db6f80304fd5c3d7ccd8052d2c7c0d672dc6
|
|
4
|
+
data.tar.gz: 055a0fc1462f6a698e004090fda64703e98478af1d8bd1ca3426d85a5e9b6f69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ac7a84cb7f54d6106c2bf33c94208f75871b9b8d25d304e0ddde0e36f73d3bd8e973dbf5f81b0665545548fd740fbdf60726a79195889cfbb9683cc733c80307
|
|
7
|
+
data.tar.gz: 440e13668f46d1578933bd5f053ea15cbae494938097f55380a0ab78c3a30a0f92dd74b20ad37edf7aed67f4aade37810e02b141e9d25e8963d40e3d63a650b9
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,75 @@ 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.4.0] — 2026-04-03
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **33 introspector enhancements** — every introspector upgraded with new detection capabilities:
|
|
12
|
+
- **SchemaIntrospector**: expression indexes, column comments in static parse, `change_column_default`/`change_column_null` in migration replay
|
|
13
|
+
- **ModelIntrospector**: STI hierarchy detection (parent/children/type column), `attribute` API, enum `_prefix:`/`_suffix:`, `after_commit on:` parsing, inline `private def` exclusion
|
|
14
|
+
- **RouteIntrospector**: route parameter extraction, root route detection, RESTful action flag
|
|
15
|
+
- **JobIntrospector**: SolidQueue recurring job config, Sidekiq config (concurrency/queues), job callbacks (`before_perform`, `around_enqueue`, etc.)
|
|
16
|
+
- **GemIntrospector**: path/git gems from Gemfile, gem group extraction (dev/test/prod)
|
|
17
|
+
- **ConventionDetector**: multi-tenant (Apartment/ActsAsTenant), feature flags (Flipper/LaunchDarkly), error monitoring (Sentry/Bugsnag/Honeybadger), event-driven (Kafka/RabbitMQ/SNS), Zeitwerk detection, STI with type column verification
|
|
18
|
+
- **ControllerIntrospector**: `rate_limit` parsed into structured data (to/within/only), inline `private def` exclusion
|
|
19
|
+
- **StimulusIntrospector**: lifecycle hooks (connect/disconnect/initialize), outlet controller type mapping, action bindings from views (`data-action` parsing)
|
|
20
|
+
- **ViewIntrospector**: `yield`/`content_for` extraction from layouts, conditional layout detection with only/except
|
|
21
|
+
- **TurboIntrospector**: stream action semantics (append/update/remove counts), frame `src` URL extraction
|
|
22
|
+
- **I18nIntrospector**: locale fallback chain detection, locale coverage % per locale
|
|
23
|
+
- **ConfigIntrospector**: cache store options, error monitoring gem detection, job processor config (Sidekiq queues/concurrency)
|
|
24
|
+
- **ActiveStorageIntrospector**: attachment validations (content_type/size), variant definitions
|
|
25
|
+
- **ActionTextIntrospector**: Trix editor customization detection (toolbar/attachment/events)
|
|
26
|
+
- **AuthIntrospector**: OmniAuth provider detection, Devise settings (timeout/lockout/password_length)
|
|
27
|
+
- **ApiIntrospector**: GraphQL resolvers/subscriptions/dataloaders, API pagination strategy detection
|
|
28
|
+
- **TestIntrospector**: shared examples/contexts detection, database cleaner strategy
|
|
29
|
+
- **RakeTaskIntrospector**: task dependencies (`=> :prerequisite`), task arguments (`[:arg1, :arg2]`)
|
|
30
|
+
- **AssetPipelineIntrospector**: Bun bundler, Foundation CSS, PostCSS standalone detection
|
|
31
|
+
- **DevOpsIntrospector**: Fly.io/Render/Railway deployment detection, `docker-compose.yaml` support
|
|
32
|
+
- **ActionMailboxIntrospector**: mailbox callback detection (before/after/around_processing)
|
|
33
|
+
- **MigrationIntrospector**: `change_column_default`, `change_column_null`, `add_check_constraint` action detection
|
|
34
|
+
- **SeedsIntrospector**: CSV loader detection, seed ordering detection
|
|
35
|
+
- **MiddlewareIntrospector**: middleware added via initializers (`config.middleware.use/insert_before`)
|
|
36
|
+
- **EngineIntrospector**: route count + model count inside discovered engines
|
|
37
|
+
- **MultiDatabaseIntrospector**: shard names/keys/count from `connects_to`, improved YAML parsing for nested multi-db configs
|
|
38
|
+
- **ComponentIntrospector**: `**kwargs` splat prop detection
|
|
39
|
+
- **AccessibilityIntrospector**: heading hierarchy (h1-h6), skip link detection, `aria-live` regions, form input analysis (required/types)
|
|
40
|
+
- **PerformanceIntrospector**: polymorphic association compound index detection (`[type, id]`)
|
|
41
|
+
- **FrontendFrameworkIntrospector**: API client detection (Axios/Apollo/SWR/etc.), component library detection (MUI/Radix/shadcn/etc.)
|
|
42
|
+
- **DatabaseStatsIntrospector**: MySQL + SQLite support (was PostgreSQL-only), PostgreSQL dead row counts
|
|
43
|
+
- **ViewTemplateIntrospector**: slot reference detection
|
|
44
|
+
- **DesignTokenIntrospector**: Tailwind arbitrary value extraction
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
- **Security: SQLite SQL injection** — `database_stats_introspector` used string interpolation for table names in COUNT queries; now uses `conn.quote_table_name`
|
|
48
|
+
- **Security: query column redaction bypass** — `SELECT password AS pwd` bypassed redaction; now also matches columns ending in `password`, `secret`, `token`, `key`, `digest`, `hash`
|
|
49
|
+
- **Security: log redaction gaps** — added AWS access key (`AKIA...`), JWT token (`eyJ...`), and SSH/TLS private key header patterns
|
|
50
|
+
- **Security: HTTP bind wildcard** — non-loopback warning now catches `0.0.0.0` and `::` (was only checking 3 specific addresses)
|
|
51
|
+
- **Thread safety: `app_size()` race condition** — `SHARED_CACHE[:context]` read without mutex; now wrapped in `SHARED_CACHE[:mutex].synchronize`
|
|
52
|
+
- **Crash: nil callback filter** — `model_introspector` `cb.filter.to_s` crashed on nil filters; added `cb.filter.nil?` guard
|
|
53
|
+
- **Crash: fingerprinter TOCTOU** — `File.mtime` after `File.exist?` could raise `Errno::ENOENT` if file deleted between calls; added rescue
|
|
54
|
+
- **Crash: tool_runner bounds** — `args[i+1]` access without bounds check; added `i + 1 < args.size` guard
|
|
55
|
+
- **Bug: server logs wrong tool list** — logged all 39 `TOOLS` instead of filtered `active_tools` after `skip_tools`; now shows correct count and names
|
|
56
|
+
- **Bug: STI false positive** — convention detector flagged `Admin < User` as STI even without `type` column; now verifies parent's table has `type` column via schema.rb
|
|
57
|
+
- **Bug: resources bare raise** — `raise "Unknown resource"` changed to `raise RailsAiContext::Error`
|
|
58
|
+
- **Config validation** — `http_port` (1-65535), `cache_ttl` (> 0), `max_tool_response_chars` (> 0), `query_row_limit` (1-1000) now validated on assignment
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
- Test count: 1529 (unchanged — all new features tested via integration test against sample app)
|
|
62
|
+
|
|
63
|
+
## [4.3.3] — 2026-04-02
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
- **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
|
|
67
|
+
- **database_stats introspector orphaned** — `DatabaseStatsIntrospector` was unreachable (not in any preset); added to `:full` preset (32 → 33 introspectors)
|
|
68
|
+
- **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)
|
|
69
|
+
- **CHANGELOG missing v3.0.1 entry** — added (RubyGems republish, no code changes)
|
|
70
|
+
- **CHANGELOG date separator inconsistency** — normalized all 61 version entries to em dash (`—`)
|
|
71
|
+
- **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)
|
|
72
|
+
- **GUIDE.md standard preset table** — added 5 missing introspectors (turbo, auth, accessibility, performance, i18n) to match `configuration.rb`
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
- Full preset: 32 → 33 introspectors (added :database_stats)
|
|
76
|
+
|
|
8
77
|
## [4.3.2] — 2026-04-02
|
|
9
78
|
|
|
10
79
|
### Fixed
|
|
@@ -113,7 +182,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
113
182
|
### Changed
|
|
114
183
|
- Test count: 983 → 998
|
|
115
184
|
|
|
116
|
-
## [4.2.0] — 2026-03-
|
|
185
|
+
## [4.2.0] — 2026-03-30
|
|
117
186
|
|
|
118
187
|
### Added
|
|
119
188
|
- New `rails_search_docs` tool: bundled topic index with weighted keyword search, on-demand GitHub fetch for Rails documentation
|
|
@@ -169,7 +238,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
169
238
|
- Test count: 817 → 893
|
|
170
239
|
- Install generator always writes `config.ai_tools` and `config.tool_mode` uncommented for re-install detection
|
|
171
240
|
|
|
172
|
-
## [4.0.0] — 2026-03-
|
|
241
|
+
## [4.0.0] — 2026-03-27
|
|
173
242
|
|
|
174
243
|
### Added
|
|
175
244
|
|
|
@@ -207,7 +276,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
207
276
|
- Test count: 681 → 806 examples
|
|
208
277
|
- Combustion test app expanded with Stimulus controllers, ViewComponents, accessible views, factories
|
|
209
278
|
|
|
210
|
-
## [3.1.0]
|
|
279
|
+
## [3.1.0] — 2026-03-26
|
|
211
280
|
|
|
212
281
|
### Fixed
|
|
213
282
|
|
|
@@ -223,7 +292,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
223
292
|
- **File path suggestions in validate** — `files=["cook.rb"]` now suggests `app/models/cook.rb` when the file isn't found at the given path.
|
|
224
293
|
- **Empty parameter validation** — `edit_context` now returns friendly messages for empty `file` or `near` parameters instead of hard errors.
|
|
225
294
|
|
|
226
|
-
## [3.0.
|
|
295
|
+
## [3.0.1] — 2026-03-26
|
|
296
|
+
|
|
297
|
+
### Changed
|
|
298
|
+
- Patch for RubyGems publish — no code changes from v3.0.0.
|
|
299
|
+
|
|
300
|
+
## [3.0.0] — 2026-03-26
|
|
227
301
|
|
|
228
302
|
### Removed
|
|
229
303
|
|
|
@@ -250,14 +324,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
250
324
|
- All CLI examples use zsh-safe quoting: `rails 'ai:tool[X]'` (brackets are glob patterns in zsh).
|
|
251
325
|
- README rewritten with real-world workflow examples, categorized tool table, MCP vs CLI showcase.
|
|
252
326
|
|
|
253
|
-
## [2.0.5]
|
|
327
|
+
## [2.0.5] — 2026-03-25
|
|
254
328
|
|
|
255
329
|
### Changed
|
|
256
330
|
|
|
257
331
|
- **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.
|
|
258
332
|
- **Concern detail:"full" bug fix** — `\b` after `?`/`!` prevented 13 of 15 method bodies from being extracted. All methods now show source code.
|
|
259
333
|
|
|
260
|
-
## [2.0.4]
|
|
334
|
+
## [2.0.4] — 2026-03-25
|
|
261
335
|
|
|
262
336
|
### Added
|
|
263
337
|
|
|
@@ -268,14 +342,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
268
342
|
- **analyze_feature: service test gaps** — checks services for missing test files, not just models/controllers/jobs.
|
|
269
343
|
- **All 6 serializers updated** — Claude, Cursor, Copilot, Windsurf, OpenCode all document trace mode, concern source, orphaned tables, inherited filters.
|
|
270
344
|
|
|
271
|
-
## [2.0.3]
|
|
345
|
+
## [2.0.3] — 2026-03-25
|
|
272
346
|
|
|
273
347
|
### Added
|
|
274
348
|
|
|
275
349
|
- **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.
|
|
276
350
|
- **README rewrite** — neuro marketing techniques: loss aversion hook, measured token savings table, trace output inline, architecture diagram. 456→261 lines.
|
|
277
351
|
|
|
278
|
-
## [2.0.2]
|
|
352
|
+
## [2.0.2] — 2026-03-25
|
|
279
353
|
|
|
280
354
|
### Added
|
|
281
355
|
|
|
@@ -293,7 +367,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
293
367
|
|
|
294
368
|
- **Documentation audit** — fixed max_tool_response_chars reference (120K→200K), added missing search_code params to GUIDE, added config.ai_tools to config reference.
|
|
295
369
|
|
|
296
|
-
## [2.0.1]
|
|
370
|
+
## [2.0.1] — 2026-03-25
|
|
297
371
|
|
|
298
372
|
### Fixed
|
|
299
373
|
|
|
@@ -304,7 +378,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
304
378
|
- **Issue #14** — `multi_db[:databases].keys` crash on Array fixed.
|
|
305
379
|
- **Search code NON_CODE_GLOBS** — excludes lock files, docs, CI configs, generated context from all searches.
|
|
306
380
|
|
|
307
|
-
## [2.0.0]
|
|
381
|
+
## [2.0.0] — 2026-03-24
|
|
308
382
|
|
|
309
383
|
### Added
|
|
310
384
|
|
|
@@ -349,14 +423,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
349
423
|
|
|
350
424
|
- **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.
|
|
351
425
|
|
|
352
|
-
## [1.3.1]
|
|
426
|
+
## [1.3.1] — 2026-03-23
|
|
353
427
|
|
|
354
428
|
### Fixed
|
|
355
429
|
|
|
356
430
|
- **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).
|
|
357
431
|
- **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.
|
|
358
432
|
|
|
359
|
-
## [1.3.0]
|
|
433
|
+
## [1.3.0] — 2026-03-23
|
|
360
434
|
|
|
361
435
|
### Added
|
|
362
436
|
|
|
@@ -378,7 +452,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
378
452
|
- **Rules serializer methods cap raised to 20** (RS1) — uses introspector's pre-filtered methods directly instead of redundant re-filtering
|
|
379
453
|
- **oklch token noise filtered** (DS21) — complex color values (oklch, calc, var) hidden from summary, only shown in `detail:"full"`
|
|
380
454
|
|
|
381
|
-
## [1.2.1]
|
|
455
|
+
## [1.2.1] — 2026-03-23
|
|
382
456
|
|
|
383
457
|
### Fixed
|
|
384
458
|
|
|
@@ -392,7 +466,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
392
466
|
- **Column defaults shown in generated rules** — columns with non-nil defaults now show `(=value)` inline.
|
|
393
467
|
- **`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.
|
|
394
468
|
|
|
395
|
-
## [1.2.0]
|
|
469
|
+
## [1.2.0] — 2026-03-23
|
|
396
470
|
|
|
397
471
|
### Added
|
|
398
472
|
|
|
@@ -406,7 +480,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
406
480
|
- **"UI Patterns" section renamed to "Design System"** — richer content with color palette, typography, components, spacing conventions, interactive states, and design rules.
|
|
407
481
|
- **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.
|
|
408
482
|
|
|
409
|
-
## [1.1.1]
|
|
483
|
+
## [1.1.1] — 2026-03-23
|
|
410
484
|
|
|
411
485
|
### Added
|
|
412
486
|
|
|
@@ -417,13 +491,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
417
491
|
|
|
418
492
|
- **Tool count corrected from 13 to 14** across all serializers to reflect `rails_analyze_feature` added in v1.0.0.
|
|
419
493
|
|
|
420
|
-
## [1.1.0]
|
|
494
|
+
## [1.1.0] — 2026-03-23
|
|
421
495
|
|
|
422
496
|
### Changed
|
|
423
497
|
|
|
424
498
|
- **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.
|
|
425
499
|
|
|
426
|
-
## [1.0.0]
|
|
500
|
+
## [1.0.0] — 2026-03-23
|
|
427
501
|
|
|
428
502
|
### Added
|
|
429
503
|
|
|
@@ -436,25 +510,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
436
510
|
|
|
437
511
|
- **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.
|
|
438
512
|
|
|
439
|
-
## [0.15.10]
|
|
513
|
+
## [0.15.10] — 2026-03-23
|
|
440
514
|
|
|
441
515
|
### Changed
|
|
442
516
|
|
|
443
517
|
- **Gemspec description rewritten** — repositioned from feature list to value proposition: mental model, semantic validation, cross-file error detection.
|
|
444
518
|
|
|
445
|
-
## [0.15.9]
|
|
519
|
+
## [0.15.9] — 2026-03-23
|
|
446
520
|
|
|
447
521
|
### Added
|
|
448
522
|
|
|
449
523
|
- **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.
|
|
450
524
|
|
|
451
|
-
## [0.15.8]
|
|
525
|
+
## [0.15.8] — 2026-03-23
|
|
452
526
|
|
|
453
527
|
### Added
|
|
454
528
|
|
|
455
529
|
- **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.
|
|
456
530
|
|
|
457
|
-
## [0.15.7]
|
|
531
|
+
## [0.15.7] — 2026-03-22
|
|
458
532
|
|
|
459
533
|
### Improved
|
|
460
534
|
|
|
@@ -466,7 +540,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
466
540
|
- **Concern test lookup** — `rails_get_test_info(model:"PlanLimitable")` searches concern test paths.
|
|
467
541
|
- **Controller flexible matching** — underscore-based normalization handles CamelCase, snake_case, and slash notation consistently.
|
|
468
542
|
|
|
469
|
-
## [0.15.6]
|
|
543
|
+
## [0.15.6] — 2026-03-22
|
|
470
544
|
|
|
471
545
|
### Added
|
|
472
546
|
|
|
@@ -482,7 +556,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
482
556
|
- **Concern methods inline** — shows public methods from concern source files (e.g. `PlanLimitable — can_cook?, increment_cook_count!`).
|
|
483
557
|
- **MCP tool error messages** — all tools now show available values on error/not-found for AI self-correction.
|
|
484
558
|
|
|
485
|
-
## [0.15.5]
|
|
559
|
+
## [0.15.5] — 2026-03-22
|
|
486
560
|
|
|
487
561
|
### Fixed
|
|
488
562
|
|
|
@@ -495,7 +569,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
495
569
|
- **Namespace test lookup** — supports `bonus/crises` format and flat test directories.
|
|
496
570
|
- **Empty inputs** — `near:""` in edit_context and `pattern:""` in search return helpful errors.
|
|
497
571
|
|
|
498
|
-
## [0.15.4]
|
|
572
|
+
## [0.15.4] — 2026-03-22
|
|
499
573
|
|
|
500
574
|
### Fixed
|
|
501
575
|
|
|
@@ -512,7 +586,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
512
586
|
|
|
513
587
|
- **Pagination on models, controllers, stimulus** — `limit`/`offset` params (default 50) with "end of results" hints. Prevents token bombs on large apps.
|
|
514
588
|
|
|
515
|
-
## [0.15.3]
|
|
589
|
+
## [0.15.3] — 2026-03-22
|
|
516
590
|
|
|
517
591
|
### Fixed
|
|
518
592
|
|
|
@@ -523,20 +597,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
523
597
|
|
|
524
598
|
- **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.
|
|
525
599
|
|
|
526
|
-
## [0.15.2]
|
|
600
|
+
## [0.15.2] — 2026-03-22
|
|
527
601
|
|
|
528
602
|
### Fixed
|
|
529
603
|
|
|
530
604
|
- **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).
|
|
531
605
|
|
|
532
|
-
## [0.15.1]
|
|
606
|
+
## [0.15.1] — 2026-03-22
|
|
533
607
|
|
|
534
608
|
### Fixed
|
|
535
609
|
|
|
536
610
|
- **Copilot serializer** — Show all model associations (not capped at 3), use human-readable architecture/pattern labels.
|
|
537
611
|
- **OpenCode rules serializer** — Filter framework controllers (Devise) from AGENTS.md output, show all associations, match `before_action` with `!`/`?` suffixes.
|
|
538
612
|
|
|
539
|
-
## [0.15.0]
|
|
613
|
+
## [0.15.0] — 2026-03-22
|
|
540
614
|
|
|
541
615
|
### Security
|
|
542
616
|
|
|
@@ -577,7 +651,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
577
651
|
- **Strong params body** — Action detail now shows the actual `permit(...)` call.
|
|
578
652
|
- **AR-generated methods** — Filter `build_*`, `*_ids=`, etc. from model instance methods.
|
|
579
653
|
|
|
580
|
-
## [0.14.0]
|
|
654
|
+
## [0.14.0] — 2026-03-20
|
|
581
655
|
|
|
582
656
|
### Fixed
|
|
583
657
|
|
|
@@ -595,7 +669,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
595
669
|
- **Stimulus dash/underscore normalization** — Both `weekly-chart` and `weekly_chart` work for controller lookup. Output shows HTML `data-controller` attribute.
|
|
596
670
|
- **Model public method signatures** — `rails_get_model_details(model: "Cook")` shows method names with params from source, stopping at private boundary.
|
|
597
671
|
|
|
598
|
-
## [0.13.1]
|
|
672
|
+
## [0.13.1] — 2026-03-20
|
|
599
673
|
|
|
600
674
|
### Changed
|
|
601
675
|
|
|
@@ -603,7 +677,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
603
677
|
- **Model details** — shows method signatures (name + parameters) instead of just method names.
|
|
604
678
|
- Removed unused demo files; fixed GUIDE.md preset tables.
|
|
605
679
|
|
|
606
|
-
## [0.13.0]
|
|
680
|
+
## [0.13.0] — 2026-03-20
|
|
607
681
|
|
|
608
682
|
### Added
|
|
609
683
|
|
|
@@ -624,7 +698,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
624
698
|
- ERB validation was broken due to shell quoting bug (backticks + nested quotes). Replaced with `Open3.capture2e("ruby", "-e", script, ARGV[0])`.
|
|
625
699
|
- Rubocop offenses in validate.rb (18 spacing issues auto-corrected).
|
|
626
700
|
|
|
627
|
-
## [0.12.0]
|
|
701
|
+
## [0.12.0] — 2026-03-20
|
|
628
702
|
|
|
629
703
|
### Added
|
|
630
704
|
|
|
@@ -657,7 +731,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
657
731
|
- Progress bars misclassified as badges.
|
|
658
732
|
- Input detection picking up alert divs instead of actual inputs.
|
|
659
733
|
|
|
660
|
-
## [0.11.0]
|
|
734
|
+
## [0.11.0] — 2026-03-20
|
|
661
735
|
|
|
662
736
|
### Added
|
|
663
737
|
|
|
@@ -665,20 +739,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
665
739
|
- **View partial structure** — `rails_get_view(detail: "standard")` shows model fields and helper methods used by each partial.
|
|
666
740
|
- **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.
|
|
667
741
|
|
|
668
|
-
## [0.10.2]
|
|
742
|
+
## [0.10.2] — 2026-03-20
|
|
669
743
|
|
|
670
744
|
### Security
|
|
671
745
|
|
|
672
746
|
- **ReDoS protection** — added regex timeout and converted greedy quantifiers to non-greedy across all pattern matching.
|
|
673
747
|
- **File size limits** — added size caps on parsed files to prevent memory exhaustion from oversized inputs.
|
|
674
748
|
|
|
675
|
-
## [0.10.1]
|
|
749
|
+
## [0.10.1] — 2026-03-19
|
|
676
750
|
|
|
677
751
|
### Changed
|
|
678
752
|
|
|
679
753
|
- Patch release for RubyGems republish (no code changes).
|
|
680
754
|
|
|
681
|
-
## [0.10.0]
|
|
755
|
+
## [0.10.0] — 2026-03-19
|
|
682
756
|
|
|
683
757
|
### Added
|
|
684
758
|
|
|
@@ -689,7 +763,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
689
763
|
- **ViewTemplateIntrospector** — new introspector that reads view file contents and extracts partial references and Stimulus data attributes.
|
|
690
764
|
- **Stimulus and view_templates in standard preset** — both introspectors now in `:standard` preset (11 introspectors, was 10).
|
|
691
765
|
|
|
692
|
-
## [0.9.0]
|
|
766
|
+
## [0.9.0] — 2026-03-19
|
|
693
767
|
|
|
694
768
|
### Added
|
|
695
769
|
|
|
@@ -702,7 +776,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
702
776
|
- **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.
|
|
703
777
|
- **License changed from AGPL-3.0 to MIT** — removes the copyleft blocker for SaaS and commercial projects.
|
|
704
778
|
|
|
705
|
-
## [0.8.5]
|
|
779
|
+
## [0.8.5] — 2026-03-19
|
|
706
780
|
|
|
707
781
|
### Fixed
|
|
708
782
|
|
|
@@ -715,27 +789,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
715
789
|
|
|
716
790
|
- **Standalone CLI documented** — the `rails-ai-context` executable (serve, context, inspect, watch, doctor, version) is now documented in README, GUIDE, and CLAUDE.md.
|
|
717
791
|
|
|
718
|
-
## [0.8.4]
|
|
792
|
+
## [0.8.4] — 2026-03-19
|
|
719
793
|
|
|
720
794
|
### Added
|
|
721
795
|
|
|
722
796
|
- **`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.
|
|
723
797
|
- **Fingerprinter watches `db/structure.sql`** — file changes to `structure.sql` now trigger cache invalidation and live reload.
|
|
724
798
|
|
|
725
|
-
## [0.8.3]
|
|
799
|
+
## [0.8.3] — 2026-03-19
|
|
726
800
|
|
|
727
801
|
### Changed
|
|
728
802
|
|
|
729
803
|
- **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.
|
|
730
804
|
|
|
731
|
-
## [0.8.2]
|
|
805
|
+
## [0.8.2] — 2026-03-19
|
|
732
806
|
|
|
733
807
|
### Changed
|
|
734
808
|
|
|
735
809
|
- **License** — changed from MIT to AGPL-3.0 to protect against unauthorized clones and ensure derivative works remain open source.
|
|
736
810
|
- **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.
|
|
737
811
|
|
|
738
|
-
## [0.8.1]
|
|
812
|
+
## [0.8.1] — 2026-03-19
|
|
739
813
|
|
|
740
814
|
### Added
|
|
741
815
|
|
|
@@ -746,14 +820,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
746
820
|
- **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.
|
|
747
821
|
- **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.
|
|
748
822
|
|
|
749
|
-
## [0.8.0]
|
|
823
|
+
## [0.8.0] — 2026-03-19
|
|
750
824
|
|
|
751
825
|
### Added
|
|
752
826
|
|
|
753
827
|
- **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).
|
|
754
828
|
- **Live reload doctor check** — `rails ai:doctor` now warns when the `listen` gem is not installed.
|
|
755
829
|
|
|
756
|
-
## [0.7.1]
|
|
830
|
+
## [0.7.1] — 2026-03-19
|
|
757
831
|
|
|
758
832
|
### Added
|
|
759
833
|
|
|
@@ -765,7 +839,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
765
839
|
- **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.
|
|
766
840
|
- **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).
|
|
767
841
|
|
|
768
|
-
## [0.7.0]
|
|
842
|
+
## [0.7.0] — 2026-03-19
|
|
769
843
|
|
|
770
844
|
### Added
|
|
771
845
|
|
|
@@ -788,7 +862,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
788
862
|
- All tools return pagination hints when results are truncated.
|
|
789
863
|
- `.windsurfrules` now uses dedicated `WindsurfSerializer` instead of sharing `RulesSerializer` with Cursor.
|
|
790
864
|
|
|
791
|
-
## [0.6.0]
|
|
865
|
+
## [0.6.0] — 2026-03-18
|
|
792
866
|
|
|
793
867
|
### Added
|
|
794
868
|
|
|
@@ -809,7 +883,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
809
883
|
- Doctor checks expanded from 11 to 12
|
|
810
884
|
- Static MCP resources expanded from 7 to 9
|
|
811
885
|
|
|
812
|
-
## [0.5.2]
|
|
886
|
+
## [0.5.2] — 2026-03-18
|
|
813
887
|
|
|
814
888
|
### Fixed
|
|
815
889
|
|
|
@@ -817,14 +891,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
817
891
|
- **Zeitwerk dependency** — Changed from open-ended `>= 2.6` to pessimistic `~> 2.6` per RubyGems best practices
|
|
818
892
|
- **Documentation** — Updated CONTRIBUTING.md, CHANGELOG.md, and CLAUDE.md to reflect Zeitwerk autoloading, introspector presets, and `.mcp.json` auto-discovery changes
|
|
819
893
|
|
|
820
|
-
## [0.5.1]
|
|
894
|
+
## [0.5.1] — 2026-03-18
|
|
821
895
|
|
|
822
896
|
### Fixed
|
|
823
897
|
|
|
824
898
|
- Documentation updates and animated demo GIF added to README.
|
|
825
899
|
- Zeitwerk autoloading fixes for edge cases.
|
|
826
900
|
|
|
827
|
-
## [0.5.0]
|
|
901
|
+
## [0.5.0] — 2026-03-18
|
|
828
902
|
|
|
829
903
|
### Added
|
|
830
904
|
|
|
@@ -845,7 +919,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
845
919
|
- Default introspectors reduced from 21 to 8 (`:standard` preset) for faster boot; use `config.preset = :full` for all 21
|
|
846
920
|
- New files auto-loaded by Zeitwerk — no manual `require_relative` needed when adding introspectors or tools
|
|
847
921
|
|
|
848
|
-
## [0.4.0]
|
|
922
|
+
## [0.4.0] — 2026-03-18
|
|
849
923
|
|
|
850
924
|
### Added
|
|
851
925
|
|
|
@@ -882,7 +956,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
882
956
|
- Doctor checks expanded from 7 to 11
|
|
883
957
|
- Test suite expanded from 149 to 247 examples with exact value assertions
|
|
884
958
|
|
|
885
|
-
## [0.3.0]
|
|
959
|
+
## [0.3.0] — 2026-03-18
|
|
886
960
|
|
|
887
961
|
### Added
|
|
888
962
|
|
|
@@ -907,7 +981,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
907
981
|
- `generate_context` now returns `{ written: [], skipped: [] }` instead of flat array
|
|
908
982
|
- Default introspectors now include `:stimulus`
|
|
909
983
|
|
|
910
|
-
## [0.2.0]
|
|
984
|
+
## [0.2.0] — 2026-03-18
|
|
911
985
|
|
|
912
986
|
### Added
|
|
913
987
|
|
|
@@ -921,7 +995,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
921
995
|
- `rails ai:context_for[claude]` failing in zsh due to bracket glob interpretation
|
|
922
996
|
- Double introspection in `ai:context` and `ai:context_for` tasks (removed unused `RailsAiContext.introspect` calls)
|
|
923
997
|
|
|
924
|
-
## [0.1.0]
|
|
998
|
+
## [0.1.0] — 2026-03-18
|
|
925
999
|
|
|
926
1000
|
### Added
|
|
927
1001
|
|
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` (
|
|
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/`
|
|
@@ -56,6 +56,8 @@ structure to AI assistants via the Model Context Protocol (MCP).
|
|
|
56
56
|
29. **Docs search** — bundled topic index with weighted keyword search, on-demand GitHub fetch
|
|
57
57
|
30. **Safe SQL queries** — defense-in-depth: regex pre-filter + SET TRANSACTION READ ONLY + timeout
|
|
58
58
|
31. **Log reading** — reverse file tail with level filtering and sensitive data redaction
|
|
59
|
+
32. **Config validation** — `http_port`, `cache_ttl`, `max_tool_response_chars`, `query_row_limit` validated on assignment with clear error messages
|
|
60
|
+
33. **Sensitive column redaction** — query tool redacts columns by name AND by suffix pattern (password, secret, token, key, digest, hash) to prevent alias bypass
|
|
59
61
|
|
|
60
62
|
## Testing
|
|
61
63
|
|