@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,725 @@
1
+ # Researcher skill verification
2
+
3
+ **Candidate:** `n8r-surface:research` (**n8r-surface Researcher**) **0.1.8**, updated 5 November 2026.
4
+ This is a partial #17 increment. ChatGPT desktop / Work lifecycle acceptance is
5
+ **pending**, not passed. No Lab or standalone CLI research claim follows.
6
+ The bounded Skeleton Surface creation and reconciliation human checks passed;
7
+ see the human verification record below.
8
+
9
+ The implementation/evidence commits are identified by the associated draft PR;
10
+ use the exact candidate commit when repeating the procedure.
11
+
12
+ ## Skeleton Surface: 0.1.8
13
+
14
+ The authorized increment defines Skeleton Surface v0.1 as a provisional Markdown
15
+ brief and adds the [installed-skill procedure](researcher-skeleton-check.md).
16
+ State X is installed 0.1.7 and the synthetic Cedar Chat source pack revision 1.
17
+ Input Y is SKELETON-01's exact brief/save prompt. Outcome Z adds named profile
18
+ and revision guidance, linked evidence, interception coverage and explicit
19
+ successor reconciliation without setup changes.
20
+
21
+ The baseline agent read installed 0.1.7 and both source files, saved and read back
22
+ its own brief. It already distinguished model proposals from actual MCP calls,
23
+ identified the hook's allow/deny powers and worker/browser bypasses, and retained
24
+ source hashes and unknowns. These behaviors passed and are retained, not invented
25
+ failures. The output had no named profile version or explicit Surface revision;
26
+ 0.1.7 had no named profile/lifecycle procedure. The user explicitly authorized
27
+ that missing guidance. At that stage, human acceptance and automatic Lab
28
+ recording remained unproved.
29
+
30
+ ### Installed candidate and agent rehearsal
31
+
32
+ Implementation `7ba88ae2fef186d0e3f836a034e422f8bbe19b03` was pushed before
33
+ installation. The documented marketplace remove/add route switched the existing
34
+ Git marketplace from the merged prior branch to `feat/17-skeleton-surface`;
35
+ plugin add/list completed successfully. All four commands exited 0. The fetched
36
+ snapshot matched that implementation commit; exactly one enabled 0.1.8 was listed
37
+ and all twelve installed package files matched the maintained source bytes.
38
+ Environment: 4 November 2026, macOS ARM64, Codex CLI 0.139.0, Python 3.13.1,
39
+ local filesystem harness. No separate model API or target service was configured.
40
+
41
+ A fresh agent read the installed 0.1.8 skill and bundled references, then executed
42
+ SKELETON-01's exact prompt against the same two source files as the baseline. It
43
+ saved/read back a 6,321-byte Markdown brief identifying Skeleton Surface v0.1 and
44
+ Surface working-draft revision 1. Independent inspection checked the source
45
+ hashes, twelve node labels, nine edge IDs, interception opportunities, hook powers,
46
+ browser/worker bypasses, unknown bindings and portable evidence references.
47
+
48
+ The coordinator preserved the first output and original source bytes, then made
49
+ only SKELETON-02's documented comment/database/inference declaration edits in the
50
+ disposable settings copy. A different fresh agent received the predecessor,
51
+ current two-file source and exact reconciliation prompt through installed 0.1.8.
52
+ It saved/read back revision 2, retained the profile and all twelve node/nine edge
53
+ identities, and distinguished the two new declarations from effective bindings
54
+ or successful connections. It did not infer proxy behavior from a hostname. Its
55
+ comparison also retained the older documentation statement as separate evidence.
56
+ The agent inherited old settings claims from the predecessor; it was not supplied
57
+ the separately preserved revision-1 settings bytes. The coordinator checked those
58
+ bytes independently. No developing agent wrote either agent's research findings.
59
+
60
+ Independent readback confirmed the first output remained byte-identical, both
61
+ current source hashes matched the successor, and sources were unchanged during
62
+ research. Outputs remain in the selected vault's trial folder; local paths and
63
+ private comparison research are not published. The three existing private Surface
64
+ files were reviewed locally for meaning/coverage differences and their index
65
+ hashes remained unchanged; they are not public fixtures or verified product claims.
66
+
67
+ | Evidence | SHA-256 |
68
+ | --- | --- |
69
+ | Installed-0.1.7 baseline brief | `e190c63c4aafa0b6c12e615b510b7e3beec1a25af13872356be25e78a4c3fdcd` |
70
+ | Installed-0.1.8 skill | `cd38dcd85f67ca962f06d86178009308aea527c9783fa0e0a3f834f783f1ebf4` |
71
+ | Candidate first brief | `1877d2997d9d3ad60bb7241e64ee3907ce0d2e74d8100ff4995ef5e11003de93` |
72
+ | Candidate successor | `c91c2131236a8a95c4e8a1d4344ca02c62dd6ffee257e408a937709634dfd746` |
73
+ | Changed synthetic settings | `7e52617dd0918509038a4fc558ba3fb35db30fb268dfd16c9d4d166e0d6bb9a0` |
74
+
75
+ ### Checks and limits
76
+
77
+ Skill frontmatter, aligned manifests, 124 changed-file local Markdown links/anchors,
78
+ JSON example syntax, whitespace, repository Markdown lint and all 24 offline
79
+ Python tests passed. Independent scoped review found no actionable issues. GitHub
80
+ checks on implementation `7ba88ae` passed, including library and package checks
81
+ on Node 22, 24 and 26, fixtures/tooling, Markdown and local links. No local npm
82
+ run is claimed for this instruction-only change. Lychee was unavailable locally;
83
+ its full local-link check passed in CI. Eight unrelated working files were retained
84
+ and excluded from commits; the branch switch incorporated only the upstream
85
+ comment change in one of them before their preservation hashes were recorded.
86
+
87
+ This was a bounded installed-instruction agent rehearsal, not human acceptance,
88
+ enforced source/memory isolation, Work UI lifecycle, runtime security enforcement,
89
+ Lab automation, vendor compatibility or structured-output validation. No service
90
+ was installed or started for the source pack. The separate human trial follows.
91
+ Detailed and recreation profiles remain future work.
92
+
93
+ ### Human verification: 5 November 2026
94
+
95
+ The tester reported **Pass** for both SKELETON-01 and SKELETON-02 in the
96
+ [walkthrough](researcher-skeleton-check.md), against candidate
97
+ `9ca7e5352401f2c35a5d5eb066b85651cadfaf12`. The guided prompts supplied the trial
98
+ folder and restricted evidence to its source files, plus the predecessor for
99
+ reconciliation, without other chats, projects or the web. Each step requested a
100
+ fresh chat with installed Researcher 0.1.8. Source/memory isolation was not enforced.
101
+
102
+ Preparation and independent readback used macOS ARM64, Codex app
103
+ 26.1021.31345 (build 21828, bundle `com.openai.codex`), Codex CLI 0.139.0 and
104
+ Python 3.13.1. All twelve installed package files matched the candidate before
105
+ the trial and after the second pass. The existing agent rehearsal above remains
106
+ a separate result.
107
+
108
+ SKELETON-01 saved `skeleton-surface-001.md` (7,544 bytes). Independent readback
109
+ confirmed Skeleton Surface v0.1, Surface revision 001, both source hashes,
110
+ unknown bindings, documented hook powers and worker/browser bypasses. Both
111
+ revision-1 source files were unchanged. The coordinator preserved the output
112
+ and original sources, then changed only the disposable settings comment and
113
+ the two target values specified by SKELETON-02.
114
+
115
+ SKELETON-02 saved `skeleton-surface-002.md` (12,254 bytes). Readback confirmed
116
+ the unchanged first output, twelve stable role identities, all nine edge IDs
117
+ and an unchanged interception table. The successor retained the profile version,
118
+ recorded Surface revision 002 and distinguished the new database/inference
119
+ declarations from effective configuration or successful connections. It noted
120
+ the unchanged product-document statement separately and attributed old settings
121
+ to the predecessor rather than claiming to have read historical settings bytes.
122
+ Both current source hashes matched their values before reconciliation. Relative
123
+ source/predecessor links and heading anchors resolved; the successor explicitly
124
+ warned that the predecessor's settings link now points to current source bytes.
125
+
126
+ | Human-trial evidence | SHA-256 |
127
+ | --- | --- |
128
+ | First brief | `b4003865e0ed79514392438cfee0434bf5fad63086d94fb6309845754a56d758` |
129
+ | Successor | `3f99713f240642c8c06baa55025c22a1ae3dc9658bfd6d50075f10f2f8f986e0` |
130
+ | Product document, unchanged | `5836520dcb2c6912988f57cbf6d88f557a69d14f7433c34a1387e0565753b997` |
131
+ | Original settings, preserved | `6ae9b186a8bae39c70180e753baea8ae0c28ce2f66c0d1aa757b537609192b85` |
132
+ | Changed settings | `7e52617dd0918509038a4fc558ba3fb35db30fb268dfd16c9d4d166e0d6bb9a0` |
133
+
134
+ The outputs and preservation copies remain local; no local paths or research
135
+ files are published here. This human acceptance covers the two Markdown brief
136
+ interactions. Work picker/unload/reinstall lifecycle, live enforcement, automatic
137
+ Lab revision recording, vendor compatibility and validated structured output
138
+ remain unproved. Issue #17 remains open; review readiness and merge are separate
139
+ decisions.
140
+
141
+ ## Optional save offer: 0.1.7
142
+
143
+ State X: a real source investigation through installed 0.1.6 returned a partial
144
+ map without offering persistence. The user clarified that save-on-request is
145
+ intentional and requested an optional offer. Input Y: investigate supplied
146
+ sources without a save instruction. Outcome Z: show the graph, offer once to
147
+ save a numbered Markdown Surface working draft at the resolved destination,
148
+ and write only after acceptance. Existing save authorization needs no new question;
149
+ a declined offer is not repeated. Structured conversion remains a separate step.
150
+
151
+ ### Human verification
152
+
153
+ Prerequisites: installed Researcher 0.1.7, a local host with file access, and the
154
+ [prepared source pack](../../examples/researcher-vault/chat-service). Open a fresh
155
+ chat with that folder selected. Choose an unused folder under your vault's `runs/`
156
+ for this trial; tell the chat to use it as the test vault, with Surface drafts in
157
+ `surfaces/<source-slug>/`. No service, credentials or installation is needed beyond
158
+ the existing skill. These are conversational interactions, with no exit code.
159
+
160
+ - [ ] Select Researcher and ask: “Map the AI connections in this source folder.”
161
+ Expect a partial graph with evidence and runtime unknowns, followed by one
162
+ optional save offer naming a numbered file. Check the test vault: no file or
163
+ directory has been created by the offer.
164
+ - [ ] Reply: “No, keep it in chat. Explain the unresolved search connection.”
165
+ Expect continued analysis without a write or another save offer.
166
+ - [ ] Reply: “Now save the Surface working draft in the test vault.” Expect a
167
+ save without another permission question, followed by readback and an openable
168
+ file link. Open it: graph, evidence, limits and Recommended next steps remain.
169
+ It is Markdown working research, not a validated JSON definition.
170
+
171
+ Report **Pass / Fail / Blocked**, skill/app version, the offered path, saved link
172
+ and any failed step. Wording and unused numbers may vary. A premature write,
173
+ repeated offer after refusal, or unnecessary confirmation of the explicit save
174
+ is a failure. Keep the test output for review; optional cleanup removes only the
175
+ new test folder after review.
176
+
177
+ ### Maintainer evidence
178
+
179
+ The baseline is the observed installed-0.1.6 conversation, not a synthetic failed
180
+ run. Implementation `0431c547b108db29fcfca790a1fbfe6dfde316e1` was pushed and installed
181
+ using the documented marketplace upgrade/add/list commands (all exit 0).
182
+ Exactly one enabled 0.1.7 was listed; all eleven installed package files matched
183
+ maintained source. Environment: macOS, Codex CLI 0.139.0, local filesystem harness.
184
+
185
+ A fresh agent investigated the prepared pack through the candidate source skill,
186
+ returned an evidenced map and offered a concrete numbered file. Independent
187
+ inspection confirmed the proposed test directory did not exist. After a simulated
188
+ user refusal, it explained the search gap without saving or repeating the offer.
189
+ After a simulated explicit save request, it reread the installed 0.1.7 skill,
190
+ re-established source identity and saved/read back the draft without another
191
+ confirmation. The developing agent did not write its research findings.
192
+
193
+ Independent readback checked all three source hashes, graph, uncertainty,
194
+ recommendations and source revision change (source bytes unchanged). The trial
195
+ used a disposable vault `runs/` folder. The note's “Human decisions” section
196
+ records simulated test replies, not separate human acceptance.
197
+ Saved draft SHA-256: `3ec9e68f1eb9ac67bff2fb6c0a9d90d929ead2256227e1606e76889568d7932b`.
198
+ Installed skill SHA-256:
199
+ `2d18698959fb8a23140ee577cac706c5f9594bda2e94742980fbb18094bb29ac`.
200
+
201
+ Skill frontmatter, 57 local Markdown links/anchors, JSON example syntax and
202
+ whitespace checks passed. All eight unrelated working files were hash-checked
203
+ unchanged. Markdownlint was unavailable on PATH and was not run. No runtime
204
+ code changed; library/CLI tests were not needed for this instruction increment.
205
+ This is one bounded agent rehearsal, not a statistical behavior benchmark.
206
+ Human acceptance and Work UI lifecycle remain separate and pending.
207
+
208
+ ## Saved recommendations: 0.1.6
209
+
210
+ State X: installed 0.1.5 had generic remaining-work and predecessor instructions,
211
+ but no required recommendation section, Surface-note precedence or three-part
212
+ resumption guidance. A fresh Researcher read the installed skill and the prepared
213
+ chat-service source pack, then saved/read back a research note. Independent
214
+ inspection found a general continuation paragraph but no **Recommended next steps**
215
+ section. The developing agent did not write the findings.
216
+
217
+ Input Y: map the prepared sources and save; then, in a fresh chat, read the saved
218
+ recommendations, compare the sources after changing the document-search address,
219
+ and save a successor. Outcome Z: actionable recommendations in both notes, used
220
+ and updated on continuation, with the predecessor preserved. The
221
+ [prepared walkthrough](researcher-prepared-check.md) supplies the exact prompts,
222
+ visible checks and Pass / Fail / Blocked report. Use installed 0.1.6 and a fresh
223
+ run folder; no live service is needed. Surface-note precedence is a separate
224
+ instruction check; this source-pack rehearsal uses research notes.
225
+
226
+ Candidate 0.1.6 adds the rule and detailed note guidance, updates both manifests
227
+ and the installation/walkthrough version. Implementation
228
+ `c682615e124ca8aded3b771080c7a5e3a2da63e5` was pushed before the requested
229
+ `codex plugin marketplace upgrade n8r-surface`,
230
+ `codex plugin add n8r-surface@n8r-surface --json` and
231
+ `codex plugin list --marketplace n8r-surface --json`. All exited 0. The fetched
232
+ marketplace matched that commit; exactly one enabled 0.1.6 was listed, and all
233
+ eleven installed files matched the maintained source byte for byte.
234
+
235
+ Two fresh Researcher agents then rehearsed the prepared save/continue interactions
236
+ through installed 0.1.6. The first received only the three prepared sources and
237
+ saved `ai-components-001.md`. After independent readback and a preservation copy,
238
+ the coordinator changed only the disposable `DOCUMENT_SEARCH_URL` value to
239
+ `https://search.example.test`. The second agent read the predecessor and current
240
+ sources and saved `ai-components-002.md`. Neither received prewritten findings,
241
+ the parent's transcript or the walkthrough's expected results.
242
+
243
+ Independent readback verified all three current source hashes, six stable
244
+ component IDs, working relative note links and unchanged predecessor bytes. Both
245
+ notes contain **Recommended next steps** with investigation, reason and resumption
246
+ point. The successor explicitly resolves the missing target declaration and
247
+ changes the first recommendation to investigating effective use, while retaining
248
+ the remaining unknowns and evidence blockers. It does not claim the service works.
249
+ Shared source examples and the eight unrelated working files stayed unchanged.
250
+
251
+ | Saved evidence | SHA-256 |
252
+ | --- | --- |
253
+ | Installed-0.1.5 baseline | `f46380ea3e07f9461911a6d92adcaf77008bcba29250c2786ef21a1abeda717c` |
254
+ | Installed-0.1.6 first note | `44898be0a3ec75388111022d1a5f5606595b339e0635e05360211a2a65ea2e6e` |
255
+ | Installed-0.1.6 successor | `aef6ac573f5566214acc4119493e7703e1c99e6c254317332449f4ceaf0800f8` |
256
+ | Installed-0.1.6 skill | `fa10fe3f93a5f52f114f5a97507e1f22cdb13b4e9c888111f8a4d12a198cefeb` |
257
+
258
+ Environment: 4 November 2026, macOS ARM64, Codex CLI 0.139.0 and fresh local
259
+ host agents with filesystem tools. Outputs remain in the selected vault's
260
+ `runs/` directory. This is an agent rehearsal, not human acceptance or enforced
261
+ source/memory isolation. A separate fresh instruction check recovered Surface-note
262
+ precedence, preservation of older notes without recommendations and respect for
263
+ narrowed user scope; it did not exercise a saved Surface successor.
264
+
265
+ Seven changed Markdown files passed markdownlint-cli2 0.24.0 with MD013/MD041
266
+ disabled; 55 local links/anchors, manifest versions and whitespace passed. Three
267
+ JSON examples parsed (syntax only). Focused review found no actionable issue.
268
+ No npm/library/CLI behavior changed or is claimed tested. This remains a partial
269
+ increment of issue #17; structured-output, runtime and Work UI acceptance remain
270
+ unproved.
271
+
272
+ ## Repository vault rehearsal: 0.1.5
273
+
274
+ The [vault walkthrough](researcher-prepared-check.md) adds prepared fictional documents and a
275
+ teammate walkthrough to this repository. The initial state is an already installed
276
+ 0.1.5 skill and a fresh copy of source pack version 1 under `vault/runs/`. The
277
+ expected outcome is two saved notes: a baseline, then a comparison after changing
278
+ only the document-search address. Before this increment, the teammate procedure
279
+ required a maintainer to prepare a separate source checkout and input folder.
280
+ No installed-skill behavior or package bytes changed.
281
+
282
+ On 4 November 2026, two fresh Researcher agents rehearsed the prompts through the
283
+ installed 0.1.5 instructions. Neither received the parent transcript or expected
284
+ findings. The first read the three input files and saved `ai-surface-001.md`.
285
+ After independent readback, the coordinator copied the note for preservation and
286
+ changed only `DOCUMENT_SEARCH_URL=` to
287
+ `DOCUMENT_SEARCH_URL=https://search.example.test` in the disposable working copy.
288
+ The second agent received the first note and the current three input files,
289
+ then saved `ai-surface-002.md`. Neither output was prewritten by the coordinator.
290
+
291
+ Independent readback checked all three baseline and four comparison evidence
292
+ hashes, source links and the six stable component labels. The comparison retained
293
+ the gateway address, product capabilities and unknowns, identified the declared
294
+ search target change and made no claim that search worked. The first note matched
295
+ its backup byte for byte; all shared example files remained unchanged. All six
296
+ run files were ignored by Git. A separate question to the second agent recovered
297
+ direct Experiment-to-Lab setup ownership from the installed reference.
298
+
299
+ | Evidence | SHA-256 |
300
+ | --- | --- |
301
+ | Initial `current.env` | `619e4831c8f0a0b119bb80553aad0e9f65f9127ef0534b3e22c59944a7b3c334` |
302
+ | Changed working `current.env` | `72bae3ebbe82b790936dbdd207d9bad89cd811be833a5b95ee5e90165e3ad6c3` |
303
+ | Baseline note | `d902179b481e83f6805a1830302b329291e31e2227b2d94944458d456822486b` |
304
+ | Comparison note | `387151d6645fdf5ccac4ed3575a1be1e76ca51bf7d18d275ae80d7188ff1a554` |
305
+
306
+ Environment: macOS ARM64, Codex CLI 0.139.0 and local host agents with filesystem
307
+ tools. The installed list showed one enabled 0.1.5, and all eleven installed files
308
+ matched the committed package at `2a755b79fe5bc0c379a29ec7af8fddc815bf756e`.
309
+ The vault was a working addition based on that revision; the associated PR
310
+ identifies its committed revision. This is an agent rehearsal with restricted
311
+ task instructions, not an enforced-isolation evaluation. App memory toggles,
312
+ exclusive file access and tool restrictions were not independently verified.
313
+ Human acceptance, an investigation of the user's next chosen repository, runtime
314
+ behavior and generated structured Surfaces remain unproved by this check.
315
+
316
+ The ten changed/new Markdown files passed markdownlint-cli2 0.24.0 with
317
+ MD013/MD041 disabled; 74 local links/anchors passed. The three existing JSON
318
+ examples parsed (syntax only). Walkthrough review, ignore-rule checks and
319
+ whitespace checks passed. The eight paused #16 files and the historical
320
+ LibreChat technical procedure remained unchanged. No library or CLI tests were
321
+ run for these documentation and source-pack additions.
322
+
323
+ ## Local vault relocation
324
+
325
+ The prepared rehearsal above ran before the vault was moved. At the user's
326
+ request, the complete working vault was moved to a separate local directory.
327
+ All sixteen files present at the move retained their SHA-256 values, including
328
+ the six rehearsal files. Saved-note links remain relative within the moved run.
329
+ The local path is recorded in ignored `.local/vault-path`; it is not public
330
+ configuration or a new installed-skill default.
331
+
332
+ Reusable inputs now live in [the prepared source pack](../../examples/researcher-vault/README.md),
333
+ and the [vault guide](researcher-vault.md) documents notes, intermediate artifacts
334
+ and saved Surface descriptions. Local navigation documents were updated after
335
+ the move, and four obsolete ignore files were removed from the non-Git vault;
336
+ source inputs and research outputs were preserved. The walkthroughs
337
+ now resolve their `runs/` paths from the chosen vault folder. The move and file
338
+ readback do not constitute a new human or sandbox-isolation acceptance run.
339
+
340
+ ## Direct Lab ownership correction: 0.1.5
341
+
342
+ The user confirmed that Bench is retired. Canonical concepts, diagrams and the
343
+ bundled model reference now use **Lab → Experiment → Setup**. Experiments request
344
+ configuration directly from their Lab; the Lab owns resources and local bindings.
345
+ Historical records retain their original meaning. The old Bench guide URL is a
346
+ retirement notice. Serialized examples contain no Bench entities, so none needed
347
+ rewriting; no artefact-contract shape changed.
348
+
349
+ Before the correction, a fresh evaluator reading only installed 0.1.4's reference
350
+ returned Lab → Bench → Experiment and said setup ownership was not explicit.
351
+ That is direct evidence of the stale guidance. Version 0.1.5 changes the bundled
352
+ meaning and version metadata; the discovery and note-storage method is unchanged.
353
+ The controlled trial below deliberately used 0.1.4 for both passes, with the user's
354
+ ownership correction supplied separately. It is not retroactively labeled 0.1.5.
355
+
356
+ The implementation checks passed: 17 changed/new Markdown files with
357
+ markdownlint-cli2 0.24.0 (MD013/MD041 disabled), 135 local links/anchors, three JSON
358
+ example parses plus identifier/endpoint/local-requirement checks, skill metadata,
359
+ manifest version/interface alignment and whitespace. Both shell blocks in the
360
+ human trial guide were executed from the source root, exited 0 and produced the
361
+ expected fixture hashes. Independent review found no actionable issue or public
362
+ material leak. The eight paused #16 files and existing private notes were unchanged.
363
+ No npm/library/CLI behavior changed or is claimed tested by this increment.
364
+
365
+ Implementation `fe64ab51e47f493251724a06e62259dea1feee06` was pushed, then
366
+ `codex plugin marketplace upgrade n8r-surface --json` and
367
+ `codex plugin add n8r-surface@n8r-surface --json` both exited 0. Installed-list
368
+ readback showed exactly one enabled 0.1.5 from the Git marketplace. All eleven
369
+ installed files matched that committed package; private notes and paused work
370
+ retained their hashes.
371
+
372
+ A fresh evaluator then read only the installed skill and meanings reference.
373
+ It recovered Lab → Experiment → Setup, direct Experiment-to-Lab requests and
374
+ Lab-owned configuration/bindings. It treated an old Bench reference as historical,
375
+ without current authority or rewriting an earlier Run, and correctly kept Labs
376
+ optional for source-only research. This is an instruction interpretation check,
377
+ not runtime enforcement, Work UI acceptance or a Lab consumer trial.
378
+ Installed skill SHA-256:
379
+ `577378ed327dddb4afb75d645299ce55f6784bb7be8f69d78415cfbaf342981f`.
380
+ Installed meanings-reference SHA-256:
381
+ `791fa5436fb7fe1707b3dba6f2b3b9c75f5d62c8778e9ab436142b9e5a88489f`.
382
+
383
+ ## Controlled declaration trial: 0.1.4
384
+
385
+ State X: installed 0.1.4 matched all eleven committed package files at
386
+ `ce394b1e8ddafe206e57e014285b6ef576339c4e`. Source was LibreChat
387
+ `e1dfc10449ff713faffacd60273fddcfe2c0a698`, with the existing dirty client manifest
388
+ excluded. Environment: macOS ARM64, Codex CLI 0.139.0, Python 3.13.1; actual local
389
+ host agents and filesystem tools. No hidden model or desktop version is asserted.
390
+
391
+ A fresh Researcher agent read the installed instructions, prior notes and actual
392
+ sources, then saved/read back a baseline for a task-owned partial configuration.
393
+ Only after independent baseline readback did the coordinator change
394
+ `RAG_API_URL=` to `RAG_API_URL=https://rag.example.test`. A second fresh agent
395
+ received the saved baseline and current inputs without expected findings, followed
396
+ source evidence and saved/read back a numbered successor. The coordinator kept
397
+ expected findings separately and did not write either research output.
398
+
399
+ The comparison identified the declared target change on the retained RAG role,
400
+ kept product capability unchanged and left deployed state unknown. It preserved
401
+ all twelve component labels, earlier scoped human context, authentication
402
+ uncertainties and unrelated graph claims. New focused reads described extraction
403
+ routing gates and fallback behavior; those were additional source findings, not
404
+ extra configuration changes or exercised operations.
405
+
406
+ Independent verification reopened both outputs, matched all 17 baseline and 19
407
+ successor manifest rows, checked decisive URL guards/configuration expressions
408
+ and extraction-routing source ranges, and confirmed earlier notes and source
409
+ changes were preserved. The saved-note digests are:
410
+
411
+ | Record | SHA-256 |
412
+ | --- | --- |
413
+ | Baseline research | `06a58ba6601ff1c982a4006274adf01b5aaf04fb3a6a7eeac28b2cbd74815a23` |
414
+ | Reconciliation successor | `f9a9da4dce335fd960e3c6c8f8b98d5d5b425a07a32407e440ff455267e9fd16` |
415
+
416
+ The [repeatable procedure](researcher-reconciliation-trial.md) gives commands,
417
+ prompts, exact fixture hashes, failure criteria and cleanup. Private research,
418
+ human setup details and local paths remain outside this public repository.
419
+ The retained input snapshots identify a declared fixture, not a loaded environment.
420
+ No application request, service, inference, persistence or RAG interaction ran.
421
+ This is one installed-skill agent reconciliation rehearsal, not human acceptance,
422
+ live enablement detection, full graph coverage or structured Surface validation.
423
+
424
+ The [recreation handoff](recreation-handoff.md) records proposed portable roles,
425
+ recipient binding responsibilities and a required consumer proof. The separate
426
+ application assessment remains private. No Lab adapter or recreation was executed.
427
+
428
+ ## Review corrections and checks: 0.1.4
429
+
430
+ Independent review identified two corrections: check the installed version before
431
+ reuse and refresh a Git marketplace snapshot before reinstalling; and label an
432
+ edge declared only when an applicable declaration supports it. Candidate 0.1.4
433
+ narrows that instruction. It does not change the discovery method or note storage.
434
+ 0.1.4 skill SHA-256:
435
+ `ed490cf27c127896ea7db0a630bfe24e784508fde2c50c34e2e2dbee8d0bc55a`.
436
+ 0.1.4 discovery-reference SHA-256:
437
+ `c3fc8065e573c74791b9da04154fe9e0f6c609e3cfd98ee9b72bcccec1a1d340`.
438
+
439
+ After installing 0.1.4, a targeted instruction regression correctly kept an MCP
440
+ SDK-only clue and an unsupported proxy hypothesis out of a selected graph's
441
+ declared edges, while retaining an applicable staging OIDC configuration as
442
+ declared with its runtime state unknown. This was a synthetic interpretation
443
+ check, not new source or UI evidence. The source-backed graph and continuation
444
+ trials below identify their earlier candidate versions and exact digests.
445
+
446
+ Current checks used macOS ARM64, Codex CLI 0.139.0 and Python 3.14.7. All eleven
447
+ installed 0.1.4 files matched the local candidate; manifest identity/presentation
448
+ and skill metadata validation passed. Nine changed Markdown files passed
449
+ markdownlint-cli2 0.24.0 with MD013/MD041 disabled; Lychee 0.24.2 reported 68 local
450
+ links/anchors OK, zero errors and ten excluded. JSON examples parsed (syntax only),
451
+ the 19 existing offline Python workflow tests passed, shell syntax passed, and
452
+ whitespace checks passed. The eight paused #16 files retained their initial hashes.
453
+ No npm/library/CLI changes are included or claimed tested by this increment.
454
+
455
+ An earlier broad lint attempt inherited repository-wide globs and reported the
456
+ existing MD018 issue at `startup-human-check.md:171`. That unrelated file was left
457
+ unchanged; the final lint above targets this increment's files. Independent review
458
+ found no remaining blocking issue after the two corrections.
459
+
460
+ The implementation was pushed at
461
+ `de65eeb477c0780fffb2f700ff93d6f04ea201af`. A Git marketplace snapshot still at
462
+ `3eff6fdd710f7670d4511f83233a01444d658408` was then refreshed with
463
+ `codex plugin marketplace upgrade n8r-surface --json`, followed by
464
+ `codex plugin add n8r-surface@n8r-surface --json` and the installed-list readback.
465
+ All exited 0; upgrade reported no errors, the fetched snapshot matched `de65eeb`,
466
+ and exactly one enabled 0.1.4 was listed from the Git source. All eleven installed
467
+ files matched the committed package. The four numbered private research notes
468
+ and all eight paused #16 files retained their hashes. This rehearses the update
469
+ path without a manual clone/build; it does not establish Work UI refresh behavior.
470
+
471
+ ## Graph-first discovery guidance: 0.1.3
472
+
473
+ The user expanded the scope to an AI Surface discovery map, reuse of applicable
474
+ product knowledge, reconciliation of existing descriptions, and permitted live
475
+ UI/API evidence. The graph is primary; configuration is inspected only when it
476
+ establishes or explains relevant nodes/edges. The guide distinguishes possible
477
+ connections, a declared setup and dated running-state observations; enabled is
478
+ not exercised. It remains one AI Surface Model with partial descriptions.
479
+
480
+ The installed package now contains three references. All eleven installed files
481
+ were compared byte-for-byte with the source package. Skill entrypoint SHA-256:
482
+ `79257c192dc629ebfa06722b579d61481dafa62ca4d306c2f1c0438b01f66251`.
483
+ Discovery reference SHA-256:
484
+ `2a0df014620907119d6767712f829ca1bad35119107482ea88266a2d2de5e274`.
485
+ The [human guide](researcher-discovery.md#graph-discovery-reconciliation-and-live-evidence)
486
+ contains the actual prompts and expected evidence for discover, reconcile and live
487
+ inspection; these are conversational intents, not new CLI commands or adapters.
488
+
489
+ Before the new reference, a fresh evaluator read installed 0.1.2 and considered
490
+ five synthetic starting conditions. It already distinguished possibilities,
491
+ source declarations and runtime uncertainty correctly. It reported that discovery
492
+ sequences, reconciliation intake and live-inspection procedures were inferred
493
+ from general principles, rather than explicitly supplied by the skill. This is
494
+ an observed guidance gap, not a demonstrated reasoning failure or quality benchmark.
495
+
496
+ A separate fresh evaluator read installed 0.1.3 and all three references, then
497
+ answered these supplied synthetic cases without scenario tools or saved outputs:
498
+
499
+ | Given / user task | Observed bounded response |
500
+ | --- | --- |
501
+ | Unknown folder; browser-tooling package manifest, unread Python server, unrelated theme settings; identify AI relevance. | Inspect structure/entry points; do not infer runtime or AI relevance from filenames; leave unrelated theme settings out. |
502
+ | Docs-only product describes optional OIDC/retrieval and unavailable code. | Map documented alternatives; implementation and selected composition remain unknown; missing code does not prevent useful work. |
503
+ | Code-only SDK dependency and custom inference base URL, many unrelated packages, no runtime access. | Trace caller and endpoint binding; do not infer provider identity from SDK vendor or inventory unrelated packages. |
504
+ | Older guide and two prior Surfaces select different identity providers. | Check identity/revision/scope, preserve both compositions and ask for current selection; do not union them into a deployment. |
505
+ | Staging R1 Surface claims OIDC enabled; R2 file says disabled; admin access refused. | Compare revision-scoped declarations, preserve R1, leave effective state unknown and do not bypass the refusal. |
506
+ | Supplied hypothetical stored-settings view says OIDC on, issuer at a reserved example domain, masked secret; no runtime test. | Record a dated stored-setting connection claim; do not reveal secrets, save settings or claim effective loading/login. |
507
+
508
+ This verifies one instruction-reading response per case, not a statistical
509
+ benchmark, actual reconciliation tool implementation or real computer-use trial.
510
+ Component equivalence across unfamiliar vocabularies and ambiguous UI indicators
511
+ still require evidence/judgment; unsupported meanings stay explicit. No real
512
+ admin system was selected or inspected. Live inspection remains **unverified**.
513
+
514
+ A separate fresh evaluator then loaded installed 0.1.3 and researched the actual
515
+ LibreChat checkout, reusing the saved authentication successor. Its prompt asked
516
+ for a shallow AI-relevant graph and graph-relevant settings; it supplied no
517
+ expected architecture. The agent read 12 additional source files, re-read the
518
+ server entry point and contributor guidance, then saved/read back
519
+ `graph-discovery-001.md`. Its edge table covered documented chat/API entry,
520
+ Agent orchestration/provider options, conditional MCP discovery, persistence and
521
+ MongoDB support, and file-processing/RAG calls. It retained the scoped human
522
+ authentication choice while leaving concrete model/provider, MCP and storage
523
+ instances and runtime use unknown. An initial broad search was truncated;
524
+ focused source reads supported the retained claims. The agent corrected one
525
+ README citation during readback.
526
+
527
+ The parent independently read the saved graph, verified its digest and all 14
528
+ source hash rows, and spot-checked the MongoDB connector and RAG request evidence.
529
+ Graph-note SHA-256:
530
+ `fc9b03d6b718b60c60c3e5b5bf6c74f460697abe2905aa5b0425df545bea50d5`.
531
+ This is one source-reading graph rehearsal on the same LibreChat revision/dirty
532
+ state as the 0.1.2 trial, not a deployed or exercised graph. Private deployment
533
+ configuration, credentials and infrastructure details are not published here.
534
+
535
+ The user then supplied additional setup context. The agent preserved the first
536
+ graph and saved/read back `graph-discovery-002.md`, retaining that context as a
537
+ dated human report, not source or live verification. The parent independently
538
+ reopened it and verified the retained statement, earlier human choice and digest:
539
+ `0dbd8739725e80f86a6bc9b6d3bb41bb5587bbd694e95f646f284fd05a657a53`.
540
+ The private setup statement and local paths remain outside this repository.
541
+
542
+ ## Predictable notes and real-source trial: 0.1.2
543
+
544
+ The [RESEARCH-01 guide](researcher-skill.md#research-01-investigate-and-continue)
545
+ now starts with one useful investigation, followed by a human answer and
546
+ continuation. LOAD-01 remains a separate lifecycle check. The skill adds a local
547
+ default of `~/Documents/n8r-surface/research/<source-slug>/<topic>-001.md`, resolves
548
+ and shows the destination before saving, and retains numbered successors.
549
+ User-selected and predecessor folders take precedence. Temporary host storage
550
+ does not count as a persistent user-owned folder.
551
+
552
+ **Before the change:** an independent agent loaded installed 0.1.1 and investigated
553
+ authentication in an actual LibreChat checkout. It produced a useful note, with
554
+ file references, unknown selections and source/runtime limits. The existing skill
555
+ did not define a folder/naming convention: the agent chose its own timestamped
556
+ filename in a Documents research folder. The parent independently reopened the
557
+ note, checked its source manifest against all 15 files (11 source reads, three
558
+ search-only sources and contributor guidance), and spot-checked cited local/LDAP
559
+ routing and federation gates. This is a successful bounded source investigation
560
+ with a storage usability gap, not a failed research claim.
561
+
562
+ Source: upstream LibreChat revision
563
+ `e1dfc10449ff713faffacd60273fddcfe2c0a698`, with one reported tracked change in
564
+ `client/package.json`. The modified file and deployment credentials were not
565
+ read; the dirty state was unchanged after research. Ignored deployment files
566
+ were not inventoried. Private notes and machine paths are not committed here.
567
+ The saved baseline note's SHA-256 was
568
+ `13a7327e1d89024d6b2ed21c28d1a368011da13aa611bdc62de431e48f49ced5`.
569
+
570
+ **Repository installation:** on Codex CLI 0.139.0, registering
571
+ `injectionator/n8r-surface --ref feat/17-researcher-skill` and installing
572
+ `n8r-surface@n8r-surface` both exited 0. The fetched Git snapshot was
573
+ `3eff6fdd710f7670d4511f83233a01444d658408`; the installed list contained exactly
574
+ one enabled 0.1.1 from that Git marketplace. This exercised the future-user route
575
+ without a manual clone or build. Switching back to the local candidate initially
576
+ failed because the same marketplace was registered from a different source.
577
+ Removing that registration, registering the local checkout and installing again
578
+ all succeeded. All ten installed 0.1.2 files matched the source package bytes;
579
+ the manifests agreed on identity, version and presentation. No model API or
580
+ source-service startup was added. Work picker availability is still unverified.
581
+
582
+ **After the change:** a fresh agent read installed 0.1.2 and its two references,
583
+ inspected 12 actual LibreChat source files, resolved the default destination,
584
+ saved `authentication-001.md` and read it back. The user supplied a real intended
585
+ authentication choice during this chat; the note retained it as dated human
586
+ intent, separate from effective deployment state. The investigation was interrupted
587
+ when the user broadened the design discussion; the agent saved the completed
588
+ reads as a partial note without claiming deeper investigation of that choice.
589
+
590
+ A different fresh-context agent received only the installed skill, saved note
591
+ and source location. It recovered the human choice from the note, re-established
592
+ the same source commit/dirty state, re-read `api/server/routes/auth.js:67-80` and
593
+ `api/strategies/localStrategy.js:13-61`, and checked their hashes. It saved/read
594
+ back `authentication-002.md`, preserving the original, identities, evidence,
595
+ uncertainties and unanswered question. The parent independently read both saved
596
+ files, verified their digests and human-choice retention, and checked the 12
597
+ original source hashes plus the successor's two repeated evidence rows.
598
+
599
+ | Saved result | SHA-256 |
600
+ | --- | --- |
601
+ | Initial numbered note | `db1b17df17121406420253915a9ad7ff07390ad01029e05c3e4098b1441542bb` |
602
+ | Fresh-context successor | `c3a1dcb8caedddabb2589b7f57b7a3f2f0c8a9e907e8ca7ccfe273b2f12bef94` |
603
+
604
+ This establishes one separate-agent continuation on the same local filesystem,
605
+ with actual human input. It does not establish Work UI discovery, human acceptance,
606
+ a running authentication integration, cross-host continuation or the standalone CLI.
607
+
608
+ ## Branding update: 0.1.1
609
+
610
+ The plugin and skill now display **n8r-surface Researcher**, with the qualified
611
+ invocation `n8r-surface:research`. The renamed package installed successfully
612
+ through `codex plugin add n8r-surface@n8r-surface --json` (exit 0).
613
+ Removing the superseded `n8r-researcher@n8r-surface` package also exited 0; the
614
+ marketplace's installed list then contained exactly one enabled 0.1.1 candidate.
615
+ All ten installed files matched the source package, and the skill frontmatter
616
+ validator passed. The saved research note's digest was unchanged after removal.
617
+ Changed Markdown passed markdownlint-cli2 0.24.0 with the existing MD013/MD041
618
+ exemptions; Lychee 0.24.2 reported 37 local links OK, 0 errors and 11 excluded.
619
+ The staged whitespace check passed.
620
+
621
+ The skill differs only in name, heading, version and its identification in notes;
622
+ the investigation instructions and both references are unchanged. The original
623
+ behavioral trial below applies to 0.1.0 and was not repeated for this rename.
624
+ The old skill digest was
625
+ `8310917d4854f6ff35c1f9fe520b7d70355c868ea6972ebe48975498f16ba1f9`.
626
+ Work UI availability of the new name still needs a fresh-chat check using
627
+ [LOAD-01](researcher-skill.md#load-01-install-invoke-remove-reinstall).
628
+
629
+ ## Initial local package behavior: 0.1.0
630
+
631
+ Environment: macOS ARM64, Codex CLI **0.139.0**, Python **3.13.1**.
632
+ The local CLI's supported `plugin marketplace`, `plugin add`, `plugin list` and
633
+ `plugin remove` commands were inspected before use. No credentials were read,
634
+ provider was configured or external model API was called for the package checks.
635
+
636
+ | Interaction | Actual result |
637
+ | --- | --- |
638
+ | Register this repository marketplace | Exit 0; `n8r-surface` registered. |
639
+ | Install the portable root-manifest-only candidate | Exit 1: `missing plugin.json`. The installed client did not accept the newer root manifest alone. |
640
+ | Add the documented Codex compatibility manifest and repeat installation | Exit 0; `n8r-researcher@n8r-surface`, version 0.1.0, installed and enabled. |
641
+ | Remove this exact plugin | Exit 0; its installed list became empty. |
642
+ | Reinstall the same candidate | Exit 0; exactly one installed/enabled 0.1.0 entry. |
643
+ | Read back installation | Every installed package file matched the source package bytes. |
644
+ | Read back saved research across removal/reinstall | The note's SHA-256 remained unchanged. |
645
+
646
+ The bundled skill passed the local skill-creator frontmatter validator. The
647
+ optional Agent Skills `compatibility` field was omitted because that validator
648
+ rejects it even though the open specification permits it; host requirements are
649
+ stated in the instructions instead. These checks establish bounded package and
650
+ local CLI behavior, not universal host compatibility.
651
+
652
+ ## Initial behavioral trial: 0.1.0
653
+
654
+ A fresh evaluator received only the two synthetic Lumen source documents and a
655
+ request to research components/configuration, preserve evidence/gaps, ask a useful
656
+ question and save notes. It received no expected answers or previous findings.
657
+ The baseline used no supplied Researcher skill. It retained the main source facts,
658
+ conflict and uncertainty, but did not record exact source hashes or stable
659
+ component labels. This is a narrow baseline observation, not a quality benchmark.
660
+
661
+ A separate fresh evaluator then read the **installed** skill and both references,
662
+ and performed the same task against independent copies of the raw documents.
663
+ It saved Markdown notes and read them back. The developing agent independently
664
+ read the result and checked source identities and required facts:
665
+
666
+ - The note identifies `research-ai-surface 0.1.0`, both sources, line ranges and
667
+ SHA-256 hashes. The hashes match the supplied bytes.
668
+ - It preserves the 10/25 batch-limit conflict, unknown model/version, untested
669
+ Harbor integration and the settings document's scoped absence of an embedded
670
+ archive database.
671
+ - It keeps one archive-service role with separate document/audit connections,
672
+ stable component labels, optional unselected choices and an unanswered question.
673
+ - It labels the result as working notes and does not claim runtime verification,
674
+ contract conformance, a deployment or complete repository coverage.
675
+
676
+ The underlying source digests were:
677
+
678
+ | Source | SHA-256 |
679
+ | --- | --- |
680
+ | `lumen-guide.md` | `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693` |
681
+ | `lumen-settings.md` | `e94431bce92dc374a3aa58e31c8af78f7dfc61d7b34510ef38552d600d2489b7` |
682
+
683
+ This was a fresh agent evaluation through the current tool harness, explicitly
684
+ loading the installed file. It was **not** a Work-mode picker/discovery test,
685
+ human-answered conversation, fresh-chat continuation or LibreChat investigation.
686
+ The developer did not supply the findings or populate the evaluator's output.
687
+ No synthetic research output is represented as real LibreChat evidence.
688
+
689
+ ## Initial repository checks: 0.1.0
690
+
691
+ The skill frontmatter validator passed. The two manifests agree on package
692
+ identity/version and presentation, and installed files and bundled licence texts
693
+ were independently compared with their sources. The saved note's source hashes
694
+ were checked against the original fixtures.
695
+
696
+ The Python fixture/workflow suite passed all 19 tests; `bash -n scripts/flow` and
697
+ `git diff --cached --check` passed. Markdownlint-cli2 0.24.0 checked the 13 changed
698
+ Markdown files with MD013 and MD041 disabled, matching the separate onboarding
699
+ check proposal's style. The bare no-argument lint command cannot discover a
700
+ configuration on this base revision; its repository-wide configuration is not
701
+ merged yet. Lychee 0.24.2 checked local links/anchors across repository Markdown,
702
+ excluding Git/dependency/virtualenv directories: 234 OK, 0 errors, 47 excluded.
703
+
704
+ Citation validation was attempted with cffconvert 2.0.0 but could not run because
705
+ this base has no `CITATION.cff`; that file belongs to separate onboarding work.
706
+ No CLI implementation or npm dependency changes are included in this increment,
707
+ so the paused CLI modifications and their test results are not its evidence.
708
+
709
+ ## Remaining Work-mode acceptance
710
+
711
+ The computer-use tool refused access to the ChatGPT desktop application, reporting
712
+ that the app could not be used for safety reasons. No UI interaction was attempted
713
+ after that refusal. The [LOAD-01 procedure](researcher-skill.md#load-01-install-invoke-remove-reinstall)
714
+ is ready for a human rehearsal in ChatGPT desktop / Work. Record the desktop
715
+ version, visible installation/selection state, invocation evidence, saved note,
716
+ removal in a fresh chat and successful reinstall before marking it passed.
717
+
718
+ A successful test must also retain user research outside the plugin cache.
719
+ Uninstallation does not erase an old chat's instructions or content. Do not infer
720
+ unloading from an old chat's behavior, or infer Work support from CLI JSON alone.
721
+
722
+ Further #17 work: human Work-mode acceptance, real live UI/API inspection,
723
+ broader Harbor/LibreChat and reconciliation trials, structured HTML and Surface
724
+ outputs, n8r-labs adaptation in its own repository, and the later installed-Codex
725
+ standalone runner. Both #16 and #17 remain open.