@n8r/surface 0.0.0-stage → 0.1.0-experimental.2

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 (96) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-DOCS +395 -0
  3. package/LICENSING.md +36 -0
  4. package/README.md +181 -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 +260 -0
  9. package/dist/codec.d.ts +4 -0
  10. package/dist/codec.js +41 -0
  11. package/dist/codex.d.ts +72 -0
  12. package/dist/codex.js +510 -0
  13. package/dist/contracts.d.ts +129 -0
  14. package/dist/contracts.js +1 -0
  15. package/dist/html.d.ts +5 -0
  16. package/dist/html.js +50 -0
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.js +5 -0
  19. package/dist/notes.d.ts +52 -0
  20. package/dist/notes.js +184 -0
  21. package/dist/portable.d.ts +10 -0
  22. package/dist/portable.js +71 -0
  23. package/dist/revisions.d.ts +2 -0
  24. package/dist/revisions.js +18 -0
  25. package/dist/settings.d.ts +23 -0
  26. package/dist/settings.js +100 -0
  27. package/dist/setup.d.ts +9 -0
  28. package/dist/setup.js +161 -0
  29. package/dist/source-tools.d.ts +102 -0
  30. package/dist/source-tools.js +201 -0
  31. package/dist/startup.d.ts +7 -0
  32. package/dist/startup.js +74 -0
  33. package/dist/surface-draft.d.ts +19 -0
  34. package/dist/surface-draft.js +95 -0
  35. package/dist/surface-instructions.d.ts +2 -0
  36. package/dist/surface-instructions.js +23 -0
  37. package/dist/surface-store.d.ts +36 -0
  38. package/dist/surface-store.js +181 -0
  39. package/dist/validate.d.ts +4 -0
  40. package/dist/validate.js +184 -0
  41. package/docs/n8r-surface/README.md +133 -0
  42. package/docs/n8r-surface/codex-research-transcript.md +51 -0
  43. package/docs/n8r-surface/codex-research-verification.md +176 -0
  44. package/docs/n8r-surface/command-outcomes.md +564 -0
  45. package/docs/n8r-surface/contracts.md +210 -0
  46. package/docs/n8r-surface/critical-path.md +163 -0
  47. package/docs/n8r-surface/design.md +289 -0
  48. package/docs/n8r-surface/getting-started.md +107 -0
  49. package/docs/n8r-surface/host-contract.md +176 -0
  50. package/docs/n8r-surface/implementation-decisions.md +96 -0
  51. package/docs/n8r-surface/npm-distribution.md +137 -0
  52. package/docs/n8r-surface/npm-release.md +188 -0
  53. package/docs/n8r-surface/recreation-handoff.md +117 -0
  54. package/docs/n8r-surface/researcher-discovery.md +157 -0
  55. package/docs/n8r-surface/researcher-prepared-check.md +117 -0
  56. package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
  57. package/docs/n8r-surface/researcher-repository-check.md +95 -0
  58. package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
  59. package/docs/n8r-surface/researcher-skill-verification.md +725 -0
  60. package/docs/n8r-surface/researcher-skill.md +255 -0
  61. package/docs/n8r-surface/researcher-vault.md +134 -0
  62. package/docs/n8r-surface/save-reopen-transcript.md +211 -0
  63. package/docs/n8r-surface/save-reopen-verification.md +152 -0
  64. package/docs/n8r-surface/startup-human-check.md +172 -0
  65. package/docs/n8r-surface/startup-verification.md +161 -0
  66. package/docs/n8r-surface/startup.md +151 -0
  67. package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
  68. package/docs/n8r-surface/surface-revisions-verification.md +161 -0
  69. package/docs/n8r-surface/vault-setup-verification.md +210 -0
  70. package/docs/n8r-surface/verification.md +117 -0
  71. package/docs/n8r-surface/versioning.md +183 -0
  72. package/examples/researcher/README.md +92 -0
  73. package/examples/researcher/composed.surface.json +430 -0
  74. package/examples/researcher/composed.surface.yaml +283 -0
  75. package/examples/researcher/harbor-r1.research.html +193 -0
  76. package/examples/researcher/harbor-r2.research.html +226 -0
  77. package/examples/researcher/lumen-manual-edit.pending.html +271 -0
  78. package/examples/researcher/lumen-r1.research.html +271 -0
  79. package/examples/researcher/lumen-r2.research.html +280 -0
  80. package/examples/researcher/sources/harbor-api.md +16 -0
  81. package/examples/researcher/sources/harbor-auth.md +8 -0
  82. package/examples/researcher/sources/lumen-guide.md +28 -0
  83. package/examples/researcher/sources/lumen-settings.md +9 -0
  84. package/package.json +45 -4
  85. package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
  86. package/plugins/n8r-surface/LICENSE +202 -0
  87. package/plugins/n8r-surface/LICENSE-DOCS +395 -0
  88. package/plugins/n8r-surface/LICENSING.md +36 -0
  89. package/plugins/n8r-surface/assets/icon.svg +5 -0
  90. package/plugins/n8r-surface/plugin.json +27 -0
  91. package/plugins/n8r-surface/skills/research/SKILL.md +122 -0
  92. package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
  93. package/plugins/n8r-surface/skills/research/references/discovery-map.md +160 -0
  94. package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
  95. package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
  96. package/plugins/n8r-surface/skills/research/references/working-notes.md +116 -0
