@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,178 @@
1
+ # AI Surface discovery guide
2
+
3
+ The goal is an evidence-backed graph of AI-relevant components and connections,
4
+ not a complete application inventory. Follow how information enters, reaches
5
+ models/tools/data, and produces effects. Include supporting storage, identity,
6
+ infrastructure and observability when they explain those paths or boundaries.
7
+ Settings are supporting evidence: inspect them when they change a node, edge,
8
+ route, authority, data flow or a material uncertainty about the graph.
9
+
10
+ This is provisional research guidance within the AI Surface Model, not another
11
+ model, a universal schema or a mandatory list of components.
12
+
13
+ ## Start with the available evidence
14
+
15
+ Establish the task: **discover** a graph, **continue** saved research, or
16
+ **reconcile** an existing Surface with current evidence. Honor a bounded question.
17
+ For broad requests, identify the application boundary and shallow AI-related
18
+ connections before detailed subsystem research. Degree is relative to the start
19
+ node; follow a useful route beyond one hop without imposing a depth ceiling.
20
+
21
+ | Available material | Use and limit |
22
+ | --- | --- |
23
+ | Unknown folder | Inspect structure, entry points and manifests to locate evidence of AI relevance. Unread files and dependency names are clues, not findings. |
24
+ | Code without docs | Follow calls, configuration readers and dependencies relevant to graph edges; runtime state remains separate. |
25
+ | Docs without code | Use navigation, headings and examples to map documented capabilities; implementation and effective setup remain unverified. |
26
+ | Local/remote documentation | Follow relevant links into source or setup material. Record the URL, applicable version, section and inspection time; current vendor docs may describe another release. |
27
+ | Product guide or earlier research | Reuse navigation, evidence and gaps after checking identity, scope and revision. Distinguish inherited from rechecked findings. |
28
+ | Surface definition(s) | Establish each composition's identity and claims. Compare applicable claims; omitted detail is not absence. |
29
+ | Supplied configuration | Establish environment, revision, defaults and overrides when relevant. An example is not a selected setup; a file is not proof it was loaded. |
30
+ | Human input | Record scoped intent, corrections and decisions separately from source or runtime evidence. |
31
+ | Live UI/API observations | Identify the target environment and dated observed settings; reading a setting does not exercise its connection. |
32
+
33
+ Use what is available. Record unavailable, unreadable, excluded or truncated
34
+ material without inventing its contents. A locator does not grant access.
35
+ Enough evidence for the user's question, with visible gaps, is a useful stopping
36
+ point; obtaining every source type is not a completion requirement.
37
+
38
+ ## Reuse product knowledge
39
+
40
+ Look for related material in supplied notes, selected local libraries or a
41
+ connected collection that the host can actually search. Do not scan unrelated
42
+ folders/accounts or presume an n8r-labs connection. A simple index of versioned
43
+ documents and links is sufficient; this skill creates no registry service.
44
+
45
+ Distinguish a product guide (capabilities/navigation), a particular selected
46
+ Surface (composition), and research (evidence/decisions/gaps). Match repository
47
+ identity, forks, releases and scope rather than a display name alone. An older
48
+ guide can direct reads without establishing current behavior. Several Surfaces
49
+ may select different providers; never union their selections into one deployment.
50
+ Retain provenance and contradictions. A library's origin is not automatic
51
+ authority, and a note repeating a source is not independent corroboration.
52
+
53
+ When saving, retain reusable product findings separately from private deployment
54
+ choices. Making private research public requires its own authorization.
55
+
56
+ ## Follow graph clues
57
+
58
+ Documentation indexes and navigation often provide the first paths. Follow
59
+ relevant headings, setup examples and links into code. When links are absent,
60
+ search distinctive configuration keys, symbols and route names. If documentation
61
+ is absent, use entry points and manifests. Read scripts as evidence; do not run
62
+ them merely to discover architecture.
63
+
64
+ | Area | Clue leads to next useful read |
65
+ | --- | --- |
66
+ | Inputs and effects | Web/chat UI, API, CLI, bot, upload, webhook or scheduled task → handler → AI processing and returned result/action. A generic UI alone is not AI evidence. |
67
+ | Models and inference | Inference call or endpoint → configuration source → proxy/router/aggregator → service → model identity. Cover embeddings, speech, vision and other AI operations, not only chat. A provider SDK or compatible API does not identify the service behind a custom URL. |
68
+ | Agents and orchestration | Prompt/workflow/agent definition → context assembly, model selection, delegation, tools and stopping conditions relevant to connections. |
69
+ | Tools and actions | MCP or other integration → host/client/server role, exposed/consumed capability, transport, executor, target and authority. SDK installation alone does not establish a configured connection. |
70
+ | Knowledge and retrieval | Upload/source connector → parsing/chunking → embeddings/index/store → retrieval/reranking → model context. RAG need not be a separate server; identify who provides and consumes each capability. |
71
+ | State and storage | Conversation, memory or document persistence call → storage adapter → configured store. Include a database such as MongoDB for its AI-related data role; avoid unrelated application tables. |
72
+ | Identity and controls | Login/provider gate, permission check or approval → identity/authority boundary governing relevant access and actions. OIDC enablement and issuer can explain an edge; credential values do not belong in the graph. |
73
+ | Observability and evaluation | Tracing/evaluation hook → instrumentation → destination and covered AI operations. A logging dependency alone does not establish a live telemetry connection. |
74
+ | Software identity and delivery | Manifest, lockfile, entry point, container or deployment declaration → relevant component/version/runtime and configuration binding. These support graph identity; do not enumerate every package or setting. |
75
+
76
+ For example, `package.json` suggests JavaScript package/tooling context. Inspect
77
+ scripts, engines, workspaces and relevant imports before inferring a runtime;
78
+ it may describe browser tooling alongside a Python service. Keep application,
79
+ package, source revision, deployed build and model versions distinct.
80
+
81
+ A CRM can have no identified AI capability in the inspected scope, or participate
82
+ as an evidenced tool/data source in a larger AI Surface. Neither a database nor a
83
+ generic API alone establishes AI membership. Report scoped negative findings and
84
+ insufficient evidence distinctly; do not force an AI graph into every repository.
85
+
86
+ ## Reconcile a Surface with current sources
87
+
88
+ Preserve the supplied bytes and establish format/version, vocabulary, component
89
+ identity, scope and intended versus observed meaning. Only claim validation for
90
+ a supported format actually checked. Unrecognized meanings remain unsupported;
91
+ successful JSON parsing does not make arbitrary Surface JSON understood.
92
+
93
+ Use the graph as the comparison spine. For each relevant node/edge or supporting
94
+ setting, report: prior claim and basis; current evidence and applicability;
95
+ agreement, difference, additional discovery, conflict, unknown or unsupported
96
+ meaning; and the next useful check. These are prose comparison outcomes, not new
97
+ contract states. Missing search hits or omitted attributes do not establish that
98
+ a node/edge was removed. Preserve stable identities where evidence supports them.
99
+
100
+ Compare like with like: documented support, implemented support, human intent,
101
+ declared configuration, observed effective configuration, reachability and
102
+ exercised behavior answer different questions. Example: a baseline selects OIDC;
103
+ current code supports OIDC; a staging file declares it disabled. That can establish
104
+ a declared difference for the same staging target, but not its running state or
105
+ that the historical baseline was wrong. Locate applicable override/effective
106
+ evidence if that distinction matters. Do not dump unrelated settings into the diff.
107
+
108
+ Save the comparison as research. A proposed successor must preserve the original,
109
+ its evidence and unresolved claims. For requested checked Capability/Bound JSON
110
+ and research HTML, follow [standalone artifacts](artifacts.md). The skill does
111
+ not modify deployments.
112
+
113
+ ## Inspect live connections with the human
114
+
115
+ For a running composition, use [instance-first research](instance-first.md) to
116
+ connect host access, deployment identity and evidence across multiple sources.
117
+
118
+ Identify the user's target before listing runtime resources. For source-only
119
+ research, continue source analysis without runtime inventory. If inspection is
120
+ requested but the target is unknown, ask for its identity or location while
121
+ continuing the source work; do not expand into unrelated projects or contexts.
122
+
123
+ Filter at collection time, before stdout, stderr, tool results or saved evidence.
124
+ Use a server-side target filter and a narrow field projection when available.
125
+ If only a broad response is available, capture it inside the local process,
126
+ select the target and safe fields there, then emit only that projection. Report
127
+ sanitized failure categories without dumping raw responses or stderr. Do not
128
+ print unrelated names, images, IDs, mount paths or Compose file locations and
129
+ then redact them only in the saved artifact. No match means only that the scoped
130
+ query did not identify the target; it does not establish global absence.
131
+
132
+ Use live inspection when the user's task calls for it and the host provides
133
+ authorized access. Establish the selected application, environment/tenant and
134
+ question from available context; ask only for missing information needed to
135
+ identify the target. Prefer a suitable connected read tool or documented admin
136
+ API; use browser/computer tools where they provide the required access. Respect
137
+ the tools' scopes and restrictions. A blocked route must not be bypassed.
138
+
139
+ Let the user complete password, MFA or private sign-in flows directly using the
140
+ host's supported handoff. Do not ask for credentials in chat, extract sessions,
141
+ reveal masked secrets, export credentials or copy passwords/keys/tokens into
142
+ notes. Prefer narrow nonsecret fields or settings views to raw configuration
143
+ dumps. If incidental secrets appear, do not repeat or retain them. Avoid saving
144
+ screenshots or payloads containing secrets; record a sanitized observation and
145
+ its location, with the resulting evidence limitation.
146
+
147
+ Ask graph questions: is this connection enabled; which service/issuer is the
148
+ target; what role, protocol and authority does it use? A masked configured-secret
149
+ indicator may establish presence, never credential validity. Keep target identity
150
+ as specific as needed in private notes; redact sensitive infrastructure details
151
+ from portable/shared output and keep the stable component ID.
152
+
153
+ Remain read-only: do not toggle/save settings, reveal secrets, rotate keys,
154
+ create clients or invoke a connection test as part of inspection. Those are
155
+ separate user tasks. Do not invent API endpoints or assume any product exposes
156
+ all its configuration through an admin UI.
157
+
158
+ Record the actual page/section or API operation, environment, time, available
159
+ version and nonsecret result. Distinguish an editable stored setting from a
160
+ runtime-effective setting. Re-read the relevant view/field when verifying the
161
+ observation; inaccessible fields remain unknown. Keep source declarations and
162
+ earlier observations even when they disagree. Live settings are dated evidence,
163
+ not proof of a successful login, inference call, database query or complete setup.
164
+
165
+ ## Present and retain the graph
166
+
167
+ Lead with a compact graph or edge table: stable components, directed/purposed
168
+ connections, evidence basis and unresolved endpoints. Put supported alternatives
169
+ in a separate view/list from selected composition. Label a connection as declared
170
+ only when an applicable declaration supports it; keep possibilities, inferences
171
+ and unresolved clues explicit. Do not turn a UI settings read into an exercised edge. Include shared
172
+ components and useful deeper routes without inventing separate services for every
173
+ route, configuration key or package. Keep graph-relevant settings beside the edge
174
+ they explain, followed by evidence, coverage and the next consequential question.
175
+
176
+ Use the [working-note convention](working-notes.md) for durable progress. Sources
177
+ and observation summaries may be incomplete; a successful save does not establish
178
+ runtime behavior, universal compatibility or security certification.
@@ -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
+ }