rails-ai-context 5.10.0 → 5.11.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 +51 -0
- data/README.md +1 -1
- data/docs/ARCHITECTURE.md +1 -1
- data/docs/superpowers/plans/2026-05-24-prism-ast-migration.md +1218 -0
- data/lib/generators/rails_ai_context/install/install_generator.rb +2 -1
- data/lib/rails_ai_context/introspectors/action_mailbox_introspector.rb +6 -7
- data/lib/rails_ai_context/introspectors/action_text_introspector.rb +4 -4
- data/lib/rails_ai_context/introspectors/active_storage_introspector.rb +15 -18
- data/lib/rails_ai_context/introspectors/active_support_introspector.rb +8 -2
- data/lib/rails_ai_context/introspectors/api_introspector.rb +22 -7
- data/lib/rails_ai_context/introspectors/asset_pipeline_introspector.rb +34 -3
- data/lib/rails_ai_context/introspectors/auth_introspector.rb +78 -44
- data/lib/rails_ai_context/introspectors/component_introspector.rb +133 -52
- data/lib/rails_ai_context/introspectors/config_introspector.rb +37 -2
- data/lib/rails_ai_context/introspectors/controller_introspector.rb +334 -158
- data/lib/rails_ai_context/introspectors/convention_introspector.rb +168 -34
- data/lib/rails_ai_context/introspectors/devops_introspector.rb +63 -18
- data/lib/rails_ai_context/introspectors/engine_introspector.rb +4 -21
- data/lib/rails_ai_context/introspectors/env_introspector.rb +5 -3
- data/lib/rails_ai_context/introspectors/gem_introspector.rb +13 -22
- data/lib/rails_ai_context/introspectors/job_introspector.rb +98 -20
- data/lib/rails_ai_context/introspectors/listeners/chained_call_listener.rb +26 -0
- data/lib/rails_ai_context/introspectors/listeners/env_access_listener.rb +62 -0
- data/lib/rails_ai_context/introspectors/listeners/gemfile_dsl_listener.rb +95 -0
- data/lib/rails_ai_context/introspectors/listeners/generic_macro_listener.rb +27 -0
- data/lib/rails_ai_context/introspectors/listeners/mailbox_routing_listener.rb +63 -0
- data/lib/rails_ai_context/introspectors/listeners/middleware_config_listener.rb +48 -0
- data/lib/rails_ai_context/introspectors/listeners/migration_dsl_listener.rb +161 -0
- data/lib/rails_ai_context/introspectors/listeners/mount_listener.rb +87 -0
- data/lib/rails_ai_context/introspectors/listeners/rake_task_dsl_listener.rb +145 -0
- data/lib/rails_ai_context/introspectors/listeners/schema_dsl_listener.rb +216 -0
- data/lib/rails_ai_context/introspectors/listeners/variant_call_listener.rb +13 -0
- data/lib/rails_ai_context/introspectors/middleware_introspector.rb +21 -6
- data/lib/rails_ai_context/introspectors/model_introspector.rb +30 -7
- data/lib/rails_ai_context/introspectors/multi_database_introspector.rb +35 -17
- data/lib/rails_ai_context/introspectors/performance_introspector.rb +29 -5
- data/lib/rails_ai_context/introspectors/rake_task_introspector.rb +46 -26
- data/lib/rails_ai_context/introspectors/schema_introspector.rb +314 -249
- data/lib/rails_ai_context/introspectors/security_introspector.rb +91 -14
- data/lib/rails_ai_context/introspectors/seeds_introspector.rb +29 -7
- data/lib/rails_ai_context/introspectors/source_introspector.rb +24 -10
- data/lib/rails_ai_context/introspectors/test_introspector.rb +11 -7
- data/lib/rails_ai_context/introspectors/turbo_introspector.rb +7 -4
- data/lib/rails_ai_context/introspectors/view_introspector.rb +24 -13
- data/lib/rails_ai_context/tools/validate.rb +72 -2
- data/lib/rails_ai_context/version.rb +1 -1
- metadata +13 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 21293efcd236f2ea0b04dd95564369f21e071a0373e71343caa740db9a2eb9f1
|
|
4
|
+
data.tar.gz: 0b9487187d0af78dc5e3fdd02f6f0910a132c69d306d0472ee98174baa9773d4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '016190a6a753c61f7363a7ad61855c153ef2a9c0d98e2ffb95dd164a1c1310deb9a8963b9afed5ff2c12d12644a93470d2d1d38bb510ddda69579e77f8941755'
|
|
7
|
+
data.tar.gz: 730deb817f8800b7468d4dd09e0af68c1a1429e4475c19e05eefc77d1e2728a246e2e4e2ba04249685de7a9b70c6248742773225d75df2b13d5e2fcd73694307
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,57 @@ 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
|
+
## [5.11.0] — 2026-05-24
|
|
9
|
+
|
|
10
|
+
### Changed — Prism AST migration: all introspectors now use structural code extraction
|
|
11
|
+
|
|
12
|
+
Every introspector that scans `.rb` files has been migrated from regex-based pattern matching to Prism AST-based structural extraction. This is a zero-regression internal refactor -- all introspector outputs are verified identical via side-by-side comparison, 2257 unit tests, 119 E2E tests, and live validation against a production-scale Rails 8.1 app (39/39 introspectors, 41/41 tool invocations, 0 failures).
|
|
13
|
+
|
|
14
|
+
**What changed internally:**
|
|
15
|
+
|
|
16
|
+
- **`SourceIntrospector.walk(path, listener_map)`** -- new generic API that accepts any combination of listener classes or Proc factories, enabling ad-hoc AST extraction without modifying the core dispatcher. Supports both `Class` values (instantiated via `.new`) and `-> { Instance }` lambdas for configurable listeners.
|
|
17
|
+
- **11 new listener classes** for patterns beyond the original 7 model-level listeners:
|
|
18
|
+
- `GenericMacroListener` -- configurable no-receiver call detector (handles most Rails DSL patterns including `self.method` calls)
|
|
19
|
+
- `ChainedCallListener` -- method calls with receivers (`.variant()`, `.includes()`, `.create()`)
|
|
20
|
+
- `VariantCallListener` -- ActiveStorage variant detection
|
|
21
|
+
- `MailboxRoutingListener` -- ActionMailbox routing + lifecycle callbacks
|
|
22
|
+
- `MiddlewareConfigListener` -- `config.middleware.use/insert_before/insert_after/unshift`
|
|
23
|
+
- `EnvAccessListener` -- `ENV["KEY"]` / `ENV.fetch("KEY")` with block-default detection
|
|
24
|
+
- `MountListener` -- `mount Engine, at: "/path"` (both keyword and hash-rocket syntax)
|
|
25
|
+
- `RakeTaskDslListener` -- `namespace`/`desc`/`task` with deps and args (handles string + symbol deps)
|
|
26
|
+
- `GemfileDslListener` -- `gem`/`group`/`source` with group-scope tracking
|
|
27
|
+
- `SchemaDslListener` -- `create_table`/`t.type`/`t.index`/`add_foreign_key`/`create_enum`/`check_constraint`
|
|
28
|
+
- `MigrationDslListener` -- `create_table`/`add_column`/`add_index`/`rename_column`/`add_reference` and 6 more actions
|
|
29
|
+
- **28 introspectors converted**: ActiveStorage, ActionText, ActionMailbox, Middleware, ActiveSupport, Auth, Security, Controller (all 9 regex blocks including strong params, filters, rescue_from, rate_limit, respond_to, turbo_stream), Convention, Turbo, MultiDatabase, Performance, Job, Model, Component, View, Api, AssetPipeline, DevOps, Env, Gem, RakeTask, Engine, Seeds, Test, Schema, Config.
|
|
30
|
+
- **181 regex patterns intentionally remain** in categories where Prism cannot help: non-Ruby files (JS/TS/ERB/Haml -- 78), keyword/content matching (22), config assignments (15), runtime SQL/YAML (25), and complex partial patterns (41).
|
|
31
|
+
|
|
32
|
+
**What didn't change:**
|
|
33
|
+
|
|
34
|
+
- All introspector output formats are identical. No consumer-facing API changes.
|
|
35
|
+
- All 39 MCP tools work exactly as before.
|
|
36
|
+
- Runtime reflection paths (ActiveRecord, Rails config, I18n, etc.) are untouched.
|
|
37
|
+
- Non-Ruby file scanning (YAML, JSON, ERB, JS, Procfile, Dockerfile, Gemfile.lock) is untouched.
|
|
38
|
+
|
|
39
|
+
**Why this matters:**
|
|
40
|
+
|
|
41
|
+
- Regex scanning matches patterns in comments, strings, and dead code. AST extraction only matches actual code structure -- fewer false positives.
|
|
42
|
+
- Multi-line declarations that broke regex (e.g., `devise` with 9 modules across 3 lines, `before_action` with complex `only:`/`except:` constraints) are now parsed correctly by Prism.
|
|
43
|
+
- The `AstCache` provides thread-safe LRU caching of parse results, so repeated walks of the same file are free.
|
|
44
|
+
- New listeners are composable -- introspectors mix and match listeners via `SourceIntrospector.walk(path, { key: Listener })` without coupling.
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- Avoid false-positive route helper warnings when `rails_validate` sees locally defined Ruby methods ending in `_path` or `_url` (#83, thanks @curi).
|
|
49
|
+
- Preserve newline-separated staged file names in the generated pre-commit validation hook (#83).
|
|
50
|
+
|
|
51
|
+
### Tests
|
|
52
|
+
|
|
53
|
+
- 2257 unit examples (up from 2154), 0 failures
|
|
54
|
+
- 119 E2E examples, 0 failures
|
|
55
|
+
- 47 edge-case tests for controller, auth, and security AST conversions
|
|
56
|
+
- 10 listener edge-case tests (block-syntax ENV defaults, string rake deps, insert-with-index middleware, hash-rocket mounts, complex gem lines)
|
|
57
|
+
- Side-by-side regression comparison: all 39 introspector outputs verified identical between old regex and new AST code
|
|
58
|
+
|
|
8
59
|
## [5.10.0] — 2026-04-20
|
|
9
60
|
|
|
10
61
|
### Added — 8 new introspectors closing RAILS_NERVOUS_SYSTEM.md gaps
|
data/README.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<br>
|
|
22
22
|
[](https://github.com/crisnahine/rails-ai-context)
|
|
23
23
|
[](https://github.com/crisnahine/rails-ai-context)
|
|
24
|
-
[](https://github.com/crisnahine/rails-ai-context/actions)
|
|
25
25
|
[](LICENSE)
|
|
26
26
|
|
|
27
27
|
</div>
|
data/docs/ARCHITECTURE.md
CHANGED
|
@@ -26,7 +26,7 @@ graph TD
|
|
|
26
26
|
subgraph engine["Introspection Engine"]
|
|
27
27
|
direction LR
|
|
28
28
|
I["Introspectors\n31 modules\nPresets\nCached"]
|
|
29
|
-
AST["AST Engine\nPrism\
|
|
29
|
+
AST["AST Engine\nPrism\n20 listeners\nConfidence tags"]
|
|
30
30
|
H["Hydration Layer\nSchema hints\ninjected into\ntool responses"]
|
|
31
31
|
end
|
|
32
32
|
|