rail_verdict 1.0.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.
Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/NOTICE +14 -0
  4. data/README.md +192 -0
  5. data/exe/railverdict +6 -0
  6. data/exe/railverdict-minitest-reporter.rb +90 -0
  7. data/lib/rail_verdict/analyzers/_shared.rb +54 -0
  8. data/lib/rail_verdict/analyzers/bundler_audit.rb +186 -0
  9. data/lib/rail_verdict/analyzers/minitest.rb +312 -0
  10. data/lib/rail_verdict/analyzers/rspec.rb +274 -0
  11. data/lib/rail_verdict/analyzers/rubocop.rb +289 -0
  12. data/lib/rail_verdict/analyzers/simplecov.rb +178 -0
  13. data/lib/rail_verdict/baseline.rb +151 -0
  14. data/lib/rail_verdict/check.rb +415 -0
  15. data/lib/rail_verdict/cli.rb +471 -0
  16. data/lib/rail_verdict/comparison.rb +216 -0
  17. data/lib/rail_verdict/configuration.rb +165 -0
  18. data/lib/rail_verdict/contracts/analyzer_result.rb +138 -0
  19. data/lib/rail_verdict/contracts/finding.rb +154 -0
  20. data/lib/rail_verdict/contracts/gate_result.rb +171 -0
  21. data/lib/rail_verdict/coverage/changed_line_evaluator.rb +70 -0
  22. data/lib/rail_verdict/doctor.rb +132 -0
  23. data/lib/rail_verdict/errors.rb +17 -0
  24. data/lib/rail_verdict/findings_command.rb +24 -0
  25. data/lib/rail_verdict/fingerprint.rb +72 -0
  26. data/lib/rail_verdict/git/command.rb +48 -0
  27. data/lib/rail_verdict/git/context.rb +361 -0
  28. data/lib/rail_verdict/git/diff_parser.rb +200 -0
  29. data/lib/rail_verdict/git/errors.rb +16 -0
  30. data/lib/rail_verdict/init.rb +38 -0
  31. data/lib/rail_verdict/intelligence/ai_analysis.rb +82 -0
  32. data/lib/rail_verdict/intelligence/ai_failure.rb +44 -0
  33. data/lib/rail_verdict/intelligence/budget.rb +36 -0
  34. data/lib/rail_verdict/intelligence/cache.rb +74 -0
  35. data/lib/rail_verdict/intelligence/context_builder.rb +92 -0
  36. data/lib/rail_verdict/intelligence/manifest.rb +70 -0
  37. data/lib/rail_verdict/intelligence/orchestrator.rb +77 -0
  38. data/lib/rail_verdict/intelligence/prompt.rb +28 -0
  39. data/lib/rail_verdict/intelligence/provider.rb +14 -0
  40. data/lib/rail_verdict/intelligence/providers/fake_provider.rb +31 -0
  41. data/lib/rail_verdict/intelligence/providers/openai_compat.rb +119 -0
  42. data/lib/rail_verdict/intelligence/redactor.rb +51 -0
  43. data/lib/rail_verdict/intelligence/secret_detector.rb +45 -0
  44. data/lib/rail_verdict/intelligence/source_reader.rb +49 -0
  45. data/lib/rail_verdict/intelligence.rb +11 -0
  46. data/lib/rail_verdict/mcp/cache.rb +233 -0
  47. data/lib/rail_verdict/mcp/repository_root.rb +31 -0
  48. data/lib/rail_verdict/mcp/serializers.rb +98 -0
  49. data/lib/rail_verdict/mcp/server.rb +110 -0
  50. data/lib/rail_verdict/mcp/tools/build_repair_packet.rb +85 -0
  51. data/lib/rail_verdict/mcp/tools/explain.rb +100 -0
  52. data/lib/rail_verdict/mcp/tools/get_finding.rb +139 -0
  53. data/lib/rail_verdict/mcp/tools/investigate.rb +107 -0
  54. data/lib/rail_verdict/mcp/tools/list_findings.rb +119 -0
  55. data/lib/rail_verdict/mcp/tools/verify.rb +137 -0
  56. data/lib/rail_verdict/mcp/tools/verify_repair.rb +105 -0
  57. data/lib/rail_verdict/mcp/validators.rb +81 -0
  58. data/lib/rail_verdict/mcp.rb +7 -0
  59. data/lib/rail_verdict/process_runner.rb +292 -0
  60. data/lib/rail_verdict/rails_context/classifier.rb +57 -0
  61. data/lib/rail_verdict/rails_context/confidence.rb +13 -0
  62. data/lib/rail_verdict/rails_context/constant_inferencer.rb +56 -0
  63. data/lib/rail_verdict/rails_context/context.rb +115 -0
  64. data/lib/rail_verdict/rails_context/detector.rb +141 -0
  65. data/lib/rail_verdict/rails_context/limits.rb +17 -0
  66. data/lib/rail_verdict/rails_context/resolvers/association_extractor.rb +48 -0
  67. data/lib/rail_verdict/rails_context/resolvers/policy_resolver.rb +45 -0
  68. data/lib/rail_verdict/rails_context/resolvers/route_resolver.rb +40 -0
  69. data/lib/rail_verdict/rails_context/resolvers/route_scanner.rb +55 -0
  70. data/lib/rail_verdict/rails_context/resolvers/schema_resolver.rb +90 -0
  71. data/lib/rail_verdict/rails_context/resolvers/test_candidates.rb +75 -0
  72. data/lib/rail_verdict/rails_context/resolvers/view_resolver.rb +45 -0
  73. data/lib/rail_verdict/rails_context/schema_parser.rb +50 -0
  74. data/lib/rail_verdict/rails_context.rb +21 -0
  75. data/lib/rail_verdict/repair/boundary.rb +36 -0
  76. data/lib/rail_verdict/repair/command.rb +89 -0
  77. data/lib/rail_verdict/repair/constraints.rb +31 -0
  78. data/lib/rail_verdict/repair/context_assembler.rb +301 -0
  79. data/lib/rail_verdict/repair/diff_context.rb +51 -0
  80. data/lib/rail_verdict/repair/packet.rb +158 -0
  81. data/lib/rail_verdict/repair/prompt_renderer.rb +27 -0
  82. data/lib/rail_verdict/repair/verification_plan.rb +45 -0
  83. data/lib/rail_verdict/repair/verifier.rb +84 -0
  84. data/lib/rail_verdict/reporters/console.rb +107 -0
  85. data/lib/rail_verdict/reporters/github_annotations.rb +104 -0
  86. data/lib/rail_verdict/reporters/json_reporter.rb +19 -0
  87. data/lib/rail_verdict/reporters/sarif.rb +138 -0
  88. data/lib/rail_verdict/run_context.rb +99 -0
  89. data/lib/rail_verdict/schema_validator.rb +85 -0
  90. data/lib/rail_verdict/strict_yaml.rb +134 -0
  91. data/lib/rail_verdict/verification/policy.rb +359 -0
  92. data/lib/rail_verdict/version.rb +5 -0
  93. data/lib/rail_verdict/waiver.rb +67 -0
  94. data/lib/rail_verdict/waiver_store.rb +59 -0
  95. data/lib/rail_verdict.rb +64 -0
  96. data/schemas/ai-analysis-v1.schema.json +54 -0
  97. data/schemas/baseline-v1.schema.json +108 -0
  98. data/schemas/configuration-v1.1.schema.json +150 -0
  99. data/schemas/configuration-v1.2.schema.json +182 -0
  100. data/schemas/configuration-v1.3.schema.json +198 -0
  101. data/schemas/configuration-v1.4.schema.json +146 -0
  102. data/schemas/configuration-v1.schema.json +72 -0
  103. data/schemas/coverage-v1.schema.json +51 -0
  104. data/schemas/finding-v1.schema.json +131 -0
  105. data/schemas/minitest-reporter-v1.schema.json +113 -0
  106. data/schemas/repair-packet-v1.schema.json +364 -0
  107. data/schemas/result-v1.schema.json +378 -0
  108. data/schemas/waiver-v1.schema.json +45 -0
  109. data/schemas/waivers-v1.schema.json +67 -0
  110. metadata +192 -0
