@ecoma-io/archkeep 0.24.1 → 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 (125) 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 +315 -55
  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-snapshot.mjs +25 -4
  20. package/src/commands/delta.mjs +301 -67
  21. package/src/commands/diff.mjs +48 -9
  22. package/src/commands/discover.mjs +37 -0
  23. package/src/commands/drift.mjs +45 -0
  24. package/src/commands/evolution.mjs +22 -2
  25. package/src/commands/explain-capability.mjs +11 -0
  26. package/src/commands/explain.mjs +24 -0
  27. package/src/commands/fitness.mjs +119 -10
  28. package/src/commands/govern-capability.mjs +16 -0
  29. package/src/commands/graph.mjs +39 -0
  30. package/src/commands/health.mjs +34 -0
  31. package/src/commands/history.mjs +119 -2
  32. package/src/commands/impact.mjs +23 -0
  33. package/src/commands/inspect-capability.mjs +16 -0
  34. package/src/commands/plan-context-command.mjs +35 -0
  35. package/src/commands/policy.mjs +42 -4
  36. package/src/commands/provenance-command.mjs +15 -24
  37. package/src/commands/report.mjs +38 -0
  38. package/src/commands/rules-capability.mjs +16 -0
  39. package/src/commands/rules.mjs +3 -1
  40. package/src/commands/scenario.mjs +23 -0
  41. package/src/commands/snapshot-meta.mjs +33 -0
  42. package/src/commands/trajectory.mjs +35 -0
  43. package/src/commands/waivers.mjs +30 -0
  44. package/src/corpus/goldens/.gitkeep +0 -0
  45. package/src/corpus/goldens/adr.json +62 -0
  46. package/src/corpus/goldens/adr.text +6 -0
  47. package/src/corpus/goldens/change.json +98 -0
  48. package/src/corpus/goldens/change.text +6 -0
  49. package/src/corpus/goldens/check.json +90 -0
  50. package/src/corpus/goldens/check.sarif +479 -0
  51. package/src/corpus/goldens/check.text +9 -0
  52. package/src/corpus/goldens/context.json +47 -0
  53. package/src/corpus/goldens/context.text +6 -0
  54. package/src/corpus/goldens/debt.json +59 -0
  55. package/src/corpus/goldens/debt.text +7 -0
  56. package/src/corpus/goldens/decisions.json +74 -0
  57. package/src/corpus/goldens/decisions.text +7 -0
  58. package/src/corpus/goldens/delta.json +94 -0
  59. package/src/corpus/goldens/delta.sarif +472 -0
  60. package/src/corpus/goldens/delta.text +5 -0
  61. package/src/corpus/goldens/diff.json +58 -0
  62. package/src/corpus/goldens/diff.text +4 -0
  63. package/src/corpus/goldens/discover.json +77 -0
  64. package/src/corpus/goldens/discover.text +10 -0
  65. package/src/corpus/goldens/drift.json +43 -0
  66. package/src/corpus/goldens/drift.text +3 -0
  67. package/src/corpus/goldens/evolution.json +328 -0
  68. package/src/corpus/goldens/evolution.text +32 -0
  69. package/src/corpus/goldens/explain.json +60 -0
  70. package/src/corpus/goldens/explain.text +7 -0
  71. package/src/corpus/goldens/fitness.json +45 -0
  72. package/src/corpus/goldens/fitness.text +3 -0
  73. package/src/corpus/goldens/graph.json +78 -0
  74. package/src/corpus/goldens/graph.text +10 -0
  75. package/src/corpus/goldens/health.json +72 -0
  76. package/src/corpus/goldens/health.text +10 -0
  77. package/src/corpus/goldens/help.text +104 -0
  78. package/src/corpus/goldens/history.json +43 -0
  79. package/src/corpus/goldens/history.text +4 -0
  80. package/src/corpus/goldens/impact.json +327 -0
  81. package/src/corpus/goldens/impact.text +10 -0
  82. package/src/corpus/goldens/provenance.json +453 -0
  83. package/src/corpus/goldens/provenance.text +14 -0
  84. package/src/corpus/goldens/reconcile.json +168 -0
  85. package/src/corpus/goldens/reconcile.text +3 -0
  86. package/src/corpus/goldens/report.json +168 -0
  87. package/src/corpus/goldens/report.text +42 -0
  88. package/src/corpus/goldens/rules verify.json +0 -0
  89. package/src/corpus/goldens/rules verify.text +0 -0
  90. package/src/corpus/goldens/scenario.json +441 -0
  91. package/src/corpus/goldens/scenario.text +28 -0
  92. package/src/corpus/goldens/trajectory.json +83 -0
  93. package/src/corpus/goldens/trajectory.text +10 -0
  94. package/src/corpus/goldens/usage-error.text +105 -0
  95. package/src/corpus/goldens/waivers.json +40 -0
  96. package/src/corpus/goldens/waivers.text +1 -0
  97. package/src/corpus/goldens-lsp/initialize.result.json +15 -0
  98. package/src/corpus/goldens-lsp/publish-cleared-empty.json +4 -0
  99. package/src/corpus/goldens-lsp/publish-fixed-empty.json +5 -0
  100. package/src/corpus/goldens-lsp/publish-unparseable.json +54 -0
  101. package/src/corpus/goldens-lsp/publish-violation.json +22 -0
  102. package/src/corpus/goldens-lsp/register-watched-files.json +72 -0
  103. package/src/custom-rules/values.mjs +1 -4
  104. package/src/go-work.mjs +8 -23
  105. package/src/governance/evolution-event.mjs +15 -0
  106. package/src/governance/evolution-store.mjs +59 -31
  107. package/src/governance/fitness-registry.mjs +14 -1
  108. package/src/governance/provenance-record.mjs +0 -152
  109. package/src/governance/verdict.mjs +62 -7
  110. package/src/intent/intent-manifest.json +22 -16
  111. package/src/lsp/server.mjs +5 -8
  112. package/src/lsp/workspace-index.mjs +55 -220
  113. package/src/options.mjs +10 -0
  114. package/src/providers/native/discover.mjs +13 -12
  115. package/src/providers/native/model.mjs +8 -3
  116. package/src/providers/nx-static.mjs +231 -0
  117. package/src/report/json.mjs +7 -4
  118. package/src/report/sarif.mjs +8 -3
  119. package/src/rules/edge-constraints.mjs +9 -0
  120. package/src/rules/index.mjs +26 -10
  121. package/src/rules/messages.mjs +64 -14
  122. package/src/rules/specifiers.mjs +21 -20
  123. package/src/tsconfig-paths.mjs +8 -14
  124. package/src/values.mjs +11 -0
  125. package/src/verdict.mjs +127 -16
