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,108 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/baseline/v1.schema.json",
4
+ "title": "RailVerdict Baseline v1",
5
+ "description": "Versioned baseline of reviewed finding fingerprints with minimal reproducibility metadata. No source, secrets, logs, or prompts.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "fingerprint_version",
10
+ "algorithm",
11
+ "payload_schema",
12
+ "created_at",
13
+ "created_by",
14
+ "configuration_digest",
15
+ "analyzer_versions",
16
+ "entries"
17
+ ],
18
+ "properties": {
19
+ "schema_version": {
20
+ "const": "1.0"
21
+ },
22
+ "fingerprint_version": {
23
+ "const": 1
24
+ },
25
+ "algorithm": {
26
+ "const": "sha256"
27
+ },
28
+ "payload_schema": {
29
+ "const": "https://railverdict.dev/fingerprint-payload/v1"
30
+ },
31
+ "created_at": {
32
+ "type": "string",
33
+ "format": "date-time"
34
+ },
35
+ "created_by": {
36
+ "type": "string",
37
+ "minLength": 1,
38
+ "maxLength": 256
39
+ },
40
+ "configuration_digest": {
41
+ "type": "string",
42
+ "pattern": "^[0-9a-f]{64}$"
43
+ },
44
+ "analyzer_versions": {
45
+ "type": "object",
46
+ "additionalProperties": {
47
+ "type": "string",
48
+ "minLength": 1,
49
+ "maxLength": 128
50
+ },
51
+ "unevaluatedProperties": false
52
+ },
53
+ "entries": {
54
+ "type": "array",
55
+ "items": {
56
+ "$ref": "#/$defs/entry"
57
+ }
58
+ }
59
+ },
60
+ "additionalProperties": false,
61
+ "unevaluatedProperties": false,
62
+ "$defs": {
63
+ "entry": {
64
+ "type": "object",
65
+ "required": [
66
+ "fingerprint",
67
+ "analyzer",
68
+ "rule_id",
69
+ "path",
70
+ "message",
71
+ "first_seen"
72
+ ],
73
+ "properties": {
74
+ "fingerprint": {
75
+ "type": "string",
76
+ "pattern": "^sha256:[0-9a-f]{64}$"
77
+ },
78
+ "analyzer": {
79
+ "type": "string",
80
+ "minLength": 1,
81
+ "maxLength": 256
82
+ },
83
+ "rule_id": {
84
+ "type": "string",
85
+ "minLength": 1,
86
+ "maxLength": 256
87
+ },
88
+ "path": {
89
+ "type": "string",
90
+ "minLength": 1,
91
+ "maxLength": 4096,
92
+ "pattern": "^(?!/)(?!.*\\\\)(?!.*//)(?!(?:\\.{1,2})(?:/|$))(?!.*\\/(?:\\.{1,2})(?:/|$))[^\\u0000-\\u001f/]+(?:/[^\\u0000-\\u001f/]+)*$"
93
+ },
94
+ "message": {
95
+ "type": "string",
96
+ "minLength": 1,
97
+ "maxLength": 4096
98
+ },
99
+ "first_seen": {
100
+ "type": "string",
101
+ "format": "date-time"
102
+ }
103
+ },
104
+ "additionalProperties": false,
105
+ "unevaluatedProperties": false
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,150 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/configuration/v1.1.schema.json",
4
+ "title": "RailVerdict Parsed Configuration v1.1",
5
+ "description": "Versioned contract for .railverdict.yml with test, coverage, and dependency analyzers.",
6
+ "type": "object",
7
+ "required": [
8
+ "version",
9
+ "mode",
10
+ "analyzers"
11
+ ],
12
+ "properties": {
13
+ "version": {
14
+ "const": 1.1
15
+ },
16
+ "mode": {
17
+ "enum": [
18
+ "advisory",
19
+ "no_new_debt",
20
+ "strict"
21
+ ]
22
+ },
23
+ "analyzers": {
24
+ "$ref": "#/$defs/analyzers"
25
+ }
26
+ },
27
+ "additionalProperties": false,
28
+ "unevaluatedProperties": false,
29
+ "$defs": {
30
+ "analyzers": {
31
+ "type": "object",
32
+ "required": [
33
+ "rubocop"
34
+ ],
35
+ "properties": {
36
+ "rubocop": {
37
+ "$ref": "#/$defs/analyzerSelection"
38
+ },
39
+ "minitest": {
40
+ "$ref": "#/$defs/analyzerSelection"
41
+ },
42
+ "rspec": {
43
+ "$ref": "#/$defs/analyzerSelection"
44
+ },
45
+ "simplecov": {
46
+ "$ref": "#/$defs/simplecovSelection"
47
+ },
48
+ "bundler_audit": {
49
+ "$ref": "#/$defs/bundlerAuditSelection"
50
+ }
51
+ },
52
+ "additionalProperties": false,
53
+ "unevaluatedProperties": false
54
+ },
55
+ "analyzerSelection": {
56
+ "type": "object",
57
+ "required": [
58
+ "enabled",
59
+ "required"
60
+ ],
61
+ "properties": {
62
+ "enabled": {
63
+ "type": "boolean"
64
+ },
65
+ "required": {
66
+ "type": "boolean"
67
+ }
68
+ },
69
+ "additionalProperties": false,
70
+ "unevaluatedProperties": false,
71
+ "not": {
72
+ "required": ["enabled", "required"],
73
+ "properties": {
74
+ "enabled": {
75
+ "const": false
76
+ },
77
+ "required": {
78
+ "const": true
79
+ }
80
+ }
81
+ }
82
+ },
83
+ "simplecovSelection": {
84
+ "type": "object",
85
+ "required": [
86
+ "enabled",
87
+ "required"
88
+ ],
89
+ "properties": {
90
+ "enabled": {
91
+ "type": "boolean"
92
+ },
93
+ "required": {
94
+ "type": "boolean"
95
+ },
96
+ "coverage_path": {
97
+ "type": "string",
98
+ "minLength": 1,
99
+ "maxLength": 1024
100
+ },
101
+ "freshness_window_seconds": {
102
+ "type": "integer",
103
+ "minimum": 1,
104
+ "maximum": 2592000
105
+ }
106
+ },
107
+ "additionalProperties": false,
108
+ "unevaluatedProperties": false,
109
+ "not": {
110
+ "required": ["enabled", "required"],
111
+ "properties": {
112
+ "enabled": {
113
+ "const": false
114
+ },
115
+ "required": {
116
+ "const": true
117
+ }
118
+ }
119
+ }
120
+ },
121
+ "bundlerAuditSelection": {
122
+ "type": "object",
123
+ "required": [
124
+ "enabled",
125
+ "required"
126
+ ],
127
+ "properties": {
128
+ "enabled": {
129
+ "type": "boolean"
130
+ },
131
+ "required": {
132
+ "type": "boolean"
133
+ }
134
+ },
135
+ "additionalProperties": false,
136
+ "unevaluatedProperties": false,
137
+ "not": {
138
+ "required": ["enabled", "required"],
139
+ "properties": {
140
+ "enabled": {
141
+ "const": false
142
+ },
143
+ "required": {
144
+ "const": true
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
@@ -0,0 +1,182 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/configuration/v1.2.schema.json",
4
+ "title": "RailVerdict Parsed Configuration v1.2",
5
+ "description": "Versioned contract for .railverdict.yml with baseline and waivers paths.",
6
+ "type": "object",
7
+ "required": [
8
+ "version",
9
+ "mode",
10
+ "analyzers"
11
+ ],
12
+ "properties": {
13
+ "version": {
14
+ "const": 1.2
15
+ },
16
+ "mode": {
17
+ "enum": [
18
+ "advisory",
19
+ "no_new_debt",
20
+ "strict"
21
+ ]
22
+ },
23
+ "analyzers": {
24
+ "$ref": "#/$defs/analyzers"
25
+ },
26
+ "baseline": {
27
+ "$ref": "#/$defs/baselineConfig"
28
+ },
29
+ "waivers": {
30
+ "$ref": "#/$defs/waiversConfig"
31
+ }
32
+ },
33
+ "additionalProperties": false,
34
+ "unevaluatedProperties": false,
35
+ "$defs": {
36
+ "analyzers": {
37
+ "type": "object",
38
+ "required": [
39
+ "rubocop"
40
+ ],
41
+ "properties": {
42
+ "rubocop": {
43
+ "$ref": "#/$defs/analyzerSelection"
44
+ },
45
+ "minitest": {
46
+ "$ref": "#/$defs/analyzerSelection"
47
+ },
48
+ "rspec": {
49
+ "$ref": "#/$defs/analyzerSelection"
50
+ },
51
+ "simplecov": {
52
+ "$ref": "#/$defs/simplecovSelection"
53
+ },
54
+ "bundler_audit": {
55
+ "$ref": "#/$defs/bundlerAuditSelection"
56
+ }
57
+ },
58
+ "additionalProperties": false,
59
+ "unevaluatedProperties": false
60
+ },
61
+ "analyzerSelection": {
62
+ "type": "object",
63
+ "required": [
64
+ "enabled",
65
+ "required"
66
+ ],
67
+ "properties": {
68
+ "enabled": {
69
+ "type": "boolean"
70
+ },
71
+ "required": {
72
+ "type": "boolean"
73
+ }
74
+ },
75
+ "additionalProperties": false,
76
+ "unevaluatedProperties": false,
77
+ "not": {
78
+ "required": ["enabled", "required"],
79
+ "properties": {
80
+ "enabled": {
81
+ "const": false
82
+ },
83
+ "required": {
84
+ "const": true
85
+ }
86
+ }
87
+ }
88
+ },
89
+ "simplecovSelection": {
90
+ "type": "object",
91
+ "required": [
92
+ "enabled",
93
+ "required"
94
+ ],
95
+ "properties": {
96
+ "enabled": {
97
+ "type": "boolean"
98
+ },
99
+ "required": {
100
+ "type": "boolean"
101
+ },
102
+ "coverage_path": {
103
+ "type": "string",
104
+ "minLength": 1,
105
+ "maxLength": 1024
106
+ },
107
+ "freshness_window_seconds": {
108
+ "type": "integer",
109
+ "minimum": 1,
110
+ "maximum": 2592000
111
+ }
112
+ },
113
+ "additionalProperties": false,
114
+ "unevaluatedProperties": false,
115
+ "not": {
116
+ "required": ["enabled", "required"],
117
+ "properties": {
118
+ "enabled": {
119
+ "const": false
120
+ },
121
+ "required": {
122
+ "const": true
123
+ }
124
+ }
125
+ }
126
+ },
127
+ "bundlerAuditSelection": {
128
+ "type": "object",
129
+ "required": [
130
+ "enabled",
131
+ "required"
132
+ ],
133
+ "properties": {
134
+ "enabled": {
135
+ "type": "boolean"
136
+ },
137
+ "required": {
138
+ "type": "boolean"
139
+ }
140
+ },
141
+ "additionalProperties": false,
142
+ "unevaluatedProperties": false,
143
+ "not": {
144
+ "required": ["enabled", "required"],
145
+ "properties": {
146
+ "enabled": {
147
+ "const": false
148
+ },
149
+ "required": {
150
+ "const": true
151
+ }
152
+ }
153
+ }
154
+ },
155
+ "baselineConfig": {
156
+ "type": "object",
157
+ "required": [],
158
+ "properties": {
159
+ "path": {
160
+ "type": "string",
161
+ "minLength": 1,
162
+ "maxLength": 1024
163
+ }
164
+ },
165
+ "additionalProperties": false,
166
+ "unevaluatedProperties": false
167
+ },
168
+ "waiversConfig": {
169
+ "type": "object",
170
+ "required": [],
171
+ "properties": {
172
+ "path": {
173
+ "type": "string",
174
+ "minLength": 1,
175
+ "maxLength": 1024
176
+ }
177
+ },
178
+ "additionalProperties": false,
179
+ "unevaluatedProperties": false
180
+ }
181
+ }
182
+ }
@@ -0,0 +1,198 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://railverdict.dev/schemas/configuration/v1.3.schema.json",
4
+ "title": "RailVerdict Parsed Configuration v1.3",
5
+ "description": "Versioned contract for .railverdict.yml with baseline, waivers, and git base.",
6
+ "type": "object",
7
+ "required": [
8
+ "version",
9
+ "mode",
10
+ "analyzers"
11
+ ],
12
+ "properties": {
13
+ "version": {
14
+ "const": 1.3
15
+ },
16
+ "mode": {
17
+ "enum": [
18
+ "advisory",
19
+ "no_new_debt",
20
+ "strict"
21
+ ]
22
+ },
23
+ "analyzers": {
24
+ "$ref": "#/$defs/analyzers"
25
+ },
26
+ "baseline": {
27
+ "$ref": "#/$defs/baselineConfig"
28
+ },
29
+ "waivers": {
30
+ "$ref": "#/$defs/waiversConfig"
31
+ },
32
+ "git": {
33
+ "$ref": "#/$defs/gitConfig"
34
+ }
35
+ },
36
+ "additionalProperties": false,
37
+ "unevaluatedProperties": false,
38
+ "$defs": {
39
+ "analyzers": {
40
+ "type": "object",
41
+ "required": [
42
+ "rubocop"
43
+ ],
44
+ "properties": {
45
+ "rubocop": {
46
+ "$ref": "#/$defs/analyzerSelection"
47
+ },
48
+ "minitest": {
49
+ "$ref": "#/$defs/analyzerSelection"
50
+ },
51
+ "rspec": {
52
+ "$ref": "#/$defs/analyzerSelection"
53
+ },
54
+ "simplecov": {
55
+ "$ref": "#/$defs/simplecovSelection"
56
+ },
57
+ "bundler_audit": {
58
+ "$ref": "#/$defs/bundlerAuditSelection"
59
+ }
60
+ },
61
+ "additionalProperties": false,
62
+ "unevaluatedProperties": false
63
+ },
64
+ "analyzerSelection": {
65
+ "type": "object",
66
+ "required": [
67
+ "enabled",
68
+ "required"
69
+ ],
70
+ "properties": {
71
+ "enabled": {
72
+ "type": "boolean"
73
+ },
74
+ "required": {
75
+ "type": "boolean"
76
+ }
77
+ },
78
+ "additionalProperties": false,
79
+ "unevaluatedProperties": false,
80
+ "not": {
81
+ "required": ["enabled", "required"],
82
+ "properties": {
83
+ "enabled": {
84
+ "const": false
85
+ },
86
+ "required": {
87
+ "const": true
88
+ }
89
+ }
90
+ }
91
+ },
92
+ "simplecovSelection": {
93
+ "type": "object",
94
+ "required": [
95
+ "enabled",
96
+ "required"
97
+ ],
98
+ "properties": {
99
+ "enabled": {
100
+ "type": "boolean"
101
+ },
102
+ "required": {
103
+ "type": "boolean"
104
+ },
105
+ "coverage_path": {
106
+ "type": "string",
107
+ "minLength": 1,
108
+ "maxLength": 1024
109
+ },
110
+ "freshness_window_seconds": {
111
+ "type": "integer",
112
+ "minimum": 1,
113
+ "maximum": 2592000
114
+ }
115
+ },
116
+ "additionalProperties": false,
117
+ "unevaluatedProperties": false,
118
+ "not": {
119
+ "required": ["enabled", "required"],
120
+ "properties": {
121
+ "enabled": {
122
+ "const": false
123
+ },
124
+ "required": {
125
+ "const": true
126
+ }
127
+ }
128
+ }
129
+ },
130
+ "bundlerAuditSelection": {
131
+ "type": "object",
132
+ "required": [
133
+ "enabled",
134
+ "required"
135
+ ],
136
+ "properties": {
137
+ "enabled": {
138
+ "type": "boolean"
139
+ },
140
+ "required": {
141
+ "type": "boolean"
142
+ }
143
+ },
144
+ "additionalProperties": false,
145
+ "unevaluatedProperties": false,
146
+ "not": {
147
+ "required": ["enabled", "required"],
148
+ "properties": {
149
+ "enabled": {
150
+ "const": false
151
+ },
152
+ "required": {
153
+ "const": true
154
+ }
155
+ }
156
+ }
157
+ },
158
+ "baselineConfig": {
159
+ "type": "object",
160
+ "required": [],
161
+ "properties": {
162
+ "path": {
163
+ "type": "string",
164
+ "minLength": 1,
165
+ "maxLength": 1024
166
+ }
167
+ },
168
+ "additionalProperties": false,
169
+ "unevaluatedProperties": false
170
+ },
171
+ "waiversConfig": {
172
+ "type": "object",
173
+ "required": [],
174
+ "properties": {
175
+ "path": {
176
+ "type": "string",
177
+ "minLength": 1,
178
+ "maxLength": 1024
179
+ }
180
+ },
181
+ "additionalProperties": false,
182
+ "unevaluatedProperties": false
183
+ },
184
+ "gitConfig": {
185
+ "type": "object",
186
+ "required": [],
187
+ "properties": {
188
+ "base": {
189
+ "type": "string",
190
+ "minLength": 1,
191
+ "maxLength": 1024
192
+ }
193
+ },
194
+ "additionalProperties": false,
195
+ "unevaluatedProperties": false
196
+ }
197
+ }
198
+ }