@ecoma-io/archkeep 0.25.0 → 0.27.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.
- package/cli.mjs +167 -506
- package/commands.mjs +7 -1
- package/package.json +1 -1
- package/src/architecture-intent/judge.mjs +1 -1
- package/src/architecture-intent/model.mjs +34 -0
- package/src/canonical.mjs +2 -1
- package/src/commands/adr-for-workspace.mjs +63 -0
- package/src/commands/analyze-capability.mjs +13 -0
- package/src/commands/change-intent.mjs +11 -0
- package/src/commands/change.mjs +251 -35
- package/src/commands/check-capability.mjs +13 -0
- package/src/commands/check.mjs +11 -3
- package/src/commands/compare-capability.mjs +20 -0
- package/src/commands/completeness.mjs +12 -0
- package/src/commands/context-command.mjs +31 -0
- package/src/commands/coverage-verdict.mjs +15 -2
- package/src/commands/debt.mjs +30 -0
- package/src/commands/decisions.mjs +59 -10
- package/src/commands/delta.mjs +266 -50
- package/src/commands/diff.mjs +45 -0
- package/src/commands/discover.mjs +37 -0
- package/src/commands/drift.mjs +45 -0
- package/src/commands/evolution.mjs +32 -2
- package/src/commands/explain-capability.mjs +11 -0
- package/src/commands/explain.mjs +24 -0
- package/src/commands/fitness.mjs +119 -10
- package/src/commands/govern-capability.mjs +16 -0
- package/src/commands/graph.mjs +39 -0
- package/src/commands/health.mjs +34 -0
- package/src/commands/history.mjs +85 -2
- package/src/commands/impact.mjs +23 -0
- package/src/commands/inspect-capability.mjs +16 -0
- package/src/commands/plan-context-command.mjs +35 -0
- package/src/commands/policy.mjs +42 -4
- package/src/commands/provenance-command.mjs +15 -24
- package/src/commands/report.mjs +38 -0
- package/src/commands/rules-capability.mjs +16 -0
- package/src/commands/rules.mjs +3 -1
- package/src/commands/scenario.mjs +23 -0
- package/src/commands/trajectory.mjs +35 -0
- package/src/commands/waivers.mjs +30 -0
- package/src/corpus/goldens/.gitkeep +0 -0
- package/src/corpus/goldens/adr.json +62 -0
- package/src/corpus/goldens/adr.text +6 -0
- package/src/corpus/goldens/change.json +99 -0
- package/src/corpus/goldens/change.text +6 -0
- package/src/corpus/goldens/check.json +90 -0
- package/src/corpus/goldens/check.sarif +479 -0
- package/src/corpus/goldens/check.text +9 -0
- package/src/corpus/goldens/context.json +47 -0
- package/src/corpus/goldens/context.text +6 -0
- package/src/corpus/goldens/debt.json +59 -0
- package/src/corpus/goldens/debt.text +7 -0
- package/src/corpus/goldens/decisions.json +74 -0
- package/src/corpus/goldens/decisions.text +7 -0
- package/src/corpus/goldens/delta.json +94 -0
- package/src/corpus/goldens/delta.sarif +472 -0
- package/src/corpus/goldens/delta.text +5 -0
- package/src/corpus/goldens/diff.json +58 -0
- package/src/corpus/goldens/diff.text +4 -0
- package/src/corpus/goldens/discover.json +77 -0
- package/src/corpus/goldens/discover.text +10 -0
- package/src/corpus/goldens/drift.json +43 -0
- package/src/corpus/goldens/drift.text +3 -0
- package/src/corpus/goldens/evolution.json +330 -0
- package/src/corpus/goldens/evolution.text +32 -0
- package/src/corpus/goldens/explain.json +60 -0
- package/src/corpus/goldens/explain.text +7 -0
- package/src/corpus/goldens/fitness.json +45 -0
- package/src/corpus/goldens/fitness.text +3 -0
- package/src/corpus/goldens/graph.json +78 -0
- package/src/corpus/goldens/graph.text +10 -0
- package/src/corpus/goldens/health.json +72 -0
- package/src/corpus/goldens/health.text +10 -0
- package/src/corpus/goldens/help.text +104 -0
- package/src/corpus/goldens/history.json +43 -0
- package/src/corpus/goldens/history.text +4 -0
- package/src/corpus/goldens/impact.json +327 -0
- package/src/corpus/goldens/impact.text +10 -0
- package/src/corpus/goldens/provenance.json +453 -0
- package/src/corpus/goldens/provenance.text +14 -0
- package/src/corpus/goldens/reconcile.json +168 -0
- package/src/corpus/goldens/reconcile.text +3 -0
- package/src/corpus/goldens/report.json +168 -0
- package/src/corpus/goldens/report.text +42 -0
- package/src/corpus/goldens/rules verify.json +0 -0
- package/src/corpus/goldens/rules verify.text +0 -0
- package/src/corpus/goldens/scenario.json +441 -0
- package/src/corpus/goldens/scenario.text +28 -0
- package/src/corpus/goldens/trajectory.json +83 -0
- package/src/corpus/goldens/trajectory.text +10 -0
- package/src/corpus/goldens/usage-error.text +105 -0
- package/src/corpus/goldens/waivers.json +40 -0
- package/src/corpus/goldens/waivers.text +1 -0
- package/src/corpus/goldens-lsp/initialize.result.json +15 -0
- package/src/corpus/goldens-lsp/publish-cleared-empty.json +4 -0
- package/src/corpus/goldens-lsp/publish-fixed-empty.json +5 -0
- package/src/corpus/goldens-lsp/publish-unparseable.json +54 -0
- package/src/corpus/goldens-lsp/publish-violation.json +22 -0
- package/src/corpus/goldens-lsp/register-watched-files.json +72 -0
- package/src/go-work.mjs +7 -23
- package/src/governance/debt-ledger.mjs +5 -2
- package/src/governance/evolution-event.mjs +14 -0
- package/src/governance/evolution-store.mjs +59 -31
- package/src/governance/provenance-record.mjs +0 -152
- package/src/governance/verdict.mjs +26 -3
- package/src/intent/intent-manifest.json +14 -14
- package/src/lsp/server.mjs +5 -8
- package/src/lsp/workspace-index.mjs +55 -220
- package/src/options.mjs +10 -0
- package/src/providers/native/discover.mjs +13 -12
- package/src/providers/native/model.mjs +8 -3
- package/src/providers/nx-static.mjs +231 -0
- package/src/report/json.mjs +3 -2
- package/src/report/sarif.mjs +8 -3
- package/src/rules/edge-constraints.mjs +8 -0
- package/src/rules/index.mjs +24 -10
- package/src/rules/messages.mjs +64 -14
- package/src/rules/specifiers.mjs +21 -20
- package/src/tsconfig-paths.mjs +7 -14
- package/src/verdict.mjs +127 -16
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"tool": {
|
|
4
|
+
"name": "@ecoma-io/archkeep",
|
|
5
|
+
"version": "0.27.0"
|
|
6
|
+
},
|
|
7
|
+
"command": "report",
|
|
8
|
+
"workspace": {
|
|
9
|
+
"root": "<fixture-root>",
|
|
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 <fixture-root>
|
|
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.27.0"
|
|
6
|
+
},
|
|
7
|
+
"command": "scenario",
|
|
8
|
+
"workspace": {
|
|
9
|
+
"root": "<fixture-root>",
|
|
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
|