@ecoma-io/archkeep 0.25.0 → 0.26.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 (120) hide show
  1. package/cli.mjs +166 -506
  2. package/commands.mjs +7 -1
  3. package/package.json +1 -1
  4. package/src/architecture-intent/judge.mjs +1 -1
  5. package/src/architecture-intent/model.mjs +34 -0
  6. package/src/canonical.mjs +2 -1
  7. package/src/commands/adr-for-workspace.mjs +63 -0
  8. package/src/commands/analyze-capability.mjs +13 -0
  9. package/src/commands/change-intent.mjs +11 -0
  10. package/src/commands/change.mjs +247 -34
  11. package/src/commands/check-capability.mjs +13 -0
  12. package/src/commands/check.mjs +13 -3
  13. package/src/commands/compare-capability.mjs +20 -0
  14. package/src/commands/completeness.mjs +12 -0
  15. package/src/commands/context-command.mjs +31 -0
  16. package/src/commands/coverage-verdict.mjs +15 -2
  17. package/src/commands/debt.mjs +30 -0
  18. package/src/commands/decisions.mjs +59 -10
  19. package/src/commands/delta.mjs +263 -49
  20. package/src/commands/diff.mjs +45 -0
  21. package/src/commands/discover.mjs +37 -0
  22. package/src/commands/drift.mjs +45 -0
  23. package/src/commands/evolution.mjs +22 -2
  24. package/src/commands/explain-capability.mjs +11 -0
  25. package/src/commands/explain.mjs +24 -0
  26. package/src/commands/fitness.mjs +119 -10
  27. package/src/commands/govern-capability.mjs +16 -0
  28. package/src/commands/graph.mjs +39 -0
  29. package/src/commands/health.mjs +34 -0
  30. package/src/commands/history.mjs +85 -2
  31. package/src/commands/impact.mjs +23 -0
  32. package/src/commands/inspect-capability.mjs +16 -0
  33. package/src/commands/plan-context-command.mjs +35 -0
  34. package/src/commands/policy.mjs +42 -4
  35. package/src/commands/provenance-command.mjs +15 -24
  36. package/src/commands/report.mjs +38 -0
  37. package/src/commands/rules-capability.mjs +16 -0
  38. package/src/commands/rules.mjs +3 -1
  39. package/src/commands/scenario.mjs +23 -0
  40. package/src/commands/trajectory.mjs +35 -0
  41. package/src/commands/waivers.mjs +30 -0
  42. package/src/corpus/goldens/.gitkeep +0 -0
  43. package/src/corpus/goldens/adr.json +62 -0
  44. package/src/corpus/goldens/adr.text +6 -0
  45. package/src/corpus/goldens/change.json +98 -0
  46. package/src/corpus/goldens/change.text +6 -0
  47. package/src/corpus/goldens/check.json +90 -0
  48. package/src/corpus/goldens/check.sarif +479 -0
  49. package/src/corpus/goldens/check.text +9 -0
  50. package/src/corpus/goldens/context.json +47 -0
  51. package/src/corpus/goldens/context.text +6 -0
  52. package/src/corpus/goldens/debt.json +59 -0
  53. package/src/corpus/goldens/debt.text +7 -0
  54. package/src/corpus/goldens/decisions.json +74 -0
  55. package/src/corpus/goldens/decisions.text +7 -0
  56. package/src/corpus/goldens/delta.json +94 -0
  57. package/src/corpus/goldens/delta.sarif +472 -0
  58. package/src/corpus/goldens/delta.text +5 -0
  59. package/src/corpus/goldens/diff.json +58 -0
  60. package/src/corpus/goldens/diff.text +4 -0
  61. package/src/corpus/goldens/discover.json +77 -0
  62. package/src/corpus/goldens/discover.text +10 -0
  63. package/src/corpus/goldens/drift.json +43 -0
  64. package/src/corpus/goldens/drift.text +3 -0
  65. package/src/corpus/goldens/evolution.json +328 -0
  66. package/src/corpus/goldens/evolution.text +32 -0
  67. package/src/corpus/goldens/explain.json +60 -0
  68. package/src/corpus/goldens/explain.text +7 -0
  69. package/src/corpus/goldens/fitness.json +45 -0
  70. package/src/corpus/goldens/fitness.text +3 -0
  71. package/src/corpus/goldens/graph.json +78 -0
  72. package/src/corpus/goldens/graph.text +10 -0
  73. package/src/corpus/goldens/health.json +72 -0
  74. package/src/corpus/goldens/health.text +10 -0
  75. package/src/corpus/goldens/help.text +104 -0
  76. package/src/corpus/goldens/history.json +43 -0
  77. package/src/corpus/goldens/history.text +4 -0
  78. package/src/corpus/goldens/impact.json +327 -0
  79. package/src/corpus/goldens/impact.text +10 -0
  80. package/src/corpus/goldens/provenance.json +453 -0
  81. package/src/corpus/goldens/provenance.text +14 -0
  82. package/src/corpus/goldens/reconcile.json +168 -0
  83. package/src/corpus/goldens/reconcile.text +3 -0
  84. package/src/corpus/goldens/report.json +168 -0
  85. package/src/corpus/goldens/report.text +42 -0
  86. package/src/corpus/goldens/rules verify.json +0 -0
  87. package/src/corpus/goldens/rules verify.text +0 -0
  88. package/src/corpus/goldens/scenario.json +441 -0
  89. package/src/corpus/goldens/scenario.text +28 -0
  90. package/src/corpus/goldens/trajectory.json +83 -0
  91. package/src/corpus/goldens/trajectory.text +10 -0
  92. package/src/corpus/goldens/usage-error.text +105 -0
  93. package/src/corpus/goldens/waivers.json +40 -0
  94. package/src/corpus/goldens/waivers.text +1 -0
  95. package/src/corpus/goldens-lsp/initialize.result.json +15 -0
  96. package/src/corpus/goldens-lsp/publish-cleared-empty.json +4 -0
  97. package/src/corpus/goldens-lsp/publish-fixed-empty.json +5 -0
  98. package/src/corpus/goldens-lsp/publish-unparseable.json +54 -0
  99. package/src/corpus/goldens-lsp/publish-violation.json +22 -0
  100. package/src/corpus/goldens-lsp/register-watched-files.json +72 -0
  101. package/src/go-work.mjs +8 -23
  102. package/src/governance/evolution-event.mjs +15 -0
  103. package/src/governance/evolution-store.mjs +59 -31
  104. package/src/governance/provenance-record.mjs +0 -152
  105. package/src/governance/verdict.mjs +26 -3
  106. package/src/intent/intent-manifest.json +14 -14
  107. package/src/lsp/server.mjs +5 -8
  108. package/src/lsp/workspace-index.mjs +55 -220
  109. package/src/options.mjs +10 -0
  110. package/src/providers/native/discover.mjs +13 -12
  111. package/src/providers/native/model.mjs +8 -3
  112. package/src/providers/nx-static.mjs +231 -0
  113. package/src/report/json.mjs +3 -2
  114. package/src/report/sarif.mjs +8 -3
  115. package/src/rules/edge-constraints.mjs +9 -0
  116. package/src/rules/index.mjs +26 -10
  117. package/src/rules/messages.mjs +64 -14
  118. package/src/rules/specifiers.mjs +21 -20
  119. package/src/tsconfig-paths.mjs +8 -14
  120. package/src/verdict.mjs +127 -16