@@ -0,0 +1,168 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "report",
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
+ "report composes health, waivers, fitness, the ADR registry and provenance through the same functions those commands run; it performs no scan of its own and cannot disagree with them about the same tree.",
29
+ "a waiver's active/expired status is judged against this run's reference instant, the same judgement `check` makes; remainingMs is not carried here — run `waivers` for it.",
30
+ "the debt surface here is the per-run one (the boundary law's own deferred rows). The ledger aged across snapshots is `debt`'s, which needs a snapshot directory."
31
+ ]
32
+ },
33
+ "result": {
34
+ "trendDir": null,
35
+ "metrics": {
36
+ "projects": {
37
+ "verdict": "ok",
38
+ "value": 3
39
+ },
40
+ "edges": {
41
+ "verdict": "ok",
42
+ "value": 2
43
+ },
44
+ "coverage": {
45
+ "verdict": "ok",
46
+ "value": 0
47
+ },
48
+ "violations": {
49
+ "verdict": "ok",
50
+ "value": 0
51
+ },
52
+ "waiverSurface": {
53
+ "verdict": "ok",
54
+ "value": 0
55
+ },
56
+ "cycles": {
57
+ "verdict": "ok",
58
+ "value": 0
59
+ },
60
+ "edgeDensity": {
61
+ "verdict": "ok",
62
+ "value": 0.6666666666666666
63
+ },
64
+ "debt": {
65
+ "verdict": "ok",
66
+ "value": 0
67
+ },
68
+ "fitness": {
69
+ "verdict": "ok",
70
+ "value": 0
71
+ }
72
+ },
73
+ "trends": null,
74
+ "waivers": {
75
+ "verdict": "ok",
76
+ "note": null,
77
+ "counts": {
78
+ "waivers": 0,
79
+ "covered": 0,
80
+ "expired": 0,
81
+ "stale": 0,
82
+ "suppressions": 0,
83
+ "suppressed": 0
84
+ },
85
+ "rows": []
86
+ },
87
+ "fitness": {
88
+ "verdict": "pass",
89
+ "note": null,
90
+ "functions": [
91
+ {
92
+ "name": "cycle-free",
93
+ "verdict": "pass",
94
+ "message": "3 matched projects form no dependency cycle",
95
+ "adrs": []
96
+ }
97
+ ]
98
+ },
99
+ "decisions": {
100
+ "verdict": "ok",
101
+ "note": null,
102
+ "registry": {
103
+ "dir": "docs/adr",
104
+ "count": 1
105
+ },
106
+ "records": [
107
+ {
108
+ "id": "0001-layers",
109
+ "status": "accepted",
110
+ "authority": true,
111
+ "bindings": [
112
+ "intentForbiddenEdge"
113
+ ],
114
+ "fitness": {
115
+ "id": "0001-layers",
116
+ "status": "accepted",
117
+ "level": "unverifiable",
118
+ "verified": false,
119
+ "reason": "no bound constraint for 0001-layers resolves or was evaluated — none can be verified"
120
+ },
121
+ "constraints": []
122
+ }
123
+ ],
124
+ "citations": [],
125
+ "unresolvedDecisionRefs": []
126
+ },
127
+ "provenance": {
128
+ "repo": {
129
+ "commit": "1fd51709c377d99a6139891e1200291cf08aede9",
130
+ "remote": null,
131
+ "dirty": false
132
+ },
133
+ "established": true,
134
+ "policySource": "module-boundaries.config.mjs",
135
+ "rows": {
136
+ "total": 6,
137
+ "unattested": [
138
+ {
139
+ "kind": "allowed[0]",
140
+ "label": "allowed[0] app→api"
141
+ },
142
+ {
143
+ "kind": "allowed[1]",
144
+ "label": "allowed[1] api→core"
145
+ },
146
+ {
147
+ "kind": "forbidden[0]",
148
+ "label": "forbidden[0] core→app"
149
+ },
150
+ {
151
+ "kind": "depConstraints[0]",
152
+ "label": "depConstraints[0] layer:core"
153
+ },
154
+ {
155
+ "kind": "depConstraints[1]",
156
+ "label": "depConstraints[1] layer:api"
157
+ },
158
+ {
159
+ "kind": "depConstraints[2]",
160
+ "label": "depConstraints[2] layer:app"
161
+ }
162
+ ]
163
+ }
164
+ },
165
+ "uninspectable": []
166
+ }
167
+ }
168
+
@@ -0,0 +1,42 @@
1
+ architecture governance report — every surface reached a verdict
2
+
3
+ provenance
4
+ root /tmp/archkeep-golden-fixture
5
+ provider native (archkeep.json)
6
+ policy module-boundaries.config.mjs
7
+ commit 1fd51709c377d99a6139891e1200291cf08aede9
8
+ remote none configured
9
+ rows 6 governed rows, 6 with no origin recorded
10
+ unattested allowed[0] app→api — no origin recorded, cannot attest
11
+ unattested allowed[1] api→core — no origin recorded, cannot attest
12
+ unattested forbidden[0] core→app — no origin recorded, cannot attest
13
+ unattested depConstraints[0] layer:core — no origin recorded, cannot attest
14
+ unattested depConstraints[1] layer:api — no origin recorded, cannot attest
15
+ unattested depConstraints[2] layer:app — no origin recorded, cannot attest
16
+
17
+ health
18
+ ✔ report over complete coverage (2 imports in 3 files across 3 projects)
19
+ ok projects 3
20
+ ok edges 2
21
+ ok coverage 0
22
+ ok violations 0
23
+ ok waiver surface 0
24
+ ok cycles 0
25
+ ok edge density 0.6666666666666666
26
+ ok debt rows 0
27
+ ok intent fitness 0
28
+
29
+ governance surfaces
30
+ ok waivers
31
+ 0 waivers (0 expired, 0 covering nothing), 0 permanent suppressions hiding 0 violations
32
+ pass fitness gates
33
+ pass cycle-free bound by: no recorded decision
34
+ ok decisions
35
+ 1 record in docs/adr/
36
+ 0001-layers (accepted) binds intentForbiddenEdge
37
+ fitness: unverifiable — no bound constraint for 0001-layers resolves or was evaluated — none can be verified
38
+ stands on: no governed row cites this decision
39
+ no governed row cites a decisionRef
40
+
41
+ could not inspect
42
+ nothing — every surface in this report reached a verdict
File without changes
File without changes
@@ -0,0 +1,441 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "tool": {
4
+ "name": "@ecoma-io/archkeep",
5
+ "version": "0.26.0"
6
+ },
7
+ "command": "scenario",
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
+ "scenario evaluation is virtual and not authoritative — run `check` for the real verdict",
29
+ "per-edge verdicts cover only depConstraints (3 of 15 violation types)"
30
+ ]
31
+ },
32
+ "result": {
33
+ "virtual": true,
34
+ "notAuthoritative": true,
35
+ "complete": false,
36
+ "completeness": {
37
+ "domains": {
38
+ "structural": {
39
+ "status": "evaluated",
40
+ "evaluated": true,
41
+ "partial": false,
42
+ "notEvaluated": false,
43
+ "unsupported": false,
44
+ "refused": false,
45
+ "note": ""
46
+ },
47
+ "constraint": {
48
+ "status": "evaluated",
49
+ "evaluated": true,
50
+ "partial": false,
51
+ "notEvaluated": false,
52
+ "unsupported": false,
53
+ "refused": false,
54
+ "note": ""
55
+ },
56
+ "boundary": {
57
+ "status": "evaluated",
58
+ "evaluated": true,
59
+ "partial": false,
60
+ "notEvaluated": false,
61
+ "unsupported": false,
62
+ "refused": false,
63
+ "note": ""
64
+ },
65
+ "decision": {
66
+ "status": "evaluated",
67
+ "evaluated": true,
68
+ "partial": false,
69
+ "notEvaluated": false,
70
+ "unsupported": false,
71
+ "refused": false,
72
+ "note": ""
73
+ },
74
+ "findings": {
75
+ "status": "not_evaluated",
76
+ "evaluated": false,
77
+ "partial": false,
78
+ "notEvaluated": true,
79
+ "unsupported": false,
80
+ "refused": false,
81
+ "note": "Findings not re-evaluated in scenario"
82
+ },
83
+ "debt": {
84
+ "status": "not_evaluated",
85
+ "evaluated": false,
86
+ "partial": false,
87
+ "notEvaluated": true,
88
+ "unsupported": false,
89
+ "refused": false,
90
+ "note": "Debt not re-evaluated in scenario"
91
+ },
92
+ "governance": {
93
+ "status": "not_evaluated",
94
+ "evaluated": false,
95
+ "partial": false,
96
+ "notEvaluated": true,
97
+ "unsupported": false,
98
+ "refused": false,
99
+ "note": "Governance incomplete — findings: not_evaluated, debt: not_evaluated"
100
+ },
101
+ "evidence": {
102
+ "status": "evaluated",
103
+ "evaluated": true,
104
+ "partial": false,
105
+ "notEvaluated": false,
106
+ "unsupported": false,
107
+ "refused": false,
108
+ "note": ""
109
+ }
110
+ },
111
+ "overallComplete": false,
112
+ "overallStatus": "not_evaluated",
113
+ "scenarioDomains": {
114
+ "changes": {
115
+ "status": "partial",
116
+ "evaluated": true,
117
+ "partial": true,
118
+ "notEvaluated": false,
119
+ "unsupported": false,
120
+ "refused": false,
121
+ "note": "Some changes could not be applied"
122
+ },
123
+ "base": {
124
+ "status": "evaluated",
125
+ "evaluated": true,
126
+ "partial": false,
127
+ "notEvaluated": false,
128
+ "unsupported": false,
129
+ "refused": false,
130
+ "note": ""
131
+ },
132
+ "mutationCoverage": {
133
+ "status": "partial",
134
+ "evaluated": true,
135
+ "partial": true,
136
+ "notEvaluated": false,
137
+ "unsupported": false,
138
+ "refused": false,
139
+ "note": "Not all mutations have explicit outcomes"
140
+ }
141
+ },
142
+ "evidenceComplete": {
143
+ "contractType": "scenario",
144
+ "domainCoverage": 1,
145
+ "claimEvidenceCoverage": 1,
146
+ "causalCoverage": 1,
147
+ "provenanceCoverage": 0,
148
+ "mutationCoverage": 0,
149
+ "surfaceParity": 0,
150
+ "hiddenGapCount": 0,
151
+ "falseCompleteCount": 0,
152
+ "baseIdentityValid": true,
153
+ "deterministic": true,
154
+ "overallStatus": "incomplete",
155
+ "overallComplete": false,
156
+ "gates": {
157
+ "domainCoverage": {
158
+ "value": 1,
159
+ "pass": true,
160
+ "required": true
161
+ },
162
+ "claimEvidenceCoverage": {
163
+ "value": 1,
164
+ "pass": true,
165
+ "required": true
166
+ },
167
+ "causalCoverage": {
168
+ "value": 1,
169
+ "pass": true,
170
+ "required": true
171
+ },
172
+ "provenanceCoverage": {
173
+ "value": 0,
174
+ "pass": false,
175
+ "required": true
176
+ },
177
+ "mutationCoverage": {
178
+ "value": 0,
179
+ "pass": false,
180
+ "required": true
181
+ },
182
+ "surfaceParity": {
183
+ "value": 0,
184
+ "pass": false,
185
+ "required": true
186
+ },
187
+ "hiddenGapCount": {
188
+ "value": 0,
189
+ "pass": true,
190
+ "required": true
191
+ },
192
+ "falseCompleteCount": {
193
+ "value": 0,
194
+ "pass": true,
195
+ "required": true
196
+ },
197
+ "baseIdentityValid": {
198
+ "value": true,
199
+ "pass": true,
200
+ "required": true
201
+ },
202
+ "deterministic": {
203
+ "value": true,
204
+ "pass": true,
205
+ "required": true
206
+ }
207
+ }
208
+ }
209
+ },
210
+ "project": "core",
211
+ "base": {
212
+ "revision": "1fd51709c377d99a6139891e1200291cf08aede9",
213
+ "identity": "verified",
214
+ "identityVerified": true,
215
+ "identityMismatch": false,
216
+ "provenance": "auto-resolved: git commit 1fd51709c377d99a6139891e1200291cf08aede9"
217
+ },
218
+ "changes": [],
219
+ "refused": [
220
+ "cannot add dependency: target project \"libs/app\" not in graph"
221
+ ],
222
+ "current": {
223
+ "impact": {
224
+ "project": "core",
225
+ "direct": [
226
+ "api"
227
+ ],
228
+ "transitive": [
229
+ "app"
230
+ ],
231
+ "dependents": [
232
+ "api",
233
+ "app"
234
+ ]
235
+ },
236
+ "constraintImpact": [
237
+ {
238
+ "project": "api",
239
+ "edges": [
240
+ {
241
+ "target": "core",
242
+ "type": "static"
243
+ }
244
+ ],
245
+ "constraintRows": [
246
+ {
247
+ "sourceTag": "layer:api",
248
+ "onlyDependOnLibsWithTags": [
249
+ "layer:api",
250
+ "layer:core"
251
+ ]
252
+ }
253
+ ],
254
+ "violations": []
255
+ },
256
+ {
257
+ "project": "app",
258
+ "edges": [],
259
+ "constraintRows": [
260
+ {
261
+ "sourceTag": "layer:app",
262
+ "onlyDependOnLibsWithTags": [
263
+ "layer:app",
264
+ "layer:api",
265
+ "layer:core"
266
+ ]
267
+ }
268
+ ],
269
+ "violations": []
270
+ }
271
+ ],
272
+ "decisionImpact": {
273
+ "decisions": [],
274
+ "unresolvedDecisionRefs": []
275
+ },
276
+ "evolutionAlignment": {
277
+ "projects": [
278
+ "api",
279
+ "app",
280
+ "core"
281
+ ],
282
+ "boundaries": [
283
+ "api>core:static"
284
+ ],
285
+ "constraints": [
286
+ "sourceTag:layer:api",
287
+ "sourceTag:layer:app"
288
+ ],
289
+ "decisions": []
290
+ }
291
+ },
292
+ "scenario": {
293
+ "impact": {
294
+ "project": "core",
295
+ "direct": [
296
+ "api"
297
+ ],
298
+ "transitive": [
299
+ "app"
300
+ ],
301
+ "dependents": [
302
+ "api",
303
+ "app"
304
+ ]
305
+ },
306
+ "constraintImpact": [
307
+ {
308
+ "project": "api",
309
+ "edges": [
310
+ {
311
+ "target": "core",
312
+ "type": "static"
313
+ }
314
+ ],
315
+ "constraintRows": [
316
+ {
317
+ "sourceTag": "layer:api",
318
+ "onlyDependOnLibsWithTags": [
319
+ "layer:api",
320
+ "layer:core"
321
+ ]
322
+ }
323
+ ],
324
+ "violations": []
325
+ },
326
+ {
327
+ "project": "app",
328
+ "edges": [],
329
+ "constraintRows": [
330
+ {
331
+ "sourceTag": "layer:app",
332
+ "onlyDependOnLibsWithTags": [
333
+ "layer:app",
334
+ "layer:api",
335
+ "layer:core"
336
+ ]
337
+ }
338
+ ],
339
+ "violations": []
340
+ }
341
+ ],
342
+ "decisionImpact": {
343
+ "decisions": [],
344
+ "unresolvedDecisionRefs": []
345
+ },
346
+ "evolutionAlignment": {
347
+ "projects": [
348
+ "api",
349
+ "app",
350
+ "core"
351
+ ],
352
+ "boundaries": [
353
+ "api>core:static"
354
+ ],
355
+ "constraints": [
356
+ "sourceTag:layer:api",
357
+ "sourceTag:layer:app"
358
+ ],
359
+ "decisions": []
360
+ }
361
+ },
362
+ "governanceImpact": {
363
+ "findingsFiltered": false,
364
+ "debtFiltered": false,
365
+ "governanceComplete": false,
366
+ "scenarioFindingsCount": 0,
367
+ "scenarioDebtCount": 0,
368
+ "findingsStatus": "not_evaluated",
369
+ "debtStatus": "not_evaluated"
370
+ },
371
+ "evidenceChain": {
372
+ "baseRevision": "1fd51709c377d99a6139891e1200291cf08aede9",
373
+ "appliedChanges": [],
374
+ "currentState": "current",
375
+ "scenarioState": "scenario",
376
+ "delta": {
377
+ "dependentsAdded": [],
378
+ "dependentsRemoved": [],
379
+ "constraintsChanged": {
380
+ "status": "unchanged"
381
+ },
382
+ "decisionsChanged": {
383
+ "status": "unchanged"
384
+ },
385
+ "structuralDelta": {
386
+ "dependentsAdded": [],
387
+ "dependentsRemoved": []
388
+ },
389
+ "governanceDelta": {
390
+ "findingsChanged": {
391
+ "status": "not_evaluated"
392
+ },
393
+ "debtChanged": {
394
+ "status": "not_evaluated"
395
+ }
396
+ },
397
+ "evidenceDelta": {
398
+ "baseRevision": "1fd51709c377d99a6139891e1200291cf08aede9",
399
+ "changesApplied": 0,
400
+ "changesRefused": 1
401
+ }
402
+ }
403
+ },
404
+ "delta": {
405
+ "dependentsAdded": [],
406
+ "dependentsRemoved": [],
407
+ "constraintsChanged": {
408
+ "status": "unchanged"
409
+ },
410
+ "decisionsChanged": {
411
+ "status": "unchanged"
412
+ },
413
+ "structuralDelta": {
414
+ "dependentsAdded": [],
415
+ "dependentsRemoved": []
416
+ },
417
+ "governanceDelta": {
418
+ "findingsChanged": {
419
+ "status": "not_evaluated"
420
+ },
421
+ "debtChanged": {
422
+ "status": "not_evaluated"
423
+ }
424
+ },
425
+ "evidenceDelta": {
426
+ "baseRevision": "1fd51709c377d99a6139891e1200291cf08aede9",
427
+ "changesApplied": 0,
428
+ "changesRefused": 1
429
+ }
430
+ },
431
+ "notes": [
432
+ "virtual evaluation — not authoritative",
433
+ "this scenario has not been committed; run `check` for the real verdict",
434
+ "constraint impact covers only depConstraints (3 of 15 violation types). A project with no violations here may still violate other rules.",
435
+ "finding impact not re-evaluated — no findings data provided to scenario. Pass findings data for complete governance re-evaluation.",
436
+ "debt impact not re-evaluated — no debt data provided to scenario. Pass debt data for complete governance re-evaluation.",
437
+ "changes that could not be applied: cannot add dependency: target project \"libs/app\" not in graph"
438
+ ]
439
+ }
440
+ }
441
+
@@ -0,0 +1,28 @@
1
+ Scenario evaluation for "core"
2
+ ==================================================
3
+ Virtual: true | Not authoritative: true
4
+ Coverage: 2 imports in 3 files across 3 projects
5
+
6
+ Changes refused:
7
+ ✖ cannot add dependency: target project "libs/app" not in graph
8
+
9
+ Current impact:
10
+ Direct: 1 project(s)
11
+ Transitive: 1 project(s)
12
+ Dependents: 2 project(s)
13
+
14
+ Scenario impact:
15
+ Direct: 1 project(s)
16
+ Transitive: 1 project(s)
17
+ Dependents: 2 project(s)
18
+
19
+ Delta:
20
+ No change to dependent set
21
+
22
+ Notes:
23
+ virtual evaluation — not authoritative
24
+ this scenario has not been committed; run `check` for the real verdict
25
+ constraint impact covers only depConstraints (3 of 15 violation types). A project with no violations here may still violate other rules.
26
+ finding impact not re-evaluated — no findings data provided to scenario. Pass findings data for complete governance re-evaluation.
27
+ debt impact not re-evaluated — no debt data provided to scenario. Pass debt data for complete governance re-evaluation.
28
+ changes that could not be applied: cannot add dependency: target project "libs/app" not in graph