@n8r/surface 0.0.0-stage → 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 (181) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-DOCS +395 -0
  3. package/LICENSING.md +36 -0
  4. package/README.md +207 -2
  5. package/dist/activity.d.ts +16 -0
  6. package/dist/activity.js +44 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +412 -0
  9. package/dist/codec.d.ts +6 -0
  10. package/dist/codec.js +56 -0
  11. package/dist/codex.d.ts +72 -0
  12. package/dist/codex.js +526 -0
  13. package/dist/contracts.d.ts +235 -0
  14. package/dist/contracts.js +1 -0
  15. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  16. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  17. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  18. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  19. package/dist/cyclonedx-validation.d.ts +1 -0
  20. package/dist/cyclonedx-validation.js +45 -0
  21. package/dist/html.d.ts +5 -0
  22. package/dist/html.js +74 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.js +5 -0
  25. package/dist/notes.d.ts +52 -0
  26. package/dist/notes.js +184 -0
  27. package/dist/portable.d.ts +10 -0
  28. package/dist/portable.js +71 -0
  29. package/dist/recent.d.ts +9 -0
  30. package/dist/recent.js +71 -0
  31. package/dist/revisions.d.ts +2 -0
  32. package/dist/revisions.js +60 -0
  33. package/dist/settings.d.ts +23 -0
  34. package/dist/settings.js +100 -0
  35. package/dist/setup.d.ts +9 -0
  36. package/dist/setup.js +161 -0
  37. package/dist/skill-artifacts-cli.d.ts +1 -0
  38. package/dist/skill-artifacts-cli.js +13 -0
  39. package/dist/skill-artifacts.d.ts +15 -0
  40. package/dist/skill-artifacts.js +184 -0
  41. package/dist/skill-cyclonedx.d.ts +26 -0
  42. package/dist/skill-cyclonedx.js +214 -0
  43. package/dist/skill-presentation.d.ts +10 -0
  44. package/dist/skill-presentation.js +108 -0
  45. package/dist/skill-surface-cli.d.ts +1 -0
  46. package/dist/skill-surface-cli.js +37 -0
  47. package/dist/skill-surface-store.d.ts +7 -0
  48. package/dist/skill-surface-store.js +126 -0
  49. package/dist/source-tools.d.ts +102 -0
  50. package/dist/source-tools.js +201 -0
  51. package/dist/startup.d.ts +7 -0
  52. package/dist/startup.js +74 -0
  53. package/dist/surface-bom.d.ts +73 -0
  54. package/dist/surface-bom.js +139 -0
  55. package/dist/surface-draft.d.ts +22 -0
  56. package/dist/surface-draft.js +112 -0
  57. package/dist/surface-instructions.d.ts +3 -0
  58. package/dist/surface-instructions.js +32 -0
  59. package/dist/surface-overview.d.ts +15 -0
  60. package/dist/surface-overview.js +86 -0
  61. package/dist/surface-store.d.ts +34 -0
  62. package/dist/surface-store.js +213 -0
  63. package/dist/surface-view.d.ts +3 -0
  64. package/dist/surface-view.js +50 -0
  65. package/dist/validate.d.ts +4 -0
  66. package/dist/validate.js +482 -0
  67. package/docs/n8r-surface/README.md +133 -0
  68. package/docs/n8r-surface/cli-bundles.md +72 -0
  69. package/docs/n8r-surface/codex-research-transcript.md +51 -0
  70. package/docs/n8r-surface/codex-research-verification.md +176 -0
  71. package/docs/n8r-surface/command-outcomes.md +711 -0
  72. package/docs/n8r-surface/contracts.md +220 -0
  73. package/docs/n8r-surface/critical-path.md +184 -0
  74. package/docs/n8r-surface/design.md +289 -0
  75. package/docs/n8r-surface/first-use-access.md +143 -0
  76. package/docs/n8r-surface/first-use-overview.md +262 -0
  77. package/docs/n8r-surface/getting-started.md +74 -0
  78. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  79. package/docs/n8r-surface/host-contract.md +176 -0
  80. package/docs/n8r-surface/implementation-decisions.md +96 -0
  81. package/docs/n8r-surface/instance-first-research.md +209 -0
  82. package/docs/n8r-surface/npm-distribution.md +107 -0
  83. package/docs/n8r-surface/npm-release.md +315 -0
  84. package/docs/n8r-surface/product-direction.md +327 -0
  85. package/docs/n8r-surface/recreation-handoff.md +117 -0
  86. package/docs/n8r-surface/researcher-discovery.md +157 -0
  87. package/docs/n8r-surface/researcher-prepared-check.md +117 -0
  88. package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
  89. package/docs/n8r-surface/researcher-repository-check.md +95 -0
  90. package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
  91. package/docs/n8r-surface/researcher-skill-verification.md +725 -0
  92. package/docs/n8r-surface/researcher-skill.md +309 -0
  93. package/docs/n8r-surface/researcher-vault.md +134 -0
  94. package/docs/n8r-surface/save-reopen-transcript.md +211 -0
  95. package/docs/n8r-surface/save-reopen-verification.md +152 -0
  96. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  97. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  98. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  99. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  100. package/docs/n8r-surface/skill-manual.md +129 -0
  101. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  102. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  103. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  104. package/docs/n8r-surface/startup-human-check.md +172 -0
  105. package/docs/n8r-surface/startup-verification.md +161 -0
  106. package/docs/n8r-surface/startup.md +151 -0
  107. package/docs/n8r-surface/surface-description-contract.md +224 -0
  108. package/docs/n8r-surface/surface-descriptions.md +173 -0
  109. package/docs/n8r-surface/surface-relationships.md +231 -0
  110. package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
  111. package/docs/n8r-surface/surface-revisions-verification.md +161 -0
  112. package/docs/n8r-surface/tester-candidate.md +158 -0
  113. package/docs/n8r-surface/vault-setup-verification.md +210 -0
  114. package/docs/n8r-surface/verification.md +117 -0
  115. package/docs/n8r-surface/versioning.md +172 -0
  116. package/docs/n8r-surface/workspace-human-check.md +101 -0
  117. package/docs/n8r-surface/workspace-installation.md +68 -0
  118. package/docs/n8r-surface/workspace-verification.md +350 -0
  119. package/docs/n8r-surface/workspace.md +83 -0
  120. package/examples/researcher/README.md +100 -0
  121. package/examples/researcher/composed.surface.json +430 -0
  122. package/examples/researcher/composed.surface.yaml +283 -0
  123. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  124. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  125. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  126. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  127. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  128. package/examples/researcher/descriptions/README.md +29 -0
  129. package/examples/researcher/descriptions/bound-r1.json +141 -0
  130. package/examples/researcher/descriptions/bound-r2.json +153 -0
  131. package/examples/researcher/descriptions/capability.json +167 -0
  132. package/examples/researcher/descriptions/research-r1.json +153 -0
  133. package/examples/researcher/descriptions/research-r2.json +157 -0
  134. package/examples/researcher/descriptions/sources.md +24 -0
  135. package/examples/researcher/harbor-r1.research.html +193 -0
  136. package/examples/researcher/harbor-r2.research.html +226 -0
  137. package/examples/researcher/lumen-manual-edit.pending.html +271 -0
  138. package/examples/researcher/lumen-r1.research.html +271 -0
  139. package/examples/researcher/lumen-r2.research.html +280 -0
  140. package/examples/researcher/relationships/README.md +34 -0
  141. package/examples/researcher/relationships/bound-r1.json +346 -0
  142. package/examples/researcher/relationships/bound-r2.json +358 -0
  143. package/examples/researcher/relationships/capability.json +325 -0
  144. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  145. package/examples/researcher/relationships/research-r1.json +300 -0
  146. package/examples/researcher/relationships/research-r2.json +304 -0
  147. package/examples/researcher/relationships/sources.md +38 -0
  148. package/examples/researcher/sources/harbor-api.md +16 -0
  149. package/examples/researcher/sources/harbor-auth.md +8 -0
  150. package/examples/researcher/sources/lumen-guide.md +28 -0
  151. package/examples/researcher/sources/lumen-settings.md +9 -0
  152. package/examples/researcher/surface-bom/README.md +17 -0
  153. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  154. package/package.json +45 -4
  155. package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
  156. package/plugins/n8r-surface/LICENSE +202 -0
  157. package/plugins/n8r-surface/LICENSE-DOCS +395 -0
  158. package/plugins/n8r-surface/LICENSING.md +39 -0
  159. package/plugins/n8r-surface/assets/icon.svg +5 -0
  160. package/plugins/n8r-surface/plugin.json +27 -0
  161. package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
  162. package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
  163. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  164. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  165. package/plugins/n8r-surface/skills/research/references/discovery-map.md +178 -0
  166. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  167. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  168. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  169. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  170. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  171. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  172. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  173. package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
  174. package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
  175. package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
  176. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  177. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  178. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  179. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  180. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  181. 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,358 @@
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": "r2",
7
+ "parent": {
8
+ "id": "urn:demo:relationship-bound",
9
+ "revision": "r1",
10
+ "digest": "sha256:21eda5c348102d1ceea09f202c645a3184cba240316344b2a034a681730a636b"
11
+ },
12
+ "createdAt": "2026-11-08T00:00:00Z",
13
+ "author": "Synthetic author",
14
+ "reason": "Changed target; preserved integration identity and metadata"
15
+ },
16
+ "extensions": {},
17
+ "contract": "n8r.surface/0.3",
18
+ "kind": "bound",
19
+ "capability": {
20
+ "id": "urn:demo:relationship-capability",
21
+ "revision": "r1",
22
+ "digest": "sha256:0febad60567f68c75979e1f614200e7163f9a89a550423e53ff48ab22d2befaa"
23
+ },
24
+ "instance": {
25
+ "id": "urn:instance:demo",
26
+ "label": "Synthetic instance"
27
+ },
28
+ "records": [
29
+ {
30
+ "id": "urn:demo:relationship-research",
31
+ "revision": "r2",
32
+ "digest": "sha256:7ec0ead76a865549843d4038a5f712628ad354293c972f6efd2d5662bea7649e"
33
+ }
34
+ ],
35
+ "vocabularies": [
36
+ {
37
+ "id": "urn:v:demo",
38
+ "version": "1"
39
+ }
40
+ ],
41
+ "nodes": [
42
+ {
43
+ "id": "urn:node:app",
44
+ "label": "Assistant",
45
+ "type": {
46
+ "vocabulary": "urn:v:demo",
47
+ "term": "component"
48
+ }
49
+ },
50
+ {
51
+ "id": "urn:node:mongodb",
52
+ "label": "MongoDB",
53
+ "type": {
54
+ "vocabulary": "urn:v:demo",
55
+ "term": "component"
56
+ }
57
+ },
58
+ {
59
+ "id": "urn:node:oidc",
60
+ "label": "OIDC",
61
+ "type": {
62
+ "vocabulary": "urn:v:demo",
63
+ "term": "component"
64
+ }
65
+ },
66
+ {
67
+ "id": "urn:node:saml",
68
+ "label": "SAML",
69
+ "type": {
70
+ "vocabulary": "urn:v:demo",
71
+ "term": "component"
72
+ }
73
+ },
74
+ {
75
+ "id": "urn:node:inference",
76
+ "label": "Inference service",
77
+ "type": {
78
+ "vocabulary": "urn:v:demo",
79
+ "term": "component"
80
+ }
81
+ },
82
+ {
83
+ "id": "urn:target:atlas",
84
+ "label": "MongoDB Atlas",
85
+ "type": {
86
+ "vocabulary": "urn:v:demo",
87
+ "term": "component"
88
+ }
89
+ },
90
+ {
91
+ "id": "urn:target:oidc",
92
+ "label": "OIDC service",
93
+ "type": {
94
+ "vocabulary": "urn:v:demo",
95
+ "term": "component"
96
+ }
97
+ },
98
+ {
99
+ "id": "urn:target:saml",
100
+ "label": "SAML service",
101
+ "type": {
102
+ "vocabulary": "urn:v:demo",
103
+ "term": "component"
104
+ }
105
+ },
106
+ {
107
+ "id": "urn:target:mongodb",
108
+ "label": "Self-hosted MongoDB",
109
+ "type": {
110
+ "vocabulary": "urn:v:demo",
111
+ "term": "component"
112
+ }
113
+ }
114
+ ],
115
+ "coverage": [
116
+ "Sanitized configuration summary"
117
+ ],
118
+ "gaps": [
119
+ "Authentication conflict; inference unknown; runtime unverified"
120
+ ],
121
+ "relationships": [
122
+ {
123
+ "id": "urn:cap:database",
124
+ "from": "urn:node:app",
125
+ "to": "urn:node:mongodb",
126
+ "type": {
127
+ "vocabulary": "urn:v:demo",
128
+ "term": "persists-data"
129
+ },
130
+ "basis": [
131
+ {
132
+ "record": "urn:demo:relationship-research",
133
+ "revision": "r2",
134
+ "items": [
135
+ "urn:f:database"
136
+ ]
137
+ }
138
+ ],
139
+ "conditions": [],
140
+ "note": "Supported possibility, not a selected composition",
141
+ "purpose": {
142
+ "state": "known",
143
+ "claims": [
144
+ {
145
+ "value": "Persist conversation history and user profiles.",
146
+ "basis": [
147
+ {
148
+ "record": "urn:demo:relationship-research",
149
+ "revision": "r2",
150
+ "items": [
151
+ "urn:f:database-purpose"
152
+ ]
153
+ }
154
+ ]
155
+ }
156
+ ],
157
+ "note": "Supported by synthetic source pack."
158
+ },
159
+ "integration": {
160
+ "state": "known",
161
+ "claims": [
162
+ {
163
+ "value": "MongoDB client driver using the MongoDB wire protocol.",
164
+ "basis": [
165
+ {
166
+ "record": "urn:demo:relationship-research",
167
+ "revision": "r2",
168
+ "items": [
169
+ "urn:f:database-integration"
170
+ ]
171
+ }
172
+ ]
173
+ }
174
+ ],
175
+ "note": "Supported by synthetic source pack."
176
+ },
177
+ "configuration": {
178
+ "state": "known",
179
+ "claims": [
180
+ {
181
+ "value": [
182
+ {
183
+ "owner": "urn:node:app",
184
+ "mechanism": "environment-variable",
185
+ "key": "CHAT_STORE_URI",
186
+ "location": "config/assistant.env.example"
187
+ }
188
+ ],
189
+ "basis": [
190
+ {
191
+ "record": "urn:demo:relationship-research",
192
+ "revision": "r2",
193
+ "items": [
194
+ "urn:f:database-configuration"
195
+ ]
196
+ }
197
+ ]
198
+ }
199
+ ],
200
+ "note": "Supported by synthetic source pack."
201
+ },
202
+ "binding": {
203
+ "state": "configured",
204
+ "claims": [
205
+ {
206
+ "target": "urn:target:mongodb",
207
+ "basis": [
208
+ {
209
+ "record": "urn:demo:relationship-research",
210
+ "revision": "r2",
211
+ "items": [
212
+ "urn:f:database-bound"
213
+ ]
214
+ }
215
+ ]
216
+ }
217
+ ],
218
+ "decisions": [],
219
+ "note": "Configuration sufficient; runtime unverified"
220
+ }
221
+ },
222
+ {
223
+ "id": "urn:cap:oidc",
224
+ "from": "urn:node:app",
225
+ "to": "urn:node:oidc",
226
+ "type": {
227
+ "vocabulary": "urn:v:demo",
228
+ "term": "authenticates-via"
229
+ },
230
+ "basis": [
231
+ {
232
+ "record": "urn:demo:relationship-research",
233
+ "revision": "r2",
234
+ "items": [
235
+ "urn:f:oidc"
236
+ ]
237
+ }
238
+ ],
239
+ "conditions": [
240
+ "OIDC and SAML are alternatives"
241
+ ],
242
+ "note": "Supported possibility, not a selected composition",
243
+ "purpose": {
244
+ "state": "known",
245
+ "claims": [
246
+ {
247
+ "value": "Authenticate users through an identity service.",
248
+ "basis": [
249
+ {
250
+ "record": "urn:demo:relationship-research",
251
+ "revision": "r2",
252
+ "items": [
253
+ "urn:f:oidc-purpose"
254
+ ]
255
+ }
256
+ ]
257
+ }
258
+ ],
259
+ "note": "Supported by synthetic source pack."
260
+ },
261
+ "integration": {
262
+ "state": "known",
263
+ "claims": [
264
+ {
265
+ "value": "OpenID Connect",
266
+ "basis": [
267
+ {
268
+ "record": "urn:demo:relationship-research",
269
+ "revision": "r2",
270
+ "items": [
271
+ "urn:f:oidc-integration"
272
+ ]
273
+ }
274
+ ]
275
+ }
276
+ ],
277
+ "note": "Supported by synthetic source pack."
278
+ },
279
+ "configuration": {
280
+ "state": "unknown",
281
+ "claims": [],
282
+ "note": "Not researched; no absence assertion."
283
+ },
284
+ "binding": {
285
+ "state": "conflicting",
286
+ "claims": [
287
+ {
288
+ "target": "urn:target:oidc",
289
+ "basis": [
290
+ {
291
+ "record": "urn:demo:relationship-research",
292
+ "revision": "r2",
293
+ "items": [
294
+ "urn:f:identity"
295
+ ]
296
+ }
297
+ ]
298
+ },
299
+ {
300
+ "target": "urn:target:saml",
301
+ "basis": [
302
+ {
303
+ "record": "urn:demo:relationship-research",
304
+ "revision": "r2",
305
+ "items": [
306
+ "urn:f:identity"
307
+ ]
308
+ }
309
+ ]
310
+ }
311
+ ],
312
+ "decisions": [
313
+ {
314
+ "record": "urn:demo:relationship-research",
315
+ "revision": "r2",
316
+ "items": [
317
+ "urn:decision:oidc"
318
+ ]
319
+ }
320
+ ],
321
+ "note": "Preference retained separately; configuration sources disagree"
322
+ }
323
+ },
324
+ {
325
+ "id": "urn:cap:inference",
326
+ "from": "urn:node:app",
327
+ "to": "urn:node:inference",
328
+ "type": {
329
+ "vocabulary": "urn:v:demo",
330
+ "term": "uses"
331
+ },
332
+ "basis": [],
333
+ "conditions": [],
334
+ "note": "Unknown support",
335
+ "purpose": {
336
+ "state": "unknown",
337
+ "claims": [],
338
+ "note": "Not researched; no absence assertion."
339
+ },
340
+ "integration": {
341
+ "state": "unknown",
342
+ "claims": [],
343
+ "note": "Not researched; no absence assertion."
344
+ },
345
+ "configuration": {
346
+ "state": "unknown",
347
+ "claims": [],
348
+ "note": "Not researched; no absence assertion."
349
+ },
350
+ "binding": {
351
+ "state": "unknown",
352
+ "claims": [],
353
+ "decisions": [],
354
+ "note": "Missing evidence is not unbound"
355
+ }
356
+ }
357
+ ]
358
+ }