@eduardbar/drift 1.3.0 → 1.5.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 (198) hide show
  1. package/.gga +50 -0
  2. package/.github/actions/drift-review/README.md +62 -0
  3. package/.github/actions/drift-review/action.yml +148 -0
  4. package/.github/actions/drift-scan/README.md +28 -32
  5. package/.github/actions/drift-scan/action.yml +78 -14
  6. package/.github/workflows/publish-vscode.yml +1 -3
  7. package/.github/workflows/publish.yml +8 -0
  8. package/.github/workflows/quality.yml +15 -0
  9. package/.github/workflows/reusable-quality-checks.yml +95 -0
  10. package/.github/workflows/review-pr.yml +33 -41
  11. package/AGENTS.md +75 -251
  12. package/CHANGELOG.md +41 -0
  13. package/README.md +177 -43
  14. package/benchmarks/fixtures/critical/drift.config.ts +21 -0
  15. package/benchmarks/fixtures/critical/src/app/user-service.ts +30 -0
  16. package/benchmarks/fixtures/critical/src/domain/entities.ts +19 -0
  17. package/benchmarks/fixtures/critical/src/domain/policies.ts +22 -0
  18. package/benchmarks/fixtures/critical/src/index.ts +10 -0
  19. package/benchmarks/fixtures/critical/src/infra/memory-user-repo.ts +14 -0
  20. package/benchmarks/perf-budget.v1.json +27 -0
  21. package/dist/benchmark.d.ts +1 -1
  22. package/dist/benchmark.js +83 -52
  23. package/dist/cli.js +243 -8
  24. package/dist/config.js +16 -2
  25. package/dist/diff.js +42 -50
  26. package/dist/doctor.d.ts +26 -0
  27. package/dist/doctor.js +140 -0
  28. package/dist/format.d.ts +17 -0
  29. package/dist/format.js +45 -0
  30. package/dist/guard-baseline.d.ts +12 -0
  31. package/dist/guard-baseline.js +57 -0
  32. package/dist/guard-metrics.d.ts +6 -0
  33. package/dist/guard-metrics.js +39 -0
  34. package/dist/guard-types.d.ts +58 -0
  35. package/dist/guard-types.js +2 -0
  36. package/dist/guard.d.ts +16 -0
  37. package/dist/guard.js +178 -0
  38. package/dist/index.d.ts +10 -3
  39. package/dist/index.js +4 -1
  40. package/dist/init.d.ts +15 -0
  41. package/dist/init.js +273 -0
  42. package/dist/map-cycles.d.ts +2 -0
  43. package/dist/map-cycles.js +34 -0
  44. package/dist/map-svg.d.ts +19 -0
  45. package/dist/map-svg.js +97 -0
  46. package/dist/map.js +78 -138
  47. package/dist/metrics.js +70 -55
  48. package/dist/output-metadata.d.ts +15 -0
  49. package/dist/output-metadata.js +19 -0
  50. package/dist/plugins-capabilities.d.ts +4 -0
  51. package/dist/plugins-capabilities.js +21 -0
  52. package/dist/plugins-messages.d.ts +10 -0
  53. package/dist/plugins-messages.js +16 -0
  54. package/dist/plugins-rules.d.ts +9 -0
  55. package/dist/plugins-rules.js +137 -0
  56. package/dist/plugins.d.ts +1 -1
  57. package/dist/plugins.js +45 -142
  58. package/dist/reporter-constants.d.ts +16 -0
  59. package/dist/reporter-constants.js +39 -0
  60. package/dist/reporter.d.ts +3 -3
  61. package/dist/reporter.js +35 -55
  62. package/dist/review.d.ts +2 -1
  63. package/dist/review.js +2 -1
  64. package/dist/rules/phase3-configurable.js +23 -15
  65. package/dist/saas/constants.d.ts +15 -0
  66. package/dist/saas/constants.js +48 -0
  67. package/dist/saas/dashboard.d.ts +8 -0
  68. package/dist/saas/dashboard.js +132 -0
  69. package/dist/saas/errors.d.ts +19 -0
  70. package/dist/saas/errors.js +37 -0
  71. package/dist/saas/helpers.d.ts +21 -0
  72. package/dist/saas/helpers.js +110 -0
  73. package/dist/saas/ingest.d.ts +3 -0
  74. package/dist/saas/ingest.js +249 -0
  75. package/dist/saas/organization.d.ts +5 -0
  76. package/dist/saas/organization.js +82 -0
  77. package/dist/saas/plan-change.d.ts +10 -0
  78. package/dist/saas/plan-change.js +15 -0
  79. package/dist/saas/store.d.ts +21 -0
  80. package/dist/saas/store.js +159 -0
  81. package/dist/saas/types.d.ts +191 -0
  82. package/dist/saas/types.js +2 -0
  83. package/dist/saas.d.ts +8 -218
  84. package/dist/saas.js +7 -761
  85. package/dist/sarif.d.ts +74 -0
  86. package/dist/sarif.js +122 -0
  87. package/dist/trust-advanced.d.ts +14 -0
  88. package/dist/trust-advanced.js +65 -0
  89. package/dist/trust-kpi-fs.d.ts +3 -0
  90. package/dist/trust-kpi-fs.js +141 -0
  91. package/dist/trust-kpi-parse.d.ts +7 -0
  92. package/dist/trust-kpi-parse.js +186 -0
  93. package/dist/trust-kpi-types.d.ts +16 -0
  94. package/dist/trust-kpi-types.js +2 -0
  95. package/dist/trust-kpi.d.ts +1 -3
  96. package/dist/trust-kpi.js +6 -266
  97. package/dist/trust-policy.d.ts +32 -0
  98. package/dist/trust-policy.js +160 -0
  99. package/dist/trust-render.d.ts +9 -0
  100. package/dist/trust-render.js +54 -0
  101. package/dist/trust-scoring.d.ts +9 -0
  102. package/dist/trust-scoring.js +208 -0
  103. package/dist/trust.d.ts +5 -32
  104. package/dist/trust.js +29 -432
  105. package/dist/types/app.d.ts +30 -0
  106. package/dist/types/app.js +2 -0
  107. package/dist/types/config.d.ts +25 -0
  108. package/dist/types/config.js +2 -0
  109. package/dist/types/core.d.ts +100 -0
  110. package/dist/types/core.js +2 -0
  111. package/dist/types/diff.d.ts +55 -0
  112. package/dist/types/diff.js +2 -0
  113. package/dist/types/plugin.d.ts +41 -0
  114. package/dist/types/plugin.js +2 -0
  115. package/dist/types/trust.d.ts +120 -0
  116. package/dist/types/trust.js +2 -0
  117. package/dist/types.d.ts +8 -365
  118. package/docs/AGENTS.md +1 -1
  119. package/docs/release-notes-draft.md +40 -0
  120. package/docs/rules-catalog.md +49 -0
  121. package/docs/trust-core-release-checklist.md +37 -5
  122. package/package.json +11 -4
  123. package/packages/vscode-drift/src/code-actions.ts +1 -1
  124. package/schemas/drift-ai-output.v1.json +162 -0
  125. package/schemas/drift-doctor.v1.json +57 -0
  126. package/schemas/drift-guard.v1.json +298 -0
  127. package/schemas/drift-report.v1.json +151 -0
  128. package/schemas/drift-trust.v1.json +131 -0
  129. package/scripts/check-docs-drift.mjs +154 -0
  130. package/scripts/check-performance-budget.mjs +360 -0
  131. package/scripts/check-runtime-policy.mjs +66 -0
  132. package/scripts/smoke-repo.mjs +394 -0
  133. package/src/benchmark.ts +92 -53
  134. package/src/cli.ts +285 -13
  135. package/src/config.ts +19 -2
  136. package/src/diff.ts +57 -48
  137. package/src/doctor.ts +185 -0
  138. package/src/format.ts +81 -0
  139. package/src/guard-baseline.ts +74 -0
  140. package/src/guard-metrics.ts +52 -0
  141. package/src/guard-types.ts +66 -0
  142. package/src/guard.ts +248 -0
  143. package/src/index.ts +36 -0
  144. package/src/init.ts +298 -0
  145. package/src/map-cycles.ts +38 -0
  146. package/src/map-svg.ts +124 -0
  147. package/src/map.ts +111 -142
  148. package/src/metrics.ts +78 -59
  149. package/src/output-metadata.ts +32 -0
  150. package/src/plugins-capabilities.ts +36 -0
  151. package/src/plugins-messages.ts +35 -0
  152. package/src/plugins-rules.ts +296 -0
  153. package/src/plugins.ts +76 -283
  154. package/src/reporter-constants.ts +46 -0
  155. package/src/reporter.ts +64 -65
  156. package/src/review.ts +4 -2
  157. package/src/rules/phase3-configurable.ts +39 -26
  158. package/src/saas/constants.ts +56 -0
  159. package/src/saas/dashboard.ts +172 -0
  160. package/src/saas/errors.ts +45 -0
  161. package/src/saas/helpers.ts +140 -0
  162. package/src/saas/ingest.ts +278 -0
  163. package/src/saas/organization.ts +99 -0
  164. package/src/saas/plan-change.ts +19 -0
  165. package/src/saas/store.ts +172 -0
  166. package/src/saas/types.ts +216 -0
  167. package/src/saas.ts +49 -1031
  168. package/src/sarif.ts +232 -0
  169. package/src/trust-advanced.ts +99 -0
  170. package/src/trust-kpi-fs.ts +169 -0
  171. package/src/trust-kpi-parse.ts +219 -0
  172. package/src/trust-kpi-types.ts +19 -0
  173. package/src/trust-kpi.ts +8 -316
  174. package/src/trust-policy.ts +246 -0
  175. package/src/trust-render.ts +61 -0
  176. package/src/trust-scoring.ts +231 -0
  177. package/src/trust.ts +62 -576
  178. package/src/types/app.ts +30 -0
  179. package/src/types/config.ts +27 -0
  180. package/src/types/core.ts +105 -0
  181. package/src/types/diff.ts +61 -0
  182. package/src/types/plugin.ts +46 -0
  183. package/src/types/trust.ts +134 -0
  184. package/src/types.ts +79 -409
  185. package/tests/ci-quality-matrix.test.ts +37 -0
  186. package/tests/ci-smoke-gate.test.ts +26 -0
  187. package/tests/ci-version-alignment.test.ts +93 -0
  188. package/tests/cli-sarif.test.ts +92 -0
  189. package/tests/docs-drift-check.test.ts +115 -0
  190. package/tests/format.test.ts +157 -0
  191. package/tests/new-features.test.ts +11 -3
  192. package/tests/perf-budget-check.test.ts +146 -0
  193. package/tests/phase1-init-doctor-guard.test.ts +301 -0
  194. package/tests/runtime-policy-alignment.test.ts +46 -0
  195. package/tests/sarif.test.ts +160 -0
  196. package/tests/trust-kpi.test.ts +31 -4
  197. package/tests/trust.test.ts +18 -0
  198. package/vitest.config.ts +2 -0
