rails-ai-bridge 5.0.0 → 5.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3ff80f45d85160ef2e84f6f0a838ef49dc3301c4595bd2a336f5e5ded6a44a3
4
- data.tar.gz: 39d5e276f4d32fc1c7d4b2072ada05a08fa7fa0a8359d7bb49385856ba547896
3
+ metadata.gz: 74d2175a281a2d2b0e3efb53e3970ffbf8658724241a9fcbf4a241e8a22375c8
4
+ data.tar.gz: e674ed5c5bf81c08d1b0c918c414ddafb518b48ac3f4843f6d25c8a173fdecfc
5
5
  SHA512:
6
- metadata.gz: bd3db69993fc48e125750a8e56a49a8e3aa84b8d2637c336e820738f932fb7ef4fd68f1083c429c85f8d2ffc15bf473dd18e7aa79cb9b612e3db2e368e4b8585
7
- data.tar.gz: c1902b9560283b27190d526d8f40befab209555c877e991d6a8b1403fb03e94ae15745eccd7d275a33cba5458eac25ffc8d284b091ec5906a662d824c1f54be5
6
+ metadata.gz: 9e5cc4ff68c3d003b228231504169c4dfab1b0baf2b8bbf4d057a97fd3a3d14ea8e689bec29056bb57a5c140f43017f3a07737c08469ecfe7b17d34d6c002641
7
+ data.tar.gz: d0b72a96954862bf6bde9b9e64945481ac4352a74f0403edebd3d0b1600445152f0d6b061fa177c9912276b571883da404347ad25d0f20e114b1a8d6bdf268ed
data/CHANGELOG.md CHANGED
@@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [5.1.0] - 2026-09-11
11
+
12
+ ### Changed
13
+
14
+ - **`rubydex` bumped to `~> 0.4.0`** (installed 0.4.1). Was `~> 0.3.0`. Hosts
15
+ should run `bundle update rubydex`. `Rubydex::Graph.new` with no arguments
16
+ still works; the adapter did not need a `Config` object. Characterization
17
+ specs now pin the 0.4 graph API contract.
18
+ - MCP protocol characterization no longer pins `MCP::VERSION` to `1.3.0`. The
19
+ gemspec stays `mcp >= 1.3, < 2.0`; the spec asserts that range via
20
+ `MCP::VERSION`. Constructor, transport, and 2026-07-28 lifecycle examples
21
+ remain the protocol contract. CI was tested against **mcp 1.5.1**.
22
+ - Rubydex characterization adds an example against the installed 0.4.x gem:
23
+ `Graph.new` with no args indexes a class and `graph['User']` resolves.
24
+ - Dependabot no longer groups or auto-opens rubydex minor/major constraint
25
+ updates. Patch updates (for example 0.4.1 → 0.4.2) still open.
26
+ - rs-guard review workflow skips `dependabot[bot]` PRs (those PRs do not
27
+ receive `DEEPSEEK_API_KEY`) and pins checkout v7.0.1, rust-toolchain, and
28
+ rust-cache SHAs.
29
+
30
+ ### Fixed
31
+
32
+ - CI matrix failed on every post-5.0.0 PR after mcp 1.4.0 shipped, because
33
+ `Gemfile.lock` is gitignored and the suite asserted an exact SDK patch.
34
+
10
35
  ## [5.0.0] - 2026-08-27
11
36
 
12
37
  ### Migration from v4
data/CONTRIBUTING.md CHANGED
@@ -73,6 +73,10 @@ bundle exec rubocop --parallel # Lint check
73
73
  4. Update CHANGELOG.md under an `## [Unreleased]` section
74
74
  5. Open a PR with a clear title and description
75
75
 
76
+ The rs-guard review workflow skips `dependabot[bot]` PRs. Those PRs do not
77
+ receive `DEEPSEEK_API_KEY`, so the job would fail after compiling rs-guard.
78
+ Dependabot updates are reviewed by CI (RSpec, RuboCop, bundle-audit) only.
79
+
76
80
  ## Reporting Bugs
77
81
 
78
82
  Open an issue at https://github.com/igmarin/rails-ai-bridge/issues with:
