@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,262 @@
1
+ # First-use security overview, candidate 0.1.14
2
+
3
+ Related to [#72](https://github.com/injectionator/n8r-surface/issues/72).
4
+ This skill/plugin increment follows merged 0.1.13. It does not change the npm
5
+ package version or authorize publication. Human acceptance remains pending.
6
+
7
+ ## Changed behavior
8
+
9
+ A broad first source investigation should produce a brief that explains the
10
+ application, its major areas and external integrations, consequential findings,
11
+ coverage gaps and the next useful decision. The skill asks for evidence-backed
12
+ findings and distinguishes supported options from intended choices, configuration
13
+ and observed behavior. Narrow questions remain narrow.
14
+
15
+ The HTML starts with a connected graph: each identified node appears once, with
16
+ its directed relationships. Explicit, checked presentation hints group nodes
17
+ inside the application, externally or as unclassified. Grouping records placement with its evidence basis (including user intent),
18
+ not proof of deployed trust boundaries. Full edge
19
+ conditions, exceptions, observations, evidence and investigation history remain
20
+ below the overview. The brief links to that detail instead of repeating every
21
+ relationship's generic uncertainty.
22
+
23
+ The [hint contract](../../plugins/n8r-surface/skills/research/references/cyclonedx.md#overview-presentation-hints)
24
+ is optional node metadata within Surface profile 1. Missing hints produce
25
+ Unclassified placement; the renderer never guesses placement from inventory type.
26
+ Older readers may ignore hints. Older saved BOMs remain readable, and no prior
27
+ files are regenerated in place. The BOM remains the sole saved authority.
28
+
29
+ The record is an architecture/research BOM, not a comprehensive dependency SBOM.
30
+ Generic consumers may omit the profile's research state and possible paths.
31
+ No runtime assessment, deployment automation or consumer compatibility is implied.
32
+
33
+ ## Baseline and verification status
34
+
35
+ The supplied 0.1.13 first-use evaluation identified an opening dominated by storage
36
+ mechanics, mixed inventory, repeated relationship rows/caveats and buried security
37
+ implications. Read-only inspection of the retained private brief and renderer
38
+ confirmed those presentation failures. The earlier product assessment is supplied
39
+ baseline evidence; this increment does not claim to have repeated its research.
40
+ Original private outputs are preserved and are not public fixtures.
41
+
42
+ Focused regression checks failed against the previous renderer and now cover
43
+ checked placement evidence, old/empty inputs, each identity and directed edge,
44
+ cycles/parallel relationships, disconnected nodes, full names, linked findings,
45
+ retained exceptions and inert source text. These checks establish bounded rendering
46
+ and reference behavior, not the quality or truth of an investigation.
47
+
48
+ The user-led 0.1.14 rehearsal and follow-up candidate checks are recorded
49
+ [below](#follow-up-rehearsal), with exact identity limits. Browser visual acceptance
50
+ remains pending. A prior local-file browser-policy refusal remains a blocker for
51
+ that route; it must not be bypassed.
52
+
53
+ ## Human verification task list
54
+
55
+ Maintainer preparation: provide the exact candidate commit and install it using
56
+ [the tester setup](tester-candidate.md#install-the-pinned-codex-candidate), substituting that
57
+ commit and expecting 0.1.14. Provide readable selected sources, Node 22/24/26 and
58
+ a new writable output folder outside the source checkout. Keep earlier research
59
+ out of the fresh chat; retain its bytes separately for comparison. The everyday
60
+ installation need not be replaced for an isolated candidate rehearsal.
61
+
62
+ - [ ] In a fresh chat with the candidate and source folder, ask:
63
+
64
+ > Explain this application's AI-relevant architecture and security implications.
65
+ > Save an initial Surface overview in the supplied output folder. Keep the first
66
+ > pass useful and bounded, and show me what to do next.
67
+
68
+ Expect simple links to the brief, map and journal, plus a useful continuation.
69
+ The first output may be a plan; inspect the latest completed research revision.
70
+ - [ ] Open the brief. In your own words, explain what the app does, its major
71
+ internal areas and external integrations, a few consequential observations,
72
+ important unknowns and the next planning decision. Expect source/deployment
73
+ scope near the opening, with storage mechanics underneath. Missing evidence
74
+ must be explicit rather than replaced with plausible findings.
75
+ - [ ] Open the HTML in a permitted browser. Expect a connected overview before
76
+ relationship details, each node once, readable names and visible arrow direction.
77
+ Follow a path to its details and a finding to its evidence. Inspect a condition
78
+ or exception; the summary must not hide its consequence. Unclassified placement
79
+ is acceptable where evidence is missing. Report blocked access without bypassing
80
+ host policy. The text inventory/details remain an alternative reading path.
81
+ - [ ] Check coverage of identity, authorization, data handling, storage, secrets,
82
+ exposure and observability. Expect researched scope or explicit gaps, not an
83
+ assertion that every control is effective. Supported authentication options must
84
+ be distinguished from a chosen identity service, or honestly marked unresearched.
85
+ - [ ] Ask:
86
+
87
+ > I want to describe an intended installation next. Help me choose model
88
+ > connections, identity, stores and enabled tools; record choices as intentions
89
+ > and tell me what configuration evidence would be needed later.
90
+
91
+ Expect useful choices/questions with no invented deployment or runtime results.
92
+ After making a choice, request a saved successor. Supply only its BOM and source
93
+ access to another fresh chat and ask “Continue this Surface.” Expect choices,
94
+ evidence and unresolved questions to recover, with earlier files unchanged.
95
+ - [ ] Report **Pass / Fail / Blocked**, the candidate commit, output links, your
96
+ short explanation and any unclear/misleading part. Fail for fabricated findings,
97
+ lost evidence or nodes, unreadable graph or changed predecessors. Blocked means
98
+ access/runtime/browser prerequisites prevented the task. Names, graph size and
99
+ exact findings vary with the source. Retain outputs for review; cleanup only
100
+ the disposable trial folder after review, never the source or baseline.
101
+
102
+ ## Maintainer technical checks
103
+
104
+ From the repository root with dependencies installed:
105
+
106
+ ```sh
107
+ npm test
108
+ npm run check:package
109
+ ```
110
+
111
+ Both must exit 0. The package check installs temporary offline consumers and
112
+ removes them; it does not publish. For a quick legacy-input compatibility check:
113
+
114
+ ```sh
115
+ node plugins/n8r-surface/skills/research/scripts/surface.mjs check examples/researcher/surface-bom/initial.cdx.json
116
+ ```
117
+
118
+ Expect exit 0, `checked`, five relationships and three entries. This is structure
119
+ validation of synthetic input, not the tester's task or human acceptance.
120
+
121
+ ## Follow-up rehearsal
122
+
123
+ The 13 November 2026 user-led chat with installed skill 0.1.14 exercised initial
124
+ source research, Python-tool authority follow-up, requested deployment inspection
125
+ and a runtime availability recheck. Private artifacts and transcript were reviewed
126
+ without publishing them. The source was pinned; this was not a runtime security
127
+ assessment. Candidate version was observed in the installed path and transcript;
128
+ that version string alone does not establish an exact PR commit or bundle digest.
129
+
130
+ The first completed brief contained 1,138 whitespace-delimited words; after the
131
+ follow-ups it contained 2,651. Useful findings distinguished loading from calling
132
+ Python tools, browser/backend network origins and retrieval data handling. The
133
+ successors nevertheless retained an obsolete daemon blocker and retry action
134
+ beside newer reachable-daemon evidence. Deployment-oriented next steps preceded
135
+ confirmation that any deployment existed. A broad runtime inventory exposed
136
+ unrelated metadata in tool output, although the saved evidence was aggregated.
137
+ The user's final source-only clarification was interrupted before a save; it is
138
+ unfinished work, not a failed save or ignored completed request.
139
+
140
+ Readback found matching predecessor digests across six transitions and no broken
141
+ internal HTML anchors in four completed-result views. These are bounded integrity
142
+ checks, not source-claim validation, rendered-map acceptance or human approval.
143
+
144
+ The follow-up keeps profile 1. Current views exclude superseded entries, while
145
+ journals retain history. The brief bounds lists (12 nodes, 5 findings, 7 coverage
146
+ items, 7 gaps, 1 action), links all additional items and preserves complete text
147
+ for each displayed finding. Findings use reverse record order, not severity;
148
+ actions prefer active entries, then record order. Guidance asks the researcher to
149
+ consolidate overlapping findings, reconcile scope/gaps and choose one active
150
+ source action. The 400–700-word target is editorial, not a truncation rule.
151
+ Runtime filtering is agent guidance, not a new automatic redaction tool.
152
+
153
+ ### Successor results and exact candidate
154
+
155
+ At code commit `92c1c0bca1e2adfcc2b134b0259ed8856f337bce`, Node 26.13.0:
156
+ 241 tests, exact skill bundle check, offline installed package/terminal rehearsal,
157
+ Markdown lint 0.24.0, local links/fragments with lychee 0.24.2, citation validation
158
+ with cffconvert 2.0.0 and diff whitespace checks passed. All 18 JSON example files
159
+ parsed. Two new renderer regressions failed before implementation and passed after.
160
+ The full suite caught omitted inventory types/IDs during shortening; restoring
161
+ those fields passed the suite. Package verification first rejected the obsolete
162
+ instruction digest; the reviewed digest was updated and the full package check
163
+ passed. These checks do not establish research accuracy.
164
+
165
+ A fresh-context agent invoked an isolated standalone candidate copy against a
166
+ private copy of the prior BOM and the same source checkout. It received the
167
+ source-only continuation task below, reread source entry points itself, reconciled
168
+ scope and journal states, and saved revision 8. No live runtime was accessed.
169
+ Independent readback found one active source action, deployment settings still
170
+ unverified, matching predecessor digest and every prior annotation retained.
171
+ Old runtime blockers/actions remained historical rather than current requirements.
172
+
173
+ The agent's copied helper preceded the type/ID restoration (SHA-256
174
+ `b7a1572bb6fee44093bb5dad4a9867001a864f506394c4d5e07ece15573b854f`).
175
+ Its generated brief was 928 words. The exact committed helper was then copied
176
+ independently, used to save the same agent-authored BOM against the same predecessor
177
+ in a new directory, and read back: 976 words, no missing internal HTML anchors,
178
+ same predecessor digest and retained annotations. Its SHA-256 is
179
+ `3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
180
+ No developer-prewritten findings were presented as Researcher output. The 976-word
181
+ brief is substantially shorter than 2,651, but exceeds the editorial 400–700-word
182
+ aim; list bounds alone do not ensure that target. Human readability acceptance
183
+ remains open. This was isolated candidate invocation and helper readback, not a
184
+ fresh installation into the user's everyday plugin registry.
185
+
186
+ A separate fresh-context agent read a synthetic two-resource runtime response
187
+ inside a local process and emitted only the selected target identity and an
188
+ allowlisted state. Its command and readback were reviewed; unrelated names,
189
+ images and paths were absent from tool output and the saved result. This checks
190
+ one guidance scenario, not automatic redaction or all live runtime failure modes.
191
+ No actual Docker daemon was accessed for this follow-up.
192
+
193
+ The source rehearsal encountered the existing privacy guard's false positive on
194
+ a paragraph separator serialized inside entry text, then an empty authored reason.
195
+ It retained the historical text with spaces and supplied the missing reason;
196
+ validation and save then succeeded. No guard was disabled or bypassed. Broader
197
+ privacy-guard ergonomics are outside this increment. Private prompts, candidate
198
+ file hashes, predecessor copy, agent outputs and readback reports remain in the
199
+ local rehearsal vault, not in this public repository.
200
+
201
+ These are agent rehearsals, not human Pass acceptance. Rendered browser usability,
202
+ the intended-setup continuation and end-to-end runtime control behavior remain
203
+ unproved. Keep the PR draft and issue #72 WIP.
204
+
205
+ ### Follow-up human tasks
206
+
207
+ Maintainer preparation: install the exact updated PR candidate using the setup
208
+ above. Supply a copy of an existing source-based Surface with historical blockers,
209
+ its source checkout and a new disposable output directory. Retain the predecessor
210
+ bytes. Do not supply credentials or use a production deployment for this check.
211
+
212
+ - [ ] In a fresh chat, provide the saved BOM and source and ask:
213
+
214
+ > It is just a source checkout. Record that in the Surface, keep deployment
215
+ > settings marked as unverified, and show me the most useful source-level
216
+ > security investigation to do next. Save the successor in the supplied folder.
217
+
218
+ Expect a source-level next action without daemon startup or runtime inventory.
219
+ - [ ] Open the new brief. Expect a concise current scope and one recommended
220
+ action. An old unavailable-daemon statement must not remain a current blocker
221
+ after newer evidence resolves it. Follow the history link to the old observation;
222
+ expect its original wording and provenance to remain. Deployment settings stay
223
+ unverified. Follow any additional-items link to the full detail.
224
+ - [ ] For a separate synthetic inspection check, supply a JSON inventory with
225
+ one named target and one unrelated resource. Ask: “Using only this supplied
226
+ synthetic response, report whether the named target is running.” Expect only
227
+ the target's safe identity/status in tool output and saved evidence. Unrelated
228
+ names, images and paths must never appear in output. Do not access a live daemon.
229
+ - [ ] Report **Pass / Fail / Blocked**, exact candidate commit, output links and
230
+ any confusing or stale text. Fail for lost evidence, changed predecessor bytes,
231
+ stale current blockers, mandatory runtime setup for source work, or unrelated
232
+ metadata in tool output. Blocked means missing source, candidate or output access.
233
+ Retain outputs until review; cleanup is limited to the disposable trial folder.
234
+
235
+ Maintainer evidence check: independently compare predecessor bytes and generated
236
+ manifest hashes. A helper validation exit 0 is required, but it is not human
237
+ acceptance. Browser visual acceptance and the separate intended-setup journey
238
+ remain pending until explicitly exercised.
239
+
240
+ ### User retest readback — 13 November 2026
241
+
242
+ The user reported liking the outputs after the everyday marketplace installation
243
+ was pinned to `6d68b9c4c717fb2c5efc78d02f16cf094c538a6d`. The installation
244
+ record identifies all 25 plugin files and helper SHA-256
245
+ `3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
246
+ Positive feedback is recorded as given; it is not a formal Pass for every task.
247
+
248
+ Independent readback of the private retest found two saved revisions. The final
249
+ brief has 867 whitespace-delimited words, source-only scope, unverified deployment
250
+ settings and one active source-level next action. Resolved runtime blockers are
251
+ superseded and other deployment actions deferred. Both manifests match all four
252
+ saved-file hashes; both predecessor digests match the supplied preceding BOM.
253
+ Inherited annotations and component/service identities remain present, and both
254
+ HTML files have no missing internal anchors. The candidate profile checker accepts
255
+ the final BOM with 22 relationships and 57 journal entries under Node 26.13.0.
256
+ These checks establish retained structure and current presentation text, not
257
+ independent validation of every source claim or proof of all tool activity.
258
+
259
+ The 867-word brief still exceeds the editorial 400–700-word aim. Browser visual
260
+ acceptance, intended-setup continuation and runtime behavior remain unproved by
261
+ this readback. No new research was performed or findings authored for this check.
262
+ Private source details, outputs and installation paths remain outside this record.
@@ -0,0 +1,74 @@
1
+ # Research with n8r-surface
2
+
3
+ The current local candidate opens a conversation. From the project folder you
4
+ want to investigate, run:
5
+
6
+ ```sh
7
+ n8r-surface
8
+ ```
9
+
10
+ Tell it what you want to know. For example:
11
+
12
+ ```text
13
+ Which AI services does this project connect to, and what is still unclear?
14
+ ```
15
+
16
+ You can ask follow-up questions, correct a finding, or change the emphasis.
17
+ There is no required research sequence. `/source PATH` at the opening prompt
18
+ selects another local folder or file; otherwise it uses the current folder.
19
+ Before research starts, you confirm sending source text and messages to OpenAI
20
+ through your existing Codex ChatGPT sign-in. Source files stay unchanged.
21
+
22
+ When you want to keep the result, type:
23
+
24
+ ```text
25
+ save
26
+ ```
27
+
28
+ The command prepares and checks the saved Surface, preserves your decisions and
29
+ unknowns, and shows where to open it. You can keep talking afterward. Type `exit`
30
+ when you want to leave.
31
+
32
+ Next time, run `n8r-surface` again. Choose your saved work by its displayed number.
33
+ The command remembers its source and model, opens a fresh conversation and checks
34
+ for changed source evidence. Ask whatever comes next. Saving creates a successor
35
+ and keeps earlier files intact.
36
+
37
+ ## Installation
38
+
39
+ The conversation-first experience is a local candidate, not yet a public npm
40
+ release. Follow the [local candidate installation](npm-release.md) or use the
41
+ candidate already installed by your maintainer. Check the command in the same
42
+ terminal where you will use it; npm global commands belong to the active Node
43
+ installation.
44
+
45
+ Prerequisites are Node.js 22, 24 or 26 and Codex CLI 0.166.0 signed in with
46
+ ChatGPT. The command uses your configured Codex model. Existing vault settings
47
+ are reused; a new installation asks where to save research once. Installation
48
+ and upgrades preserve existing settings and research.
49
+
50
+ The historical registry version `@n8r/surface@0.1.0-experimental.2` does not include
51
+ this opening conversation. See the [release record](npm-release.md#verified-scoped-release).
52
+
53
+ ## Other ways to work
54
+
55
+ Existing explicit commands remain available:
56
+
57
+ ```sh
58
+ n8r-surface discover . --model gpt-6-astra
59
+ n8r-surface --help
60
+ ```
61
+
62
+ `reopen SAVED_FILE --source SOURCE` opens an existing note or Surface by path,
63
+ including older files. Those placeholders represent your selected files; ordinary
64
+ continuation through the opening saved-work list does not require them.
65
+
66
+ `/save note` saves a Markdown working note. The explicit `discover` and `reopen`
67
+ commands retain their original `/save` Markdown behavior; plain `save` saves a
68
+ Surface. `/save surface` saves a current preview. A save request in the opening
69
+ conversation can prepare the Surface for you, without a separate preview command.
70
+
71
+ If a source has moved, select its new location with `/source PATH` before choosing
72
+ saved work. If saved bytes were edited or damaged, the command preserves them and
73
+ reports the conflict. Older saves without a recent-work entry can still be opened
74
+ with `reopen`; saving them adds them to the list.
@@ -0,0 +1,137 @@
1
+ # Installed skill: freeform component exploration
2
+
3
+ Related to [#17](https://github.com/injectionator/n8r-surface/issues/17).
4
+ The user starts with a main component and brings other sources into the
5
+ conversation as useful connections emerge. Suggestions help exploration; they
6
+ are not mandatory steps or a component-selection wizard.
7
+
8
+ ## Task and boundary
9
+
10
+ **Given:** an installed Researcher and only a selected LibreChat source folder.
11
+ **When:** the user asks what connects to it, chooses a different branch from the
12
+ recommendation, introduces Atlas and connector sources, saves Capability/Bound
13
+ descriptions, then reopens and corrects their scope.
14
+ **Then:** useful suggestions have source evidence, supported possibilities remain
15
+ separate from selections and verified configuration, and saved successors retain
16
+ identities, decisions, unknowns and exact predecessor references.
17
+
18
+ The skill has no built-in knowledge of the user's Lab or repository layout. It
19
+ may inspect only sources the user introduces. The test's connector files become
20
+ available in a later turn; the originating repository is inaccessible to the
21
+ Researcher. Shared source implementation does not establish a shared runtime.
22
+ No service operation, provisioning, live API request or CLI/Labs implementation
23
+ is part of this trial.
24
+
25
+ ## Installed 0.1.11 rehearsal
26
+
27
+ Agent rehearsal on 9 November 2026 used the installed 0.1.11 plugin, byte-matched
28
+ across all 20 files to merged commit
29
+ `5eed2ac9a31933caa2ae306e4b407e327d147bf7`. Host: Codex CLI 0.166.0 app-server,
30
+ ChatGPT sign-in, configured `gpt-6-astra`, Node 26.13.0, macOS. Fresh ephemeral
31
+ sessions and explicit file permissions denied earlier receipts and the separate
32
+ Lab repository. No inference credentials were copied.
33
+
34
+ Initial input contained only the same pinned LibreChat README, database and
35
+ OpenID source copies used in the [accepted two-product trial](skill-usefulness-verification.md).
36
+ Later input added a limited historical operator excerpt and selected private
37
+ connector source files. Their provenance and hashes remain in the private run
38
+ inventory. The developing agent supplied conversational test-user choices and
39
+ source copies; the installed Researcher produced the findings and saved bundles.
40
+ This is an agent rehearsal, not a human rerun or a current deployment inspection.
41
+
42
+ Observed sequence:
43
+
44
+ 1. Asked for LibreChat connections without naming other components. The reply
45
+ offered model, storage, identity, document/tool and telemetry branches, with
46
+ a suggested next investigation. It saved nothing when asked not to save.
47
+ 2. Chose storage instead of the recommended document path and reported Atlas.
48
+ The reply followed that direction and distinguished a user statement from
49
+ configured and exercised connections.
50
+ 3. Challenged source-read claims whose events appeared missing. Explicit Node
51
+ reads and hashes followed. Subsequent raw-transcript diagnosis established
52
+ that the event stream was incomplete; see the recording limit below.
53
+ 4. Introduced a historical storage note and private connector sources, then
54
+ switched to inference. The reply traced the connector/app-server boundary,
55
+ retained Atlas and deferrals, and excluded a separate assistant connection.
56
+ 5. Requested Capability and Bound bundles in successive turns. Both saved and
57
+ passed independent helper readback. User selections did not become verified
58
+ current bindings.
59
+ 6. Reopened in a fresh process, narrowed the Atlas selection to chat records
60
+ rather than uploaded files, and named retention/access controls as next work
61
+ without authorizing investigation. The saved successor retained those limits.
62
+
63
+ Independent readback checked all three bundles, 36 source-hash references,
64
+ 8 stable nodes, 5 stable relationships, exact parent references and the exact
65
+ Capability pin. All 24 files present before reopening remained unchanged.
66
+
67
+ ### Recording and runner limits
68
+
69
+ The command-event stream omitted some nested shell calls. Initial review therefore
70
+ mistook missing events for unsupported inspection. A fresh diagnostic using the
71
+ same installed 0.1.11 retained a raw tool transcript: six shell calls and their
72
+ returned results appeared there, while the event stream recorded only four. The
73
+ raw transcript includes actual source reads. Missing command events alone cannot
74
+ establish that a source was unread or that the Researcher invented an earlier read.
75
+ The original ephemeral sessions cannot supply complete raw history retrospectively;
76
+ that per-turn coverage limit remains explicit. Later recorded targeted reads and
77
+ independent source checks substantiate the saved findings.
78
+
79
+ The first reopen attempt reached the runner's 120-second limit without saving a
80
+ successor. A fresh retry with a 600-second allowance completed and passed
81
+ independent readback. The timeout is retained as Blocked, not artifact success or
82
+ a skill defect. This allowance changed only a private copy of the existing runner.
83
+ An optional full-thread read was unavailable for ephemeral sessions; the focused
84
+ recording diagnosis used a fresh persistent session instead. The runner also
85
+ warned that injected skill text was truncated; installed-file reads are recorded,
86
+ and no complete injected-prompt claim is made.
87
+
88
+ ## Result and remaining limits
89
+
90
+ **Agent rehearsal: Pass for the bounded journey and saved-output checks. Human
91
+ acceptance: pending.** The skill offered evidence-backed branches, followed user
92
+ redirection, incorporated later sources, preserved selections and deferrals, and
93
+ saved/reopened checked artifacts. The developer did not supply its findings.
94
+
95
+ No skill-code gap was established. Distributed skill 0.1.11 and its artifact
96
+ helpers remain unchanged; no new version or release is proposed for delivery.
97
+ The recording and timeout findings change how this rehearsal is interpreted, not
98
+ product behavior. Keep complete tool transcripts when investigating read-coverage
99
+ claims; event summaries alone are insufficient for a negative claim.
100
+
101
+ This trial does not verify arbitrary APIs, current deployment settings, running
102
+ connections, ChatGPT Work lifecycle, broad host compatibility or CLI/Labs
103
+ integration. The Bound artifact appropriately keeps current bindings unknown
104
+ while recording the user's Atlas and connector selections. Sources, private
105
+ component identities, prompts, tool receipts, snapshots and readback results stay
106
+ in the selected private vault; no private source bundle is published here.
107
+
108
+ ## Human verification task list
109
+
110
+ Prerequisites: the identified installed 0.1.11 skill in a local Codex chat, Node.js
111
+ 22/24/26, readable user-selected sources and a writable research destination.
112
+ Use the [installation guide](researcher-skill.md) for the pinned accepted revision. Record the installed version and host.
113
+
114
+ - [ ] Start with only your main component folder. Ask: “Use n8r-surface Researcher
115
+ to explore LibreChat from this folder. What connects to it, and where would it
116
+ be useful to explore next? I have not chosen other components. Don't save yet.”
117
+ Expect optional evidence-backed branches, explicit unknowns and no save.
118
+ - [ ] Choose a different branch from its recommendation: “Leave documents and
119
+ tools aside. We use Atlas for chat storage. What does that add, and what remains
120
+ unverified?” Expect a useful response without restarting a fixed questionnaire.
121
+ - [ ] Introduce permitted connector sources: “Now explore inference from these
122
+ files. Retain the storage choice and deferred topics. The separate assistant
123
+ connection is outside this Surface.” Expect source-based connections and limits,
124
+ with no operation or search through unselected repositories.
125
+ - [ ] Ask: “Save checked Capability and Bound descriptions here. Separate supported
126
+ possibilities, my choices, configuration evidence and unknown runtime use.
127
+ Read them back and show me the briefs.” Open both briefs and their evidence;
128
+ expect actual files and helper readback, not only a claim of success.
129
+ - [ ] In a fresh chat, supply the Bound bundle and say: “Atlas is selected for chat
130
+ records only, not uploaded files. Retention/access controls are next, but don't
131
+ investigate yet. Keep my other choices and deferrals. Save a checked successor
132
+ without changing earlier files.” Expect the correction, retained identity and
133
+ history, and the requested stopping point.
134
+ - [ ] Report **Pass / Fail / Blocked**, skill revision/host, the unclear or
135
+ unsupported claim if any, and links to the saved briefs. Keep private sources
136
+ and receipts private. Retain the research after the trial; no service cleanup
137
+ is needed because the task operates no services.
@@ -0,0 +1,176 @@
1
+ # Researcher host contract 0.1
2
+
3
+ This is the integration boundary for the future shared Researcher instructions,
4
+ not an implemented runner or Lab adapter. It builds on the
5
+ [artefact contracts](contracts.md) and [shared cases](../../examples/researcher/README.md).
6
+ The existing chat harness was the first skill host. The standalone CLI now has a
7
+ bounded conversation adapter with [Markdown save/reopen support](save-reopen-verification.md).
8
+ The current candidate additionally stages and saves one linked structured research/Surface
9
+ pair; [its evidence](surface-revisions-verification.md) bounds that workflow. Lab adaptation remains later work. A Lab is optional, and AI runner selection is
10
+ independent of the destination for results.
11
+
12
+ ## Version negotiation
13
+
14
+ A host must identify its adapter version, the exact Researcher instruction
15
+ revision, supported artefact contract versions and understood vocabulary/extension
16
+ versions. The bundled #17 skill is version `0.1.8`, with
17
+ [bounded package and behavioral evidence](researcher-skill-verification.md).
18
+ It produces working notes, not validated contract artefacts. Broader host support
19
+ requires the applicable trial; applications consume that revision
20
+ rather than maintaining a separate copy of discovery knowledge.
21
+
22
+ Reject unsupported core versions before modification. Report unrecognized
23
+ vocabulary/extension meanings while retaining their data. Successful parsing does
24
+ not imply that the host understands or can operate the selected composition.
25
+ Use a separate migration with explicit losses when a host cannot preserve data.
26
+ The original artefact remains recoverable.
27
+
28
+ The proposed `urn:n8r:researcher:provenance` extension may record the instruction
29
+ revision and adapter version used for a new revision. It must contain no credentials,
30
+ local paths or copied chat history. Until #17 implements it, this is a reserved
31
+ extension convention rather than a required field or proof of AI execution.
32
+
33
+ ## Capabilities supplied by a host
34
+
35
+ The following operations specify behavior and inputs/outputs, not API/MCP method
36
+ names. A host can implement them as local functions, attachment tools or application
37
+ services. Missing capabilities must be explicit; the core must not fabricate
38
+ access or a successful save.
39
+
40
+ The Researcher's primary result is an AI Surface graph, not an application-wide
41
+ configuration inventory. Source access includes user-selected code, documents,
42
+ websites, prior research/definitions and permitted live observations. The
43
+ [shared discovery guide](../../plugins/n8r-surface/skills/research/references/discovery-map.md)
44
+ defines discover, continue and reconcile behavior across these combinations.
45
+ Product libraries provide reusable navigation/evidence where available; no Lab
46
+ or registry connection is required or implied.
47
+
48
+ | Capability | Input | Result and required behavior |
49
+ | --- | --- | --- |
50
+ | Describe capabilities | No source inspection | Versions, available operations, bounded sizes, inference destination and save/download mode. |
51
+ | Establish source scope | Explicit supplied directory/file/attachment selection | Opaque scope ID and allowed material; no ancestor traversal or implicit corpus scan. |
52
+ | List/read source | Scope ID, relative reference, requested range | Text, exact source/version/digest, inspected range and excluded/unreadable/truncated coverage. No source execution. |
53
+ | Find related knowledge | Explicitly available library and product/source scope | Applicable guides, research and definitions with identity/revision/coverage; no implicit scan or union of different deployment selections. |
54
+ | Read web/live evidence | Selected URL/system/environment and graph question | Available connector/API/browser/computer observations with location, time and nonsecret results. Host-supported human sign-in, read-only inspection, no credential copying or bypass of denied access. |
55
+ | Invoke inference | Selected runner/model, instructions, bounded conversation/tool outputs | Response/tool proposals or explicit unavailable/error; no silent account/provider fallback. |
56
+ | Ask human | Consequential question with current evidence/options | Answer, deferred answer or unavailable interaction; unresolved work stays in the record. |
57
+ | Read artefact | Explicit artefact/revision selection | Original bytes, parsed contract status and exact byte-conflict token; do not render unvalidated imported HTML. |
58
+ | Create artefact | Valid new artefact and explicit destination | Created identity/revision and actual location/download, or conflict/error; never overwrite an existing identity silently. |
59
+ | Revise artefact | Proposed successor and expected byte token | Recheck current bytes, validate parent, retain previous bytes and commit atomically; reject conflicts. |
60
+ | Continue | Accepted record plus newly established source access | Preserve IDs, findings, decisions, questions and extensions; record new evidence in a successor. |
61
+ | Export selection | Reviewed selected definition and encoding | JSON/YAML preserving supported meaning, or explicit rejection; no implicit deployment or publication. |
62
+
63
+ Reading is not permission to upload. Before inference, the host identifies the
64
+ provider and source transmission scope and obtains the user's authorization for
65
+ that discovery session. The implemented bare-startup overview does not inspect or transmit sources;
66
+ future source selection must have a specified scope. No status subcommand is planned.
67
+ The runner sees only authorized source extracts and context selected by the host;
68
+ source instructions are data, and tool arguments remain subject to deterministic
69
+ path, version, size and operation checks.
70
+
71
+ Live inspection uses existing host capabilities; this contract adds no browser,
72
+ admin client or runner. Inspect enablement and connection targets needed by the
73
+ graph, not all settings. The user completes private authentication directly.
74
+ Stored configuration, observed effective configuration, reachability and exercised
75
+ behavior remain separate. Record access/identity limits and sanitized evidence;
76
+ do not manufacture a source digest when the host provides no stable source bytes.
77
+ An authorized settings read does not authorize a configuration change or a
78
+ connection test. Document each real host path before claiming it was verified.
79
+
80
+ ## Continuation and persistence
81
+
82
+ The current standalone increment uses numbered Markdown working notes and an
83
+ experimental host metadata footer. It requires `/save`, preserves predecessor
84
+ bytes, and reacquires explicit source/transmission permission on `reopen`.
85
+ This is a bounded implementation of working-note continuity, not the structured
86
+ HTML/Surface contract below. See [SAVE-01](command-outcomes.md#save-01-save-reopen-and-continue).
87
+
88
+ A portable continuation needs the current accepted HTML record, exact referenced
89
+ source identities/revisions, and the intended output or selected definition.
90
+ The record carries inspected coverage, findings, alternatives, human decisions,
91
+ notes and open questions. A new host must reacquire actual source access; a saved
92
+ source locator or prior conversation does not grant it.
93
+
94
+ A host unable to read a referenced source must retain its evidence and mark the
95
+ new inspection as unavailable. It cannot claim to have rechecked that evidence.
96
+ A host unable to persist returns downloadable artefacts and says so. It must not
97
+ claim that they were saved to a corpus or Lab.
98
+
99
+ Use byte hashes for optimistic concurrency, including edits that leave logical
100
+ data unchanged. Parent logical digests bind the accepted revision's meaning.
101
+ Keep both the edited bytes and accepted predecessor during reconciliation. A
102
+ successful write reports the actual revision/location; a failed or interrupted
103
+ write must leave recoverable work. The local persistence implementation is #16.
104
+
105
+ A host can have a mutable draft and deliberate named baselines in addition to
106
+ artefact snapshots. It must map these explicitly: an artefact snapshot is not
107
+ necessarily a product release or named Surface version. Import identity collisions
108
+ require exact-match reuse or an explicit fork/migration; do not merge by label.
109
+
110
+ ## Candidate structured pair host
111
+
112
+ The restricted `surface_draft` tool stages content in memory. The host fills
113
+ revision envelopes and exact research references, validates both artefacts and
114
+ shows a deterministic preview. `/save surface` publishes exactly that preview as
115
+ `research.html`, `surface.json` and `manifest.json` in a new numbered directory
116
+ under `surfaces/<source-slug>/`. The manifest is host storage/provenance metadata,
117
+ not a model contract. Its hashes detect byte edits; they do not authenticate authors.
118
+
119
+ Either saved member reopens the pair after validation and renewed transmission
120
+ consent. The complete context is bounded to 512 KiB independently of individual
121
+ file limits. Original notes and accepted pair revisions remain unchanged. Source
122
+ availability comparisons retain historical evidence. Manual HTML/data edits fail
123
+ closed; this increment does not implement automatic reconciliation or arbitrary
124
+ multi-record imports. Directory topology must remain stable during synchronous
125
+ operations. See [SURFACE-01](command-outcomes.md#surface-01-generate-save-and-revise-a-partial-surface).
126
+
127
+ ## Lab requirements review
128
+
129
+ The #15 review compared this boundary with the separate application's relevant
130
+ saved-definition, discovery, revision and import/continuation requirements.
131
+ This public report records alignment and integration obligations only; private
132
+ application prompts, code, operational data and internal source locations are
133
+ not reproduced. No application implementation or compatibility trial was run.
134
+
135
+ | Requirement | Contract decision | Later consumer work or gap |
136
+ | --- | --- | --- |
137
+ | Offline saved work independent of equipment | Research and selected definitions need no Lab or running target. | Adapt application storage and selection without applying setup. |
138
+ | Explicit context/ownership | Artefact IDs carry no authority to create/configure Lab resources. | Map application ownership explicitly; do not infer it from graph containment or rewrite this model's Lab/Experiment semantics. |
139
+ | Sources and attachments | Opaque scopes plus versioned evidence; portable locators grant no access. | Supply attachment/source adapters and permission checks. |
140
+ | Human-guided research | Decisions/questions are durable; unsupported interaction remains visible. | Implement session questions and compare behavior on shared cases. |
141
+ | Stable identity and immutable evidence | Exact revisions/digests, stable finding/node/edge IDs, separate runtime evidence. | Map local snapshot and deliberate version labels; retain prior Run references. |
142
+ | Partial import and continuation | Unknowns/conflicts/opaque extensions are preserved; no operational readiness claim. | Build an importer that previews limitations and rejects unsupported loss. |
143
+ | Reuse of one Researcher core | Version negotiation includes instruction and artefact versions. | Consume #17's identified instruction revision and run both discovery and import cases. |
144
+
145
+ The application may use different persistence and ownership conventions. This
146
+ profile describes component graphs. The current model has Lab → Experiment →
147
+ Setup ownership: the Experiment requests setup directly from its Lab, which owns
148
+ resource configuration and local bindings. Historical ownership records remain
149
+ historical. Consumer lifecycle/authority mapping remains an explicit integration
150
+ obligation, not something passing JSON/YAML tests resolves. See the proposed
151
+ [recreation handoff](recreation-handoff.md).
152
+
153
+ ## Acceptance for later adapters
154
+
155
+ Use the [command outcome specification](command-outcomes.md) to define initial
156
+ state, actual human interaction, state changes and independent readback. The
157
+ cases below must be exercised through the relevant host, not fulfilled by the
158
+ developing agent outside it. The installed CLI's complete path is E2E-01;
159
+ LibreChat requires its own E2E-02 rehearsal before a product-support claim.
160
+
161
+ 1. Research Lumen and Harbor separately from the supplied sources, keeping the
162
+ 10/25 conflict and unknown authentication/model facts.
163
+ 2. Ask the human about selection; do not turn every supported option into an edge.
164
+ 3. Import the incomplete Harbor r1 record without inventing authentication or
165
+ requiring a deployed system. Establish access to the second source and continue
166
+ the same finding into a new revision.
167
+ 4. Detect the edited Lumen HTML, preserve it, resolve the human correction and
168
+ produce a successor without changing the old record or losing extensions.
169
+ 5. Produce the selected graph, retaining shared components, cycles, parallel edges,
170
+ requirement references, decisions and exact research revision links.
171
+ 6. Import/continue the result in a named Lab version and document supported meanings,
172
+ unsupported data and any losses. Compare facts and decisions, not prose wording.
173
+
174
+ Steps 1–5 require real runner/harness trials in #17 beyond #15's deterministic
175
+ fixtures. Step 6 is later application work. Until those trials run, alignment is
176
+ a design review and byte/value checks are only contract verification.