@@ -0,0 +1,298 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "schemas/drift-guard.v1.json",
4
+ "title": "drift guard v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "$schema",
9
+ "toolVersion",
10
+ "scannedAt",
11
+ "projectPath",
12
+ "mode",
13
+ "passed",
14
+ "metrics",
15
+ "checks",
16
+ "current"
17
+ ],
18
+ "properties": {
19
+ "$schema": {
20
+ "const": "schemas/drift-guard.v1.json"
21
+ },
22
+ "toolVersion": {
23
+ "type": "string"
24
+ },
25
+ "scannedAt": {
26
+ "type": "string"
27
+ },
28
+ "projectPath": {
29
+ "type": "string"
30
+ },
31
+ "mode": {
32
+ "enum": ["diff", "baseline"]
33
+ },
34
+ "passed": {
35
+ "type": "boolean"
36
+ },
37
+ "baseRef": {
38
+ "type": "string"
39
+ },
40
+ "baselinePath": {
41
+ "type": "string"
42
+ },
43
+ "metrics": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": ["scoreDelta", "totalIssuesDelta", "severityDelta"],
47
+ "properties": {
48
+ "scoreDelta": { "type": "number" },
49
+ "totalIssuesDelta": { "type": "number" },
50
+ "severityDelta": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": ["error", "warning", "info"],
54
+ "properties": {
55
+ "error": { "type": "number" },
56
+ "warning": { "type": "number" },
57
+ "info": { "type": "number" }
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "checks": {
63
+ "type": "array",
64
+ "items": {
65
+ "type": "object",
66
+ "additionalProperties": false,
67
+ "required": ["id", "passed", "actual", "limit", "message"],
68
+ "properties": {
69
+ "id": { "type": "string" },
70
+ "passed": { "type": "boolean" },
71
+ "actual": { "type": "number" },
72
+ "limit": { "type": "number" },
73
+ "message": { "type": "string" }
74
+ }
75
+ }
76
+ },
77
+ "current": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": [
81
+ "$schema",
82
+ "toolVersion",
83
+ "scannedAt",
84
+ "targetPath",
85
+ "files",
86
+ "totalIssues",
87
+ "totalScore",
88
+ "totalFiles",
89
+ "summary",
90
+ "quality",
91
+ "maintenanceRisk"
92
+ ],
93
+ "properties": {
94
+ "$schema": {
95
+ "const": "schemas/drift-report.v1.json"
96
+ },
97
+ "toolVersion": {
98
+ "type": "string"
99
+ },
100
+ "scannedAt": {
101
+ "type": "string"
102
+ },
103
+ "targetPath": {
104
+ "type": "string"
105
+ },
106
+ "files": {
107
+ "type": "array",
108
+ "items": {
109
+ "type": "object",
110
+ "additionalProperties": false,
111
+ "required": ["path", "issues", "score"],
112
+ "properties": {
113
+ "path": { "type": "string" },
114
+ "score": { "type": "number" },
115
+ "issues": {
116
+ "type": "array",
117
+ "items": {
118
+ "type": "object",
119
+ "additionalProperties": false,
120
+ "required": ["rule", "severity", "message", "line", "column", "snippet"],
121
+ "properties": {
122
+ "rule": { "type": "string" },
123
+ "severity": { "enum": ["error", "warning", "info"] },
124
+ "message": { "type": "string" },
125
+ "line": { "type": "number" },
126
+ "column": { "type": "number" },
127
+ "snippet": { "type": "string" }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "totalIssues": { "type": "number" },
135
+ "totalScore": { "type": "number" },
136
+ "totalFiles": { "type": "number" },
137
+ "summary": {
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "required": ["errors", "warnings", "infos", "byRule"],
141
+ "properties": {
142
+ "errors": { "type": "number" },
143
+ "warnings": { "type": "number" },
144
+ "infos": { "type": "number" },
145
+ "byRule": {
146
+ "type": "object",
147
+ "additionalProperties": { "type": "number" }
148
+ }
149
+ }
150
+ },
151
+ "quality": {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "required": ["overall", "dimensions"],
155
+ "properties": {
156
+ "overall": { "type": "number" },
157
+ "dimensions": {
158
+ "type": "object",
159
+ "additionalProperties": false,
160
+ "required": ["architecture", "complexity", "ai-patterns", "testing"],
161
+ "properties": {
162
+ "architecture": { "type": "number" },
163
+ "complexity": { "type": "number" },
164
+ "ai-patterns": { "type": "number" },
165
+ "testing": { "type": "number" }
166
+ }
167
+ }
168
+ }
169
+ },
170
+ "maintenanceRisk": {
171
+ "type": "object",
172
+ "additionalProperties": false,
173
+ "required": ["score", "level", "hotspots", "signals"],
174
+ "properties": {
175
+ "score": { "type": "number" },
176
+ "level": { "enum": ["low", "medium", "high", "critical"] },
177
+ "hotspots": {
178
+ "type": "array",
179
+ "items": {
180
+ "type": "object",
181
+ "additionalProperties": false,
182
+ "required": [
183
+ "file",
184
+ "driftScore",
185
+ "complexityIssues",
186
+ "hasNearbyTests",
187
+ "changeFrequency",
188
+ "risk",
189
+ "reasons"
190
+ ],
191
+ "properties": {
192
+ "file": { "type": "string" },
193
+ "driftScore": { "type": "number" },
194
+ "complexityIssues": { "type": "number" },
195
+ "hasNearbyTests": { "type": "boolean" },
196
+ "changeFrequency": { "type": "number" },
197
+ "risk": { "type": "number" },
198
+ "reasons": {
199
+ "type": "array",
200
+ "items": { "type": "string" }
201
+ }
202
+ }
203
+ }
204
+ },
205
+ "signals": {
206
+ "type": "object",
207
+ "additionalProperties": false,
208
+ "required": ["highComplexityFiles", "filesWithoutNearbyTests", "frequentChangeFiles"],
209
+ "properties": {
210
+ "highComplexityFiles": { "type": "number" },
211
+ "filesWithoutNearbyTests": { "type": "number" },
212
+ "frequentChangeFiles": { "type": "number" }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ },
219
+ "diff": {
220
+ "type": "object",
221
+ "additionalProperties": false,
222
+ "required": [
223
+ "baseRef",
224
+ "projectPath",
225
+ "scannedAt",
226
+ "files",
227
+ "totalScoreBefore",
228
+ "totalScoreAfter",
229
+ "totalDelta",
230
+ "newIssuesCount",
231
+ "resolvedIssuesCount"
232
+ ],
233
+ "properties": {
234
+ "baseRef": { "type": "string" },
235
+ "projectPath": { "type": "string" },
236
+ "scannedAt": { "type": "string" },
237
+ "files": {
238
+ "type": "array",
239
+ "items": {
240
+ "type": "object",
241
+ "additionalProperties": false,
242
+ "required": [
243
+ "path",
244
+ "scoreBefore",
245
+ "scoreAfter",
246
+ "scoreDelta",
247
+ "newIssues",
248
+ "resolvedIssues"
249
+ ],
250
+ "properties": {
251
+ "path": { "type": "string" },
252
+ "scoreBefore": { "type": "number" },
253
+ "scoreAfter": { "type": "number" },
254
+ "scoreDelta": { "type": "number" },
255
+ "newIssues": {
256
+ "type": "array",
257
+ "items": {
258
+ "type": "object",
259
+ "additionalProperties": false,
260
+ "required": ["rule", "severity", "message", "line", "column", "snippet"],
261
+ "properties": {
262
+ "rule": { "type": "string" },
263
+ "severity": { "enum": ["error", "warning", "info"] },
264
+ "message": { "type": "string" },
265
+ "line": { "type": "number" },
266
+ "column": { "type": "number" },
267
+ "snippet": { "type": "string" }
268
+ }
269
+ }
270
+ },
271
+ "resolvedIssues": {
272
+ "type": "array",
273
+ "items": {
274
+ "type": "object",
275
+ "additionalProperties": false,
276
+ "required": ["rule", "severity", "message", "line", "column", "snippet"],
277
+ "properties": {
278
+ "rule": { "type": "string" },
279
+ "severity": { "enum": ["error", "warning", "info"] },
280
+ "message": { "type": "string" },
281
+ "line": { "type": "number" },
282
+ "column": { "type": "number" },
283
+ "snippet": { "type": "string" }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ }
289
+ },
290
+ "totalScoreBefore": { "type": "number" },
291
+ "totalScoreAfter": { "type": "number" },
292
+ "totalDelta": { "type": "number" },
293
+ "newIssuesCount": { "type": "number" },
294
+ "resolvedIssuesCount": { "type": "number" }
295
+ }
296
+ }
297
+ }
298
+ }
@@ -0,0 +1,151 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "schemas/drift-report.v1.json",
4
+ "title": "drift report v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "$schema",
9
+ "toolVersion",
10
+ "scannedAt",
11
+ "targetPath",
12
+ "files",
13
+ "totalIssues",
14
+ "totalScore",
15
+ "totalFiles",
16
+ "summary",
17
+ "quality",
18
+ "maintenanceRisk"
19
+ ],
20
+ "properties": {
21
+ "$schema": {
22
+ "const": "schemas/drift-report.v1.json"
23
+ },
24
+ "toolVersion": {
25
+ "type": "string"
26
+ },
27
+ "scannedAt": {
28
+ "type": "string"
29
+ },
30
+ "targetPath": {
31
+ "type": "string"
32
+ },
33
+ "files": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": ["path", "issues", "score"],
39
+ "properties": {
40
+ "path": { "type": "string" },
41
+ "score": { "type": "number" },
42
+ "issues": {
43
+ "type": "array",
44
+ "items": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": ["rule", "severity", "message", "line", "column", "snippet"],
48
+ "properties": {
49
+ "rule": { "type": "string" },
50
+ "severity": { "enum": ["error", "warning", "info"] },
51
+ "message": { "type": "string" },
52
+ "line": { "type": "number" },
53
+ "column": { "type": "number" },
54
+ "snippet": { "type": "string" }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ },
61
+ "totalIssues": {
62
+ "type": "number"
63
+ },
64
+ "totalScore": {
65
+ "type": "number"
66
+ },
67
+ "totalFiles": {
68
+ "type": "number"
69
+ },
70
+ "summary": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "required": ["errors", "warnings", "infos", "byRule"],
74
+ "properties": {
75
+ "errors": { "type": "number" },
76
+ "warnings": { "type": "number" },
77
+ "infos": { "type": "number" },
78
+ "byRule": {
79
+ "type": "object",
80
+ "additionalProperties": { "type": "number" }
81
+ }
82
+ }
83
+ },
84
+ "quality": {
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "required": ["overall", "dimensions"],
88
+ "properties": {
89
+ "overall": { "type": "number" },
90
+ "dimensions": {
91
+ "type": "object",
92
+ "additionalProperties": false,
93
+ "required": ["architecture", "complexity", "ai-patterns", "testing"],
94
+ "properties": {
95
+ "architecture": { "type": "number" },
96
+ "complexity": { "type": "number" },
97
+ "ai-patterns": { "type": "number" },
98
+ "testing": { "type": "number" }
99
+ }
100
+ }
101
+ }
102
+ },
103
+ "maintenanceRisk": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": ["score", "level", "hotspots", "signals"],
107
+ "properties": {
108
+ "score": { "type": "number" },
109
+ "level": { "enum": ["low", "medium", "high", "critical"] },
110
+ "hotspots": {
111
+ "type": "array",
112
+ "items": {
113
+ "type": "object",
114
+ "additionalProperties": false,
115
+ "required": [
116
+ "file",
117
+ "driftScore",
118
+ "complexityIssues",
119
+ "hasNearbyTests",
120
+ "changeFrequency",
121
+ "risk",
122
+ "reasons"
123
+ ],
124
+ "properties": {
125
+ "file": { "type": "string" },
126
+ "driftScore": { "type": "number" },
127
+ "complexityIssues": { "type": "number" },
128
+ "hasNearbyTests": { "type": "boolean" },
129
+ "changeFrequency": { "type": "number" },
130
+ "risk": { "type": "number" },
131
+ "reasons": {
132
+ "type": "array",
133
+ "items": { "type": "string" }
134
+ }
135
+ }
136
+ }
137
+ },
138
+ "signals": {
139
+ "type": "object",
140
+ "additionalProperties": false,
141
+ "required": ["highComplexityFiles", "filesWithoutNearbyTests", "frequentChangeFiles"],
142
+ "properties": {
143
+ "highComplexityFiles": { "type": "number" },
144
+ "filesWithoutNearbyTests": { "type": "number" },
145
+ "frequentChangeFiles": { "type": "number" }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
@@ -0,0 +1,131 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "schemas/drift-trust.v1.json",
4
+ "title": "drift trust v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "$schema",
9
+ "toolVersion",
10
+ "scannedAt",
11
+ "targetPath",
12
+ "trust_score",
13
+ "merge_risk",
14
+ "top_reasons",
15
+ "fix_priorities"
16
+ ],
17
+ "properties": {
18
+ "$schema": {
19
+ "const": "schemas/drift-trust.v1.json"
20
+ },
21
+ "toolVersion": {
22
+ "type": "string"
23
+ },
24
+ "scannedAt": {
25
+ "type": "string"
26
+ },
27
+ "targetPath": {
28
+ "type": "string"
29
+ },
30
+ "trust_score": {
31
+ "type": "number"
32
+ },
33
+ "merge_risk": {
34
+ "enum": ["LOW", "MEDIUM", "HIGH", "CRITICAL"]
35
+ },
36
+ "top_reasons": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["label", "detail", "impact"],
42
+ "properties": {
43
+ "label": { "type": "string" },
44
+ "detail": { "type": "string" },
45
+ "impact": { "type": "number" }
46
+ }
47
+ }
48
+ },
49
+ "fix_priorities": {
50
+ "type": "array",
51
+ "items": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": [
55
+ "rank",
56
+ "rule",
57
+ "severity",
58
+ "occurrences",
59
+ "estimated_trust_gain",
60
+ "effort",
61
+ "suggestion"
62
+ ],
63
+ "properties": {
64
+ "rank": { "type": "number" },
65
+ "rule": { "type": "string" },
66
+ "severity": { "enum": ["error", "warning", "info"] },
67
+ "occurrences": { "type": "number" },
68
+ "estimated_trust_gain": { "type": "number" },
69
+ "effort": { "enum": ["low", "medium", "high"] },
70
+ "suggestion": { "type": "string" },
71
+ "confidence": { "enum": ["low", "medium", "high"] },
72
+ "explanation": { "type": "string" },
73
+ "systemic": { "type": "boolean" }
74
+ }
75
+ }
76
+ },
77
+ "diff_context": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": [
81
+ "baseRef",
82
+ "status",
83
+ "scoreDelta",
84
+ "newIssues",
85
+ "resolvedIssues",
86
+ "filesChanged",
87
+ "penalty",
88
+ "bonus",
89
+ "netImpact"
90
+ ],
91
+ "properties": {
92
+ "baseRef": { "type": "string" },
93
+ "status": { "enum": ["improved", "regressed", "neutral"] },
94
+ "scoreDelta": { "type": "number" },
95
+ "newIssues": { "type": "number" },
96
+ "resolvedIssues": { "type": "number" },
97
+ "filesChanged": { "type": "number" },
98
+ "penalty": { "type": "number" },
99
+ "bonus": { "type": "number" },
100
+ "netImpact": { "type": "number" }
101
+ }
102
+ },
103
+ "advanced_context": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": ["team_guidance"],
107
+ "properties": {
108
+ "comparison": {
109
+ "type": "object",
110
+ "additionalProperties": false,
111
+ "required": ["source", "trend", "summary"],
112
+ "properties": {
113
+ "source": { "enum": ["previous-trust-json", "snapshot-history"] },
114
+ "trend": { "enum": ["improving", "regressing", "stable"] },
115
+ "summary": { "type": "string" },
116
+ "trust_delta": { "type": "number" },
117
+ "previous_trust_score": { "type": "number" },
118
+ "previous_merge_risk": { "enum": ["LOW", "MEDIUM", "HIGH", "CRITICAL"] },
119
+ "snapshot_score_delta": { "type": "number" },
120
+ "snapshot_label": { "type": "string" },
121
+ "snapshot_timestamp": { "type": "string" }
122
+ }
123
+ },
124
+ "team_guidance": {
125
+ "type": "array",
126
+ "items": { "type": "string" }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }