@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,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.
@@ -0,0 +1,101 @@
1
+ # A useful first security overview
2
+
3
+ For broad initial source research, help the reader understand the application
4
+ before explaining the saved format. Preserve a narrow question when one is given.
5
+ This is a bounded first pass, not an exhaustive audit or vulnerability verdict.
6
+
7
+ ## Research and record
8
+
9
+ - Explain what the application does in one plain sentence. Put this in the focus
10
+ component's standard `description`; name that component as the presentation
11
+ focus using the [optional node hints](cyclonedx.md#overview-presentation-hints).
12
+ - Group major internal functions and external integrations only where evidence
13
+ establishes their placement relative to the application. A browser is not the
14
+ backend; a supported database option is not an installed store. Preserve shared
15
+ identities and paths across groups. Leave unresolved placement unclassified.
16
+ - Record a few consequential observations as `finding` journal entries with
17
+ `status: done`, evidence references, and a `reason` explaining why each matters.
18
+ Keep the finding and its limitation together. A source-backed execution path is
19
+ an investigation lead, not a demonstrated vulnerability or runtime guarantee.
20
+ Do not promote an unsupported inference just to fill the opening.
21
+ - Make coverage legible across **identity**, **authorization**, **data handling**,
22
+ **storage**, **secrets**, **exposure** and **observability**. Use named `coverage`
23
+ and `gap` strings, such as “Identity: supported sign-in options inspected” or
24
+ “Observability: runtime trace coverage not researched.” These labels describe
25
+ inspected work, not control effectiveness. Mark unresearched areas explicitly;
26
+ do not expand a first pass into seven exhaustive investigations.
27
+ - For integrations within scope, research supported options separately from
28
+ intended selections, safe configuration evidence and dated runtime observations.
29
+ “Identity provider unknown” alone does not describe supported authentication.
30
+ If support was not researched, say so and identify the next useful source read.
31
+ - Keep model-request control points distinct from actual tool execution. Preserve
32
+ browser-originated traffic, backend extensions and scheduled execution contexts
33
+ when evidenced; explain their consequences without presuming every app has them.
34
+
35
+ The generated brief uses descriptions, groups, findings, coverage/gaps and open
36
+ next steps. The generated HTML puts a connected overview before full relationships,
37
+ source evidence and investigation history. Do not hand-edit these views instead of
38
+ recording the relevant evidence in the BOM.
39
+
40
+ ## Scope once, exceptions where needed
41
+
42
+ State common source/deployment limits in `scope`. Keep per-relationship conditions,
43
+ conflicts, bypasses, selection evidence and observations intact. Use `note` for
44
+ what is distinctive about a path instead of repeating generic deployment caveats.
45
+ The concise brief links to full relationship details; brevity must not erase a
46
+ consequential exception from its associated finding.
47
+
48
+ ## Invite the next decision
49
+
50
+ Match the next step to the established investigation context:
51
+
52
+ - **Source checkout only:** recommend one concrete source-level trace, naming the
53
+ entry point, authorization boundary and question it can answer. Keep deployment
54
+ settings unverified. Research can continue without a daemon, deployed instance
55
+ or chosen provider. Ask about intended setup only if the user wants planning.
56
+ - **Intended setup:** record choices as dated user-basis evidence, then explain
57
+ what configuration evidence would establish them later.
58
+ - **Identified deployment:** inspect only the permitted target and relevant safe
59
+ fields. Keep configuration and dated runtime observations separate.
60
+ - **Context unclear:** continue useful source research; before requesting runtime
61
+ access, establish whether the user wants source analysis, planning or inspection
62
+ of an existing deployment. A checked-out Compose file identifies a declaration,
63
+ not a running target. An available Docker daemon is not a target identity.
64
+
65
+ ## Keep the successor current and the brief short
66
+
67
+ Before each save, reconcile the current scope, findings, coverage, gaps and actions:
68
+
69
+ 1. Record new evidence with its date and applicability. Preserve old observations
70
+ and accepted decisions in the journal and predecessor; do not rewrite their text.
71
+ 2. Mark obsolete entries `superseded` and link a replacement with `supersedes`.
72
+ Mark completed actions `done`; mark out-of-scope work `deferred` with a reason.
73
+ For example, reachable runtime evidence supersedes an unavailable-daemon blocker
74
+ and completes the retry action; it does not establish a deployment's presence.
75
+ 3. Replace obsolete current scope/gap strings in the successor. Preserve their
76
+ historical content in dated journal entries/evidence. Do not append contradictory
77
+ current statements and leave the reader to determine which applies.
78
+ 4. Keep one recommended action `active`, with a clear result and access requirement.
79
+ Other genuinely useful choices can remain open or deferred in the journal.
80
+ 5. Read the generated brief as a newcomer. Aim for roughly 400–700 words: a short
81
+ current scope, major areas, a few current implications, concise coverage/gaps
82
+ and one next action. Consolidate overlapping findings using supersession while
83
+ preserving each consequential exception and its evidence. A word target never
84
+ justifies dropping a limitation or inventing a summary.
85
+
86
+ The renderer shows at most twelve nodes, five current findings (most recently
87
+ recorded, not severity-ranked), seven coverage items, seven gaps and one action
88
+ (active first, otherwise recorded order). It explicitly links additional items to
89
+ full HTML detail. Complete finding text, reasons and evidence stay together;
90
+ long individual entries are not silently truncated. Prioritise and consolidate
91
+ research content before saving; list limits alone do not guarantee a short brief.
92
+ The journal and full map retain the complete record, including superseded entries.
93
+ This skill does not configure or deploy the system.
94
+
95
+ End the chat with a short statement of what the research clarified, links to the
96
+ brief and map (journal/detail links can follow), and the next useful question.
97
+ Keep format mechanics underneath. Explain the architecture/research BOM's bounded
98
+ machine-readable value when relevant: it is not a comprehensive dependency SBOM;
99
+ standard dependencies cover only the selected dependency subset. Other consumers
100
+ may ignore the profile's paths and evidence. Conventional SBOM linkage is future
101
+ work, not a claim made by this increment.
@@ -0,0 +1,125 @@
1
+ # Investigate an identified running composition
2
+
3
+ Use this path when the user starts with an instance, service URL or deployed
4
+ composition, or continues source research with permitted instance evidence.
5
+ A source checkout can describe one component without describing the whole system.
6
+ Keep source-only work on its existing path when no instance investigation is asked
7
+ for. This guide adds no access adapter, credential store or runtime dependency.
8
+
9
+ For a newcomer or an inaccessible source, use [first-use access](first-use-access.md)
10
+ to help establish one useful source at a time. A short reported system description
11
+ is enough to begin; a complete access setup is not an entry requirement.
12
+
13
+ ## Use the host harness
14
+
15
+ Codex/ChatGPT supplies the tools and access; the skill supplies the investigation
16
+ method. Discover the relevant tools actually available in this session. Prefer a
17
+ scoped connector or documented read API, then permitted browser or shell access.
18
+ Do not assume a tool name, a terminal, SSH, a local clone or a connected account.
19
+ A URL identifies a source; a successful scoped read establishes access.
20
+
21
+ Start with the supplied target and question. State the selected environment and
22
+ read-only coverage, carrying forward existing authorization. Ask only for missing
23
+ information needed to identify the target or permitted access. Do not make users
24
+ choose evidence categories or reproduce information an available source supplies.
25
+
26
+ | Source | Useful host operation | Identity and limit to retain |
27
+ | --- | --- | --- |
28
+ | Remote repository | Read selected files at a pinned revision through the available connector/API. | Repository, revision, file and inspected ranges; returned text may not be original file bytes. |
29
+ | Local checkout | Read relevant files and working-copy identity. | Commit plus differences and hashes of inspected bytes; not deployed build identity. |
30
+ | Document or URL | Read the selected page/section using its available connector or browser. | Document revision/product version, capture time and section; newer docs may not apply to the target. |
31
+ | Instance configuration | Read safe fields from the selected instance/admin view. | Target identity, setting scope and time; stored settings may not be loaded. |
32
+ | Runtime metadata | Filter to the target and project allowlisted fields before output. | Instance/container/process identity, image/build identity, state and capture time. |
33
+ | Existing observations | Read a permitted redacted event/trace or supplied observation. | Request correlation, participating identities, effective setup and coverage; missing events do not prove absence. |
34
+
35
+ If a source is unavailable, retain the partial graph and identify the consequence:
36
+ for example, storage is configured but current use is unverified. A permission
37
+ refusal is not a prompt to bypass that route. Ask for an authorized source or
38
+ human-supplied redacted evidence when needed. Do not sign in for the user, extract
39
+ sessions, install tools or start services to fill the gap. Follow the discovery
40
+ guide's [live inspection rules](discovery-map.md#inspect-live-connections-with-the-human).
41
+
42
+ ## Follow the composition
43
+
44
+ Begin with the selected instance's identity and entry point, then follow evidence
45
+ of relevant connections. An endpoint binding can lead to a separate gateway,
46
+ inference provider, identity service, storage or telemetry destination. Determine
47
+ its role before deciding which source file, document or live view to read next.
48
+ Do not replace a custom endpoint with a familiar vendor because its protocol is
49
+ compatible. Do not add roadmap components or enumerate unrelated host resources.
50
+
51
+ Use repositories and operational documents to explain those discovered components.
52
+ An old deployment recipe is a navigation clue until current evidence supports it.
53
+ Match product documentation to the installed version; mismatches remain visible.
54
+ Record supported alternatives separately from the selected instance paths.
55
+
56
+ For each consequential claim, keep the evidence level precise:
57
+
58
+ - Source describes support or a code path; it does not establish selection.
59
+ - A safe binding establishes configured selection, with its setting scope.
60
+ - Process/container state establishes presence at a time, not connection use.
61
+ - A response establishes reachability for that operation and vantage point.
62
+ - A correlated request/trace can establish the exercised portion of a path,
63
+ within its identity, time and coverage limits.
64
+
65
+ A mounted file hash identifies inspected bytes, not necessarily the bytes loaded
66
+ by a running process. A model name in configuration is not catalog availability
67
+ or inference. A health response does not exercise storage, authentication or
68
+ model requests. Similarly named fields in public config and process environment
69
+ may have different meanings: inspect their version-specific implementation before
70
+ calling them equivalent or conflicting. Keep separate login, application actor,
71
+ provider credential and upstream identity boundaries when evidence supports them.
72
+
73
+ Read-only means the operation's behavior, not its HTTP verb. A diagnostic GET
74
+ may start a worker, refresh credentials or run a connection test. Use known passive
75
+ operations or existing evidence; leave uncertain operations uncalled. Research
76
+ does not send prompts or invoke tools to make an edge observable. Those are
77
+ separately authorized testing tasks.
78
+
79
+ ## Retain evidence and continue
80
+
81
+ Keep the journal current while working when saving is authorized. State what was
82
+ read, what it established and the next useful question; the user can redirect or
83
+ stop at a useful partial result. Save through the existing [Surface helper](cyclonedx.md).
84
+ No special whole-Surface observed state is needed: use per-relationship evidence
85
+ and dated observations, with unknown composition and explicit coverage/gaps.
86
+
87
+ Keep source identity distinct from captured evidence identity. If a connector
88
+ returns rendered or normalized text, hash a retained safe projection only as that
89
+ projection, not as the original remote file. Never fabricate unavailable hashes,
90
+ versions or observation times. Preserve actual source capture times separately
91
+ from the time the BOM was saved. Do not add transport newlines before hashing
92
+ source bytes. See [evidence identity](cyclonedx.md#evidence-identity-and-readback).
93
+
94
+ On revisit, read the supplied predecessor, re-establish permitted access and
95
+ compare equivalent observations for the same target. Explain each material result
96
+ in ordinary language:
97
+
98
+ - **Target change:** comparable evidence establishes a changed setting/build or
99
+ relationship. Say which prior conclusions or tests may need revisiting.
100
+ - **Newly learned fact:** previously unread evidence adds detail; discovery time
101
+ alone does not establish when the target changed.
102
+ - **Unchanged checked fact:** the same scoped fact was checked again, at a new
103
+ time; do not generalize to unchecked parts of the system.
104
+ - **Lost coverage:** access or evidence is missing now; retain prior dated facts
105
+ without presenting them as freshly verified or treating the component as removed.
106
+ - **Conflict:** evidence disagrees or identities are inconsistent; preserve both
107
+ and name the evidence needed to resolve it. A mutable image tag is not a digest.
108
+
109
+ These are explanations, not new schema enums. Retain stable component identities,
110
+ previous bytes, decisions and observations. Update current scope/gaps and next
111
+ steps; keep old findings in history. A telemetry setting first read today may
112
+ predate the baseline, and a file timestamp alone does not prove historical use.
113
+
114
+ When consolidating earlier findings into a current journal summary, carry the
115
+ original evidence IDs for every retained configuration/source claim. A new
116
+ runtime-state check supports only its inspected facts; it cannot substitute for
117
+ those sources. Open the summary's evidence links during readback and check each
118
+ claim, even when the underlying graph still has correct provenance. Correct an
119
+ incomplete saved summary in a successor, preserving the earlier revision.
120
+
121
+ Finish with the useful composition, consequential uncertainties and one practical
122
+ next investigation with its access requirement. Independently read back the saved
123
+ BOM and generated brief/map/journal. Check that the key claims remain distinguishable
124
+ without this chat and that referenced retained evidence is locatable. State any
125
+ host persistence or navigation limitation rather than claiming a missing save.
@@ -0,0 +1,55 @@
1
+ # AI Surface Model meanings
2
+
3
+ The AI Surface Model describes connected components, configuration and relationships
4
+ at the detail available or useful. A language model is a component described by
5
+ it. There is one AI Surface Model; Lab and Experiment are descriptions within it.
6
+ A Lab contains Experiments. Each Experiment owns its desired setup and selected
7
+ Surface revision and requests resource configuration directly from its Lab.
8
+ The Lab owns resource configuration and local bindings. Lab / Lab Assistant
9
+ share one entity. The ownership chain is Lab → Experiment → Setup.
10
+ Bench is retired; preserve historical references as historical evidence, never
11
+ as current ownership or authority. Do not invent a hierarchy when it is outside
12
+ the supplied investigation.
13
+
14
+ Partial knowledge is useful. Preserve these distinct meanings:
15
+
16
+ | Meaning | Use |
17
+ | --- | --- |
18
+ | Known | Supported by identified evidence with a stated scope. |
19
+ | Unknown | The question is relevant but available evidence does not answer it. |
20
+ | Omitted | Deliberately left out of this description. |
21
+ | Redacted | Known detail withheld, such as sensitive values. |
22
+ | Absent | Evidence establishes absence within a specific scope. |
23
+ | Out of scope | Not part of the selected investigation. |
24
+
25
+ A missing field or uninspected directory does not establish absence. Evidence
26
+ that a product supports OIDC does not establish that this user enabled it.
27
+ Two HTTP routes can belong to the same service. Keep shared components, parallel
28
+ connections and cycles; depth is relative to a starting point, not a fixed limit.
29
+ Assign simple stable local labels such as `component:identity` when findings will
30
+ be saved or continued; add detail without silently replacing the entity.
31
+
32
+ Keep definitions separate from deployments, observations and Experiment Runs.
33
+ A declared connection, a reachable endpoint and an exercised interaction are
34
+ three different evidence claims. Source reading alone establishes none of the
35
+ runtime claims. Later findings must not silently rewrite what an earlier result
36
+ referred to. Record source, time, applicable revision and limits.
37
+
38
+ Interoperability is a bounded, versioned mapping with explicit losses. Matching
39
+ names, parsing JSON or reading a schema does not establish compatibility or
40
+ successful recreation. Distinguish a product possibility from a selected setup.
41
+
42
+ Named output profiles select content within this one model. Size, purpose and
43
+ deployment knowledge are independent. A profile version identifies output rules;
44
+ Surface definition and setup/binding revisions identify the described state.
45
+ Preserve those revisions and prior Run attribution when adding detail or bindings.
46
+ The [skeleton procedure](skeleton-surface.md) defines the provisional brief and
47
+ explicit reconciliation lifecycle. Detailed and recreation profiles remain future
48
+ directions, not implemented contracts.
49
+
50
+ This bundled reference records the draft meanings for skill 0.1.8. The repository's
51
+ [draft concepts](https://github.com/injectionator/n8r-surface/blob/main/spec/README.md)
52
+ are a moving source link; use the installed package version and digest to identify
53
+ the instructions actually used. Fields and serialization remain provisional. Maintainers must update this
54
+ reference with semantic changes; consumers do not need the source checkout to
55
+ read it.