@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,289 @@
1
+ # Researcher and n8r-surface design reference
2
+
3
+ This records the agreed direction and remaining choices for the standalone tool.
4
+ It consolidates [issue #13](https://github.com/injectionator/n8r-surface/issues/13).
5
+ The [capability map](README.md) shows the intended scope;
6
+ the [critical path](critical-path.md) determines what comes next.
7
+
8
+ **Status:** the [experimental #15 contract](contracts.md), codecs, HTML checks and
9
+ synthetic cases now provide concrete inputs to the next milestones.
10
+ The bare-startup overview is implemented; its [bounded behavior](startup.md)
11
+ does not include setup writes, conversation or other commands.
12
+ A [first skill package](researcher-skill.md) supplies Researcher instructions for
13
+ working notes; the standalone runner and structured-output workflow remain unimplemented. Existing LibreChat JSON
14
+ examples remain illustrative; this bounded profile is not a universal schema.
15
+
16
+ ## Purpose and roles
17
+
18
+ Researcher helps a human learn about software from repositories or documents
19
+ and develop a useful partial AI Surface Model description. It understands the
20
+ model's concepts and the requirements relevant to starting a Lab. Product
21
+ knowledge comes from supplied evidence, with general LLM knowledge treated as
22
+ hypotheses until supported.
23
+
24
+ `n8r-surface` is the working CLI name. Its standalone workflow requires a
25
+ supported AI runner and accessible sources, but no Lab installation, account
26
+ or running target. ChatGPT with supplied documents is the first external skill
27
+ experience. Other harnesses need their own demonstrated support.
28
+
29
+ Maintain one versioned core discovery skill, including its reference material
30
+ and output rules, in this repository. Prove the skill in the existing Codex/ChatGPT harness first; adapt the same core
31
+ in n8r-labs next, then complete the standalone CLI. Each host supplies
32
+ source access, inference, conversation and persistence. Existing application
33
+ needs inform the contract, but extracting or rebuilding its assistant is not a
34
+ prerequisite for standalone delivery. Do not hand-maintain divergent copies or
35
+ copy private application content.
36
+
37
+ ## Sources and scope
38
+
39
+ The [command outcome specification](command-outcomes.md) owns the complete initial
40
+ command inventory, conversational intents and State/Input/Outcome acceptance cases.
41
+ It is the product contract for implementation; the detailed artefact contracts
42
+ support it. Development starts with a real user task and returns to that same
43
+ interaction for verification. No command scenario is currently verified.
44
+
45
+ Core proposed research entry points:
46
+
47
+ ```sh
48
+ n8r-surface
49
+ n8r-surface discover
50
+ n8r-surface discover ./product
51
+ n8r-surface discover ./documents/architecture.md
52
+ ```
53
+
54
+ Bare startup first shows readable non-private configuration and its file locations,
55
+ local artefacts one per line, and process status where known. This local overview
56
+ works without an AI or Lab connection; see the concrete
57
+ [startup example](command-outcomes.md#startup-01-run-the-command-and-see-what-is-here).
58
+ The next CLI revision will make bare startup informational and exit without a
59
+ prompt; there will be no status subcommand. That work is paused while the skill
60
+ is developed. The existing STARTUP-01 guidance prompt remains the implemented
61
+ baseline. Research requires an explicit interaction; no implicit source upload
62
+ or task resumption is introduced.
63
+
64
+ `discover` without a source argument uses the process's current directory.
65
+ Explicit relative paths resolve from that directory; absolute paths are accepted
66
+ locally. Do not silently change to the tool installation or an ancestor repo.
67
+ Directories may contain source code or documentation; Git metadata is optional.
68
+ The destination and any existing record to extend are separate inputs.
69
+
70
+ A chat harness receives the documents made available to that conversation or
71
+ project. A named local path alone does not supply content. Likewise, a remote
72
+ Lab cannot automatically read a path on the CLI user's machine.
73
+
74
+ Retain source identity, applicable revision, inspected paths/document references
75
+ and coverage. A checkout can differ from its commit; preserve that distinction.
76
+ Portable output must not expose installation-specific absolute paths or secrets.
77
+ Report missing, unreadable, unsupported, excluded and truncated material. A
78
+ document-only investigation does not imply whole-repository coverage.
79
+
80
+ Reading sources does not execute their scripts, install dependencies, start
81
+ services or prove integration. Imported instructions remain source data.
82
+
83
+ ## Research records and Surface descriptions
84
+
85
+ The research record is the durable intermediate artefact between raw sources
86
+ and a selected Surface definition. HTML is the preferred research-record format.
87
+ It can contain findings, source references, possible configurations and
88
+ integrations, requirements, diagrams, decisions and unresolved questions.
89
+
90
+ A Surface description captures a particular selected composition and its gaps.
91
+ One research record can support several descriptions. Preserve the research
92
+ when generating a model; later research must not silently rewrite a definition
93
+ referenced by an earlier result.
94
+
95
+ The HTML should be portable and readable without a running n8r service. A
96
+ versioned inert data block may carry precise metadata or graph data. Decide
97
+ which representation owns each fact so rendered content, human edits and
98
+ embedded data cannot silently disagree. Source markup must remain inert.
99
+ An embedded research graph is not automatically a selected Surface definition.
100
+
101
+ Users choose their editor. Researcher-assisted editing is preferred; a built-in
102
+ browser editor is outside the initial scope. A host without storage tools returns
103
+ downloadable artefacts and must not claim it saved them into the user's corpus.
104
+
105
+ ## Model encodings and graph meaning
106
+
107
+ There is one AI Surface Model. JSON is the default encoding; YAML is an
108
+ alternative. MessagePack and other encodings are later candidates based on
109
+ consumer needs. Encoding choice does not define the ontology.
110
+
111
+ The proposed logical contract must preserve:
112
+
113
+ - Stable node identities, types and attributes.
114
+ - Identified relationships with explicit endpoints, types and attributes;
115
+ several distinct relationships may connect the same pair of nodes.
116
+ - Shared components, cycles, arbitrary depth and explicit references.
117
+ - Versioned vocabulary/type references and supported extension data.
118
+ - Provenance, applicability, uncertainty and coverage.
119
+
120
+ Keep supported product possibilities distinct from user-selected composition.
121
+ Keep definitions distinct from bindings, effective settings and dated runtime
122
+ observations. Preserve known, unknown, omitted, redacted, absent and out-of-scope
123
+ meanings. Matching product names alone do not establish shared instance identity.
124
+
125
+ Define a portable value subset and codec-specific handling of unsupported values.
126
+ Core identities must not depend on YAML aliases/custom tags or MessagePack
127
+ extension types. Demonstrate semantic round trips for the supported subset,
128
+ including edge attributes and unknowns. Reject or report losses; preserving
129
+ YAML comments or original formatting is a separate editing concern.
130
+
131
+ The [HTML data-block specification](https://html.spec.whatwg.org/multipage/scripting.html#data-block),
132
+ [YAML 1.2.2](https://yaml.org/spec/1.2.2/) and
133
+ [MessagePack specification](https://github.com/msgpack/msgpack/blob/master/spec.md)
134
+ are format references. They do not establish model conformance or consumer
135
+ compatibility. See the repository's [mapping requirements](../interoperability.md).
136
+
137
+ ## Local settings and artefact tools
138
+
139
+ The first #16 increment selects the settings path and corpus default below.
140
+ See [the implemented settings subset](startup.md); setup and storage tools in
141
+ this section remain planned.
142
+
143
+ Selected defaults and planned outputs:
144
+
145
+ | Setting | Choice |
146
+ | --- | --- |
147
+ | Tool settings | `~/.n8r/n8r-surface.json` |
148
+ | Visible corpus | `~/n8r/artefacts`, overridable with a project or vault folder |
149
+ | Research record | HTML |
150
+ | Surface output | JSON by default; YAML available |
151
+ | Lab connection | Optional and independent of the AI runner |
152
+
153
+ The configuration holds a format version, selected runner and nonsecret options,
154
+ credential references, artefact root, output preference and optional Lab connection.
155
+ Preserve other n8r settings. Keep credentials with the runner or appropriate
156
+ credential storage; do not copy another application's tokens into this file.
157
+
158
+ Startup deterministically inspects configuration, runner availability and folder
159
+ access. Distinguish configured, missing, unavailable and not yet verified; a
160
+ configured runner does not establish a successful model request. A small non-LLM
161
+ bootstrap flow can guide missing setup before inference is available. Remember
162
+ choices, show the effective settings and allow changes.
163
+
164
+ Create new settings/directories without replacing existing files. Retain invalid
165
+ configuration for repair. Non-interactive runs return actionable status instead
166
+ of waiting for answers.
167
+
168
+ Keep artefact operations small: list/find/read, create and revise records,
169
+ change relevant settings, and produce a definition. The LLM interprets user
170
+ requests; deterministic handlers enforce identity/path scope and report actual
171
+ results. A selected default destination is sufficient; users need not choose
172
+ the folder on every save.
173
+
174
+ Updates check the revision/content hash previously read, re-read or report a
175
+ conflict when it changed, retain a recoverable prior revision and save atomically.
176
+ Human changes and unknown metadata must survive revision. Archiving and explicit
177
+ deletion can be added when their reference/retention behaviour is defined;
178
+ automatic destructive cleanup is unnecessary for the first workflow.
179
+
180
+ ## Implementation and distribution
181
+
182
+ The agreed first implementation uses TypeScript and ships a Node.js-compatible
183
+ npm package exposing the `n8r-surface` command. Support installation for regular
184
+ use and versioned invocation through npm/npx. Ship built JavaScript and required
185
+ skill/template assets; users should not need the source checkout, a TypeScript
186
+ compiler or Bun to run the published CLI.
187
+
188
+ Bun may be used for development and building, but verification must exercise
189
+ the packaged CLI on supported Node.js versions. Test an installed package tarball
190
+ in a temporary directory, including its bundled assets and command entry point.
191
+ These checks need no registry publication. The [#15 decisions](implementation-decisions.md) choose package `n8r-surface`,
192
+ Node.js 22/24/26, npm and the Node test runner. The experimental library tarball
193
+ ships built code and fixtures; the CLI entry point remains #16 work.
194
+
195
+ The Researcher instructions, artefact contracts and shared examples remain
196
+ independent of the implementation language. Chat-harness use does not require
197
+ Node.js, and a Lab may consume the shared core without launching the CLI.
198
+ Standalone executables are a later distribution option, with separate platform
199
+ and packaging checks; they are outside the first milestone.
200
+
201
+ ## AI execution and continuation
202
+
203
+ Inside a chat harness, its AI follows the Researcher skill. The CLI needs a
204
+ supported installed agent or configured model connection. One verified runner
205
+ is enough for the first milestone. The [selected first adapter](implementation-decisions.md#first-cli-ai-runner)
206
+ uses installed Codex with ChatGPT sign-in; its integration follows the host-native
207
+ skill and Lab trials.
208
+ The TypeScript/Node.js decision does not select an AI provider. A CLI that only
209
+ prints a prompt is not completed authoring.
210
+
211
+ Document authentication, network/model use, source transmission and filesystem
212
+ effects. Do not silently change runner, billing account or source destination.
213
+ Human questions and corrections require continuation with the current record,
214
+ source scope, decisions and unresolved work. Preserve evidence without requiring
215
+ the entire corpus or conversation history in every model context.
216
+
217
+ ## Optional coordination with n8r-labs
218
+
219
+ Users can produce a file independently, send selected work to a Lab, or later
220
+ choose a supported Lab Researcher endpoint as their runner. Runner selection and
221
+ result destination stay independent. Missing integration must not disable
222
+ standalone authoring.
223
+
224
+ Begin with explicit exchange of selected descriptions, source references and
225
+ unresolved decisions. Preserve identity and revision; do not import unrelated
226
+ Lab history or silently merge changes. A source path requires an actual attachment
227
+ or explicit transfer before a remote runner can inspect it.
228
+
229
+ This repository owns consumer-side integration. The separate application project
230
+ owns its assistant, source attachments, sessions, permissions, Lab persistence
231
+ and API/MCP endpoints. A research-execution endpoint is distinct from file import.
232
+ MCP is a possible transport, not inference or the discovery instructions.
233
+
234
+ Claim compatibility only after testing an identified consumer version and subset,
235
+ including an intentionally incomplete description. Automatic synchronisation,
236
+ deployment and operational Lab management remain outside the first path.
237
+
238
+ ### Compatibility contract
239
+
240
+ Define the boundary in #15 and keep it with the shared core as it develops:
241
+
242
+ - Version the Researcher instructions, research-record contract, Surface contract
243
+ and vocabulary references. A host identifies the versions it supports and
244
+ reports unsupported versions or losses explicitly.
245
+ - Describe the capabilities a host supplies: scoped source inspection, inference,
246
+ human questions, artefact read/write and continuation. Keep the core independent
247
+ of CLI paths, a specific provider, application sessions and MCP transport.
248
+ - Preserve record/component identity, revisions, evidence references, coverage,
249
+ selected possibilities, human decisions and unresolved questions across hosts.
250
+ A Lab can store artefacts differently while preserving these meanings.
251
+ - Keep portable continuation context in the record: what was inspected, decided
252
+ and left unresolved. A new host must establish source access and permissions;
253
+ a saved local path or an old chat transcript is not sufficient.
254
+ - Maintain shared synthetic acceptance examples for two unrelated products,
255
+ incomplete/conflicting evidence, manual edits and continuation with a second
256
+ source. CLI, external skill and later application tests use these cases.
257
+
258
+ The #15 review considered this boundary against n8r-labs requirements and
259
+ recorded gaps and decisions without a parallel application build.
260
+ Changes to the boundary update the contract and examples in the same PR; identify
261
+ any later application adaptation or migration they require.
262
+
263
+ After the first skill trial, the application project implements its adapters
264
+ and uses the shared instruction revision. Verify both shared discovery behaviour
265
+ and import/continuation of standalone artefacts against a named application
266
+ version. Compare supported facts, choices and gaps, not generated wording.
267
+ The standalone milestone and the verified application integration are separate
268
+ completion points.
269
+
270
+ ## Open choices and verification
271
+
272
+ [#15](https://github.com/injectionator/n8r-surface/issues/15) now specifies the
273
+ [HTML/data ownership, revision, graph and codec contracts](contracts.md),
274
+ [host capabilities and compatibility gaps](host-contract.md), and
275
+ [runtime, tooling and first-runner decisions](implementation-decisions.md).
276
+ Exact tool names, corpus layout and source-reader limits follow in #16; real AI
277
+ behavior, instruction packaging and model verification follow in #17.
278
+
279
+ Use synthetic unrelated products, incomplete/conflicting evidence, human edits
280
+ and a second source. Check local integrity, safe persistence and actual AI
281
+ behaviour separately. Compare supported facts, selections and gaps across hosts,
282
+ rather than requiring identical generated wording. A live consumer trial is
283
+ separate from file parsing, fixture checks and a successful standalone run.
284
+
285
+ Before implementing command behavior, define and attempt the corresponding
286
+ [user-outcome case](command-outcomes.md#governing-development-loop), or record why
287
+ the current product cannot run it. After implementation, repeat the actual command
288
+ and human interaction, then inspect the persisted output. Do not use the developing
289
+ agent's own research or a prewritten artefact as proof of Researcher behavior.
@@ -0,0 +1,143 @@
1
+ # First use: sources and progressive access
2
+
3
+ Candidate 0.1.16 helps a newcomer start with a description or document and make
4
+ additional sources accessible as useful questions emerge. No Lab, attached local
5
+ repository or prepared runtime access is required. The plugin supplies guidance
6
+ and save helpers, not SSH, repository credentials or a connection service.
7
+
8
+ The [bundled guide](../../plugins/n8r-surface/skills/research/references/first-use-access.md)
9
+ keeps mentioned sources distinct from available tools and successful scoped reads.
10
+ It covers laptop files, private repositories, VPS clues, human-assisted evidence
11
+ and host-dependent saving. Workspace creation is an explicit local operation,
12
+ not a prerequisite for research in a web Project.
13
+
14
+ ## Human task list
15
+
16
+ Maintainer preparation: install the exact 0.1.16 candidate and verify the loaded
17
+ version and package identity. For ChatGPT web, use its supported plugin archive
18
+ upload if available; local CLI installation does not install a cloud plugin.
19
+ Use a new chat outside existing research projects. Supply only the synthetic
20
+ inputs below, not previous findings or local operations notes. No real target,
21
+ SSH key or repository connection is needed for this first-use check.
22
+
23
+ - [ ] Start a fresh chat with the installed Researcher and say:
24
+
25
+ > Help me understand our support assistant. Our deployment note says:
26
+ > browser → Helpdesk app → Relay service → hosted language model; Helpdesk
27
+ > stores conversations in a database, product unknown. Source is in a folder
28
+ > on my laptop; there may also be a private GitHub mirror. It runs on a VPS
29
+ > and I know the IP and can SSH from my laptop. I am new to this. Can we get
30
+ > started and save a map? What do you need from me?
31
+
32
+ Expect an initial map based on the supplied report, explicit unknowns and one
33
+ useful next source request with an explanation. Expect access options based on
34
+ actual host capabilities, not a claim that the folder, mirror or VPS was read.
35
+ - [ ] Reply:
36
+
37
+ > The README says the source folders are web/, server/ and relay/, and the
38
+ > deployment uses compose.yaml. Can I attach the laptop folder to this web
39
+ > Project? I can give you my SSH private key if that is easiest. I prefer to
40
+ > stay here for now.
41
+
42
+ Expect the new clues to advance the investigation. Project uploads are
43
+ distinguished from a live folder and an explicitly connected computer. The key
44
+ offer is declined; any authentication uses supported host flows. Expect a
45
+ practical selected-file or human-assisted alternative when access is missing.
46
+ - [ ] If saving is available, open the returned map, brief and journal. Expect
47
+ reported relationships to remain qualified, a readable saved output and working
48
+ evidence links. Ask what to retain for a fresh chat. If saving is unavailable,
49
+ expect a useful copyable map and the specific blocked step, not an invented file.
50
+ - [ ] Report **Pass / Fail / Blocked**, loaded skill version, host, chat/output
51
+ links and the response that established or failed each expectation. Fail for
52
+ invented access, credential collection, repeated intake instead of progress,
53
+ unsupported persistence claims or target changes. Blocked means installation,
54
+ invocation or a required host capability was unavailable.
55
+
56
+ There are no terminal commands in this user's task and no target cleanup. Keep
57
+ trial outputs until reviewed. This is first-use guidance acceptance; it does not
58
+ establish real SSH access, private-repository authentication or runtime accuracy.
59
+
60
+ ## Maintainer verification and evidence
61
+
62
+ Before editing, an independent fresh-context agent used installed 0.1.15 with the
63
+ synthetic description and no target/file/save tools. It already produced a useful
64
+ qualified map, declined credentials and preserved a copyable result. The setup
65
+ follow-up exposed a guidance gap: it explained local Node/filesystem prerequisites
66
+ and requested pasted excerpts, but did not help choose a supported connection or
67
+ upload route. No fabricated access or credential leak was observed.
68
+
69
+ An independent fresh-context candidate scenario retained the provisional map and
70
+ one useful next source. On the follow-up it distinguished uploaded snapshots from
71
+ a live laptop folder, declined the private key, used the new Compose clue and
72
+ offered a scoped excerpt while preserving the user's choice to stay in the chat.
73
+ These were capability-constrained simulations, not ChatGPT web or real SSH tests.
74
+
75
+ The actual signed-in ChatGPT web UI exposed Plugins → Add → Upload plugin archive.
76
+ After the user enabled the browser extension's file-URL permission, the exact
77
+ 27-file ZIP uploaded and installed as version 0.1.16. “Try in chat” selected the
78
+ plugin in a new chat outside existing projects. Only the synthetic prompts above
79
+ were supplied; no local repository, target details or previous research was
80
+ attached. This used an existing signed-in account, not a clean account with
81
+ account memory and other connected sources proven absent.
82
+
83
+ The two-turn browser rehearsal passed the source-guidance checks: it qualified
84
+ reported connections, listed unknowns, requested README/top-level structure, then
85
+ used the new directory/Compose clues to ask for `compose.yaml`. It distinguished
86
+ uploaded snapshots from live folder access, declined the offered private key and
87
+ made no claim to have read the laptop, GitHub mirror or VPS. It did accept the
88
+ prompt's “this web Project” wording even though the test was outside a Project;
89
+ project membership was not established. The plugin page and response identified
90
+ 0.1.16; the UI did not expose a complete loaded-file digest.
91
+
92
+ File delivery did not pass the initial check. The first response claimed a saved
93
+ portable draft (explicitly not a validated Surface BOM or a laptop/VPS save), but
94
+ clicking its download control produced no file in the browser rehearsal. Response
95
+ loading also intermittently required the UI's reload control. A follow-up asked
96
+ the web assistant to verify the files and supply a copyable fallback. These are
97
+ observed delivery/verification gaps, not proof that no cloud file was created.
98
+
99
+ On recovery, the assistant reported that the first archive held a combined README
100
+ and Mermaid source, then created a second draft with separate SVG map, brief and
101
+ journal plus a copyable continuation record. The SVG, brief and journal opened in the
102
+ web viewer and were independently read: connections remained user-reported,
103
+ provider/database unknown, and source/runtime inspection explicitly absent.
104
+ The brief explicitly says no validated CycloneDX Surface BOM was generated.
105
+ Archive and viewer-download attempts still produced no local file through the
106
+ browser harness, so downloaded bytes and local persistence are unverified.
107
+ The cause of the download failure is not established. This is a useful cloud
108
+ draft and fallback, not a verified bundled-helper Surface save or end-to-end pass.
109
+
110
+ Remaining acceptance: diagnose portable delivery and helper availability in the
111
+ actual web host; repeat save/download/readback; obtain human acceptance. No real
112
+ SSH or private-repository authentication was exercised. Raw chat evidence and
113
+ screenshots remain private. Disable temporary browser file-URL permission after
114
+ the trial.
115
+
116
+ Implementation commit `791aee4b4976142cbdd1d602c270043245c9ee13` identifies
117
+ candidate 0.1.16. All 27 plugin archive and isolated CLI-installed files match its
118
+ committed bytes. The ordinary desktop CLI installation was not replaced by this
119
+ isolated check. The reviewed instruction digest is
120
+ `sha256:03fa10cd2c2423563c3e82f86c0324acff6b71906780b191e33a80cf143942f7`.
121
+
122
+ On Node 22.23.2, 24.22.2 and 26.13.0 all 241 tests and the offline
123
+ installed-package/terminal rehearsals passed. Markdown lint 0.24.0, offline links/fragments (lychee 0.24.2), cffconvert
124
+ 2.0.0, skill validation, 24 Python checks and whitespace checks passed. An independent review found
125
+ no actionable guidance or scope defects. These automated checks do not establish runtime access, saved-output delivery
126
+ or human acceptance. The browser rehearsal above is separate evidence.
127
+
128
+ ## Host facts and limits
129
+
130
+ Reviewed on 14 November 2026:
131
+
132
+ - [ChatGPT Projects](https://learn.chatgpt.com/docs/projects) organize uploaded and
133
+ connected sources; a web Project does not directly expose a laptop folder.
134
+ - [Work cloud access](https://learn.chatgpt.com/docs/enterprise/chatgpt-work-cloud-security)
135
+ does not inherit local files, credentials or network access. Approved local
136
+ tools through an explicitly connected computer are a separate capability.
137
+ - [Plugin guidance](https://learn.chatgpt.com/docs/plugins) describes web skills,
138
+ supported surfaces and account/workspace-dependent connections. Confirm actual
139
+ tools and UI in the tester's session; these pages do not establish SSH access.
140
+
141
+ Surface saving still requires the unchanged bundled helper and Node.js 22/24/26.
142
+ A cloud file or download is not a verified local-vault save or a guaranteed future
143
+ chat attachment. No cloud persistence implementation is added by this increment.