@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,346 @@
1
+ {
2
+ "id": "urn:demo:relationship-bound",
3
+ "title": "Synthetic Bound Surface with integration details",
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.3",
14
+ "kind": "bound",
15
+ "capability": {
16
+ "id": "urn:demo:relationship-capability",
17
+ "revision": "r1",
18
+ "digest": "sha256:0febad60567f68c75979e1f614200e7163f9a89a550423e53ff48ab22d2befaa"
19
+ },
20
+ "instance": {
21
+ "id": "urn:instance:demo",
22
+ "label": "Synthetic instance"
23
+ },
24
+ "records": [
25
+ {
26
+ "id": "urn:demo:relationship-research",
27
+ "revision": "r1",
28
+ "digest": "sha256:615bc6f8f443b986f78a46414faf97822206bcfcc9781e8d7c03d2dcb83940a0"
29
+ }
30
+ ],
31
+ "vocabularies": [
32
+ {
33
+ "id": "urn:v:demo",
34
+ "version": "1"
35
+ }
36
+ ],
37
+ "nodes": [
38
+ {
39
+ "id": "urn:node:app",
40
+ "label": "Assistant",
41
+ "type": {
42
+ "vocabulary": "urn:v:demo",
43
+ "term": "component"
44
+ }
45
+ },
46
+ {
47
+ "id": "urn:node:mongodb",
48
+ "label": "MongoDB",
49
+ "type": {
50
+ "vocabulary": "urn:v:demo",
51
+ "term": "component"
52
+ }
53
+ },
54
+ {
55
+ "id": "urn:node:oidc",
56
+ "label": "OIDC",
57
+ "type": {
58
+ "vocabulary": "urn:v:demo",
59
+ "term": "component"
60
+ }
61
+ },
62
+ {
63
+ "id": "urn:node:saml",
64
+ "label": "SAML",
65
+ "type": {
66
+ "vocabulary": "urn:v:demo",
67
+ "term": "component"
68
+ }
69
+ },
70
+ {
71
+ "id": "urn:node:inference",
72
+ "label": "Inference service",
73
+ "type": {
74
+ "vocabulary": "urn:v:demo",
75
+ "term": "component"
76
+ }
77
+ },
78
+ {
79
+ "id": "urn:target:atlas",
80
+ "label": "MongoDB Atlas",
81
+ "type": {
82
+ "vocabulary": "urn:v:demo",
83
+ "term": "component"
84
+ }
85
+ },
86
+ {
87
+ "id": "urn:target:oidc",
88
+ "label": "OIDC service",
89
+ "type": {
90
+ "vocabulary": "urn:v:demo",
91
+ "term": "component"
92
+ }
93
+ },
94
+ {
95
+ "id": "urn:target:saml",
96
+ "label": "SAML service",
97
+ "type": {
98
+ "vocabulary": "urn:v:demo",
99
+ "term": "component"
100
+ }
101
+ }
102
+ ],
103
+ "coverage": [
104
+ "Sanitized configuration summary"
105
+ ],
106
+ "gaps": [
107
+ "Authentication conflict; inference unknown; runtime unverified"
108
+ ],
109
+ "relationships": [
110
+ {
111
+ "id": "urn:cap:database",
112
+ "from": "urn:node:app",
113
+ "to": "urn:node:mongodb",
114
+ "type": {
115
+ "vocabulary": "urn:v:demo",
116
+ "term": "persists-data"
117
+ },
118
+ "basis": [
119
+ {
120
+ "record": "urn:demo:relationship-research",
121
+ "revision": "r1",
122
+ "items": [
123
+ "urn:f:database"
124
+ ]
125
+ }
126
+ ],
127
+ "conditions": [],
128
+ "note": "Supported possibility, not a selected composition",
129
+ "purpose": {
130
+ "state": "known",
131
+ "claims": [
132
+ {
133
+ "value": "Persist conversation history and user profiles.",
134
+ "basis": [
135
+ {
136
+ "record": "urn:demo:relationship-research",
137
+ "revision": "r1",
138
+ "items": [
139
+ "urn:f:database-purpose"
140
+ ]
141
+ }
142
+ ]
143
+ }
144
+ ],
145
+ "note": "Supported by synthetic source pack."
146
+ },
147
+ "integration": {
148
+ "state": "known",
149
+ "claims": [
150
+ {
151
+ "value": "MongoDB client driver using the MongoDB wire protocol.",
152
+ "basis": [
153
+ {
154
+ "record": "urn:demo:relationship-research",
155
+ "revision": "r1",
156
+ "items": [
157
+ "urn:f:database-integration"
158
+ ]
159
+ }
160
+ ]
161
+ }
162
+ ],
163
+ "note": "Supported by synthetic source pack."
164
+ },
165
+ "configuration": {
166
+ "state": "known",
167
+ "claims": [
168
+ {
169
+ "value": [
170
+ {
171
+ "owner": "urn:node:app",
172
+ "mechanism": "environment-variable",
173
+ "key": "CHAT_STORE_URI",
174
+ "location": "config/assistant.env.example"
175
+ }
176
+ ],
177
+ "basis": [
178
+ {
179
+ "record": "urn:demo:relationship-research",
180
+ "revision": "r1",
181
+ "items": [
182
+ "urn:f:database-configuration"
183
+ ]
184
+ }
185
+ ]
186
+ }
187
+ ],
188
+ "note": "Supported by synthetic source pack."
189
+ },
190
+ "binding": {
191
+ "state": "configured",
192
+ "claims": [
193
+ {
194
+ "target": "urn:target:atlas",
195
+ "basis": [
196
+ {
197
+ "record": "urn:demo:relationship-research",
198
+ "revision": "r1",
199
+ "items": [
200
+ "urn:f:database-bound"
201
+ ]
202
+ }
203
+ ]
204
+ }
205
+ ],
206
+ "decisions": [],
207
+ "note": "Configuration sufficient; runtime unverified"
208
+ }
209
+ },
210
+ {
211
+ "id": "urn:cap:oidc",
212
+ "from": "urn:node:app",
213
+ "to": "urn:node:oidc",
214
+ "type": {
215
+ "vocabulary": "urn:v:demo",
216
+ "term": "authenticates-via"
217
+ },
218
+ "basis": [
219
+ {
220
+ "record": "urn:demo:relationship-research",
221
+ "revision": "r1",
222
+ "items": [
223
+ "urn:f:oidc"
224
+ ]
225
+ }
226
+ ],
227
+ "conditions": [
228
+ "OIDC and SAML are alternatives"
229
+ ],
230
+ "note": "Supported possibility, not a selected composition",
231
+ "purpose": {
232
+ "state": "known",
233
+ "claims": [
234
+ {
235
+ "value": "Authenticate users through an identity service.",
236
+ "basis": [
237
+ {
238
+ "record": "urn:demo:relationship-research",
239
+ "revision": "r1",
240
+ "items": [
241
+ "urn:f:oidc-purpose"
242
+ ]
243
+ }
244
+ ]
245
+ }
246
+ ],
247
+ "note": "Supported by synthetic source pack."
248
+ },
249
+ "integration": {
250
+ "state": "known",
251
+ "claims": [
252
+ {
253
+ "value": "OpenID Connect",
254
+ "basis": [
255
+ {
256
+ "record": "urn:demo:relationship-research",
257
+ "revision": "r1",
258
+ "items": [
259
+ "urn:f:oidc-integration"
260
+ ]
261
+ }
262
+ ]
263
+ }
264
+ ],
265
+ "note": "Supported by synthetic source pack."
266
+ },
267
+ "configuration": {
268
+ "state": "unknown",
269
+ "claims": [],
270
+ "note": "Not researched; no absence assertion."
271
+ },
272
+ "binding": {
273
+ "state": "conflicting",
274
+ "claims": [
275
+ {
276
+ "target": "urn:target:oidc",
277
+ "basis": [
278
+ {
279
+ "record": "urn:demo:relationship-research",
280
+ "revision": "r1",
281
+ "items": [
282
+ "urn:f:identity"
283
+ ]
284
+ }
285
+ ]
286
+ },
287
+ {
288
+ "target": "urn:target:saml",
289
+ "basis": [
290
+ {
291
+ "record": "urn:demo:relationship-research",
292
+ "revision": "r1",
293
+ "items": [
294
+ "urn:f:identity"
295
+ ]
296
+ }
297
+ ]
298
+ }
299
+ ],
300
+ "decisions": [
301
+ {
302
+ "record": "urn:demo:relationship-research",
303
+ "revision": "r1",
304
+ "items": [
305
+ "urn:decision:oidc"
306
+ ]
307
+ }
308
+ ],
309
+ "note": "Preference retained separately; configuration sources disagree"
310
+ }
311
+ },
312
+ {
313
+ "id": "urn:cap:inference",
314
+ "from": "urn:node:app",
315
+ "to": "urn:node:inference",
316
+ "type": {
317
+ "vocabulary": "urn:v:demo",
318
+ "term": "uses"
319
+ },
320
+ "basis": [],
321
+ "conditions": [],
322
+ "note": "Unknown support",
323
+ "purpose": {
324
+ "state": "unknown",
325
+ "claims": [],
326
+ "note": "Not researched; no absence assertion."
327
+ },
328
+ "integration": {
329
+ "state": "unknown",
330
+ "claims": [],
331
+ "note": "Not researched; no absence assertion."
332
+ },
333
+ "configuration": {
334
+ "state": "unknown",
335
+ "claims": [],
336
+ "note": "Not researched; no absence assertion."
337
+ },
338
+ "binding": {
339
+ "state": "unknown",
340
+ "claims": [],
341
+ "decisions": [],
342
+ "note": "Missing evidence is not unbound"
343
+ }
344
+ }
345
+ ]
346
+ }
@@ -0,0 +1,325 @@
1
+ {
2
+ "id": "urn:demo:relationship-capability",
3
+ "title": "Synthetic Capability Surface with integration details",
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.3",
14
+ "kind": "capability",
15
+ "records": [
16
+ {
17
+ "id": "urn:demo:relationship-research",
18
+ "revision": "r1",
19
+ "digest": "sha256:615bc6f8f443b986f78a46414faf97822206bcfcc9781e8d7c03d2dcb83940a0"
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
+ "exclusiveGroups": [
71
+ {
72
+ "id": "urn:group:authentication",
73
+ "members": [
74
+ "urn:cap:oidc",
75
+ "urn:cap:saml"
76
+ ]
77
+ }
78
+ ],
79
+ "coverage": [
80
+ "One synthetic product guide"
81
+ ],
82
+ "gaps": [
83
+ "Inference support unknown"
84
+ ],
85
+ "relationships": [
86
+ {
87
+ "id": "urn:cap:database",
88
+ "from": "urn:node:app",
89
+ "to": "urn:node:mongodb",
90
+ "type": {
91
+ "vocabulary": "urn:v:demo",
92
+ "term": "persists-data"
93
+ },
94
+ "state": "possible",
95
+ "basis": [
96
+ {
97
+ "record": "urn:demo:relationship-research",
98
+ "revision": "r1",
99
+ "items": [
100
+ "urn:f:database"
101
+ ]
102
+ }
103
+ ],
104
+ "conditions": [],
105
+ "note": "Supported possibility, not a selected composition",
106
+ "purpose": {
107
+ "state": "known",
108
+ "claims": [
109
+ {
110
+ "value": "Persist conversation history and user profiles.",
111
+ "basis": [
112
+ {
113
+ "record": "urn:demo:relationship-research",
114
+ "revision": "r1",
115
+ "items": [
116
+ "urn:f:database-purpose"
117
+ ]
118
+ }
119
+ ]
120
+ }
121
+ ],
122
+ "note": "Supported by synthetic source pack."
123
+ },
124
+ "integration": {
125
+ "state": "known",
126
+ "claims": [
127
+ {
128
+ "value": "MongoDB client driver using the MongoDB wire protocol.",
129
+ "basis": [
130
+ {
131
+ "record": "urn:demo:relationship-research",
132
+ "revision": "r1",
133
+ "items": [
134
+ "urn:f:database-integration"
135
+ ]
136
+ }
137
+ ]
138
+ }
139
+ ],
140
+ "note": "Supported by synthetic source pack."
141
+ },
142
+ "configuration": {
143
+ "state": "known",
144
+ "claims": [
145
+ {
146
+ "value": [
147
+ {
148
+ "owner": "urn:node:app",
149
+ "mechanism": "environment-variable",
150
+ "key": "CHAT_STORE_URI",
151
+ "location": "config/assistant.env.example"
152
+ }
153
+ ],
154
+ "basis": [
155
+ {
156
+ "record": "urn:demo:relationship-research",
157
+ "revision": "r1",
158
+ "items": [
159
+ "urn:f:database-configuration"
160
+ ]
161
+ }
162
+ ]
163
+ }
164
+ ],
165
+ "note": "Supported by synthetic source pack."
166
+ }
167
+ },
168
+ {
169
+ "id": "urn:cap:oidc",
170
+ "from": "urn:node:app",
171
+ "to": "urn:node:oidc",
172
+ "type": {
173
+ "vocabulary": "urn:v:demo",
174
+ "term": "authenticates-via"
175
+ },
176
+ "state": "possible",
177
+ "basis": [
178
+ {
179
+ "record": "urn:demo:relationship-research",
180
+ "revision": "r1",
181
+ "items": [
182
+ "urn:f:oidc"
183
+ ]
184
+ }
185
+ ],
186
+ "conditions": [
187
+ "OIDC and SAML are alternatives"
188
+ ],
189
+ "note": "Supported possibility, not a selected composition",
190
+ "purpose": {
191
+ "state": "known",
192
+ "claims": [
193
+ {
194
+ "value": "Authenticate users through an identity service.",
195
+ "basis": [
196
+ {
197
+ "record": "urn:demo:relationship-research",
198
+ "revision": "r1",
199
+ "items": [
200
+ "urn:f:oidc-purpose"
201
+ ]
202
+ }
203
+ ]
204
+ }
205
+ ],
206
+ "note": "Supported by synthetic source pack."
207
+ },
208
+ "integration": {
209
+ "state": "known",
210
+ "claims": [
211
+ {
212
+ "value": "OpenID Connect",
213
+ "basis": [
214
+ {
215
+ "record": "urn:demo:relationship-research",
216
+ "revision": "r1",
217
+ "items": [
218
+ "urn:f:oidc-integration"
219
+ ]
220
+ }
221
+ ]
222
+ }
223
+ ],
224
+ "note": "Supported by synthetic source pack."
225
+ },
226
+ "configuration": {
227
+ "state": "unknown",
228
+ "claims": [],
229
+ "note": "Not researched; no absence assertion."
230
+ }
231
+ },
232
+ {
233
+ "id": "urn:cap:saml",
234
+ "from": "urn:node:app",
235
+ "to": "urn:node:saml",
236
+ "type": {
237
+ "vocabulary": "urn:v:demo",
238
+ "term": "authenticates-via"
239
+ },
240
+ "state": "possible",
241
+ "basis": [
242
+ {
243
+ "record": "urn:demo:relationship-research",
244
+ "revision": "r1",
245
+ "items": [
246
+ "urn:f:saml"
247
+ ]
248
+ }
249
+ ],
250
+ "conditions": [
251
+ "OIDC and SAML are alternatives"
252
+ ],
253
+ "note": "Supported possibility, not a selected composition",
254
+ "purpose": {
255
+ "state": "known",
256
+ "claims": [
257
+ {
258
+ "value": "Authenticate users through an identity service.",
259
+ "basis": [
260
+ {
261
+ "record": "urn:demo:relationship-research",
262
+ "revision": "r1",
263
+ "items": [
264
+ "urn:f:saml-purpose"
265
+ ]
266
+ }
267
+ ]
268
+ }
269
+ ],
270
+ "note": "Supported by synthetic source pack."
271
+ },
272
+ "integration": {
273
+ "state": "known",
274
+ "claims": [
275
+ {
276
+ "value": "SAML 2.0",
277
+ "basis": [
278
+ {
279
+ "record": "urn:demo:relationship-research",
280
+ "revision": "r1",
281
+ "items": [
282
+ "urn:f:saml-integration"
283
+ ]
284
+ }
285
+ ]
286
+ }
287
+ ],
288
+ "note": "Supported by synthetic source pack."
289
+ },
290
+ "configuration": {
291
+ "state": "unknown",
292
+ "claims": [],
293
+ "note": "Not researched; no absence assertion."
294
+ }
295
+ },
296
+ {
297
+ "id": "urn:cap:inference",
298
+ "from": "urn:node:app",
299
+ "to": "urn:node:inference",
300
+ "type": {
301
+ "vocabulary": "urn:v:demo",
302
+ "term": "uses"
303
+ },
304
+ "state": "unknown",
305
+ "basis": [],
306
+ "conditions": [],
307
+ "note": "Unknown support",
308
+ "purpose": {
309
+ "state": "unknown",
310
+ "claims": [],
311
+ "note": "Not researched; no absence assertion."
312
+ },
313
+ "integration": {
314
+ "state": "unknown",
315
+ "claims": [],
316
+ "note": "Not researched; no absence assertion."
317
+ },
318
+ "configuration": {
319
+ "state": "unknown",
320
+ "claims": [],
321
+ "note": "Not researched; no absence assertion."
322
+ }
323
+ }
324
+ ]
325
+ }