@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.
- package/cli.mjs +166 -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 +247 -34
- package/src/commands/check-capability.mjs +13 -0
- package/src/commands/check.mjs +13 -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 +263 -49
- 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 +22 -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 +98 -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 +328 -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 +8 -23
- package/src/governance/evolution-event.mjs +15 -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 +9 -0
- package/src/rules/index.mjs +26 -10
- package/src/rules/messages.mjs +64 -14
- package/src/rules/specifiers.mjs +21 -20
- package/src/tsconfig-paths.mjs +8 -14
- package/src/verdict.mjs +127 -16
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"tool": {
|
|
4
|
+
"name": "@ecoma-io/archkeep",
|
|
5
|
+
"version": "0.26.0"
|
|
6
|
+
},
|
|
7
|
+
"command": "debt",
|
|
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
|
+
"ledger ages are snapshot-relative; 0 entries derived across 1 snapshot",
|
|
29
|
+
"sampleTime is the wall clock at the moment of this run, not a fact about the workspace — it is expected to differ between two runs of an unchanged tree and should be excluded from any diff or hash meant to detect real change. Every other field here is deterministic given the same law, history directory and tree.",
|
|
30
|
+
"no event store linked — lifecycle refs unavailable"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"result": {
|
|
34
|
+
"dir": "/tmp/archkeep-golden-fixture/.archkeep-history",
|
|
35
|
+
"snapshots": 1,
|
|
36
|
+
"agings": false,
|
|
37
|
+
"sampleTime": "2026-09-07T06:50:29.512Z",
|
|
38
|
+
"entries": [],
|
|
39
|
+
"resolved": [],
|
|
40
|
+
"total": 0,
|
|
41
|
+
"byKind": {
|
|
42
|
+
"waiver": 0,
|
|
43
|
+
"expired-waiver": 0,
|
|
44
|
+
"aspirational-gap": 0,
|
|
45
|
+
"drift": 0,
|
|
46
|
+
"unresolved": 0
|
|
47
|
+
},
|
|
48
|
+
"bySeverity": {
|
|
49
|
+
"high": 0,
|
|
50
|
+
"medium": 0,
|
|
51
|
+
"low": 0
|
|
52
|
+
},
|
|
53
|
+
"lifecycle": {
|
|
54
|
+
"linked": false,
|
|
55
|
+
"note": "no event store linked — lifecycle refs unavailable"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
debt /tmp/archkeep-golden-fixture/.archkeep-history
|
|
2
|
+
0 entries across 1 snapshot — ages not yet established (fewer than two snapshots)
|
|
3
|
+
✔ no architecture debt — no waivers, aspirational gaps, drift or unresolved intent
|
|
4
|
+
no event store linked — lifecycle refs unavailable
|
|
5
|
+
total 0 entries · byKind: waiver 0, expired-waiver 0, aspirational-gap 0, drift 0, unresolved 0 · bySeverity: high 0, medium 0, low 0
|
|
6
|
+
sampled 2026-09-07T06:50:29.192Z
|
|
7
|
+
✔ complete (2 imports in 3 files across 3 projects)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"tool": {
|
|
4
|
+
"name": "@ecoma-io/archkeep",
|
|
5
|
+
"version": "0.26.0"
|
|
6
|
+
},
|
|
7
|
+
"command": "decisions",
|
|
8
|
+
"workspace": {
|
|
9
|
+
"root": "/tmp/archkeep-golden-fixture",
|
|
10
|
+
"provider": "native",
|
|
11
|
+
"marker": "docs/adr",
|
|
12
|
+
"provenance": null
|
|
13
|
+
},
|
|
14
|
+
"status": "no-verdict",
|
|
15
|
+
"exitCode": 3,
|
|
16
|
+
"coverage": {
|
|
17
|
+
"complete": false,
|
|
18
|
+
"projects": 3,
|
|
19
|
+
"analyzedFiles": 3,
|
|
20
|
+
"imports": 2,
|
|
21
|
+
"notAnalyzed": [
|
|
22
|
+
{
|
|
23
|
+
"file": "intentForbiddenEdge",
|
|
24
|
+
"reason": "\"intentForbiddenEdge\" is bound by 0001-layers but no governed row in the context carries that id"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"blindSpots": [],
|
|
28
|
+
"notes": []
|
|
29
|
+
},
|
|
30
|
+
"result": {
|
|
31
|
+
"decisionId": "0001-layers",
|
|
32
|
+
"record": {
|
|
33
|
+
"id": "0001-layers",
|
|
34
|
+
"status": "accepted",
|
|
35
|
+
"supersedes": [],
|
|
36
|
+
"bindings": [
|
|
37
|
+
"intentForbiddenEdge"
|
|
38
|
+
],
|
|
39
|
+
"supersededBy": []
|
|
40
|
+
},
|
|
41
|
+
"walk": {
|
|
42
|
+
"ok": false,
|
|
43
|
+
"nodes": [
|
|
44
|
+
{
|
|
45
|
+
"id": "0001-layers",
|
|
46
|
+
"kind": "decision",
|
|
47
|
+
"label": "0001-layers",
|
|
48
|
+
"data": {
|
|
49
|
+
"status": "accepted"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"edges": [],
|
|
54
|
+
"unresolved": [
|
|
55
|
+
{
|
|
56
|
+
"ref": "intentForbiddenEdge",
|
|
57
|
+
"kind": "binding",
|
|
58
|
+
"reason": "\"intentForbiddenEdge\" is bound by 0001-layers but no governed row in the context carries that id"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"fitness": {
|
|
63
|
+
"id": "0001-layers",
|
|
64
|
+
"status": "accepted",
|
|
65
|
+
"level": "unverifiable",
|
|
66
|
+
"verified": false,
|
|
67
|
+
"reason": "no bound constraint for 0001-layers resolves or was evaluated — none can be verified"
|
|
68
|
+
},
|
|
69
|
+
"knownFitness": [
|
|
70
|
+
"intentForbiddenEdge"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
0001-layers (accepted)
|
|
2
|
+
-----------------------
|
|
3
|
+
fitness: unverifiable — no bound constraint for 0001-layers resolves or was evaluated — none can be verified
|
|
4
|
+
governs: (none — recorded but not enforceable)
|
|
5
|
+
unresolved:
|
|
6
|
+
intentForbiddenEdge: "intentForbiddenEdge" is bound by 0001-layers but no governed row in the context carries that id
|
|
7
|
+
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"tool": {
|
|
4
|
+
"name": "@ecoma-io/archkeep",
|
|
5
|
+
"version": "0.26.0"
|
|
6
|
+
},
|
|
7
|
+
"command": "delta",
|
|
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
|
+
"baseline": {
|
|
31
|
+
"path": "/tmp/archkeep-golden-fixture/.archkeep-delta.json",
|
|
32
|
+
"tool": {
|
|
33
|
+
"name": "@ecoma-io/archkeep",
|
|
34
|
+
"version": "0.26.0"
|
|
35
|
+
},
|
|
36
|
+
"provider": "native",
|
|
37
|
+
"provenance": {
|
|
38
|
+
"commit": "1fd51709c377d99a6139891e1200291cf08aede9",
|
|
39
|
+
"dirty": false,
|
|
40
|
+
"remote": null
|
|
41
|
+
},
|
|
42
|
+
"policyFingerprint": "e18ba4307f6baaaa0d558822327788e8925cb3c52dfac6b170ce4d89b5a728ca",
|
|
43
|
+
"records": 2,
|
|
44
|
+
"projects": 3
|
|
45
|
+
},
|
|
46
|
+
"head": {
|
|
47
|
+
"provenance": {
|
|
48
|
+
"commit": "1fd51709c377d99a6139891e1200291cf08aede9",
|
|
49
|
+
"remote": null,
|
|
50
|
+
"dirty": false
|
|
51
|
+
},
|
|
52
|
+
"policyFingerprint": "e18ba4307f6baaaa0d558822327788e8925cb3c52dfac6b170ce4d89b5a728ca",
|
|
53
|
+
"records": 2,
|
|
54
|
+
"projects": 3
|
|
55
|
+
},
|
|
56
|
+
"policyChanged": false,
|
|
57
|
+
"summary": {
|
|
58
|
+
"introduced": 0,
|
|
59
|
+
"introducedWaived": 0,
|
|
60
|
+
"resolved": 0,
|
|
61
|
+
"unchanged": 0,
|
|
62
|
+
"unknown": 0,
|
|
63
|
+
"unresolvable": {
|
|
64
|
+
"introduced": 0,
|
|
65
|
+
"resolved": 0,
|
|
66
|
+
"unchanged": 0,
|
|
67
|
+
"unknown": 0
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"violations": {
|
|
71
|
+
"introduced": [],
|
|
72
|
+
"resolved": [],
|
|
73
|
+
"unchanged": [],
|
|
74
|
+
"unknown": []
|
|
75
|
+
},
|
|
76
|
+
"unresolvable": {
|
|
77
|
+
"introduced": [],
|
|
78
|
+
"resolved": [],
|
|
79
|
+
"unchanged": [],
|
|
80
|
+
"unknown": []
|
|
81
|
+
},
|
|
82
|
+
"classifications": [],
|
|
83
|
+
"affected": {
|
|
84
|
+
"projects": [],
|
|
85
|
+
"boundaries": [],
|
|
86
|
+
"constraints": [],
|
|
87
|
+
"decisions": []
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"decision": {
|
|
91
|
+
"verdict": "pass"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|