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 +4 -4
- data/CHANGELOG.md +25 -0
- data/CONTRIBUTING.md +4 -0
- data/README.md +1 -1
- data/UPGRADING.md +40 -110
- data/lib/rails_ai_bridge/version.rb +1 -1
- data/rails-ai-bridge.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 74d2175a281a2d2b0e3efb53e3970ffbf8658724241a9fcbf4a241e8a22375c8
|
|
4
|
+
data.tar.gz: e674ed5c5bf81c08d1b0c918c414ddafb518b48ac3f4843f6d25c8a173fdecfc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
-
##
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
1.
|
|
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:
|
data/rails-ai-bridge.gemspec
CHANGED
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.
|
|
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.
|
|
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.
|
|
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:
|