@n8r/surface 0.1.0-experimental.2 → 0.1.0-experimental.5

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 (118) hide show
  1. package/README.md +30 -4
  2. package/dist/cli.js +174 -22
  3. package/dist/codec.d.ts +2 -0
  4. package/dist/codec.js +22 -7
  5. package/dist/codex.d.ts +1 -1
  6. package/dist/codex.js +26 -10
  7. package/dist/contracts.d.ts +108 -2
  8. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  9. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  10. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  11. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  12. package/dist/cyclonedx-validation.d.ts +1 -0
  13. package/dist/cyclonedx-validation.js +45 -0
  14. package/dist/html.js +27 -3
  15. package/dist/recent.d.ts +9 -0
  16. package/dist/recent.js +71 -0
  17. package/dist/revisions.js +42 -0
  18. package/dist/skill-artifacts-cli.d.ts +1 -0
  19. package/dist/skill-artifacts-cli.js +13 -0
  20. package/dist/skill-artifacts.d.ts +15 -0
  21. package/dist/skill-artifacts.js +184 -0
  22. package/dist/skill-cyclonedx.d.ts +26 -0
  23. package/dist/skill-cyclonedx.js +214 -0
  24. package/dist/skill-presentation.d.ts +10 -0
  25. package/dist/skill-presentation.js +108 -0
  26. package/dist/skill-surface-cli.d.ts +1 -0
  27. package/dist/skill-surface-cli.js +37 -0
  28. package/dist/skill-surface-store.d.ts +7 -0
  29. package/dist/skill-surface-store.js +126 -0
  30. package/dist/surface-bom.d.ts +73 -0
  31. package/dist/surface-bom.js +139 -0
  32. package/dist/surface-draft.d.ts +6 -3
  33. package/dist/surface-draft.js +20 -3
  34. package/dist/surface-instructions.d.ts +2 -1
  35. package/dist/surface-instructions.js +10 -1
  36. package/dist/surface-overview.d.ts +15 -0
  37. package/dist/surface-overview.js +86 -0
  38. package/dist/surface-store.d.ts +5 -7
  39. package/dist/surface-store.js +34 -2
  40. package/dist/surface-view.d.ts +3 -0
  41. package/dist/surface-view.js +50 -0
  42. package/dist/validate.js +298 -0
  43. package/docs/n8r-surface/cli-bundles.md +72 -0
  44. package/docs/n8r-surface/command-outcomes.md +151 -4
  45. package/docs/n8r-surface/contracts.md +10 -0
  46. package/docs/n8r-surface/critical-path.md +21 -0
  47. package/docs/n8r-surface/first-use-access.md +143 -0
  48. package/docs/n8r-surface/first-use-overview.md +262 -0
  49. package/docs/n8r-surface/getting-started.md +55 -88
  50. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  51. package/docs/n8r-surface/implementation-decisions.md +14 -14
  52. package/docs/n8r-surface/instance-first-research.md +209 -0
  53. package/docs/n8r-surface/npm-distribution.md +39 -69
  54. package/docs/n8r-surface/npm-release.md +141 -14
  55. package/docs/n8r-surface/product-direction.md +327 -0
  56. package/docs/n8r-surface/researcher-skill.md +105 -51
  57. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  58. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  59. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  60. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  61. package/docs/n8r-surface/skill-manual.md +129 -0
  62. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  63. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  64. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  65. package/docs/n8r-surface/surface-description-contract.md +224 -0
  66. package/docs/n8r-surface/surface-descriptions.md +173 -0
  67. package/docs/n8r-surface/surface-relationships.md +231 -0
  68. package/docs/n8r-surface/tester-candidate.md +158 -0
  69. package/docs/n8r-surface/versioning.md +55 -66
  70. package/docs/n8r-surface/workspace-human-check.md +101 -0
  71. package/docs/n8r-surface/workspace-installation.md +68 -0
  72. package/docs/n8r-surface/workspace-verification.md +350 -0
  73. package/docs/n8r-surface/workspace.md +83 -0
  74. package/examples/researcher/README.md +8 -0
  75. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  76. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  77. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  78. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  79. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  80. package/examples/researcher/descriptions/README.md +29 -0
  81. package/examples/researcher/descriptions/bound-r1.json +141 -0
  82. package/examples/researcher/descriptions/bound-r2.json +153 -0
  83. package/examples/researcher/descriptions/capability.json +167 -0
  84. package/examples/researcher/descriptions/research-r1.json +153 -0
  85. package/examples/researcher/descriptions/research-r2.json +157 -0
  86. package/examples/researcher/descriptions/sources.md +24 -0
  87. package/examples/researcher/relationships/README.md +34 -0
  88. package/examples/researcher/relationships/bound-r1.json +346 -0
  89. package/examples/researcher/relationships/bound-r2.json +358 -0
  90. package/examples/researcher/relationships/capability.json +325 -0
  91. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  92. package/examples/researcher/relationships/research-r1.json +300 -0
  93. package/examples/researcher/relationships/research-r2.json +304 -0
  94. package/examples/researcher/relationships/sources.md +38 -0
  95. package/examples/researcher/surface-bom/README.md +17 -0
  96. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  97. package/package.json +1 -1
  98. package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
  99. package/plugins/n8r-surface/LICENSING.md +3 -0
  100. package/plugins/n8r-surface/plugin.json +2 -2
  101. package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
  102. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  103. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  104. package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
  105. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  106. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  107. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  108. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  109. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  110. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  111. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  112. package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
  113. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  114. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  115. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  116. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  117. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  118. package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