@@ -0,0 +1,328 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "evolution",
8
+ "workspace": {
9
+ "root": "/tmp/archkeep-golden-fixture",
10
+ "provider": "native",
11
+ "marker": "archkeep.json",
12
+ "provenance": {
13
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
14
+ "remote": null,
15
+ "dirty": false
16
+ }
17
+ },
18
+ "status": "ok",
19
+ "exitCode": 0,
20
+ "coverage": {
21
+ "complete": true,
22
+ "projects": 3,
23
+ "analyzedFiles": 3,
24
+ "imports": 2,
25
+ "notAnalyzed": [],
26
+ "blindSpots": [],
27
+ "notes": [
28
+ "each change is attributed to the first analyzed revision where it is observed — a fact about where history shows it, not about why it was made",
29
+ "rule-impact cannot be recomputed across revisions — each analyzed revision carries its graph and policy fingerprint, not import sites judged under a law. Run 'check' at a revision for its boundary verdict."
30
+ ]
31
+ },
32
+ "result": {
33
+ "base": "05536ee5cfe2828bda459a026877ff8d225b30d7",
34
+ "head": "1fd51709c377d99a6139891e1200291cf08aede9",
35
+ "revisions": [
36
+ {
37
+ "commit": "05536ee5cfe2828bda459a026877ff8d225b30d7",
38
+ "id": "71341a045f02564205e125994a50536459cf3114afd89c0523982de8cbfc02ae",
39
+ "evidence": {
40
+ "intent": {
41
+ "verdict": "ok",
42
+ "findings": [],
43
+ "unresolved": [],
44
+ "boundaries": [
45
+ {
46
+ "name": "core",
47
+ "projects": [
48
+ "core"
49
+ ]
50
+ },
51
+ {
52
+ "name": "api",
53
+ "projects": [
54
+ "api"
55
+ ]
56
+ },
57
+ {
58
+ "name": "app",
59
+ "projects": [
60
+ "app"
61
+ ]
62
+ }
63
+ ],
64
+ "notes": [],
65
+ "gaps": []
66
+ },
67
+ "fitness": {
68
+ "verdict": "pass",
69
+ "decisions": [
70
+ {
71
+ "verdict": "pass",
72
+ "name": "cycle-free",
73
+ "evidence": {
74
+ "projects": 3,
75
+ "cycles": 0
76
+ },
77
+ "message": "3 matched projects form no dependency cycle",
78
+ "rows": []
79
+ }
80
+ ],
81
+ "overall": {
82
+ "verdict": "pass",
83
+ "decisions": [
84
+ {
85
+ "verdict": "pass",
86
+ "name": "cycle-free",
87
+ "evidence": {
88
+ "projects": 3,
89
+ "cycles": 0
90
+ },
91
+ "message": "3 matched projects form no dependency cycle",
92
+ "rows": []
93
+ }
94
+ ]
95
+ }
96
+ },
97
+ "adr": {
98
+ "records": [
99
+ {
100
+ "id": "0001-layers",
101
+ "status": "accepted",
102
+ "supersedes": [],
103
+ "bindings": [
104
+ "intentForbiddenEdge"
105
+ ],
106
+ "supersededBy": []
107
+ }
108
+ ],
109
+ "byId": {},
110
+ "knownFitness": {}
111
+ }
112
+ }
113
+ },
114
+ {
115
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
116
+ "id": "71341a045f02564205e125994a50536459cf3114afd89c0523982de8cbfc02ae",
117
+ "evidence": {
118
+ "intent": {
119
+ "verdict": "ok",
120
+ "findings": [],
121
+ "unresolved": [],
122
+ "boundaries": [
123
+ {
124
+ "name": "core",
125
+ "projects": [
126
+ "core"
127
+ ]
128
+ },
129
+ {
130
+ "name": "api",
131
+ "projects": [
132
+ "api"
133
+ ]
134
+ },
135
+ {
136
+ "name": "app",
137
+ "projects": [
138
+ "app"
139
+ ]
140
+ }
141
+ ],
142
+ "notes": [],
143
+ "gaps": []
144
+ },
145
+ "fitness": {
146
+ "verdict": "pass",
147
+ "decisions": [
148
+ {
149
+ "verdict": "pass",
150
+ "name": "cycle-free",
151
+ "evidence": {
152
+ "projects": 3,
153
+ "cycles": 0
154
+ },
155
+ "message": "3 matched projects form no dependency cycle",
156
+ "rows": []
157
+ }
158
+ ],
159
+ "overall": {
160
+ "verdict": "pass",
161
+ "decisions": [
162
+ {
163
+ "verdict": "pass",
164
+ "name": "cycle-free",
165
+ "evidence": {
166
+ "projects": 3,
167
+ "cycles": 0
168
+ },
169
+ "message": "3 matched projects form no dependency cycle",
170
+ "rows": []
171
+ }
172
+ ]
173
+ }
174
+ },
175
+ "adr": {
176
+ "records": [
177
+ {
178
+ "id": "0001-layers",
179
+ "status": "accepted",
180
+ "supersedes": [],
181
+ "bindings": [
182
+ "intentForbiddenEdge"
183
+ ],
184
+ "supersededBy": []
185
+ }
186
+ ],
187
+ "byId": {},
188
+ "knownFitness": {}
189
+ }
190
+ }
191
+ }
192
+ ],
193
+ "transitions": [
194
+ {
195
+ "from": "05536ee5cfe2828bda459a026877ff8d225b30d7",
196
+ "to": "1fd51709c377d99a6139891e1200291cf08aede9",
197
+ "architectureChanged": false,
198
+ "changes": null,
199
+ "policyChanged": false,
200
+ "policyOneSided": false,
201
+ "provenanceChanged": true,
202
+ "providerChanged": false,
203
+ "codeDrift": true,
204
+ "notes": [],
205
+ "classifications": [
206
+ "DRIFT"
207
+ ],
208
+ "comparison": {
209
+ "observed": {
210
+ "architectureChanged": false,
211
+ "projects": {
212
+ "added": [],
213
+ "removed": [],
214
+ "changed": []
215
+ },
216
+ "edges": {
217
+ "added": [],
218
+ "removed": []
219
+ },
220
+ "policyChanged": false,
221
+ "policyOneSided": false,
222
+ "providerChanged": false,
223
+ "provenanceChanged": true
224
+ },
225
+ "findings": {
226
+ "introduced": [],
227
+ "resolved": [],
228
+ "unknown": []
229
+ },
230
+ "debt": {
231
+ "introduced": [],
232
+ "resolved": []
233
+ },
234
+ "fitness": {
235
+ "verdictDeltas": [
236
+ {
237
+ "id": "cycle-free",
238
+ "base": "pass",
239
+ "head": "pass"
240
+ }
241
+ ]
242
+ },
243
+ "coverage": {
244
+ "base": {
245
+ "projects": 3,
246
+ "analyzedFiles": 3,
247
+ "imports": 2
248
+ },
249
+ "head": {
250
+ "projects": 3,
251
+ "analyzedFiles": 3,
252
+ "imports": 2
253
+ }
254
+ },
255
+ "classifications": [
256
+ "DRIFT"
257
+ ],
258
+ "disposition": "accepted",
259
+ "affected": {
260
+ "projects": [],
261
+ "boundaries": [],
262
+ "constraints": [
263
+ "cycle-free"
264
+ ],
265
+ "decisions": [],
266
+ "lineage": [
267
+ {
268
+ "id": "cycle-free",
269
+ "adrs": [],
270
+ "resolution": "none"
271
+ }
272
+ ]
273
+ },
274
+ "notes": []
275
+ }
276
+ }
277
+ ],
278
+ "summary": {
279
+ "transitions": 1,
280
+ "disposition": "accepted",
281
+ "classifications": [
282
+ "DRIFT"
283
+ ],
284
+ "observed": {
285
+ "architectureChanged": 0,
286
+ "projects": {
287
+ "added": [],
288
+ "removed": [],
289
+ "changed": []
290
+ },
291
+ "edges": {
292
+ "added": [],
293
+ "removed": []
294
+ },
295
+ "policyChanged": 0,
296
+ "providerChanged": 0
297
+ },
298
+ "affected": {
299
+ "projects": [],
300
+ "boundaries": [],
301
+ "constraints": [
302
+ "cycle-free"
303
+ ],
304
+ "decisions": []
305
+ },
306
+ "findings": {
307
+ "introduced": [],
308
+ "resolved": [],
309
+ "unknown": []
310
+ },
311
+ "debt": {
312
+ "introduced": [],
313
+ "resolved": []
314
+ },
315
+ "fitness": {
316
+ "verdictDeltas": [
317
+ {
318
+ "id": "cycle-free",
319
+ "base": "pass",
320
+ "head": "pass"
321
+ }
322
+ ]
323
+ },
324
+ "notes": []
325
+ }
326
+ }
327
+ }
328
+
@@ -0,0 +1,32 @@
1
+ evolution 05536ee5cfe2..1fd51709c377
2
+ 2 revisions, 1 transition (2 imports in 3 files across 3 projects)
3
+ 0 05536ee5cfe2828bda459a026877ff8d225b30d7 71341a04
4
+ 1 1fd51709c377d99a6139891e1200291cf08aede9 71341a04
5
+ ~ 05536ee5cfe2828bda459a026877ff8d225b30d7 → 1fd51709c377d99a6139891e1200291cf08aede9 (code drift)
6
+
7
+ comparison for 05536ee5cfe2 → 1fd51709c377
8
+ disposition: accepted
9
+ classifications: DRIFT
10
+ architecture changed: no
11
+ policy changed: no
12
+ provider changed: no
13
+ provenance changed: yes
14
+ drift findings: introduced 0, resolved 0
15
+ debt: introduced 0, resolved 0
16
+ fitness:
17
+ cycle-free: pass → pass
18
+ coverage: base 3 projects / 3 files / 2 imports; head 3 / 3 / 2
19
+ affected constraints: cycle-free
20
+ ✔ no architectural change across the selected revisions (only policy, provider, or drift signals)
21
+
22
+ summary
23
+ transitions: 1
24
+ disposition: accepted
25
+ classifications: DRIFT
26
+ architecture changed in 0 transitions
27
+ policy changed: 0
28
+ drift findings: introduced 0, resolved 0
29
+ debt: introduced 0, resolved 0
30
+ fitness:
31
+ cycle-free: pass → pass
32
+ affected constraints: cycle-free
@@ -0,0 +1,60 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "explain",
8
+ "workspace": {
9
+ "root": "/tmp/archkeep-golden-fixture",
10
+ "provider": "native",
11
+ "marker": "archkeep.json",
12
+ "provenance": {
13
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
14
+ "remote": null,
15
+ "dirty": false
16
+ }
17
+ },
18
+ "status": "ok",
19
+ "exitCode": 0,
20
+ "coverage": {
21
+ "complete": true,
22
+ "projects": 3,
23
+ "analyzedFiles": 3,
24
+ "imports": 2,
25
+ "notAnalyzed": [],
26
+ "blindSpots": [],
27
+ "notes": []
28
+ },
29
+ "result": {
30
+ "site": {
31
+ "file": "libs/api/api.go",
32
+ "line": 3,
33
+ "column": 8
34
+ },
35
+ "import": {
36
+ "specifier": "example.test/core",
37
+ "kind": "static",
38
+ "sourceProject": "api",
39
+ "targetProject": "core"
40
+ },
41
+ "sourceTags": [
42
+ "layer:api"
43
+ ],
44
+ "targetTags": [
45
+ "layer:core"
46
+ ],
47
+ "matchedConstraints": [
48
+ {
49
+ "sourceTag": "layer:api",
50
+ "onlyDependOnLibsWithTags": [
51
+ "layer:api",
52
+ "layer:core"
53
+ ]
54
+ }
55
+ ],
56
+ "violations": null,
57
+ "verdict": "clean"
58
+ }
59
+ }
60
+
@@ -0,0 +1,7 @@
1
+ libs/api/api.go:3:8
2
+ import "example.test/core" (static)
3
+ source api [layer:api]
4
+ target core [layer:core]
5
+ constraint sourceTag layer:api → onlyDependOnLibsWithTags [layer:api, layer:core]
6
+ verdict allowed — no constraint was violated
7
+ ✔ coverage complete (2 imports in 3 files across 3 projects)
@@ -0,0 +1,45 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "fitness",
8
+ "workspace": {
9
+ "root": "/tmp/archkeep-golden-fixture",
10
+ "provider": "native",
11
+ "marker": "archkeep.json",
12
+ "provenance": {
13
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
14
+ "remote": null,
15
+ "dirty": false
16
+ }
17
+ },
18
+ "status": "ok",
19
+ "exitCode": 0,
20
+ "coverage": {
21
+ "complete": true,
22
+ "projects": 3,
23
+ "analyzedFiles": 3,
24
+ "imports": 2,
25
+ "notAnalyzed": [],
26
+ "blindSpots": [],
27
+ "notes": []
28
+ },
29
+ "result": {
30
+ "verdict": "pass",
31
+ "functions": [
32
+ {
33
+ "verdict": "pass",
34
+ "name": "cycle-free",
35
+ "evidence": {
36
+ "projects": 3,
37
+ "cycles": 0
38
+ },
39
+ "message": "3 matched projects form no dependency cycle",
40
+ "rows": []
41
+ }
42
+ ]
43
+ }
44
+ }
45
+
@@ -0,0 +1,3 @@
1
+ ✔ cycle-free 3 matched projects form no dependency cycle
2
+
3
+ ✔ fitness: 1 function passed
@@ -0,0 +1,78 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "graph",
8
+ "workspace": {
9
+ "root": "/tmp/archkeep-golden-fixture",
10
+ "provider": "native",
11
+ "marker": "archkeep.json",
12
+ "provenance": {
13
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
14
+ "remote": null,
15
+ "dirty": false
16
+ }
17
+ },
18
+ "status": "ok",
19
+ "exitCode": 0,
20
+ "coverage": {
21
+ "complete": true,
22
+ "projects": 3,
23
+ "analyzedFiles": 3,
24
+ "imports": 2,
25
+ "notAnalyzed": [],
26
+ "blindSpots": [],
27
+ "notes": []
28
+ },
29
+ "result": {
30
+ "projects": [
31
+ {
32
+ "name": "api",
33
+ "root": "libs/api",
34
+ "type": "lib",
35
+ "tags": [
36
+ "layer:api"
37
+ ]
38
+ },
39
+ {
40
+ "name": "app",
41
+ "root": "libs/app",
42
+ "type": "lib",
43
+ "tags": [
44
+ "layer:app"
45
+ ]
46
+ },
47
+ {
48
+ "name": "core",
49
+ "root": "libs/core",
50
+ "type": "lib",
51
+ "tags": [
52
+ "layer:core"
53
+ ]
54
+ }
55
+ ],
56
+ "dependencies": [
57
+ {
58
+ "source": "api",
59
+ "target": "core",
60
+ "type": "static"
61
+ },
62
+ {
63
+ "source": "app",
64
+ "target": "api",
65
+ "type": "static"
66
+ }
67
+ ],
68
+ "workspaceLayout": {
69
+ "libsDir": "libs",
70
+ "appsDir": "apps"
71
+ },
72
+ "workspaceLayoutSource": "default",
73
+ "policy": {
74
+ "fingerprint": "e18ba4307f6baaaa0d558822327788e8925cb3c52dfac6b170ce4d89b5a728ca"
75
+ }
76
+ }
77
+ }
78
+
@@ -0,0 +1,10 @@
1
+ ✔ graph snapshot complete (2 imports in 3 files across 3 projects)
2
+ layout apps/libs (default)
3
+ 3 projects
4
+ api libs/api lib [layer:api]
5
+ → core (static)
6
+ app libs/app lib [layer:app]
7
+ → api (static)
8
+ core libs/core lib [layer:core]
9
+ (no dependencies)
10
+ 2 edges
@@ -0,0 +1,72 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "health",
8
+ "workspace": {
9
+ "root": "/tmp/archkeep-golden-fixture",
10
+ "provider": "native",
11
+ "marker": "archkeep.json",
12
+ "provenance": {
13
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
14
+ "remote": null,
15
+ "dirty": false
16
+ }
17
+ },
18
+ "status": "ok",
19
+ "exitCode": 0,
20
+ "coverage": {
21
+ "complete": true,
22
+ "projects": 3,
23
+ "analyzedFiles": 3,
24
+ "imports": 2,
25
+ "notAnalyzed": [],
26
+ "blindSpots": [],
27
+ "notes": []
28
+ },
29
+ "result": {
30
+ "trendDir": null,
31
+ "metrics": {
32
+ "projects": {
33
+ "verdict": "ok",
34
+ "value": 3
35
+ },
36
+ "edges": {
37
+ "verdict": "ok",
38
+ "value": 2
39
+ },
40
+ "coverage": {
41
+ "verdict": "ok",
42
+ "value": 0
43
+ },
44
+ "violations": {
45
+ "verdict": "ok",
46
+ "value": 0
47
+ },
48
+ "waiverSurface": {
49
+ "verdict": "ok",
50
+ "value": 0
51
+ },
52
+ "cycles": {
53
+ "verdict": "ok",
54
+ "value": 0
55
+ },
56
+ "edgeDensity": {
57
+ "verdict": "ok",
58
+ "value": 0.6666666666666666
59
+ },
60
+ "debt": {
61
+ "verdict": "ok",
62
+ "value": 0
63
+ },
64
+ "fitness": {
65
+ "verdict": "ok",
66
+ "value": 0
67
+ }
68
+ },
69
+ "trends": null
70
+ }
71
+ }
72
+
@@ -0,0 +1,10 @@
1
+ ✔ health over complete coverage (2 imports in 3 files across 3 projects)
2
+ ok projects 3
3
+ ok edges 2
4
+ ok coverage 0
5
+ ok violations 0
6
+ ok waiver surface 0
7
+ ok cycles 0
8
+ ok edge density 0.6666666666666666
9
+ ok debt rows 0
10
+ ok intent fitness 0