@@ -0,0 +1,255 @@
1
+ # n8r-surface Researcher: start an investigation
2
+
3
+ **First increment:** an experimental instruction-only Researcher, packaged for
4
+ ChatGPT desktop / Work and Codex. It researches supplied sources with the existing
5
+ harness and saves working notes. It does not add a CLI runner, Lab connection or
6
+ validated experimental HTML/Surface output. Related to [#17](https://github.com/injectionator/n8r-surface/issues/17).
7
+
8
+ The user selected this order on 4 November 2026: prove the skill in the existing
9
+ harness, adapt that same core to n8r-labs in its repository, then return to the
10
+ standalone `n8r-surface` command. Unfinished #16 source-overview work is paused.
11
+ There will be no separate status subcommand.
12
+
13
+ The primary result is a partial **AI Surface graph**, with evidence and unresolved
14
+ connections. It is not an inventory of every application feature or setting.
15
+ Configuration matters when it establishes or explains a relevant node, edge,
16
+ route, data flow or authority boundary. The bundled
17
+ [discovery guide](../../plugins/n8r-surface/skills/research/references/discovery-map.md)
18
+ covers available source combinations, reusable product knowledge and comparison.
19
+ See [discovery, comparison and live-inspection examples](researcher-discovery.md)
20
+ for those broader tasks; the short first trial below uses authentication.
21
+ For a compact security brief and explicit reconciliation, use the
22
+ [Skeleton Surface walkthrough](researcher-skeleton-check.md). This provisional
23
+ Markdown profile adds no validated structured-output contract.
24
+
25
+ ## RESEARCH-01: investigate and continue
26
+
27
+ Reuse an existing installation only after checking the version:
28
+
29
+ ```sh
30
+ codex plugin list --marketplace n8r-surface --json
31
+ ```
32
+
33
+ Expect one installed/enabled entry at the candidate version below. If an older
34
+ version came from the Git branch marketplace, refresh its snapshot and reinstall:
35
+
36
+ ```sh
37
+ codex plugin marketplace upgrade n8r-surface
38
+ codex plugin add n8r-surface@n8r-surface --json
39
+ codex plugin list --marketplace n8r-surface --json
40
+ ```
41
+
42
+ A marketplace pinned to a commit stays pinned. To choose a different ref, remove
43
+ that marketplace registration and repeat step 1 with the new ref. For a local
44
+ marketplace, update its source checkout first and use the
45
+ [maintainer installation](#maintainer-installation-from-a-local-candidate).
46
+ Refreshing the desktop app alone does not refresh the Git snapshot.
47
+
48
+ You need a local Work
49
+ or Codex chat that can read your LibreChat checkout and save files. Existing
50
+ ChatGPT sign-in is sufficient for this instruction-only plugin; it adds no model
51
+ API connection. Work's picker and full lifecycle still need
52
+ [human acceptance](researcher-skill-verification.md#remaining-work-mode-acceptance).
53
+
54
+ 1. **Install once.** With Codex CLI installed, run these commands from any
55
+ directory. They fetch the candidate from GitHub; no manual clone, npm install
56
+ or build of n8r-surface is needed:
57
+
58
+ ```sh
59
+ codex plugin marketplace add injectionator/n8r-surface --ref feat/17-skeleton-surface --json
60
+ codex plugin add n8r-surface@n8r-surface --json
61
+ codex plugin list --marketplace n8r-surface --json
62
+ ```
63
+
64
+ Expected: exit 0 and one installed/enabled `n8r-surface@n8r-surface`, version
65
+ `0.1.8`. The branch is a changing draft candidate, not a release on `main`.
66
+ Use an identified commit with `--ref` for a repeatable installation. Network
67
+ access is required; the commands change plugin configuration/cache.
68
+ 2. **Open your source.** Start a local chat with your LibreChat folder selected.
69
+ In Work, select **n8r-surface Researcher** via `@`; the qualified skill is
70
+ `n8r-surface:research`. Refresh/restart the app if the installed version is
71
+ missing. The host must actually read the checkout; naming a path in a cloud
72
+ chat does not supply its files.
73
+ 3. **Ask one bounded question:**
74
+
75
+ > Use n8r-surface Researcher to investigate authentication in this LibreChat
76
+ > checkout. Explain the components and configuration choices, cite the files
77
+ > you read, and distinguish supported options from my selected setup. Save
78
+ > working notes in your default research folder, show me where they are,
79
+ > and ask the next useful question.
80
+
81
+ Expect a source revision, an explanation with file/line evidence, unanswered
82
+ questions and a saved Markdown note. Supported options are not your selected
83
+ deployment, and reading source does not verify a running integration.
84
+ 4. **Open the saved note.** The default on a local filesystem is
85
+ `~/Documents/n8r-surface/research/librechat/authentication-001.md`.
86
+ The Researcher shows the resolved absolute destination before saving and
87
+ provides an openable link after reading it back. Existing files get the next
88
+ unused number. You can request another folder. A host without persistent local
89
+ file access must say so and provide a download or text; that does not pass the
90
+ local-save check.
91
+ 5. **Answer, then continue.** Answer the Researcher's actual question or correct
92
+ one finding. Ask it to save a successor. Expect `authentication-002.md` (or
93
+ the next unused number), the dated human decision separated from source
94
+ evidence, and the first note unchanged. In a fresh chat with the same source
95
+ access and skill selected, provide that successor and ask:
96
+
97
+ > Continue this research from the saved note. Check the source revision,
98
+ > retain my decisions and unresolved questions, and investigate the next
99
+ > useful gap. Save a successor and show me the result.
100
+
101
+ Wording, source revision, findings, date and file number may vary. Missing access,
102
+ invented citations, a missing saved file, overwritten earlier notes or a lost human
103
+ decision are failures. Independently opening the files is the readback check;
104
+ an agent rehearsal is separate from human acceptance. No service is started and
105
+ the source checkout should remain unchanged. Keep the notes after the trial;
106
+ plugin removal does not delete them.
107
+
108
+ **State X:** installed skill, readable identified checkout, and a writable notes
109
+ folder. **Input Y:** the prompt above, followed by an actual human answer and a
110
+ fresh-chat continuation. **Outcome Z:** a useful explanation and preserved,
111
+ readable successor notes with source evidence, choices and gaps. See
112
+ [observed results and remaining limits](researcher-skill-verification.md).
113
+
114
+ These are working notes. Validated HTML/Surface outputs, Lab adaptation and the
115
+ standalone CLI remain later increments. RESEARCH-01 does not establish the
116
+ complete installed-command E2E-01/E2E-02 cases.
117
+
118
+ ## Package and standards
119
+
120
+ The canonical source is [the plugin folder](../../plugins/n8r-surface/).
121
+ It contains one `skills/research/SKILL.md`, bundled references, optional
122
+ OpenAI skill metadata, licence files and an icon. It has no MCP server, hooks,
123
+ installer scripts, embedded credentials or separate model connection.
124
+
125
+ The [Agent Skills specification](https://agentskills.io/specification) defines
126
+ `SKILL.md`, required `name`/`description` frontmatter and relative resources.
127
+ The [OpenAI skill guide](https://learn.chatgpt.com/docs/build-skills) distinguishes
128
+ local skill folders from distributable plugins. Follow
129
+ [plugin packaging](https://developers.openai.com/plugins/build/plugins) for
130
+ repository marketplaces and host-specific metadata. Reviewed 4 November 2026.
131
+ These are packaging contracts; host behavior still needs its own rehearsal.
132
+
133
+ - [plugin.json](../../plugins/n8r-surface/plugin.json) uses Agent Plugins 1.0.0.
134
+ - [.codex-plugin/plugin.json](../../plugins/n8r-surface/.codex-plugin/plugin.json)
135
+ is the compatibility manifest needed by the tested Codex CLI 0.139.0. Keep
136
+ identity, version and presentation metadata aligned with the portable manifest.
137
+ Both use the same skill files; no second instruction copy is maintained.
138
+ - [The repository marketplace](../../.agents/plugins/marketplace.json) exposes
139
+ `n8r-surface@n8r-surface` as available, without forcing installation.
140
+ - Plugin and skill version `0.1.8` identify this experimental candidate. Increment
141
+ them when changing distributed instructions; record the Git revision and
142
+ installed file digest with test results. This is separate from the npm version.
143
+
144
+ Keep the skill self-contained: installation copies it away from this checkout.
145
+ Bundled references must work there. Instructions use CC-BY-4.0; metadata, icons
146
+ and tooling use Apache-2.0. The package includes the repository's licence texts
147
+ and [licensing explanation](../../LICENSING.md).
148
+
149
+ ## Maintainer installation from a local candidate
150
+
151
+ Use this route only when developing the plugin itself. CLI 0.139.0 was used for
152
+ the package checks; other versions need verification. Record `codex --version`
153
+ and `git rev-parse HEAD`. If this marketplace is already registered from GitHub,
154
+ run `codex plugin marketplace remove n8r-surface` before changing its source to
155
+ the local checkout. The CLI rejects that source change otherwise. This removes
156
+ the marketplace registration/snapshot, not research notes. From this repository root:
157
+
158
+ ```sh
159
+ codex plugin marketplace add . --json
160
+ codex plugin add n8r-surface@n8r-surface --json
161
+ codex plugin list --marketplace n8r-surface --json
162
+ ```
163
+
164
+ Expected: each command exits 0. The installed list contains exactly one
165
+ `n8r-surface@n8r-surface`, version `0.1.8`, installed and enabled. The installation
166
+ path varies by computer. `alreadyAdded: true` is fine on a repeated marketplace
167
+ registration. Do not register a second copy of the skill in `.agents/skills`.
168
+
169
+ If the earlier 0.1.0 candidate is installed, remove its old package ID once:
170
+
171
+ ```sh
172
+ codex plugin remove n8r-researcher@n8r-surface --json
173
+ ```
174
+
175
+ The renamed package replaces that candidate; saved research stays in place.
176
+
177
+ In ChatGPT desktop, open Plugins and select the **n8r-surface** source. Verify
178
+ **n8r-surface Researcher** is installed. Refresh/restart the app if the new marketplace
179
+ or version is absent, as the packaging guide requires. Then start a fresh Work
180
+ chat. Loading instructions in this development chat is not this acceptance test.
181
+
182
+ The repository installation above is sufficient for a trial. A public Plugins
183
+ Directory listing requires a separate
184
+ [submission and publication](https://developers.openai.com/plugins/deploy/submission)
185
+ decision; it is not necessary for this repository test.
186
+
187
+ ## LOAD-01: install, invoke, remove, reinstall
188
+
189
+ Use the prepared installation above. Record the desktop app version and selected
190
+ Work environment. The host must have access to the two synthetic documents
191
+ [lumen-guide.md](../../examples/researcher/sources/lumen-guide.md) and
192
+ [lumen-settings.md](../../examples/researcher/sources/lumen-settings.md), through
193
+ attachments or explicitly selected local source access. A local path by itself
194
+ is not access in a cloud chat.
195
+
196
+ 1. In a **fresh Work chat**, type `@` and select the plugin's
197
+ `n8r-surface:research` skill (display name **n8r-surface Researcher**). Ask:
198
+
199
+ > Research Lumen Desk from these two documents for an AI Surface Model
200
+ > description. Identify the components and configuration choices, show evidence
201
+ > and gaps, and ask the next question that would help me choose a setup.
202
+ > Save working research notes that I can reopen.
203
+
204
+ Expected: the skill identifies version `0.1.8`, reads the two actual documents,
205
+ cites evidence and saves a readable note outside the plugin cache. Independently
206
+ open that note. Both conflicting batch maxima (10 and 25) and the unknown model
207
+ version must survive; optional features must not become user selections. The
208
+ note is not a validated `n8r.research/0.1` artefact. A version announcement alone
209
+ does not prove the packaged instructions or sources were used; retain the
210
+ visible invocation/tool evidence and verify the resulting content.
211
+ 2. Record the note's path/download and content digest when available. In the
212
+ plugin browser select **Uninstall plugin**, or run:
213
+
214
+ ```sh
215
+ codex plugin remove n8r-surface@n8r-surface --json
216
+ codex plugin list --marketplace n8r-surface --json
217
+ ```
218
+
219
+ Expected: exit 0, no installed entry for this plugin. The marketplace may still
220
+ offer it for installation. Do not remove other skills or the saved research.
221
+ 3. Start another **fresh Work chat**. Check that this skill is absent from the
222
+ selector and installed-plugin list. Do not paste its instructions into that
223
+ chat. Confirm the saved note still opens unchanged. Do not use an old chat's
224
+ memory of the skill as an unload test: uninstall does not erase its history.
225
+ 4. Reinstall using the same `codex plugin add` command. In a new Work chat, verify
226
+ exactly one skill entry appears and invoke it again against the same sources.
227
+ Supply the earlier note when testing continuation. Retain a new output file;
228
+ do not overwrite the first note. Verify version, source identity and retained
229
+ evidence. A prompt that never loaded the installed skill is not a pass.
230
+
231
+ Any missing selector entry after install, duplicate installation, wrong version,
232
+ fabricated source access, missing save/readback or changed user note is a failure
233
+ or blocker to investigate. Do not count a CLI list result as a Work-mode invocation
234
+ or unload result. Record the actual stage reached in [verification](researcher-skill-verification.md).
235
+
236
+ For cleanup after testing, remove this plugin using the command above. Optionally
237
+ run `codex plugin marketplace remove n8r-surface` to remove this marketplace source.
238
+ Keep user research files. Reinstallation is reversible; cleanup is separate from
239
+ publishing or deleting the source repository.
240
+
241
+ ## Prepare a shareable ZIP
242
+
243
+ From a committed, reviewed candidate in the repository root:
244
+
245
+ ```sh
246
+ n8r_skill_zip=$(mktemp -d)
247
+ git archive --format=zip --output="$n8r_skill_zip/n8r-surface.zip" HEAD:plugins/n8r-surface
248
+ python3 -m zipfile -l "$n8r_skill_zip/n8r-surface.zip"
249
+ ```
250
+
251
+ Expected: exit 0; the archive has both manifests, one skill with its four references
252
+ and OpenAI metadata, the icon and licence files. It contains no Git history,
253
+ source-repository research data, credentials or node_modules. The output directory
254
+ varies. Archive only the committed plugin subtree so paused/untracked work cannot
255
+ enter the package. Uploading or publishing the ZIP remains a separate action.
@@ -0,0 +1,134 @@
1
+ # Local AI Surface vault
2
+
3
+ The vault is a local working directory for AI Surface research. Keep research
4
+ notes, intermediate artifacts and saved Surface descriptions here. Its location
5
+ is chosen on each machine and can sit outside the `n8r-surface` repository.
6
+
7
+ ## Where things go
8
+
9
+ | Folder inside the vault | Contents |
10
+ | --- | --- |
11
+ | `research/<source-slug>/` | Numbered research notes and continued investigations. |
12
+ | `artifacts/<source-slug>/` | Intermediate outputs, drafts and supporting evidence. |
13
+ | `surfaces/<source-slug>/` | Saved Surface descriptions and their revisions. |
14
+ | `examples/` | Optional local copies of the prepared test source material. |
15
+ | `runs/<run-name>/` | Disposable test inputs, saved notes and review copies. |
16
+
17
+ Use a short source name such as `example-chat`. A research note might live at
18
+ `vault/research/example-chat/graph-001.md`. Keep earlier notes and revisions;
19
+ use the next unused number when saving another. The agent should resolve and
20
+ show the actual absolute destination before writing, then reopen the saved file.
21
+
22
+ Within the `n8r-surface` checkout, [agent guidance](../../AGENTS.md#local-research-workspace)
23
+ reads `.local/vault-path`: an ignored text file containing one absolute directory
24
+ path. This is a local instruction convention, not a CLI or plugin configuration
25
+ interface. The path is not published with the repository. When the vault is moved,
26
+ update that local pointer and preserve the files; do not migrate existing research
27
+ elsewhere without a separate request.
28
+
29
+ Explicit destinations take precedence. Continue existing notes in their current
30
+ folder unless the user asks to move them. Without a selected vault or another
31
+ destination, the installed skill still defaults to
32
+ `~/Documents/n8r-surface/research/<source-slug>/`. Installation does not create
33
+ or populate a vault.
34
+
35
+ The folder layout does not validate its contents. Current Researcher 0.1.7
36
+ produces Markdown working notes; `surfaces/` holds Surface descriptions when
37
+ available, without claiming the skill generates validated definitions. Local
38
+ files are not automatically published, backed up or encrypted. If you place a
39
+ vault in a Git repository, ignore its working areas before saving private work.
40
+
41
+ ## Try the installed skill
42
+
43
+ The shared material below assumes **n8r-surface Researcher 0.1.7 is already
44
+ installed**. Anyone with this checkout has the same
45
+ [prepared source pack](../../examples/researcher-vault/README.md).
46
+
47
+ Choose a walkthrough:
48
+
49
+ - [Try the prepared example](researcher-prepared-check.md): use a small fictional chat
50
+ system, save its description, change one setting and compare the findings.
51
+ The source material is provided in this repository.
52
+ - [Try another chat-system repository](researcher-repository-check.md): choose a real
53
+ project Researcher has not already investigated for you, then inspect its AI
54
+ connections and continue the investigation in a fresh chat.
55
+
56
+ Use a local chat app that can read your files and save notes. Both walkthroughs
57
+ assume you can select `n8r-surface:research`; [installation help](researcher-skill.md)
58
+ is separate. No running chat service is required.
59
+
60
+ ## Start with fresh context
61
+
62
+ For an independent attempt, start a new chat rather than continuing or forking
63
+ the development chat. Before the first test prompt, use `/memories` to turn off
64
+ both using and generating memories, where those controls are available. See
65
+ [the app's memory controls](https://learn.chatgpt.com/docs/customization/memories).
66
+
67
+ Read the walkthrough yourself and paste only its task prompts into the test
68
+ chat. Supply the named inputs, not this checklist or its expected answers. For a
69
+ continuation check, add only the previous note requested by that step. Ask the
70
+ agent to use the installed skill and those sources, without consulting other
71
+ chats, projects or the web, and inspect its source references and tool activity.
72
+
73
+ This limits the intended evidence; it does not enforce isolation. A fresh chat
74
+ still has applicable instructions and the model's general knowledge. Codex
75
+ [permission profiles](https://learn.chatgpt.com/docs/permissions#file-access-limited-to-workspace)
76
+ can restrict command reads to selected folders, but connectors, browser access
77
+ and other tools have separate controls. Read-only mode alone is not a guarantee
78
+ that neighboring repositories or expected answers cannot be read. These walkthroughs
79
+ are practical manual checks, not sandboxed evaluations.
80
+
81
+ ## Keep or clean up a test
82
+
83
+ Keep the repository's prepared examples unchanged so another person can start
84
+ the same test.
85
+ Keep each run until you have reviewed its findings. To start again, use a new run
86
+ name. After review, you can delete that one folder under `runs/` with your file
87
+ browser. Leave the shared examples, ongoing research, saved Surfaces and source
88
+ repositories intact.
89
+
90
+ ## Standalone command setup
91
+
92
+ The experimental bare `n8r-surface` command offers a local vault once and remembers
93
+ it as `vaultRoot` in version-1 user settings. It creates `research/`, `artifacts/`
94
+ and `surfaces/` only after confirmation, and reuses that vault from other source
95
+ folders. The legacy `artefactRoot` remains separate and unchanged. This setup-only
96
+ increment does not run the Researcher or save findings. It does not read the
97
+ repository's `.local/vault-path`. See [startup behavior](startup.md) and the
98
+ [installed verification tasks](vault-setup-verification.md).
99
+
100
+ ## Standalone saved continuation
101
+
102
+ The command now writes `research/<source-slug>/research-NNN.md` only when the user
103
+ enters `/save`. A successor stays beside its predecessor with the next unused
104
+ number. The host appends experimental provenance metadata; keep that block intact
105
+ when editing prose. Edits before or after the block are included on reopening.
106
+ These notes are Markdown working research, not validated HTML or Surface JSON/YAML.
107
+
108
+ Use `n8r-surface reopen NOTE --source SOURCE` to select one explicitly. Without
109
+ NOTE, `reopen --source SOURCE` suggests the most recently filesystem-edited
110
+ numbered note in that source's research folder. It shows the path and UTC edit time
111
+ and asks before selecting it. Tied edit times use filename order. The source slug
112
+ is a convenience only: the chosen source and saved evidence are compared anew.
113
+ An invalid newest note reports an error rather than silently selecting an older one.
114
+
115
+ Explicitly named notes may live outside the configured vault; saving continues in
116
+ that note's folder. Only notes with this command's metadata envelope are supported
117
+ in this increment; arbitrary older skill notes need a later import decision.
118
+ The source is always selected explicitly again. See [the short check](getting-started.md)
119
+ and [storage limits](save-reopen-verification.md).
120
+
121
+ ## Candidate structured Surface pairs
122
+
123
+ Ask the conversation to create a Surface, inspect its validated preview, then use
124
+ `/save surface`. Initial pairs go under
125
+ `surfaces/<source-slug>/surface-NNN/`, containing `research.html`, `surface.json`
126
+ and a host `manifest.json`. These are the experimental library's research and
127
+ Surface contracts; the manifest is separate storage metadata with byte hashes and
128
+ provenance. Keep all three files together when moving a pair.
129
+
130
+ Reopen either HTML or JSON with `--source SOURCE` to start fresh and revise it.
131
+ Successors stay beside the selected pair, including after relocation, and retain
132
+ previous bytes. Omitted filenames still suggest Markdown notes only. Manual HTML
133
+ or JSON edits conflict with the saved manifest; make revisions through the
134
+ conversation. See [Surface evidence and limits](surface-revisions-verification.md).
@@ -0,0 +1,211 @@
1
+ # Saved continuation: actual terminal transcripts
2
+
3
+ Sanitized agent rehearsal on 5 November 2026 using installed candidate code
4
+ `447f440`, Codex 0.166.0 and `gpt-6-astra`. Local paths are replaced with `<run>`;
5
+ trailing whitespace is trimmed and model wording is retained. See [evidence and limits](save-reopen-verification.md).
6
+
7
+ ## Research and first save
8
+
9
+ ````text
10
+ Research source: <run>/source/lumen-guide.md (one file)
11
+ Inspected source text and your messages will be sent to OpenAI through Codex using ChatGPT sign-in.
12
+ Source access is read-only. /save explicitly saves a numbered Markdown working note.
13
+ Start research with OpenAI using Codex ChatGPT sign-in? [y/N] y
14
+
15
+ Connecting to Codex…
16
+ Connected: ChatGPT sign-in; model gpt-6-astra.
17
+ Researcher 0.1.8; sha256:8af29c3073df9b8210a7dd94ced9700379b0a98f76bd3a2902f9430b93c98a2a
18
+ Ask about your source. /save saves a note; /exit ends the chat; Ctrl-C cancels.
19
+ You> Describe the AI components and connections with stable component IDs and source citations. For this investigation I choose not to use external OIDC: retain that as my decision, not a change to the source. Keep unknowns and useful next steps clear.
20
+
21
+ I’m using `n8r-surface:research 0.1.8`. I’ll map the supplied guide and retain your choice not to use external OIDC separately from what the source describes.
22
+ [source_list] .
23
+ [source_read] lumen-guide.md sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
24
+ ## Partial AI Surface: Lumen Desk
25
+
26
+ **Scope:** Fictional guide `fixture-1`, not a real installation. These are documented capabilities, not verified runtime connections. [lumen-guide.md:1–4](lumen-guide.md#L1-L4)
27
+
28
+ ### Components and connections
29
+
30
+ | Stable ID | Role and directed connections | Evidence |
31
+ |---|---|---|
32
+ | `component:lumen` | Support-summary application → `component:inference` to generate summaries. Input sources and request path are unspecified. | [Lines 3–9](lumen-guide.md#L3-L9) |
33
+ | `component:inference` | Configured inference endpoint; underlying model, version and service identity are unknown. | [Lines 8–9](lumen-guide.md#L8-L9) |
34
+ | `component:archive` | `component:lumen` → archive service through **separate HTTP routes** for summary documents and audit events. These share one service, not two components. Documented batch limit: 10 documents. Delivery is an option, not an established deployment selection. | [Lines 11–16](lumen-guide.md#L11-L16) |
35
+ | `component:callback` | Optional receiver for `component:archive` → notification delivery. Disabled until selected and configured; receiver hosting is unspecified. | [Lines 18–22](lumen-guide.md#L18-L22) |
36
+ | `component:oidc` | Supported external identity-service option for `component:lumen`; **not selected for this investigation**. | [Lines 8–9](lumen-guide.md#L8-L9) |
37
+
38
+ ### Your decision
39
+
40
+ **2026-11-05:** Do not use external OIDC for this investigation. This is your scoped selection—not a source edit, proof that OIDC is disabled in a deployment, or evidence of an alternative authentication mechanism.
41
+
42
+ ### Unknowns and useful next steps
43
+
44
+ - **Inference:** Identify the endpoint, model/version and submitted data. Resume at lines 8–9 with applicable nonsecret configuration or implementation evidence.
45
+ - **Archive:** Establish whether delivery is selected, then clarify request schemas and authentication for both routes. The guide explicitly does **not** establish a tested Harbor Archive integration. Resume at lines 13–16.
46
+ - **Callbacks:** Confirm whether you want this option. If selected, investigate notification validation, retry behavior and protocol; all remain unspecified. Resume at lines 20–22.
47
+ - **Identity without external OIDC:** Determine what access controls, if any, apply to Lumen and its connections. The guide provides no alternative identity design.
48
+
49
+ **Coverage and identity:** Read all 29 lines of the sole supplied file; no exclusions or truncation. No deployment or runtime observations were supplied. [Lines 24–28](lumen-guide.md#L24-L28)
50
+ Source SHA-256: `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693`.
51
+
52
+ To retain this as a numbered working draft, proposed name `surface-draft-001.md`, use **`/save`**. Nothing has been saved yet.
53
+ You> /save
54
+
55
+ Save destination: <run>/vault/research/lumen-guide-md/research-001.md
56
+ Staged the working note with stable component IDs, citations, source hash, your OIDC decision, unknowns and next steps. The host will handle saving and verification.
57
+ Saved and read back: <run>/vault/research/lumen-guide-md/research-001.md
58
+ sha256:9910959c740959e943e7d6cf4e81b1d365468ab33576fb9c83aa9ce25dc054e7
59
+ You> /exit
60
+ ````
61
+
62
+ ## Fresh reopen and successor
63
+
64
+ ````text
65
+ Research source: <run>/source/lumen-guide.md (one file)
66
+ Inspected source text and your messages will be sent to OpenAI through Codex using ChatGPT sign-in.
67
+ Source access is read-only. /save explicitly saves a numbered Markdown working note.
68
+ Saved note: <run>/vault/research/lumen-guide-md/research-001.md
69
+ Last edited: 2026-11-05T11:08:20.894Z
70
+ Recorded source: lumen-guide.md (file); this is not verified identity.
71
+ The saved note, including human edits, will also be sent to OpenAI after confirmation.
72
+ Start research with OpenAI using Codex ChatGPT sign-in? [y/N] y
73
+
74
+ Connecting to Codex…
75
+ Connected: ChatGPT sign-in; model gpt-6-astra.
76
+ Researcher 0.1.8; sha256:8af29c3073df9b8210a7dd94ced9700379b0a98f76bd3a2902f9430b93c98a2a
77
+ Ask about your source. /save saves a note; /exit ends the chat; Ctrl-C cancels.
78
+ [reopen evidence] lumen-guide.md: unchanged sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
79
+ I’m continuing with `n8r-surface:research 0.1.8`. I’ll re-read the selected source, compare it with the historical claims, and retain your OIDC decision separately. I won’t save anything.
80
+
81
+ [source_list] .
82
+ [source_read] lumen-guide.md sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
83
+ ## Continued partial Surface
84
+
85
+ The freshly read source identifies itself as **“Lumen Desk — fictional guide, fixture-1”**, describing a synthetic application—not a real installation (`lumen-guide.md:1–4`).
86
+
87
+ | Directed connection | Current evidence |
88
+ |---|---|
89
+ | `component:lumen` → `component:inference` | Summary generation through a configured endpoint; service identity, model and version remain unspecified (`lumen-guide.md:8–9`). |
90
+ | `component:lumen` → `component:archive` | Optional document and audit delivery through separate HTTP routes on **one service**. Maximum 10 documents per batch; schema/authentication unresolved; no tested Harbor integration (`lumen-guide.md:13–16`). |
91
+ | `component:archive` → `component:callback` | Optional notifications; receiver disabled until selected and configured. Validation, retries and tested protocol remain unspecified (`lumen-guide.md:20–22`). |
92
+ | `component:oidc` → `component:lumen` | Supported external identity option, **excluded from your intended selection** by the retained human decision—not evidence of runtime disablement (`lumen-guide.md:8–9`). |
93
+
94
+ ### Reconciliation and coverage
95
+
96
+ - Freshly listed the selected source and read all 29 lines; no exclusions or truncation were reported.
97
+ - Fresh SHA-256: `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693`. It matches the predecessor’s recorded digest independently of the supplied comparison.
98
+ - No changed source claims were found. Prior findings remain historical; the table above is freshly corroborated documentary evidence. Matching bytes do **not** establish deployment identity or exercised connections.
99
+ - Retained all component IDs and the dated decision not to use external OIDC. No separately identified human edits were supplied.
100
+ - Implementation, deployment configuration and runtime evidence remain unavailable; the guide explicitly supplies no deployment or runtime observations (`lumen-guide.md:26–28`).
101
+
102
+ ### Next useful investigation
103
+
104
+ Prioritize `component:inference`: identify its selected endpoint/service, model/version and submitted summary data. Resume from `lumen-guide.md:8–9` with explicitly authorized, nonsecret configuration or implementation evidence. This would clarify the main AI data boundary; the current guide cannot resolve it.
105
+
106
+ Can you supply nonsecret inference configuration or implementation evidence as the next selected source?
107
+
108
+ Nothing was saved.
109
+ You> Continue the authentication investigation. What remains unknown, and what evidence would resolve it? Retain my earlier decision.
110
+
111
+ ## Authentication: remaining gaps
112
+
113
+ **Retained decision (2026-11-05):** You chose **not to use external OIDC for this investigation**. `component:oidc` remains a supported option, excluded from your intended selection—not proven disabled in a running system.
114
+
115
+ The guide only establishes OIDC support (`lumen-guide.md:8–9`); it does not identify an alternative authentication mechanism.
116
+
117
+ | Unknown | Evidence that would resolve it |
118
+ |---|---|
119
+ | How users authenticate to `component:lumen` without external OIDC—or whether access is anonymous | Authentication documentation, login handlers and request-authentication middleware. |
120
+ | Which authentication mode is actually selected | Applicable nonsecret deployment configuration and configuration-loading/override logic. Runtime-effective evidence would be needed to establish active settings. |
121
+ | What authenticated users may access or do | Authorization checks, role definitions and ownership checks governing summary generation and access to summaries. |
122
+ | How sessions are managed, if sessions exist | Session implementation and nonsecret settings for expiry, revocation and cookie protections. |
123
+ | How `component:lumen` authenticates to `component:inference` | Inference client implementation and documented authentication scheme; no credential values needed. |
124
+ | How archive delivery is authenticated, if selected | Selected archive interface documentation and client configuration. The guide explicitly leaves authentication to separate agreement (`lumen-guide.md:13–15`). |
125
+ | How callbacks authenticate their sender, if selected | Receiver implementation and protocol documentation covering signature/token verification and replay protection. Validation is unspecified (`lumen-guide.md:20–22`). |
126
+
127
+ These are **unknowns, not established absences or vulnerabilities**. The selected source contains no implementation or runtime observations (`lumen-guide.md:26–28`).
128
+
129
+ **Next useful investigation:** Trace the incoming request authentication and authorization checks for `component:lumen`. This would establish what protects summary generation without external OIDC.
130
+
131
+ Can you provide authentication documentation or request-handler code as the next explicitly selected source?
132
+ You> /save
133
+
134
+ Save destination: <run>/vault/research/lumen-guide-md/research-002.md
135
+ Staged the working note with the graph, source hash, retained OIDC decision, authentication gaps and next steps. Host saving and verification remain pending.
136
+ Saved and read back: <run>/vault/research/lumen-guide-md/research-002.md
137
+ sha256:927a6a84a810d518b5e7bc8f37df3f29916e353a3bb6817ccf21b2cc36aee265
138
+ You> /exit
139
+ ````
140
+
141
+ ## Latest-edited suggestion and human edit
142
+
143
+ ````text
144
+ Research source: <run>/source/lumen-guide.md (one file)
145
+ Inspected source text and your messages will be sent to OpenAI through Codex using ChatGPT sign-in.
146
+ Source access is read-only. /save explicitly saves a numbered Markdown working note.
147
+ Saved note: <run>/vault/research/lumen-guide-md/research-001.md
148
+ Last edited: 2026-11-05T11:09:49.624Z
149
+ Recorded source: lumen-guide.md (file); this is not verified identity.
150
+ Open this note? [y/N] y
151
+
152
+ The saved note, including human edits, will also be sent to OpenAI after confirmation.
153
+ Start research with OpenAI using Codex ChatGPT sign-in? [y/N] y
154
+
155
+ Connecting to Codex…
156
+ Connected: ChatGPT sign-in; model gpt-6-astra.
157
+ Researcher 0.1.8; sha256:8af29c3073df9b8210a7dd94ced9700379b0a98f76bd3a2902f9430b93c98a2a
158
+ Ask about your source. /save saves a note; /exit ends the chat; Ctrl-C cancels.
159
+ [reopen evidence] lumen-guide.md: unchanged sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
160
+ I’m continuing with `n8r-surface:research 0.1.8`, prioritizing the human edit about session expiry and retaining the external OIDC non-selection. I’ll re-read the selected source; I won’t save anything.
161
+
162
+ [source_list] .
163
+ [source_read] lumen-guide.md sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
164
+ ## Continued partial Surface
165
+
166
+ **Fresh source check:** Read all 29 lines of the selected `lumen-guide.md`; listing and read reported no exclusions or truncation. Its title and scope identify a fictional fixture, not a real installation (`lumen-guide.md:1–4`). SHA-256 matches the prior note:
167
+
168
+ `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693`
169
+
170
+ This establishes unchanged source bytes—not deployment or system identity. The supplied comparison remains historical input; the fresh read independently supports byte agreement.
171
+
172
+ ### Retained graph
173
+
174
+ These are documented capabilities, not exercised connections.
175
+
176
+ | Directed connection | Current evidence |
177
+ |---|---|
178
+ | `component:lumen` → `component:inference`: summary generation | Model and version unspecified (`lumen-guide.md:8–9`). |
179
+ | `component:lumen` → `component:archive`: optional document/audit delivery | Separate routes on one service; schema/authentication unresolved; maximum 10 documents per batch; not a tested Harbor integration (`lumen-guide.md:13–16`). |
180
+ | `component:archive` → `component:callback`: optional notifications | Disabled until selected/configured; validation and retries unspecified (`lumen-guide.md:20–22`). |
181
+ | `component:lumen` → `component:oidc`: supported identity option | Documented support remains (`lumen-guide.md:9`); **human non-selection retained**, not an observed runtime setting. |
182
+
183
+ ### Session-expiry priority
184
+
185
+ The human edit now takes priority over the predecessor’s inference-endpoint investigation. The complete source contains **no session-expiry evidence**: no session lifetime, idle timeout, renewal, logout invalidation, or enforcement behavior is described. This is missing evidence, not evidence that sessions never expire. No alternative authentication mechanism is established.
186
+
187
+ Prior claims remain preserved as historical findings and are consistent with the fresh source. No changed source evidence was found; deployment and runtime evidence remain unavailable (`lumen-guide.md:24–28`).
188
+
189
+ **Next useful investigation:** establish how `component:lumen` enforces session expiry without external OIDC, using explicitly authorized authentication documentation or implementation and applicable nonsecret configuration.
190
+
191
+ Can you supply session-management documentation or code for that next check?
192
+
193
+ Nothing saved.
194
+ You> Which human edit and decision did you retain? Continue from them without inventing source facts.
195
+
196
+ I retained:
197
+
198
+ - **Human edit:** “prioritize session-expiry evidence next.”
199
+ - **Human decision:** do **not** select external OIDC for this investigation. This does not establish that OIDC is disabled in a running system.
200
+
201
+ Continuing from those: session expiry is the next investigation priority for `component:lumen`. The inspected guide documents external OIDC as an available option (`lumen-guide.md:8–9`), but supplies no session-expiry or alternative authentication details. It also supplies no deployment or runtime observations (`lumen-guide.md:24–28`). Session behavior therefore remains **unknown**.
202
+
203
+ Can you provide authorized session-management documentation or implementation evidence covering expiry without external OIDC?
204
+ You> /save
205
+
206
+ Save destination: <run>/vault/research/lumen-guide-md/research-003.md
207
+ Staged the continuation draft, retaining the graph, source hash, OIDC non-selection, and session-expiry priority. The host will handle saving and verification.
208
+ Saved and read back: <run>/vault/research/lumen-guide-md/research-003.md
209
+ sha256:56f317af8dfd30ea76cbfe0318bf74b226cc3be0ef851e0edc67bcd120d029d6
210
+ You> /exit
211
+ ````