data/README.md CHANGED
@@ -887,7 +887,7 @@ Bug reports and pull requests: [github.com/igmarin/rails-ai-bridge/issues](https
887
887
 
888
888
  ## Acknowledgments & Origins
889
889
 
890
- This gem ships as **rails-ai-bridge** (Ruby **`RailsAiBridge`**, version **5.0.0**). Earlier iterations of the same codebase were distributed as `rails-ai-context`.
890
+ This gem ships as **rails-ai-bridge** (Ruby **`RailsAiBridge`**, version **5.1.0**). Earlier iterations of the same codebase were distributed as `rails-ai-context`.
891
891
 
892
892
  RailsMCP evolved from
893
893
  [crisnahine/rails-ai-context](https://github.com/crisnahine/rails-ai-context),
data/UPGRADING.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # Upgrading rails-ai-bridge
2
2
 
3
+ ## Upgrading from 5.0.0 to 5.1.0
4
+
5
+ **One action required if you are pinned to `rubydex` 0.3.x:**
6
+
7
+ The `rubydex` gem constraint moved from `~> 0.3.0` to `~> 0.4.0`. After upgrading
8
+ rails-ai-bridge, update the lockfile:
9
+
10
+ ```bash
11
+ bundle update rails-ai-bridge rubydex
12
+ ```
13
+
14
+ `Rubydex::Graph.new` with no arguments still works on 0.4.1; no application or
15
+ initializer changes are required. Semantic search (`rails_search_semantic`)
16
+ is unchanged.
17
+
18
+ The official MCP SDK range remains `>= 1.3, < 2.0`. This release was tested
19
+ with mcp 1.5.1 (HTTP client JSON parse fix for json 3.0). Hosts already on
20
+ any 1.3–1.5.x need no extra step.
21
+
22
+ ### Rolling back
23
+
24
+ Rolling back to 5.0.x also requires rubydex 0.3.x (`rails-ai-bridge` 5.0.x
25
+ depends on `rubydex ~> 0.3.0`). Pin both, then update them together:
26
+
27
+ ```ruby
28
+ gem 'rails-ai-bridge', '~> 5.0.0'
29
+ gem 'rubydex', '~> 0.3.0'
30
+ ```
31
+
32
+ ```bash
33
+ bundle update rails-ai-bridge rubydex
34
+ ```
35
+
36
+ ---
37
+
3
38
  ## Upgrading from 4.3.0 to 5.0.0
4
39
 
5
40
  **No application-code or configuration changes are required to upgrade.** v5 is intentionally
@@ -86,92 +121,12 @@ NETWORK=1 rails ai:doctor # with provider probes
86
121
 
87
122
  ---
88
123
 
89
- ## Upgrading Rubydex to 0.4.0 (age-gated: mergeable Aug 28)
90
-
91
- **Current:** `rubydex ~> 0.3.0` (installed: 0.3.0)
92
- **Target:** `rubydex ~> 0.4.0`
93
-
94
- ### What changed in Rubydex 0.4.0
95
-
96
- Source: [v0.3.0...v0.4.0](https://github.com/Shopify/rubydex/compare/v0.3.0...v0.4.0)
97
-
98
- **Breaking changes:**
99
-
100
- - **`Config` is now a proper object** (#965) — `Rubydex::Graph.new` may accept
101
- or require a `Config` instance instead of being constructed with no args.
102
- The adapter currently calls `Rubydex::Graph.new` with no arguments in
103
- `Indexer.build_index`; this may need updating.
104
- - **Cypher query results return graph objects** (#873) — query return types
105
- may have changed from plain arrays/hashes to graph object wrappers.
106
- - **Declaration core extracted** (#944) — declaration object shape may have
107
- changed; the serializer relies on `decl.name`, `decl.unqualified_name`,
108
- `decl.definitions`, `decl.ancestors`, `decl.descendants`, `decl.owner`,
109
- and `decl.class.name`.
110
- - **`NamespaceStore` extracted** (#945) — namespace resolution internals
111
- changed; may affect `graph[name]` lookups.
112
-
113
- **Enhancements:**
114
-
115
- - Eagerly compute name depths into `Name` (#948)
116
- - Remove Mixin vec clones from ancestor linearization (#949)
117
- - Add linter configuration and configurable Rubydex linter (#972, #974)
118
- - Add severity and related information to diagnostics (#973)
119
- - Index RBS attribute methods (#970)
120
-
121
- **Bug fixes:**
122
-
123
- - Enqueue retry if `Object` ancestors are incomplete (#950)
124
- - Visit `module_function` bodies once in `OperationBuilder` (#994)
125
- - Fix `extend self` in anonymous modules (#1001)
126
- - Linearize ancestors for implicitly created namespaces (#1005)
127
-
128
- ### Rubydex migration steps
129
-
130
- 1. **Update the gemspec constraint** from `~> 0.3.0` to `~> 0.4.0` (after Aug 28).
131
- 2. **Run `bundle update rubydex`** and verify the installed version is 0.4.x.
132
- 3. **Check `Rubydex::Graph.new`** — if `Config` is now required, update
133
- `Indexer.build_index` to construct and pass a `Config` object.
134
- 4. **Run characterization specs** under
135
- `spec/lib/rails_ai_bridge/rubydex_adapter/characterization_spec.rb` —
136
- these pin the graph API surface (method names, return shapes) and will
137
- fail if any breaking changes affect the adapter.
138
- 5. **Verify declaration/definition shapes** — the serializer's
139
- `declaration_type` method uses `decl.class.name` pattern matching
140
- (`/class/`, `/module/`, `/method/`, `/constant/`). If class names change
141
- in 0.4.0, update `TYPE_PATTERNS` in `serializer.rb`.
142
- 6. **Test incremental reindex** — the `IncrementalIndexer` calls
143
- `graph.delete_document`, `graph.index_source`, `graph.document`, and
144
- `graph.resolve`. Verify these methods still exist with the same signatures.
145
- 7. **Smoke-test `rails_search_semantic` tool** — this is the primary
146
- user-facing consumer of the Rubydex adapter.
147
-
148
- ### Rubydex characterization specs
149
-
150
- The following spec files pin current behavior to catch regressions:
151
-
152
- - `spec/lib/rails_ai_bridge/rubydex_adapter/characterization_spec.rb` —
153
- full graph API contract (indexing, search, declarations, definitions,
154
- references, locations, ancestors/descendants, graceful failure)
155
- - `spec/lib/rails_ai_bridge/rubydex_adapter_spec.rb` — adapter unit tests
156
- - `spec/lib/rails_ai_bridge/rubydex_adapter/incremental_indexer_spec.rb` —
157
- incremental rebuild and persistence behavior
158
- - `spec/lib/rails_ai_bridge/rubydex_adapter/serializer_spec.rb` —
159
- declaration/definition serialization shapes
160
- - `spec/lib/rails_ai_bridge/rubydex_adapter/indexer_spec.rb` —
161
- file discovery and graph construction
162
- - `spec/lib/rails_ai_bridge/rubydex_adapter/method_counter_spec.rb` —
163
- method counting logic
164
-
165
- ---
166
-
167
- ## Upgrading MCP SDK to 1.3.0 (age-gated: mergeable Aug 29)
168
-
169
- **Current:** `mcp >= 1.0, < 2.0` (installed: 1.3.0)
170
- **Target:** `mcp >= 1.3, < 2.0`
124
+ ## MCP SDK 1.3 floor (historical shipped in 5.0.0)
171
125
 
172
- The installed version is already 1.3.0; the gemspec lower bound needs
173
- tightening from `>= 1.0` to `>= 1.3` to ensure all hosts pick up the
174
- 1.2.0+ stateless lifecycle and 1.3.0 resource list handler features.
126
+ This age-gated note is obsolete. v5.0.0 already raised the gemspec to
127
+ `mcp >= 1.3, < 2.0`. v5.1.0 keeps that range and was tested with mcp 1.5.1.
128
+ Hosts on any 1.3–1.5.x need no extra MCP step. The 1.1 1.3 changelog below
129
+ is kept as background only.
175
130
 
176
131
  ### What changed in MCP 1.1.0 → 1.2.0 → 1.3.0
177
132
 
@@ -212,31 +167,6 @@ Source: [CHANGELOG.md](https://github.com/modelcontextprotocol/ruby-sdk/blob/mai
212
167
  - **Added:** Server tool annotations exposed on `MCP::Client::Tool` (#445)
213
168
  - **Fixed:** Explicit tool response content preserved (#469)
214
169
 
215
- ### MCP migration steps
216
-
217
- 1. **Update the gemspec constraint** from `>= 1.0, < 2.0` to `>= 1.3, < 2.0`
218
- (after Aug 29).
219
- 2. **Run `bundle update mcp`** — most hosts already resolve 1.3.0; this
220
- tightens the floor.
221
- 3. **Run characterization specs** under `spec/lib/rails_ai_bridge/mcp/`:
222
- - `protocol_characterization_spec.rb` — SDK version, server constructor,
223
- transport classes, 2026-07-28 lifecycle method surface
224
- - `tool_annotations_spec.rb` — all 19 tool annotation hints
225
- - `resource_lists_spec.rb` — resource/template construction and read handler
226
- - `error_responses_spec.rb` — 404/401/403/429 error shapes, response bounds
227
- 4. **Verify `resources_list_handler`** — new in 1.3.0. If the bridge wants
228
- context-dependent resource lists, register a handler via
229
- `server.resources_list_handler { |params| ... }`.
230
- 5. **Check for duplicate request id rejection** — 1.3.0 rejects duplicate
231
- in-flight JSON-RPC request ids (#521). This is a server-side change that
232
- should be transparent to the bridge, but verify no test relies on
233
- duplicate ids being accepted.
234
- 6. **Verify exception message masking** — 1.2.0 stopped leaking exception
235
- messages to clients via JSON-RPC error data (#486). Ensure error
236
- responses still contain useful information for debugging.
237
- 7. **Smoke-test stdio and HTTP transports** — start `rails ai:serve` and
238
- verify tool calls and resource reads work end-to-end.
239
-
240
170
  ### MCP characterization specs
241
171
 
242
172
  The following spec files pin current protocol behavior:
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAiBridge
4
- VERSION = '5.0.0'
4
+ VERSION = '5.1.0'
5
5
  end
@@ -56,5 +56,5 @@ Gem::Specification.new do |spec|
56
56
  spec.add_dependency 'faraday', '>= 2.0', '< 3.0'
57
57
 
58
58
  # Semantic code analysis via Shopify's rubydex
59
- spec.add_dependency 'rubydex', '~> 0.3.0'
59
+ spec.add_dependency 'rubydex', '~> 0.4.0'
60
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-ai-bridge
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Marin
@@ -129,14 +129,14 @@ dependencies:
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: 0.3.0
132
+ version: 0.4.0
133
133
  type: :runtime
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: 0.3.0
139
+ version: 0.4.0
140
140
  description: Maps a Rails app so assistants stop guessing — static context files and
141
141
  a read-only MCP server.
142
142
  email: