@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.
- package/README.md +30 -4
- package/dist/cli.js +174 -22
- package/dist/codec.d.ts +2 -0
- package/dist/codec.js +22 -7
- package/dist/codex.d.ts +1 -1
- package/dist/codex.js +26 -10
- package/dist/contracts.d.ts +108 -2
- package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
- package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
- package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
- package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
- package/dist/cyclonedx-validation.d.ts +1 -0
- package/dist/cyclonedx-validation.js +45 -0
- package/dist/html.js +27 -3
- package/dist/recent.d.ts +9 -0
- package/dist/recent.js +71 -0
- package/dist/revisions.js +42 -0
- package/dist/skill-artifacts-cli.d.ts +1 -0
- package/dist/skill-artifacts-cli.js +13 -0
- package/dist/skill-artifacts.d.ts +15 -0
- package/dist/skill-artifacts.js +184 -0
- package/dist/skill-cyclonedx.d.ts +26 -0
- package/dist/skill-cyclonedx.js +214 -0
- package/dist/skill-presentation.d.ts +10 -0
- package/dist/skill-presentation.js +108 -0
- package/dist/skill-surface-cli.d.ts +1 -0
- package/dist/skill-surface-cli.js +37 -0
- package/dist/skill-surface-store.d.ts +7 -0
- package/dist/skill-surface-store.js +126 -0
- package/dist/surface-bom.d.ts +73 -0
- package/dist/surface-bom.js +139 -0
- package/dist/surface-draft.d.ts +6 -3
- package/dist/surface-draft.js +20 -3
- package/dist/surface-instructions.d.ts +2 -1
- package/dist/surface-instructions.js +10 -1
- package/dist/surface-overview.d.ts +15 -0
- package/dist/surface-overview.js +86 -0
- package/dist/surface-store.d.ts +5 -7
- package/dist/surface-store.js +34 -2
- package/dist/surface-view.d.ts +3 -0
- package/dist/surface-view.js +50 -0
- package/dist/validate.js +298 -0
- package/docs/n8r-surface/cli-bundles.md +72 -0
- package/docs/n8r-surface/command-outcomes.md +151 -4
- package/docs/n8r-surface/contracts.md +10 -0
- package/docs/n8r-surface/critical-path.md +21 -0
- package/docs/n8r-surface/first-use-access.md +143 -0
- package/docs/n8r-surface/first-use-overview.md +262 -0
- package/docs/n8r-surface/getting-started.md +55 -88
- package/docs/n8r-surface/guided-journey-verification.md +137 -0
- package/docs/n8r-surface/implementation-decisions.md +14 -14
- package/docs/n8r-surface/instance-first-research.md +209 -0
- package/docs/n8r-surface/npm-distribution.md +39 -69
- package/docs/n8r-surface/npm-release.md +141 -14
- package/docs/n8r-surface/product-direction.md +327 -0
- package/docs/n8r-surface/researcher-skill.md +105 -51
- package/docs/n8r-surface/security-assurance-strategy.md +267 -0
- package/docs/n8r-surface/skill-bom-verification.md +142 -0
- package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
- package/docs/n8r-surface/skill-cyclonedx.md +85 -0
- package/docs/n8r-surface/skill-manual.md +129 -0
- package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
- package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
- package/docs/n8r-surface/skill-workspace-automation.md +359 -0
- package/docs/n8r-surface/surface-description-contract.md +224 -0
- package/docs/n8r-surface/surface-descriptions.md +173 -0
- package/docs/n8r-surface/surface-relationships.md +231 -0
- package/docs/n8r-surface/tester-candidate.md +158 -0
- package/docs/n8r-surface/versioning.md +55 -66
- package/docs/n8r-surface/workspace-human-check.md +101 -0
- package/docs/n8r-surface/workspace-installation.md +68 -0
- package/docs/n8r-surface/workspace-verification.md +350 -0
- package/docs/n8r-surface/workspace.md +83 -0
- package/examples/researcher/README.md +8 -0
- package/examples/researcher/cyclonedx/configured/README.md +7 -0
- package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
- package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
- package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
- package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
- package/examples/researcher/descriptions/README.md +29 -0
- package/examples/researcher/descriptions/bound-r1.json +141 -0
- package/examples/researcher/descriptions/bound-r2.json +153 -0
- package/examples/researcher/descriptions/capability.json +167 -0
- package/examples/researcher/descriptions/research-r1.json +153 -0
- package/examples/researcher/descriptions/research-r2.json +157 -0
- package/examples/researcher/descriptions/sources.md +24 -0
- package/examples/researcher/relationships/README.md +34 -0
- package/examples/researcher/relationships/bound-r1.json +346 -0
- package/examples/researcher/relationships/bound-r2.json +358 -0
- package/examples/researcher/relationships/capability.json +325 -0
- package/examples/researcher/relationships/config/assistant.env.example +4 -0
- package/examples/researcher/relationships/research-r1.json +300 -0
- package/examples/researcher/relationships/research-r2.json +304 -0
- package/examples/researcher/relationships/sources.md +38 -0
- package/examples/researcher/surface-bom/README.md +17 -0
- package/examples/researcher/surface-bom/initial.cdx.json +188 -0
- package/package.json +1 -1
- package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
- package/plugins/n8r-surface/LICENSING.md +3 -0
- package/plugins/n8r-surface/plugin.json +2 -2
- package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
- package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
- package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
- package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
- package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
- package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
- package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
- package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
- package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
- package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
- package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
- package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
- package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
- package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
- package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
- package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
- package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
- package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "urn:demo:relationship-research",
|
|
3
|
+
"title": "Synthetic relationship evidence",
|
|
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 shared-relationship fixture"
|
|
11
|
+
},
|
|
12
|
+
"extensions": {},
|
|
13
|
+
"contract": "n8r.research/0.1",
|
|
14
|
+
"sources": [
|
|
15
|
+
{
|
|
16
|
+
"id": "urn:source:summary",
|
|
17
|
+
"location": "sources.md",
|
|
18
|
+
"version": "synthetic-relationships-1",
|
|
19
|
+
"digest": "sha256:cb9498a53d65fb16c16b7ac297b84b2d14a825297012bec9ac07df083e3c5647",
|
|
20
|
+
"inspectedAt": "2026-11-08T00:00:00Z",
|
|
21
|
+
"coverage": [
|
|
22
|
+
{
|
|
23
|
+
"path": "sources.md",
|
|
24
|
+
"status": "inspected",
|
|
25
|
+
"note": "Sanitized synthetic source pack, not raw configuration."
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "urn:source:config",
|
|
31
|
+
"location": "config/assistant.env.example",
|
|
32
|
+
"version": "synthetic-1",
|
|
33
|
+
"digest": "sha256:d575d918e3e60fa1bf4490f7d6ceddafdcf0dba56b41b0e566a3adc8d88fe256",
|
|
34
|
+
"inspectedAt": "2026-11-08T00:00:00Z",
|
|
35
|
+
"coverage": [
|
|
36
|
+
{
|
|
37
|
+
"path": "config/assistant.env.example",
|
|
38
|
+
"status": "inspected",
|
|
39
|
+
"note": "Synthetic setting-name documentation only."
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"findings": [
|
|
45
|
+
{
|
|
46
|
+
"id": "urn:f:database",
|
|
47
|
+
"subject": "urn:node:app",
|
|
48
|
+
"property": "supports",
|
|
49
|
+
"state": "known",
|
|
50
|
+
"note": "Synthetic source assertion; not runtime evidence.",
|
|
51
|
+
"claims": [
|
|
52
|
+
{
|
|
53
|
+
"value": "urn:node:mongodb",
|
|
54
|
+
"evidence": [
|
|
55
|
+
{
|
|
56
|
+
"source": "urn:source:summary",
|
|
57
|
+
"locator": "Product guide"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "urn:f:oidc",
|
|
65
|
+
"subject": "urn:node:app",
|
|
66
|
+
"property": "supports",
|
|
67
|
+
"state": "known",
|
|
68
|
+
"note": "Synthetic source assertion; not runtime evidence.",
|
|
69
|
+
"claims": [
|
|
70
|
+
{
|
|
71
|
+
"value": "urn:node:oidc",
|
|
72
|
+
"evidence": [
|
|
73
|
+
{
|
|
74
|
+
"source": "urn:source:summary",
|
|
75
|
+
"locator": "Product guide"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "urn:f:saml",
|
|
83
|
+
"subject": "urn:node:app",
|
|
84
|
+
"property": "supports",
|
|
85
|
+
"state": "known",
|
|
86
|
+
"note": "Synthetic source assertion; not runtime evidence.",
|
|
87
|
+
"claims": [
|
|
88
|
+
{
|
|
89
|
+
"value": "urn:node:saml",
|
|
90
|
+
"evidence": [
|
|
91
|
+
{
|
|
92
|
+
"source": "urn:source:summary",
|
|
93
|
+
"locator": "Product guide"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "urn:f:database-bound",
|
|
101
|
+
"subject": "urn:instance:demo",
|
|
102
|
+
"property": "urn:cap:database",
|
|
103
|
+
"state": "known",
|
|
104
|
+
"note": "Synthetic source assertion; not runtime evidence.",
|
|
105
|
+
"claims": [
|
|
106
|
+
{
|
|
107
|
+
"value": "urn:target:atlas",
|
|
108
|
+
"evidence": [
|
|
109
|
+
{
|
|
110
|
+
"source": "urn:source:summary",
|
|
111
|
+
"locator": "Sanitized instance configuration summary, revision 1"
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "urn:f:identity",
|
|
119
|
+
"subject": "urn:instance:demo",
|
|
120
|
+
"property": "urn:cap:oidc",
|
|
121
|
+
"state": "conflicting",
|
|
122
|
+
"note": "Synthetic source assertion; not runtime evidence.",
|
|
123
|
+
"claims": [
|
|
124
|
+
{
|
|
125
|
+
"value": "urn:target:oidc",
|
|
126
|
+
"evidence": [
|
|
127
|
+
{
|
|
128
|
+
"source": "urn:source:summary",
|
|
129
|
+
"locator": "Sanitized instance configuration summary, revision 1"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"value": "urn:target:saml",
|
|
135
|
+
"evidence": [
|
|
136
|
+
{
|
|
137
|
+
"source": "urn:source:summary",
|
|
138
|
+
"locator": "Sanitized instance configuration summary, revision 1"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "urn:f:database-purpose",
|
|
146
|
+
"subject": "urn:cap:database",
|
|
147
|
+
"property": "purpose",
|
|
148
|
+
"state": "known",
|
|
149
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
150
|
+
"claims": [
|
|
151
|
+
{
|
|
152
|
+
"value": "Persist conversation history and user profiles.",
|
|
153
|
+
"evidence": [
|
|
154
|
+
{
|
|
155
|
+
"source": "urn:source:summary",
|
|
156
|
+
"locator": "Database integration"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "urn:f:database-integration",
|
|
164
|
+
"subject": "urn:cap:database",
|
|
165
|
+
"property": "integration",
|
|
166
|
+
"state": "known",
|
|
167
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
168
|
+
"claims": [
|
|
169
|
+
{
|
|
170
|
+
"value": "MongoDB client driver using the MongoDB wire protocol.",
|
|
171
|
+
"evidence": [
|
|
172
|
+
{
|
|
173
|
+
"source": "urn:source:summary",
|
|
174
|
+
"locator": "Database integration"
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "urn:f:database-configuration",
|
|
182
|
+
"subject": "urn:cap:database",
|
|
183
|
+
"property": "configuration",
|
|
184
|
+
"state": "known",
|
|
185
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
186
|
+
"claims": [
|
|
187
|
+
{
|
|
188
|
+
"value": [
|
|
189
|
+
{
|
|
190
|
+
"owner": "urn:node:app",
|
|
191
|
+
"mechanism": "environment-variable",
|
|
192
|
+
"key": "CHAT_STORE_URI",
|
|
193
|
+
"location": "config/assistant.env.example"
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
"evidence": [
|
|
197
|
+
{
|
|
198
|
+
"source": "urn:source:config",
|
|
199
|
+
"locator": "CHAT_STORE_URI comment"
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "urn:f:oidc-purpose",
|
|
207
|
+
"subject": "urn:cap:oidc",
|
|
208
|
+
"property": "purpose",
|
|
209
|
+
"state": "known",
|
|
210
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
211
|
+
"claims": [
|
|
212
|
+
{
|
|
213
|
+
"value": "Authenticate users through an identity service.",
|
|
214
|
+
"evidence": [
|
|
215
|
+
{
|
|
216
|
+
"source": "urn:source:summary",
|
|
217
|
+
"locator": "Authentication integration"
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"id": "urn:f:oidc-integration",
|
|
225
|
+
"subject": "urn:cap:oidc",
|
|
226
|
+
"property": "integration",
|
|
227
|
+
"state": "known",
|
|
228
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
229
|
+
"claims": [
|
|
230
|
+
{
|
|
231
|
+
"value": "OpenID Connect",
|
|
232
|
+
"evidence": [
|
|
233
|
+
{
|
|
234
|
+
"source": "urn:source:summary",
|
|
235
|
+
"locator": "Authentication integration"
|
|
236
|
+
}
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"id": "urn:f:saml-purpose",
|
|
243
|
+
"subject": "urn:cap:saml",
|
|
244
|
+
"property": "purpose",
|
|
245
|
+
"state": "known",
|
|
246
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
247
|
+
"claims": [
|
|
248
|
+
{
|
|
249
|
+
"value": "Authenticate users through an identity service.",
|
|
250
|
+
"evidence": [
|
|
251
|
+
{
|
|
252
|
+
"source": "urn:source:summary",
|
|
253
|
+
"locator": "Authentication integration"
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"id": "urn:f:saml-integration",
|
|
261
|
+
"subject": "urn:cap:saml",
|
|
262
|
+
"property": "integration",
|
|
263
|
+
"state": "known",
|
|
264
|
+
"note": "Synthetic source statement; no actual settings.",
|
|
265
|
+
"claims": [
|
|
266
|
+
{
|
|
267
|
+
"value": "SAML 2.0",
|
|
268
|
+
"evidence": [
|
|
269
|
+
{
|
|
270
|
+
"source": "urn:source:summary",
|
|
271
|
+
"locator": "Authentication integration"
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"alternatives": [
|
|
279
|
+
{
|
|
280
|
+
"id": "urn:option:oidc",
|
|
281
|
+
"title": "Prefer OIDC",
|
|
282
|
+
"findings": [
|
|
283
|
+
"urn:f:identity"
|
|
284
|
+
],
|
|
285
|
+
"requirements": []
|
|
286
|
+
}
|
|
287
|
+
],
|
|
288
|
+
"decisions": [
|
|
289
|
+
{
|
|
290
|
+
"id": "urn:decision:oidc",
|
|
291
|
+
"alternative": "urn:option:oidc",
|
|
292
|
+
"choice": "selected",
|
|
293
|
+
"reason": "Synthetic human preference; conflict unresolved.",
|
|
294
|
+
"by": "Synthetic reviewer",
|
|
295
|
+
"at": "2026-11-08T00:00:00Z"
|
|
296
|
+
}
|
|
297
|
+
],
|
|
298
|
+
"questions": [],
|
|
299
|
+
"notes": []
|
|
300
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bomFormat": "CycloneDX",
|
|
3
|
+
"specVersion": "1.7",
|
|
4
|
+
"serialNumber": "urn:uuid:94141625-a8d3-4cec-984a-c46be305058d",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"metadata": {
|
|
7
|
+
"timestamp": "2026-11-13T12:00:00Z"
|
|
8
|
+
},
|
|
9
|
+
"components": [
|
|
10
|
+
{
|
|
11
|
+
"bom-ref": "app",
|
|
12
|
+
"type": "application",
|
|
13
|
+
"name": "Synthetic Assistant"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"bom-ref": "model",
|
|
17
|
+
"type": "machine-learning-model",
|
|
18
|
+
"name": "Synthetic Model"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"services": [
|
|
22
|
+
{
|
|
23
|
+
"bom-ref": "db-a",
|
|
24
|
+
"name": "Database A"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"bom-ref": "db-b",
|
|
28
|
+
"name": "Database B"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"bom-ref": "db-c",
|
|
32
|
+
"name": "Database C"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"bom-ref": "db-d",
|
|
36
|
+
"name": "Database D"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"dependencies": [
|
|
40
|
+
{
|
|
41
|
+
"ref": "app",
|
|
42
|
+
"dependsOn": [
|
|
43
|
+
"db-b"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"compositions": [
|
|
48
|
+
{
|
|
49
|
+
"aggregate": "unknown"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"annotations": [
|
|
53
|
+
{
|
|
54
|
+
"bom-ref": "evidence-support",
|
|
55
|
+
"subjects": [
|
|
56
|
+
"app",
|
|
57
|
+
"db-a",
|
|
58
|
+
"db-b",
|
|
59
|
+
"db-c",
|
|
60
|
+
"db-d"
|
|
61
|
+
],
|
|
62
|
+
"annotator": {
|
|
63
|
+
"individual": {
|
|
64
|
+
"name": "Researcher"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"timestamp": "2026-11-13T12:00:00Z",
|
|
68
|
+
"text": "The synthetic source describes four supported database alternatives. This does not establish a selected deployment."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"bom-ref": "evidence-selection",
|
|
72
|
+
"subjects": [
|
|
73
|
+
"app",
|
|
74
|
+
"db-b"
|
|
75
|
+
],
|
|
76
|
+
"annotator": {
|
|
77
|
+
"individual": {
|
|
78
|
+
"name": "Researcher"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"timestamp": "2026-11-13T12:00:00Z",
|
|
82
|
+
"text": "A synthetic safe configuration projection identifies database B; connection values were not retained."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"bom-ref": "decision-1",
|
|
86
|
+
"subjects": [
|
|
87
|
+
"app"
|
|
88
|
+
],
|
|
89
|
+
"annotator": {
|
|
90
|
+
"individual": {
|
|
91
|
+
"name": "User"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"timestamp": "2026-11-13T12:00:00Z",
|
|
95
|
+
"text": "Investigate storage before model hosting."
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"externalReferences": [
|
|
99
|
+
{
|
|
100
|
+
"type": "evidence",
|
|
101
|
+
"url": "synthetic-source-pack",
|
|
102
|
+
"comment": "Synthetic source pack; version 1; inspected support and safe projection only.",
|
|
103
|
+
"hashes": [
|
|
104
|
+
{
|
|
105
|
+
"alg": "SHA-256",
|
|
106
|
+
"content": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"citations": [
|
|
112
|
+
{
|
|
113
|
+
"bom-ref": "citation-1",
|
|
114
|
+
"pointers": [
|
|
115
|
+
"/annotations/0/text"
|
|
116
|
+
],
|
|
117
|
+
"timestamp": "2026-11-13T12:00:00Z",
|
|
118
|
+
"attributedTo": "app",
|
|
119
|
+
"note": "Synthetic fixture attribution, not real product evidence."
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"properties": [
|
|
123
|
+
{
|
|
124
|
+
"name": "n8r:surface:profile",
|
|
125
|
+
"value": "1"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "n8r:surface:objective",
|
|
129
|
+
"value": "Understand storage choices and the selected connection."
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "n8r:surface:scope",
|
|
133
|
+
"value": "Synthetic assistant; no live runtime access."
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "n8r:surface:relationship",
|
|
137
|
+
"value": "{\"id\":\"storage-a\",\"from\":\"app\",\"to\":\"db-a\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "n8r:surface:relationship",
|
|
141
|
+
"value": "{\"id\":\"storage-b\",\"from\":\"app\",\"to\":\"db-b\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"selected\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[\"evidence-selection\"],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[\"safe-projection.json: database-kind\"],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "n8r:surface:relationship",
|
|
145
|
+
"value": "{\"id\":\"storage-c\",\"from\":\"app\",\"to\":\"db-c\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "n8r:surface:relationship",
|
|
149
|
+
"value": "{\"id\":\"storage-d\",\"from\":\"app\",\"to\":\"db-d\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "n8r:surface:relationship",
|
|
153
|
+
"value": "{\"id\":\"inference\",\"from\":\"app\",\"to\":\"model\",\"kind\":\"integration\",\"optionality\":\"unknown\",\"group\":\"\",\"support\":\"unknown\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[],\"selectionEvidence\":[],\"purpose\":\"Generate a response\",\"mechanism\":\"Unknown\",\"configuration\":[],\"conditions\":[],\"note\":\"Model serving connection remains uninvestigated.\"}"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "n8r:surface:entry",
|
|
157
|
+
"value": "{\"id\":\"plan-1\",\"kind\":\"next\",\"title\":\"Inspect storage selection\",\"text\":\"Establish the selected database from a safe configuration projection.\",\"status\":\"done\",\"reason\":\"Projection supplied in this synthetic example.\",\"access\":\"Safe configuration projection\",\"evidence\":[\"evidence-selection\"],\"at\":\"2026-11-13T12:00:00Z\"}"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "n8r:surface:entry",
|
|
161
|
+
"value": "{\"id\":\"choice-1\",\"kind\":\"decision\",\"title\":\"Storage first\",\"text\":\"Investigate storage before model hosting.\",\"status\":\"active\",\"reason\":\"User priority\",\"access\":\"None\",\"evidence\":[\"decision-1\"],\"at\":\"2026-11-13T12:00:00Z\"}"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "n8r:surface:entry",
|
|
165
|
+
"value": "{\"id\":\"question-1\",\"kind\":\"question\",\"title\":\"Which service hosts inference?\",\"text\":\"Inspect the serving configuration to identify the model endpoint role.\",\"status\":\"open\",\"reason\":\"Source does not establish this connection.\",\"access\":\"Safe inference configuration\",\"evidence\":[],\"at\":\"2026-11-13T12:00:00Z\"}"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "n8r:surface:coverage",
|
|
169
|
+
"value": "Only synthetic support and selection sources inspected."
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "n8r:surface:gap",
|
|
173
|
+
"value": "Runtime use has not been observed."
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "n8r:surface:evidence",
|
|
177
|
+
"value": "{\"id\": \"evidence-support\", \"basis\": \"source\", \"sources\": [{\"index\": 0, \"locator\": \"support.md:1-20\"}], \"applicability\": \"Synthetic fixture only.\"}"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "n8r:surface:evidence",
|
|
181
|
+
"value": "{\"id\": \"evidence-selection\", \"basis\": \"configuration\", \"sources\": [{\"index\": 0, \"locator\": \"safe-projection.json: database-kind\"}], \"applicability\": \"Synthetic fixture only.\"}"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "n8r:surface:evidence",
|
|
185
|
+
"value": "{\"id\": \"decision-1\", \"basis\": \"user\", \"sources\": [], \"applicability\": \"Synthetic fixture only.\"}"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Start with what the user has
|
|
2
|
+
|
|
3
|
+
Use this guide when a newcomer asks how to begin, provide sources or establish
|
|
4
|
+
access, or mentions sources this session cannot yet read. It applies across hosts;
|
|
5
|
+
no Lab, prepared workspace, repository attachment or live access is required.
|
|
6
|
+
|
|
7
|
+
## First useful response
|
|
8
|
+
|
|
9
|
+
Read accessible material before asking for more. A short description is enough
|
|
10
|
+
for a provisional map: identify the reported components and connections, their
|
|
11
|
+
basis and the consequential unknowns. A document's claim remains a document claim.
|
|
12
|
+
If no source is supplied, ask for the easiest starting point: a short description,
|
|
13
|
+
an architecture/deployment excerpt or a repository/document link.
|
|
14
|
+
|
|
15
|
+
Then recommend one useful next source, explain the question it would answer and
|
|
16
|
+
help make it accessible. For example, a deployment note's custom gateway points
|
|
17
|
+
to its endpoint configuration or entrypoint; those can reveal the next component.
|
|
18
|
+
Ask one focused question, not a checklist of every repository, account and host.
|
|
19
|
+
Use facts already supplied rather than making the user repeat them. If the user
|
|
20
|
+
cannot provide that source, offer an easier alternative and retain the partial map.
|
|
21
|
+
|
|
22
|
+
Keep a lightweight source/access record in working notes or the journal:
|
|
23
|
+
source identity, mentioned/available/read/blocked/deferred, actual access route,
|
|
24
|
+
inspected scope and next step. Available means a tool/attachment is present; read
|
|
25
|
+
means a successful scoped read occurred. A blocked source needs its reason and
|
|
26
|
+
consequence, not repeated retries. These are working-note labels, not new BOM
|
|
27
|
+
properties or evidence classifications. Do not turn this record into an intake form.
|
|
28
|
+
|
|
29
|
+
## Help establish the next access route
|
|
30
|
+
|
|
31
|
+
Discover the current host's relevant tools and supported connection/upload flows.
|
|
32
|
+
Use tools already available within the authorized scope. If a connection is needed,
|
|
33
|
+
explain the smallest supported user action; verify access by reading the selected
|
|
34
|
+
source afterward. Consult current host help or visible UI rather than inventing
|
|
35
|
+
menu names. Installing this skill supplies no repository, SSH or account access.
|
|
36
|
+
|
|
37
|
+
| User's starting point | Useful next action | What to keep explicit |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| Description or document | Read the supplied text/attachment; follow relevant links or ask for one missing section. | Reported architecture, document date/version and unverified deployment claims. |
|
|
40
|
+
| GitHub or another remote repository | Read selected files through an authorized connector/API or permitted public web access. For private sources, guide the supported host sign-in/connection flow. | A link or sign-in is not a successful repository read; check repository, revision and permitted scope. |
|
|
41
|
+
| Laptop folder | If approved local tools can read it, use the selected folder. Otherwise help the user upload selected files or use a supported connected-computer route. | A web Project's uploaded files are snapshots, not a live folder mount or automatic synchronization. A local path alone is inaccessible remotely. |
|
|
42
|
+
| VPS/SSH clue | Establish target, inspection scope and an available authorized execution route. Host/user/port and an existing connection alias may identify it; ask only for missing details needed next. | An IP or SSH command supplies no credentials, network reachability or shell tool. Existing laptop access is not inherited by a cloud chat. |
|
|
43
|
+
| Existing admin UI/API | Use an approved scoped read interface and the user's supported sign-in handoff. | Public views may reveal only a small part of the setup; diagnostic operations can have side effects. |
|
|
44
|
+
|
|
45
|
+
For laptop uploads, suggest the smallest useful selection: a README section,
|
|
46
|
+
source tree excerpt, deployment manifest with sensitive values removed, or the
|
|
47
|
+
entrypoint named by existing evidence. Explain why each requested file matters.
|
|
48
|
+
Offer an archive only if the host supports inspecting it and the user prefers it;
|
|
49
|
+
do not require the whole repository. Preserve relative paths and ask for revision
|
|
50
|
+
or capture identity when available. Uploads and connected folders are alternatives,
|
|
51
|
+
not mandatory steps or permission to publish code.
|
|
52
|
+
|
|
53
|
+
For a VPS, first determine where commands could run: an authorized tool/service,
|
|
54
|
+
an explicitly connected computer with permitted SSH, or the user's own terminal.
|
|
55
|
+
Only claim SSH capability after checking the actual tools and approved connection.
|
|
56
|
+
Keep authentication in the host's supported flow or existing credential store;
|
|
57
|
+
never request passwords, tokens or private keys in chat or uploads. A key offered
|
|
58
|
+
in chat should be declined with a concrete alternative. Do not disable host-key
|
|
59
|
+
checks, expose SSH publicly or add credentials/agents to make onboarding work.
|
|
60
|
+
If the host cannot provide a supported secure access route, say so and continue
|
|
61
|
+
with available documents/source or the human-assisted route below.
|
|
62
|
+
|
|
63
|
+
## Human-assisted evidence
|
|
64
|
+
|
|
65
|
+
When direct access is unavailable and the user wants to continue, offer a small
|
|
66
|
+
read-only collection step they can perform in their own environment. Establish
|
|
67
|
+
the target/runtime first. Explain what it reads, the expected safe fields and
|
|
68
|
+
what finding they could support. Filter before output; avoid raw environment,
|
|
69
|
+
connection strings, logs and complete inspection/config dumps. Ask them to review
|
|
70
|
+
for sensitive content before sharing. Do not hide a state change in a diagnostic
|
|
71
|
+
command. An access denial remains a blocker, not a reason to bypass permissions.
|
|
72
|
+
|
|
73
|
+
Treat returned material as user-supplied evidence, with reported target, time,
|
|
74
|
+
command/scope and redactions where available. Do not claim the agent accessed the
|
|
75
|
+
host or independently observed the command. Missing metadata limits the claim;
|
|
76
|
+
keep useful partial findings rather than inventing timestamps or source hashes.
|
|
77
|
+
|
|
78
|
+
## Saving and returning
|
|
79
|
+
|
|
80
|
+
Research readiness is separate from local workspace creation. Before promising a
|
|
81
|
+
save, check the installed helper, supported Node runtime, writable destination and
|
|
82
|
+
host file-delivery tools. For explicit local workspace setup, use
|
|
83
|
+
[workspace operations](workspace.md); do not run its local-folder procedure merely
|
|
84
|
+
because a user starts research in a web Project.
|
|
85
|
+
|
|
86
|
+
If helper execution and file delivery are available in the cloud, use
|
|
87
|
+
[Surface persistence](cyclonedx.md), read back the outputs and provide the actual
|
|
88
|
+
supported download/attachment links. Distinguish cloud files/downloads from a
|
|
89
|
+
local vault and from a Project source. Do not promise persistence across chats or
|
|
90
|
+
claim an attachment action that has not occurred. Deliver retained evidence with
|
|
91
|
+
the Surface when its relative references need it, or disclose the missing sources.
|
|
92
|
+
|
|
93
|
+
If execution or delivery is unavailable, provide a useful copyable map and notes;
|
|
94
|
+
name the specific blocked save step. Do not call prose a validated saved Surface.
|
|
95
|
+
Explain what the user should retain and supply on return. Reopening starts from
|
|
96
|
+
supplied artifacts and rechecks access; it does not assume local keys, connections
|
|
97
|
+
or research were carried into a fresh session.
|