@@ -0,0 +1,378 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/result/v1.schema.json",
4
+ "title": "RailVerdict Verification Result v1 (Draft / Unimplemented)",
5
+ "description": "Draft versioned machine envelope for analyzer execution, deterministic policy, findings, and incomplete evidence.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "completion_status",
10
+ "gate",
11
+ "policy_status",
12
+ "findings",
13
+ "analyzer_results",
14
+ "operational_failures",
15
+ "decision_reasons"
16
+ ],
17
+ "properties": {
18
+ "schema_version": {
19
+ "const": "1.0"
20
+ },
21
+ "completion_status": {
22
+ "enum": [
23
+ "complete",
24
+ "incomplete",
25
+ "interrupted"
26
+ ]
27
+ },
28
+ "gate": {
29
+ "enum": [
30
+ "PASS",
31
+ "WARN",
32
+ "FAIL",
33
+ "INCOMPLETE"
34
+ ]
35
+ },
36
+ "policy_status": {
37
+ "enum": [
38
+ "pass",
39
+ "warn",
40
+ "fail",
41
+ "not_evaluated"
42
+ ]
43
+ },
44
+ "findings": {
45
+ "type": "array",
46
+ "items": {
47
+ "$ref": "#/$defs/finding_summary"
48
+ }
49
+ },
50
+ "analyzer_results": {
51
+ "type": "array",
52
+ "items": {
53
+ "$ref": "#/$defs/analyzer_result"
54
+ }
55
+ },
56
+ "operational_failures": {
57
+ "type": "array",
58
+ "items": {
59
+ "$ref": "#/$defs/operational_failure"
60
+ }
61
+ },
62
+ "decision_reasons": {
63
+ "type": "array",
64
+ "items": {
65
+ "$ref": "#/$defs/decision_reason"
66
+ }
67
+ },
68
+ "baseline": {
69
+ "type": "object",
70
+ "additionalProperties": true,
71
+ "unevaluatedProperties": true
72
+ },
73
+ "comparison": {
74
+ "type": "object",
75
+ "additionalProperties": true,
76
+ "unevaluatedProperties": true
77
+ },
78
+ "git": {
79
+ "type": "object",
80
+ "additionalProperties": true,
81
+ "unevaluatedProperties": true
82
+ },
83
+ "rails_context": {
84
+ "type": "object",
85
+ "additionalProperties": true,
86
+ "unevaluatedProperties": true
87
+ }
88
+ },
89
+ "additionalProperties": false,
90
+ "unevaluatedProperties": false,
91
+ "allOf": [
92
+ {
93
+ "if": {
94
+ "properties": {
95
+ "completion_status": {
96
+ "const": "complete"
97
+ }
98
+ }
99
+ },
100
+ "then": {
101
+ "properties": {
102
+ "gate": {
103
+ "enum": ["PASS", "WARN", "FAIL"]
104
+ },
105
+ "policy_status": {
106
+ "enum": ["pass", "warn", "fail"]
107
+ }
108
+ }
109
+ }
110
+ },
111
+ {
112
+ "if": {
113
+ "properties": {
114
+ "completion_status": {
115
+ "enum": ["incomplete", "interrupted"]
116
+ }
117
+ }
118
+ },
119
+ "then": {
120
+ "properties": {
121
+ "gate": {
122
+ "const": "INCOMPLETE"
123
+ },
124
+ "policy_status": {
125
+ "const": "not_evaluated"
126
+ },
127
+ "operational_failures": {
128
+ "minItems": 1
129
+ }
130
+ }
131
+ }
132
+ }
133
+ ],
134
+ "$defs": {
135
+ "finding_summary": {
136
+ "type": "object",
137
+ "required": [
138
+ "id",
139
+ "fingerprint",
140
+ "severity",
141
+ "state",
142
+ "blocking"
143
+ ],
144
+ "properties": {
145
+ "id": {
146
+ "type": "string",
147
+ "minLength": 1,
148
+ "maxLength": 256
149
+ },
150
+ "fingerprint": {
151
+ "type": "string",
152
+ "pattern": "^sha256:[0-9a-f]{64}$"
153
+ },
154
+ "severity": {
155
+ "enum": ["info", "low", "medium", "high", "critical"]
156
+ },
157
+ "state": {
158
+ "enum": [
159
+ "observed",
160
+ "introduced",
161
+ "existing",
162
+ "resolved",
163
+ "changed",
164
+ "moved",
165
+ "suppressed",
166
+ "waived"
167
+ ]
168
+ },
169
+ "blocking": {
170
+ "type": "boolean"
171
+ }
172
+ },
173
+ "additionalProperties": false,
174
+ "unevaluatedProperties": false
175
+ },
176
+ "analyzer_result": {
177
+ "type": "object",
178
+ "required": [
179
+ "analyzer",
180
+ "invocation",
181
+ "execution_status",
182
+ "evidence_status",
183
+ "finding_ids"
184
+ ],
185
+ "properties": {
186
+ "analyzer": {
187
+ "type": "string",
188
+ "minLength": 1,
189
+ "maxLength": 256
190
+ },
191
+ "tool_version": {
192
+ "type": "string",
193
+ "minLength": 1,
194
+ "maxLength": 128
195
+ },
196
+ "invocation": {
197
+ "$ref": "#/$defs/invocation"
198
+ },
199
+ "execution_status": {
200
+ "enum": [
201
+ "succeeded",
202
+ "unavailable",
203
+ "unsupported",
204
+ "timed_out",
205
+ "signaled",
206
+ "failed",
207
+ "parse_failed",
208
+ "truncated",
209
+ "malformed"
210
+ ]
211
+ },
212
+ "evidence_status": {
213
+ "enum": ["complete", "incomplete"]
214
+ },
215
+ "finding_ids": {
216
+ "type": "array",
217
+ "items": {
218
+ "type": "string",
219
+ "minLength": 1,
220
+ "maxLength": 256
221
+ }
222
+ },
223
+ "failure": {
224
+ "$ref": "#/$defs/failure"
225
+ },
226
+ "evidence_summary": {
227
+ "type": "object",
228
+ "additionalProperties": true,
229
+ "unevaluatedProperties": true
230
+ }
231
+ },
232
+ "additionalProperties": false,
233
+ "unevaluatedProperties": false,
234
+ "allOf": [
235
+ {
236
+ "if": {
237
+ "properties": {
238
+ "execution_status": {
239
+ "const": "succeeded"
240
+ }
241
+ }
242
+ },
243
+ "then": {
244
+ "properties": {
245
+ "evidence_status": {
246
+ "const": "complete"
247
+ }
248
+ },
249
+ "not": {
250
+ "required": ["failure"]
251
+ }
252
+ }
253
+ },
254
+ {
255
+ "if": {
256
+ "properties": {
257
+ "execution_status": {
258
+ "enum": [
259
+ "unavailable",
260
+ "unsupported",
261
+ "timed_out",
262
+ "signaled",
263
+ "failed",
264
+ "parse_failed",
265
+ "truncated",
266
+ "malformed"
267
+ ]
268
+ }
269
+ }
270
+ },
271
+ "then": {
272
+ "required": ["failure"],
273
+ "properties": {
274
+ "evidence_status": {
275
+ "const": "incomplete"
276
+ }
277
+ }
278
+ }
279
+ }
280
+ ]
281
+ },
282
+ "invocation": {
283
+ "type": "object",
284
+ "required": ["executable", "argv"],
285
+ "properties": {
286
+ "executable": {
287
+ "type": "string",
288
+ "minLength": 1,
289
+ "maxLength": 1024
290
+ },
291
+ "argv": {
292
+ "type": "array",
293
+ "items": {
294
+ "type": "string",
295
+ "maxLength": 4096
296
+ }
297
+ }
298
+ },
299
+ "additionalProperties": false,
300
+ "unevaluatedProperties": false
301
+ },
302
+ "failure": {
303
+ "type": "object",
304
+ "required": ["code", "message"],
305
+ "properties": {
306
+ "code": {
307
+ "enum": [
308
+ "unavailable",
309
+ "unsupported",
310
+ "timed_out",
311
+ "signaled",
312
+ "failed",
313
+ "parse_failed",
314
+ "truncated",
315
+ "malformed"
316
+ ]
317
+ },
318
+ "message": {
319
+ "type": "string",
320
+ "minLength": 1,
321
+ "maxLength": 4096
322
+ }
323
+ },
324
+ "additionalProperties": false,
325
+ "unevaluatedProperties": false
326
+ },
327
+ "operational_failure": {
328
+ "type": "object",
329
+ "required": ["code", "message"],
330
+ "properties": {
331
+ "code": {
332
+ "enum": [
333
+ "unavailable",
334
+ "unsupported",
335
+ "timed_out",
336
+ "signaled",
337
+ "failed",
338
+ "parse_failed",
339
+ "truncated",
340
+ "malformed",
341
+ "configuration",
342
+ "interrupted",
343
+ "incomplete_evidence"
344
+ ]
345
+ },
346
+ "analyzer": {
347
+ "type": "string",
348
+ "maxLength": 256
349
+ },
350
+ "message": {
351
+ "type": "string",
352
+ "minLength": 1,
353
+ "maxLength": 4096
354
+ }
355
+ },
356
+ "additionalProperties": false,
357
+ "unevaluatedProperties": false
358
+ },
359
+ "decision_reason": {
360
+ "type": "object",
361
+ "required": ["code", "message"],
362
+ "properties": {
363
+ "code": {
364
+ "type": "string",
365
+ "minLength": 1,
366
+ "maxLength": 128
367
+ },
368
+ "message": {
369
+ "type": "string",
370
+ "minLength": 1,
371
+ "maxLength": 4096
372
+ }
373
+ },
374
+ "additionalProperties": false,
375
+ "unevaluatedProperties": false
376
+ }
377
+ }
378
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/waiver/v1.schema.json",
4
+ "title": "RailVerdict Waiver v1",
5
+ "description": "Exact-fingerprint waiver requiring reason, owner, UTC creation and expiry, optional issue reference.",
6
+ "type": "object",
7
+ "required": [
8
+ "fingerprint",
9
+ "reason",
10
+ "owner",
11
+ "created_at",
12
+ "expires_at"
13
+ ],
14
+ "properties": {
15
+ "fingerprint": {
16
+ "type": "string",
17
+ "pattern": "^sha256:[0-9a-f]{64}$"
18
+ },
19
+ "reason": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "maxLength": 1024
23
+ },
24
+ "owner": {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "maxLength": 256
28
+ },
29
+ "created_at": {
30
+ "type": "string",
31
+ "format": "date-time"
32
+ },
33
+ "expires_at": {
34
+ "type": "string",
35
+ "format": "date-time"
36
+ },
37
+ "issue_ref": {
38
+ "type": "string",
39
+ "minLength": 1,
40
+ "maxLength": 512
41
+ }
42
+ },
43
+ "additionalProperties": false,
44
+ "unevaluatedProperties": false
45
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/waivers/v1.schema.json",
4
+ "title": "RailVerdict Waivers v1",
5
+ "description": "Collection of exact-fingerprint waivers.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "waivers"
10
+ ],
11
+ "properties": {
12
+ "schema_version": {
13
+ "const": "1.0"
14
+ },
15
+ "waivers": {
16
+ "type": "array",
17
+ "items": {
18
+ "$ref": "#/$defs/waiver"
19
+ }
20
+ }
21
+ },
22
+ "$defs": {
23
+ "waiver": {
24
+ "type": "object",
25
+ "required": [
26
+ "fingerprint",
27
+ "reason",
28
+ "owner",
29
+ "created_at",
30
+ "expires_at"
31
+ ],
32
+ "properties": {
33
+ "fingerprint": {
34
+ "type": "string",
35
+ "pattern": "^sha256:[0-9a-f]{64}$"
36
+ },
37
+ "reason": {
38
+ "type": "string",
39
+ "minLength": 1,
40
+ "maxLength": 1024
41
+ },
42
+ "owner": {
43
+ "type": "string",
44
+ "minLength": 1,
45
+ "maxLength": 256
46
+ },
47
+ "created_at": {
48
+ "type": "string",
49
+ "format": "date-time"
50
+ },
51
+ "expires_at": {
52
+ "type": "string",
53
+ "format": "date-time"
54
+ },
55
+ "issue_ref": {
56
+ "type": "string",
57
+ "minLength": 1,
58
+ "maxLength": 512
59
+ }
60
+ },
61
+ "additionalProperties": false,
62
+ "unevaluatedProperties": false
63
+ }
64
+ },
65
+ "additionalProperties": false,
66
+ "unevaluatedProperties": false
67
+ }
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rail_verdict
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Dalben
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: json_schemer
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '2.5'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '2.5'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '3'
32
+ - !ruby/object:Gem::Dependency
33
+ name: mcp
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: 1.2.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.0
46
+ description: |
47
+ RailVerdict collects evidence from established Ruby and Rails quality
48
+ tools, normalizes it into stable findings, applies project policy, and
49
+ returns a deterministic merge gate for humans, CI, and coding agents.
50
+ The core is offline, fail-closed, and independent of AI and hosted
51
+ services.
52
+ executables:
53
+ - railverdict
54
+ - railverdict-minitest-reporter.rb
55
+ extensions: []
56
+ extra_rdoc_files: []
57
+ files:
58
+ - LICENSE
59
+ - NOTICE
60
+ - README.md
61
+ - exe/railverdict
62
+ - exe/railverdict-minitest-reporter.rb
63
+ - lib/rail_verdict.rb
64
+ - lib/rail_verdict/analyzers/_shared.rb
65
+ - lib/rail_verdict/analyzers/bundler_audit.rb
66
+ - lib/rail_verdict/analyzers/minitest.rb
67
+ - lib/rail_verdict/analyzers/rspec.rb
68
+ - lib/rail_verdict/analyzers/rubocop.rb
69
+ - lib/rail_verdict/analyzers/simplecov.rb
70
+ - lib/rail_verdict/baseline.rb
71
+ - lib/rail_verdict/check.rb
72
+ - lib/rail_verdict/cli.rb
73
+ - lib/rail_verdict/comparison.rb
74
+ - lib/rail_verdict/configuration.rb
75
+ - lib/rail_verdict/contracts/analyzer_result.rb
76
+ - lib/rail_verdict/contracts/finding.rb
77
+ - lib/rail_verdict/contracts/gate_result.rb
78
+ - lib/rail_verdict/coverage/changed_line_evaluator.rb
79
+ - lib/rail_verdict/doctor.rb
80
+ - lib/rail_verdict/errors.rb
81
+ - lib/rail_verdict/findings_command.rb
82
+ - lib/rail_verdict/fingerprint.rb
83
+ - lib/rail_verdict/git/command.rb
84
+ - lib/rail_verdict/git/context.rb
85
+ - lib/rail_verdict/git/diff_parser.rb
86
+ - lib/rail_verdict/git/errors.rb
87
+ - lib/rail_verdict/init.rb
88
+ - lib/rail_verdict/intelligence.rb
89
+ - lib/rail_verdict/intelligence/ai_analysis.rb
90
+ - lib/rail_verdict/intelligence/ai_failure.rb
91
+ - lib/rail_verdict/intelligence/budget.rb
92
+ - lib/rail_verdict/intelligence/cache.rb
93
+ - lib/rail_verdict/intelligence/context_builder.rb
94
+ - lib/rail_verdict/intelligence/manifest.rb
95
+ - lib/rail_verdict/intelligence/orchestrator.rb
96
+ - lib/rail_verdict/intelligence/prompt.rb
97
+ - lib/rail_verdict/intelligence/provider.rb
98
+ - lib/rail_verdict/intelligence/providers/fake_provider.rb
99
+ - lib/rail_verdict/intelligence/providers/openai_compat.rb
100
+ - lib/rail_verdict/intelligence/redactor.rb
101
+ - lib/rail_verdict/intelligence/secret_detector.rb
102
+ - lib/rail_verdict/intelligence/source_reader.rb
103
+ - lib/rail_verdict/mcp.rb
104
+ - lib/rail_verdict/mcp/cache.rb
105
+ - lib/rail_verdict/mcp/repository_root.rb
106
+ - lib/rail_verdict/mcp/serializers.rb
107
+ - lib/rail_verdict/mcp/server.rb
108
+ - lib/rail_verdict/mcp/tools/build_repair_packet.rb
109
+ - lib/rail_verdict/mcp/tools/explain.rb
110
+ - lib/rail_verdict/mcp/tools/get_finding.rb
111
+ - lib/rail_verdict/mcp/tools/investigate.rb
112
+ - lib/rail_verdict/mcp/tools/list_findings.rb
113
+ - lib/rail_verdict/mcp/tools/verify.rb
114
+ - lib/rail_verdict/mcp/tools/verify_repair.rb
115
+ - lib/rail_verdict/mcp/validators.rb
116
+ - lib/rail_verdict/process_runner.rb
117
+ - lib/rail_verdict/rails_context.rb
118
+ - lib/rail_verdict/rails_context/classifier.rb
119
+ - lib/rail_verdict/rails_context/confidence.rb
120
+ - lib/rail_verdict/rails_context/constant_inferencer.rb
121
+ - lib/rail_verdict/rails_context/context.rb
122
+ - lib/rail_verdict/rails_context/detector.rb
123
+ - lib/rail_verdict/rails_context/limits.rb
124
+ - lib/rail_verdict/rails_context/resolvers/association_extractor.rb
125
+ - lib/rail_verdict/rails_context/resolvers/policy_resolver.rb
126
+ - lib/rail_verdict/rails_context/resolvers/route_resolver.rb
127
+ - lib/rail_verdict/rails_context/resolvers/route_scanner.rb
128
+ - lib/rail_verdict/rails_context/resolvers/schema_resolver.rb
129
+ - lib/rail_verdict/rails_context/resolvers/test_candidates.rb
130
+ - lib/rail_verdict/rails_context/resolvers/view_resolver.rb
131
+ - lib/rail_verdict/rails_context/schema_parser.rb
132
+ - lib/rail_verdict/repair/boundary.rb
133
+ - lib/rail_verdict/repair/command.rb
134
+ - lib/rail_verdict/repair/constraints.rb
135
+ - lib/rail_verdict/repair/context_assembler.rb
136
+ - lib/rail_verdict/repair/diff_context.rb
137
+ - lib/rail_verdict/repair/packet.rb
138
+ - lib/rail_verdict/repair/prompt_renderer.rb
139
+ - lib/rail_verdict/repair/verification_plan.rb
140
+ - lib/rail_verdict/repair/verifier.rb
141
+ - lib/rail_verdict/reporters/console.rb
142
+ - lib/rail_verdict/reporters/github_annotations.rb
143
+ - lib/rail_verdict/reporters/json_reporter.rb
144
+ - lib/rail_verdict/reporters/sarif.rb
145
+ - lib/rail_verdict/run_context.rb
146
+ - lib/rail_verdict/schema_validator.rb
147
+ - lib/rail_verdict/strict_yaml.rb
148
+ - lib/rail_verdict/verification/policy.rb
149
+ - lib/rail_verdict/version.rb
150
+ - lib/rail_verdict/waiver.rb
151
+ - lib/rail_verdict/waiver_store.rb
152
+ - schemas/ai-analysis-v1.schema.json
153
+ - schemas/baseline-v1.schema.json
154
+ - schemas/configuration-v1.1.schema.json
155
+ - schemas/configuration-v1.2.schema.json
156
+ - schemas/configuration-v1.3.schema.json
157
+ - schemas/configuration-v1.4.schema.json
158
+ - schemas/configuration-v1.schema.json
159
+ - schemas/coverage-v1.schema.json
160
+ - schemas/finding-v1.schema.json
161
+ - schemas/minitest-reporter-v1.schema.json
162
+ - schemas/repair-packet-v1.schema.json
163
+ - schemas/result-v1.schema.json
164
+ - schemas/waiver-v1.schema.json
165
+ - schemas/waivers-v1.schema.json
166
+ homepage: https://railverdict.dev
167
+ licenses:
168
+ - MIT
169
+ metadata:
170
+ homepage_uri: https://railverdict.dev
171
+ source_code_uri: https://github.com/pedro-dalben/RailVerdict
172
+ changelog_uri: https://github.com/pedro-dalben/RailVerdict/blob/master/CHANGELOG.md
173
+ rubygems_mfa_required: 'true'
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '3.3'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubygems_version: 3.6.9
189
+ specification_version: 4
190
+ summary: Deterministic, offline, fail-closed merge verification for Ruby on Rails
191
+ projects
192
+ test_files: []