@@ -0,0 +1,79 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.7",
4
+ "serialNumber": "urn:uuid:32c19d86-ecb9-59e9-ad1f-edc951a2819f",
5
+ "version": 1,
6
+ "metadata": {
7
+ "timestamp": "2026-11-08T00:00:00Z"
8
+ },
9
+ "components": [
10
+ {
11
+ "bom-ref": "urn:node:app",
12
+ "name": "Assistant",
13
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use.",
14
+ "type": "application"
15
+ }
16
+ ],
17
+ "services": [
18
+ {
19
+ "bom-ref": "urn:node:mongodb",
20
+ "name": "MongoDB",
21
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
22
+ },
23
+ {
24
+ "bom-ref": "urn:node:oidc",
25
+ "name": "OIDC",
26
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
27
+ },
28
+ {
29
+ "bom-ref": "urn:node:saml",
30
+ "name": "SAML",
31
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
32
+ },
33
+ {
34
+ "bom-ref": "urn:node:inference",
35
+ "name": "Inference service",
36
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
37
+ },
38
+ {
39
+ "bom-ref": "urn:target:atlas",
40
+ "name": "MongoDB Atlas",
41
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
42
+ },
43
+ {
44
+ "bom-ref": "urn:target:oidc",
45
+ "name": "OIDC service",
46
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
47
+ },
48
+ {
49
+ "bom-ref": "urn:target:saml",
50
+ "name": "SAML service",
51
+ "description": "bound Surface node; classification: Synthetic consumer rehearsal classification. This inventory does not establish deployment or runtime use."
52
+ }
53
+ ],
54
+ "dependencies": [
55
+ {
56
+ "ref": "urn:node:app",
57
+ "dependsOn": [
58
+ "urn:target:atlas"
59
+ ]
60
+ }
61
+ ],
62
+ "compositions": [
63
+ {
64
+ "aggregate": "unknown"
65
+ }
66
+ ],
67
+ "externalReferences": [
68
+ {
69
+ "type": "other",
70
+ "url": "surface-records.json",
71
+ "comment": "Exact checked native research/Surface snapshot. Required for evidence and Surface meanings."
72
+ },
73
+ {
74
+ "type": "other",
75
+ "url": "mapping.json",
76
+ "comment": "Mapping and explicit semantic losses; not a lossless BOM-only representation."
77
+ }
78
+ ]
79
+ }
@@ -0,0 +1,29 @@
1
+ # Synthetic Capability and Bound descriptions
2
+
3
+ These are developer-written fixtures for [contract 0.2](../../../docs/n8r-surface/surface-description-contract.md),
4
+ not AI findings or a real deployment. The example vocabulary `urn:v:demo` version
5
+ `1` uses `component` for nodes and `uses` for possible directed relationships.
6
+ These terms describe roles only, not protocol compatibility.
7
+
8
+ | File | Inspect for |
9
+ | --- | --- |
10
+ | [Source pack](sources.md) | Synthetic product support, sanitized configuration summaries and a separate human preference. |
11
+ | [Research r1](research-r1.json) | Exact source hash, source locators, known/conflicting findings and human decision. |
12
+ | [Capability](capability.json) | Possible MongoDB/OIDC/SAML relationships, exclusive authentication options, unknown inference. |
13
+ | [Bound r1](bound-r1.json) | Configured Atlas, conflicting authentication and unknown inference; pinned Capability revision. |
14
+ | [Research r2](research-r2.json) | Changed database evidence with the original research as predecessor. |
15
+ | [Bound r2](bound-r2.json) | Same instance and binding slot, new MongoDB target, pinned predecessor; unchanged Capability revision. |
16
+
17
+ All source/settings content is synthetic and sanitized at origin; there are no
18
+ actual endpoints, accounts or secrets to recover. Configuration claims do not
19
+ prove runtime use. A conflicting target does not assert that its protocol fits
20
+ the possible connection; it records source disagreement requiring investigation.
21
+ Missing evidence does not mean unbound.
22
+
23
+ Follow the [human inspection and runnable readback](../../../docs/n8r-surface/surface-description-contract.md#human-verification-task-list).
24
+ `npm test` checks exact hashes, local/external references and revisions; it does
25
+ not establish research quality, installed-skill acceptance or model conformance.
26
+
27
+ Machine-readable fixtures use [Apache-2.0](../../../LICENSE). This guide and the
28
+ synthetic source pack use [CC-BY-4.0](../../../LICENSE-DOCS); credit AI Surface
29
+ Model contributors. No third-party source material is included.
@@ -0,0 +1,141 @@
1
+ {
2
+ "id": "urn:demo:bound",
3
+ "title": "Synthetic Bound Surface",
4
+ "scope": "Synthetic role/product identities only; runtime unverified.",
5
+ "revision": {
6
+ "id": "r1",
7
+ "parent": null,
8
+ "createdAt": "2026-11-08T00:00:00Z",
9
+ "author": "Synthetic author",
10
+ "reason": "Initial synthetic example"
11
+ },
12
+ "extensions": {},
13
+ "contract": "n8r.surface/0.2",
14
+ "kind": "bound",
15
+ "capability": {
16
+ "id": "urn:demo:capability",
17
+ "revision": "r1",
18
+ "digest": "sha256:9e1602e468cec7eff8e945007b7e40e0534bf1ba2f80cb679b92099a720c619b"
19
+ },
20
+ "instance": {
21
+ "id": "urn:instance:demo",
22
+ "label": "Synthetic instance"
23
+ },
24
+ "records": [
25
+ {
26
+ "id": "urn:demo:research",
27
+ "revision": "r1",
28
+ "digest": "sha256:628d3c612d4afbb09852ec51436cf8b51f4fb96f02407c2b99e45dc06a3dfec0"
29
+ }
30
+ ],
31
+ "vocabularies": [
32
+ {
33
+ "id": "urn:v:demo",
34
+ "version": "1"
35
+ }
36
+ ],
37
+ "nodes": [
38
+ {
39
+ "id": "urn:target:atlas",
40
+ "label": "MongoDB Atlas",
41
+ "type": {
42
+ "vocabulary": "urn:v:demo",
43
+ "term": "component"
44
+ }
45
+ },
46
+ {
47
+ "id": "urn:target:oidc",
48
+ "label": "OIDC service",
49
+ "type": {
50
+ "vocabulary": "urn:v:demo",
51
+ "term": "component"
52
+ }
53
+ },
54
+ {
55
+ "id": "urn:target:saml",
56
+ "label": "SAML service",
57
+ "type": {
58
+ "vocabulary": "urn:v:demo",
59
+ "term": "component"
60
+ }
61
+ }
62
+ ],
63
+ "bindings": [
64
+ {
65
+ "id": "urn:binding:database",
66
+ "capability": "urn:cap:database",
67
+ "state": "configured",
68
+ "claims": [
69
+ {
70
+ "target": "urn:target:atlas",
71
+ "basis": [
72
+ {
73
+ "record": "urn:demo:research",
74
+ "revision": "r1",
75
+ "items": [
76
+ "urn:f:database-bound"
77
+ ]
78
+ }
79
+ ]
80
+ }
81
+ ],
82
+ "decisions": [],
83
+ "note": "Configuration sufficient; runtime unverified"
84
+ },
85
+ {
86
+ "id": "urn:binding:identity",
87
+ "capability": "urn:cap:oidc",
88
+ "state": "conflicting",
89
+ "claims": [
90
+ {
91
+ "target": "urn:target:oidc",
92
+ "basis": [
93
+ {
94
+ "record": "urn:demo:research",
95
+ "revision": "r1",
96
+ "items": [
97
+ "urn:f:identity"
98
+ ]
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "target": "urn:target:saml",
104
+ "basis": [
105
+ {
106
+ "record": "urn:demo:research",
107
+ "revision": "r1",
108
+ "items": [
109
+ "urn:f:identity"
110
+ ]
111
+ }
112
+ ]
113
+ }
114
+ ],
115
+ "decisions": [
116
+ {
117
+ "record": "urn:demo:research",
118
+ "revision": "r1",
119
+ "items": [
120
+ "urn:decision:oidc"
121
+ ]
122
+ }
123
+ ],
124
+ "note": "Preference retained separately; configuration sources disagree"
125
+ },
126
+ {
127
+ "id": "urn:binding:inference",
128
+ "capability": "urn:cap:inference",
129
+ "state": "unknown",
130
+ "claims": [],
131
+ "decisions": [],
132
+ "note": "Missing evidence is not unbound"
133
+ }
134
+ ],
135
+ "coverage": [
136
+ "Sanitized configuration summary"
137
+ ],
138
+ "gaps": [
139
+ "Authentication conflict; inference unknown; runtime unverified"
140
+ ]
141
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "id": "urn:demo:bound",
3
+ "title": "Synthetic Bound Surface",
4
+ "scope": "Synthetic role/product identities only; runtime unverified.",
5
+ "revision": {
6
+ "id": "r2",
7
+ "parent": {
8
+ "id": "urn:demo:bound",
9
+ "revision": "r1",
10
+ "digest": "sha256:c29b9f93f2be80b0a2f2465e3494de7ce346ff68942dd52ad6e8877c1f7cbbfb"
11
+ },
12
+ "createdAt": "2026-11-08T00:00:00Z",
13
+ "author": "Synthetic author",
14
+ "reason": "Database target changed"
15
+ },
16
+ "extensions": {},
17
+ "contract": "n8r.surface/0.2",
18
+ "kind": "bound",
19
+ "capability": {
20
+ "id": "urn:demo:capability",
21
+ "revision": "r1",
22
+ "digest": "sha256:9e1602e468cec7eff8e945007b7e40e0534bf1ba2f80cb679b92099a720c619b"
23
+ },
24
+ "instance": {
25
+ "id": "urn:instance:demo",
26
+ "label": "Synthetic instance"
27
+ },
28
+ "records": [
29
+ {
30
+ "id": "urn:demo:research",
31
+ "revision": "r2",
32
+ "digest": "sha256:974a8670519fb59a95ddd8cd62db7bd4d43cb1794d042f89c09b012484c095db"
33
+ }
34
+ ],
35
+ "vocabularies": [
36
+ {
37
+ "id": "urn:v:demo",
38
+ "version": "1"
39
+ }
40
+ ],
41
+ "nodes": [
42
+ {
43
+ "id": "urn:target:atlas",
44
+ "label": "MongoDB Atlas",
45
+ "type": {
46
+ "vocabulary": "urn:v:demo",
47
+ "term": "component"
48
+ }
49
+ },
50
+ {
51
+ "id": "urn:target:oidc",
52
+ "label": "OIDC service",
53
+ "type": {
54
+ "vocabulary": "urn:v:demo",
55
+ "term": "component"
56
+ }
57
+ },
58
+ {
59
+ "id": "urn:target:saml",
60
+ "label": "SAML service",
61
+ "type": {
62
+ "vocabulary": "urn:v:demo",
63
+ "term": "component"
64
+ }
65
+ },
66
+ {
67
+ "id": "urn:target:mongodb",
68
+ "label": "Self-hosted MongoDB",
69
+ "type": {
70
+ "vocabulary": "urn:v:demo",
71
+ "term": "component"
72
+ }
73
+ }
74
+ ],
75
+ "bindings": [
76
+ {
77
+ "id": "urn:binding:database",
78
+ "capability": "urn:cap:database",
79
+ "state": "configured",
80
+ "claims": [
81
+ {
82
+ "target": "urn:target:mongodb",
83
+ "basis": [
84
+ {
85
+ "record": "urn:demo:research",
86
+ "revision": "r2",
87
+ "items": [
88
+ "urn:f:database-bound"
89
+ ]
90
+ }
91
+ ]
92
+ }
93
+ ],
94
+ "decisions": [],
95
+ "note": "Configuration sufficient; runtime unverified"
96
+ },
97
+ {
98
+ "id": "urn:binding:identity",
99
+ "capability": "urn:cap:oidc",
100
+ "state": "conflicting",
101
+ "claims": [
102
+ {
103
+ "target": "urn:target:oidc",
104
+ "basis": [
105
+ {
106
+ "record": "urn:demo:research",
107
+ "revision": "r2",
108
+ "items": [
109
+ "urn:f:identity"
110
+ ]
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "target": "urn:target:saml",
116
+ "basis": [
117
+ {
118
+ "record": "urn:demo:research",
119
+ "revision": "r2",
120
+ "items": [
121
+ "urn:f:identity"
122
+ ]
123
+ }
124
+ ]
125
+ }
126
+ ],
127
+ "decisions": [
128
+ {
129
+ "record": "urn:demo:research",
130
+ "revision": "r2",
131
+ "items": [
132
+ "urn:decision:oidc"
133
+ ]
134
+ }
135
+ ],
136
+ "note": "Preference retained separately; configuration sources disagree"
137
+ },
138
+ {
139
+ "id": "urn:binding:inference",
140
+ "capability": "urn:cap:inference",
141
+ "state": "unknown",
142
+ "claims": [],
143
+ "decisions": [],
144
+ "note": "Missing evidence is not unbound"
145
+ }
146
+ ],
147
+ "coverage": [
148
+ "Sanitized configuration summary"
149
+ ],
150
+ "gaps": [
151
+ "Authentication conflict; inference unknown; runtime unverified"
152
+ ]
153
+ }
@@ -0,0 +1,167 @@
1
+ {
2
+ "id": "urn:demo:capability",
3
+ "title": "Synthetic Capability Surface",
4
+ "scope": "Synthetic role/product identities only; runtime unverified.",
5
+ "revision": {
6
+ "id": "r1",
7
+ "parent": null,
8
+ "createdAt": "2026-11-08T00:00:00Z",
9
+ "author": "Synthetic author",
10
+ "reason": "Initial synthetic example"
11
+ },
12
+ "extensions": {},
13
+ "contract": "n8r.surface/0.2",
14
+ "kind": "capability",
15
+ "records": [
16
+ {
17
+ "id": "urn:demo:research",
18
+ "revision": "r1",
19
+ "digest": "sha256:628d3c612d4afbb09852ec51436cf8b51f4fb96f02407c2b99e45dc06a3dfec0"
20
+ }
21
+ ],
22
+ "vocabularies": [
23
+ {
24
+ "id": "urn:v:demo",
25
+ "version": "1"
26
+ }
27
+ ],
28
+ "nodes": [
29
+ {
30
+ "id": "urn:node:app",
31
+ "label": "Assistant",
32
+ "type": {
33
+ "vocabulary": "urn:v:demo",
34
+ "term": "component"
35
+ }
36
+ },
37
+ {
38
+ "id": "urn:node:mongodb",
39
+ "label": "MongoDB",
40
+ "type": {
41
+ "vocabulary": "urn:v:demo",
42
+ "term": "component"
43
+ }
44
+ },
45
+ {
46
+ "id": "urn:node:oidc",
47
+ "label": "OIDC",
48
+ "type": {
49
+ "vocabulary": "urn:v:demo",
50
+ "term": "component"
51
+ }
52
+ },
53
+ {
54
+ "id": "urn:node:saml",
55
+ "label": "SAML",
56
+ "type": {
57
+ "vocabulary": "urn:v:demo",
58
+ "term": "component"
59
+ }
60
+ },
61
+ {
62
+ "id": "urn:node:inference",
63
+ "label": "Inference service",
64
+ "type": {
65
+ "vocabulary": "urn:v:demo",
66
+ "term": "component"
67
+ }
68
+ }
69
+ ],
70
+ "capabilities": [
71
+ {
72
+ "id": "urn:cap:database",
73
+ "from": "urn:node:app",
74
+ "to": "urn:node:mongodb",
75
+ "type": {
76
+ "vocabulary": "urn:v:demo",
77
+ "term": "uses"
78
+ },
79
+ "state": "possible",
80
+ "basis": [
81
+ {
82
+ "record": "urn:demo:research",
83
+ "revision": "r1",
84
+ "items": [
85
+ "urn:f:database"
86
+ ]
87
+ }
88
+ ],
89
+ "conditions": [],
90
+ "note": "Supported possibility, not a selected composition"
91
+ },
92
+ {
93
+ "id": "urn:cap:oidc",
94
+ "from": "urn:node:app",
95
+ "to": "urn:node:oidc",
96
+ "type": {
97
+ "vocabulary": "urn:v:demo",
98
+ "term": "uses"
99
+ },
100
+ "state": "possible",
101
+ "basis": [
102
+ {
103
+ "record": "urn:demo:research",
104
+ "revision": "r1",
105
+ "items": [
106
+ "urn:f:oidc"
107
+ ]
108
+ }
109
+ ],
110
+ "conditions": [
111
+ "OIDC and SAML are alternatives"
112
+ ],
113
+ "note": "Supported possibility, not a selected composition"
114
+ },
115
+ {
116
+ "id": "urn:cap:saml",
117
+ "from": "urn:node:app",
118
+ "to": "urn:node:saml",
119
+ "type": {
120
+ "vocabulary": "urn:v:demo",
121
+ "term": "uses"
122
+ },
123
+ "state": "possible",
124
+ "basis": [
125
+ {
126
+ "record": "urn:demo:research",
127
+ "revision": "r1",
128
+ "items": [
129
+ "urn:f:saml"
130
+ ]
131
+ }
132
+ ],
133
+ "conditions": [
134
+ "OIDC and SAML are alternatives"
135
+ ],
136
+ "note": "Supported possibility, not a selected composition"
137
+ },
138
+ {
139
+ "id": "urn:cap:inference",
140
+ "from": "urn:node:app",
141
+ "to": "urn:node:inference",
142
+ "type": {
143
+ "vocabulary": "urn:v:demo",
144
+ "term": "uses"
145
+ },
146
+ "state": "unknown",
147
+ "basis": [],
148
+ "conditions": [],
149
+ "note": "Unknown support"
150
+ }
151
+ ],
152
+ "exclusiveGroups": [
153
+ {
154
+ "id": "urn:group:authentication",
155
+ "members": [
156
+ "urn:cap:oidc",
157
+ "urn:cap:saml"
158
+ ]
159
+ }
160
+ ],
161
+ "coverage": [
162
+ "One synthetic product guide"
163
+ ],
164
+ "gaps": [
165
+ "Inference support unknown"
166
+ ]
167
+ }