@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,188 @@
1
+ # First public npm release
2
+
3
+ The maintainer authorized publication of both `@n8r/surface` and `n8r-surface`
4
+ at **0.1.0-experimental.2** on 5 November 2026. This procedure is release
5
+ preparation, not evidence that publication succeeded. Both packages use the
6
+ explicit `experimental` tag. No `latest` promotion is included.
7
+
8
+ The `.1` preparation run built and retained both archives but failed remote-tag
9
+ verification before any npm staging. Its permanent tag and draft assets remain
10
+ for diagnosis. The maintainer approved `.2` after the verifier was corrected to
11
+ read the exact Git reference and dereference annotated tag objects. No `.1`
12
+ package or placeholder was staged or published by that run.
13
+
14
+ ## User outcome and starting evidence
15
+
16
+ Given private local candidates and no verified registry versions, the maintainer
17
+ can prepare both publishable archives from one reviewed commit, publish their
18
+ retained bytes with provenance, and independently install either exact version.
19
+ The source remains private to prevent publishing the checkout accidentally.
20
+
21
+ The original installed/candidate checks passed, but those archives were private.
22
+ Before this increment, `npm whoami` returned E401 and both names returned E404.
23
+ After interactive login, npm identified the intended account and confirmed its
24
+ `n8r` owner role. Both names still returned E404. These responses do not prove
25
+ name availability or successful first publication. No placeholder was published.
26
+
27
+ ## Maintainer preparation
28
+
29
+ 1. Review and merge the release-preparation PR after acceptance. Merging is a
30
+ separate maintainer decision. The workflow must exist on the default branch.
31
+ 2. Use an authorized npm account with `n8r` organization rights and permission
32
+ to create the unscoped package. For this first release, the selected route is
33
+ a short-lived granular npm token with package **read/write (stage only)**
34
+ permission covering `@n8r/surface` and the new unscoped `n8r-surface`.
35
+ Selecting package `n8r` or scope `@injectionator` is insufficient. If npm
36
+ cannot select an unpublished unscoped name, temporarily use all-packages
37
+ coverage; organization-management permissions are unnecessary. Store it only as
38
+ repository Actions secret `NPM_BOOTSTRAP_TOKEN`. Never put it in a command,
39
+ issue, report or committed file. npm account 2FA remains enabled.
40
+ 3. Enable **Settings → General → Releases → Enable release immutability** before
41
+ creating the draft. An administrator may be needed; an API 404 under a
42
+ non-admin account is not proof the setting is disabled.
43
+ 4. Verify all required Node 22/24/26 checks on the reviewed revision. From its
44
+ clean checkout, create an annotated `v0.1.0-experimental.2` tag and push only
45
+ that tag. Never move or reuse it. Record its full commit SHA.
46
+
47
+ References checked 5 November 2026: [npm token setup](https://docs.npmjs.com/creating-and-viewing-access-tokens/),
48
+ [provenance](https://docs.npmjs.com/generating-provenance-statements/),
49
+ [trusted publishing](https://docs.npmjs.com/trusted-publishers/), and
50
+ [release immutability](https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/prevent-release-changes).
51
+ Trusted publishers require existing packages. npm offered stage-only tokens;
52
+ the maintainer explicitly approved staged first publication, including the
53
+ public `0.0.0-stage` placeholders it creates. The actual release versions require
54
+ maintainer approval with 2FA. See [npm staged publishing](https://docs.npmjs.com/staged-publishing/).
55
+
56
+ ## Human check before publication
57
+
58
+ Prerequisites: the PR checkout with dependencies installed, Node 22/24/26, npm,
59
+ Git and POSIX `tar`. Staging uses npm 11.20.0 (staging requires 11.15+). Start in the repository root. These steps require no npm
60
+ write credentials and do not alter normal settings or installations.
61
+
62
+ - [ ] Create fresh publishable candidates:
63
+
64
+ ```sh
65
+ release_run=$(mktemp -d)
66
+ npm run pack:candidates -- "$release_run/packages" --publishable
67
+ tar -xOf "$release_run/packages/scoped/n8r-surface-0.1.0-experimental.2.tgz" package/package.json
68
+ ```
69
+
70
+ Expect exit 0, version `0.1.0-experimental.2`, name `@n8r/surface`,
71
+ `private: false`, public npm registry/access and tag `experimental`.
72
+ The source `package.json` must still have `private: true`.
73
+ - [ ] Install and run the preferred archive:
74
+
75
+ ```sh
76
+ mkdir "$release_run/consumer"
77
+ cd "$release_run/consumer"
78
+ npm install --offline --ignore-scripts --no-audit --no-fund --package-lock=false "$release_run/packages/scoped/n8r-surface-0.1.0-experimental.2.tgz"
79
+ node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
80
+ ./node_modules/.bin/n8r-surface --version
81
+ mkdir "$release_run/home"
82
+ HOME="$release_run/home" USERPROFILE="$release_run/home" ./node_modules/.bin/n8r-surface </dev/null
83
+ echo "$?"
84
+ ls -A "$release_run/home"
85
+ ```
86
+
87
+ Expect install/import/version exits 0, `function`, and
88
+ `n8r-surface 0.1.0-experimental.2`. Bare startup prints setup guidance,
89
+ exits **1**, and leaves the isolated home empty.
90
+ - [ ] Repeat in a new consumer and home directory using the `unscoped/` archive
91
+ and import `n8r-surface`. Expect identical behavior, with that installed name.
92
+ - [ ] Report **Pass / Fail / Blocked**, both CLI outputs, Node/npm versions and
93
+ candidate revision/dirty flag. Unexpected version, missing imports, or home
94
+ writes are Fail. Missing prerequisites are Blocked. Leave the consumer and
95
+ remove only the temporary directory created above after retaining evidence.
96
+
97
+ ## Prepare and stage retained artifacts
98
+
99
+ The manual [workflow](../../.github/workflows/npm-release.yml) accepts only the
100
+ annotated first-version tag, requires it to be on `main`, and checks clean source.
101
+ Preparation runs tests and both installed-package suites, builds both archives
102
+ once, retains the complete build as an Actions artifact for 90 days, and stores
103
+ the archives with `candidates.json` on a draft GitHub Release. An existing
104
+ release prevents preparation from rebuilding. Downloads and hash validation are
105
+ performed before any publication. Network access includes npm, GitHub and Sigstore;
106
+ write effects are draft release assets and, only for `stage`, npm staged versions and first-package placeholders.
107
+
108
+ From the repository root with GitHub CLI access:
109
+
110
+ ```sh
111
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=prepare
112
+ gh run list --workflow npm-release.yml --limit 1
113
+ ```
114
+
115
+ Inspect the run and draft assets; record the run ID and full source revision.
116
+ Preparation must finish successfully before selecting staging:
117
+
118
+ ```sh
119
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=stage
120
+ ```
121
+
122
+ The publisher reads both registry versions first. An existing version must match
123
+ retained SHA-256 and registry SHA-512 integrity and expose provenance metadata;
124
+ only absent versions are staged. Existing stages are downloaded and compared
125
+ to retained SHA-256 before they are reused; duplicate stages or differing bytes
126
+ stop the run. Non-404 lookup errors stop the run. The
127
+ workflow never finalizes the GitHub Release and never promotes `latest`.
128
+ Provenance metadata presence is not cryptographic verification.
129
+
130
+ On partial failure, retain the draft and its exact assets. Retry **stage** only
131
+ after diagnosing the failure; never rerun preparation or rebuild a published
132
+ version. Existing bytes that differ require a new approved version for both
133
+ packages. If draft creation succeeds but an upload fails, recover missing assets
134
+ from the original run's `npm-release-COMMIT_SHA` Actions artifact. Download it
135
+ with `gh run download RUN_ID -n npm-release-COMMIT_SHA -D NEW_DIRECTORY`, verify
136
+ `candidates.json` revision and each archive SHA-256, and upload only missing
137
+ assets without `--clobber`. Run `check:release` before retrying staging.
138
+ Keep a durable independent copy before the 90-day retention expires. If the
139
+ original bytes cannot be recovered, stop; do not regenerate them.
140
+
141
+ ## Approve each staged version with 2FA
142
+
143
+ Open npm's **Staged Packages** page as the authorized maintainer. For each of
144
+ `@n8r/surface` and `n8r-surface`, inspect version `0.1.0-experimental.2`, tag
145
+ `experimental`, the workflow's stage ID and downloaded bytes. Approve each with
146
+ 2FA. Alternatively run `npm stage approve STAGE_ID` in your authenticated terminal.
147
+ These actions publish the real versions; the placeholders are not acceptance.
148
+
149
+ Then run the read-only verification operation:
150
+
151
+ ```sh
152
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=verify
153
+ ```
154
+
155
+ Expect success only when both exact registry versions match retained bytes and
156
+ expose provenance metadata. This operation cannot stage or approve anything.
157
+
158
+ ## Independent registry acceptance and finalization
159
+
160
+ For each package, use a separate fresh consumer outside the checkout. Install
161
+ its exact version with lifecycle scripts disabled, run `npm audit signatures`,
162
+ read the installed name/version, import `decode`, run `--version` and the isolated
163
+ closed-input startup above. Also exercise the two explicit one-off routes:
164
+
165
+ ```sh
166
+ npm exec --yes --package=@n8r/surface@0.1.0-experimental.2 -- n8r-surface --version
167
+ npm exec --yes --package=n8r-surface@0.1.0-experimental.2 -- n8r-surface --version
168
+ ```
169
+
170
+ Both must print `n8r-surface 0.1.0-experimental.2` and exit 0. Download each
171
+ registry tarball and compare its bytes/digests with the draft assets. Inspect
172
+ its own provenance attestation, including source repository, full commit,
173
+ workflow identity and subject digest; an attested dependency is insufficient.
174
+ Record registry `dist.integrity`, publication and install results independently.
175
+
176
+ After both routes pass, configure trusted publishing separately for both names:
177
+ GitHub owner `injectionator`, repository `n8r-surface`, workflow `npm-release.yml`,
178
+ no environment, permission to stage. Keep maintainer 2FA approval for promotion. A new configuration must succeed within
179
+ two days; do not configure it long before its next use. Verify the configuration
180
+ and its first actual OIDC publication before claiming it works. Remove the
181
+ bootstrap secret and revoke its token when no longer needed. A future version
182
+ requires a reviewed update to the deliberate first-version guards.
183
+
184
+ Attach independent evidence and final release notes, then finalize the draft
185
+ with prerelease true and latest false. Read it back with `check:release` and
186
+ require `immutable: true`. Finalization remains blocked on failed registry,
187
+ provenance, identity or immutability checks. Record **Pass / Fail / Blocked** with
188
+ both package results; local rehearsals do not establish a completed release.
@@ -0,0 +1,117 @@
1
+ # From a Surface description to another user's Lab
2
+
3
+ **Status: proposed consumer contract, not an implemented Lab adapter.** A Surface
4
+ can supply a reusable structural description: component roles, connections,
5
+ interfaces, selected configuration, constraints and required bindings. A recipient
6
+ supplies their own resources, accounts and credentials. Successful research or
7
+ import does not establish that the recipient's setup works.
8
+
9
+ There is one AI Surface Model. A **Lab contains Experiments**; an **Experiment
10
+ owns its desired setup** and requests resource configuration directly from its
11
+ Lab. The Lab owns configuration authority and local bindings. See the
12
+ [concepts](../../spec/README.md) and [host contract](host-contract.md).
13
+
14
+ ## What travels and what stays local
15
+
16
+ | Material | Portable content | Recipient responsibility |
17
+ | --- | --- | --- |
18
+ | Product guide | Applicable product/fork/revision, capability map, source navigation and gaps. | Check applicability; alternatives are not automatic selections. |
19
+ | Research | Evidence, scoped decisions, contradictions, coverage and lineage, where publication is permitted. | Preserve inherited evidence as inherited; recheck what the new task needs. |
20
+ | Selected definition | Exact revision, stable graph IDs, directed connections, interfaces, constraints and requirements. | Select or explicitly adapt the composition; preserve the original and record changes. |
21
+ | Recreation material | Versioned artifact/recipe references, prerequisites, clean-data initialization and supported checks. | Establish availability and adapter support before applying anything. |
22
+ | Local bindings | Requirement names can travel; secret values, original accounts, deployment addresses and resource identities do not. | Allocate local identities and resolve each requirement under the recipient Lab's authority. |
23
+ | Observations and Runs | Permitted historical evidence can travel with its original attribution. | Produce new effective-setup and Run evidence; source success is not recipient proof. |
24
+
25
+ Do not publish private research merely because a product guide would be useful.
26
+ A reusable guide can be derived from publishable product sources independently.
27
+ An unknown value stays unknown; a withheld value is redacted. Neither means absent.
28
+
29
+ ## A concrete partial LibreChat composition
30
+
31
+ This table is a **synthetic planning example**, not a generated validated Surface
32
+ or a claim about a particular deployment. It describes requirements rather than
33
+ copying another user's bindings.
34
+
35
+ | Stable role | Connection or constraint to retain | Recipient input or unresolved decision |
36
+ | --- | --- | --- |
37
+ | Chat application | Identified LibreChat artifact/configuration revision; user request and response path. | Compatible artifact, host resources, private access and local application identity. |
38
+ | Account store | Selected local-account sign-in path and required authorization boundaries. | Fresh accounts and secrets; account policy; evidence of the selected path. |
39
+ | Conversation store | Application persistence through a compatible MongoDB connection. | Recipient database/resource, least required authority, private binding and clean-data policy. |
40
+ | Inference route | Application → any required connector/service → selected model; retain protocol and behavior constraints. | Identify the complete route, compatible service/model, local authorization and adapter. A product/subscription label alone is insufficient. |
41
+ | Optional RAG service | If selected, file-processing connection and required service interface. | Real endpoint, compatible service, authentication, embedding/index/storage choices and caller permissions. An example URL supplies none of these. |
42
+
43
+ The [controlled reconciliation trial](researcher-reconciliation-trial.md) changes
44
+ one RAG endpoint declaration. It cannot fill the rest of this table. Even a
45
+ nonempty URL leaves effective loading, overrides, authorization, reachability and
46
+ successful use unproved. Removing that declaration does not remove RAG from the
47
+ product's supported capabilities.
48
+
49
+ Shared services retain one resource identity with separate dependency edges.
50
+ A dependent Lab must not acquire lifecycle ownership merely by using a service.
51
+ Internal API roles need not become separate deployed processes. New recipient
52
+ instances get local identities linked to the reusable definition's stable roles.
53
+
54
+ ## Proposed n8r-labs handoff
55
+
56
+ 1. **Intake:** preserve the exact supplied bytes, format/version, revision and
57
+ lineage. Identify whether the input is research, a selected definition or an
58
+ observation. Reject unsupported interpretations; retain opaque material.
59
+ 2. **Assess:** map supported meanings to the named consumer version. Report each
60
+ requirement as satisfiable, unresolved, unsupported or deliberately adapted.
61
+ Missing mandatory information blocks applying the affected setup, while the
62
+ partial description remains useful for review.
63
+ 3. **Bind:** the recipient chooses their own accounts, credential references,
64
+ resource identities and compatible alternatives. Prepare an inspectable plan
65
+ naming resources to reuse, create or configure and expected effects.
66
+ 4. **Prepare:** the Experiment requests its exact saved setup revision from its
67
+ Lab. The controller checks ownership, resource authority, concurrent work and
68
+ revision freshness, then dispatches only supported adapter operations.
69
+ 5. **Verify:** independently read back effective nonsecret configuration and
70
+ attribute actual interactions to recipient resources and definition revision.
71
+ Record failures and gaps without silently replacing the intended composition.
72
+
73
+ This is a requirements sequence, not a list of implemented commands. The
74
+ Researcher remains an investigator; imported prose and recipes do not grant
75
+ operational authority. No new runner, provisioning engine or credential-copying
76
+ mechanism is introduced here.
77
+
78
+ ## Format and adapter decisions still needed
79
+
80
+ The current skill emits Markdown research. The separate experimental
81
+ [`n8r.surface/0.1` contract](contracts.md#selected-surface-definition) can express
82
+ selected graph nodes, declared relationships and secret/resource/configuration
83
+ requirements. Its validators check bounded structure and references, not source
84
+ truth or a consumer's understanding. Deployment bindings and Run formats are
85
+ outside that profile.
86
+
87
+ Before claiming n8r-labs support, identify the consumer revision and implement a
88
+ versioned mapping for the chosen vocabulary. Preserve unsupported nodes, edges,
89
+ attributes, requirements and evidence or report explicit losses. A consumer that
90
+ can retain JSON bytes or understand a narrow endpoint/model setting has not thereby
91
+ understood the full graph. Do not silently relabel one format as another.
92
+
93
+ Still required: shared vocabulary/profile selection; supported artifact and recipe
94
+ references; recipient binding and authority rules; configuration precedence;
95
+ missing-resource behavior; clean-data initialization; effective-setup readback;
96
+ and clear handling of substitutions. Existing helpers can satisfy individual
97
+ steps only after their actual scope is checked.
98
+
99
+ ## Smallest meaningful consumer proof
100
+
101
+ For a named consumer build, begin with a permitted saved definition, an identified
102
+ recipient Lab/Experiment, suitable resources and the recipient's own authorization.
103
+ Record the exact user interaction and setup revision. Import/inspect must leave
104
+ resources unchanged, expose unsupported meanings and retain the source bytes.
105
+
106
+ Then resolve bindings and run the proposed preparation through the Lab. For the
107
+ selected chat path, obtain an actual response through the recipient application,
108
+ read back the saved conversation where persistence is required, and retain the
109
+ route, effective setup and result evidence. If RAG is selected, exercise a bounded
110
+ synthetic file-processing/retrieval case separately. Confirm the original setup
111
+ and evidence remain intact; clean up only trial-owned resources.
112
+
113
+ Wording, generated IDs and response text may vary. Wrong target attribution,
114
+ missing mandatory bindings, silent graph losses, copied source credentials or
115
+ claims based solely on successful parsing fail the proof. If prerequisites or
116
+ adapters are unavailable, record the exact blocked step. No such consumer trial
117
+ is claimed by this documentation increment.
@@ -0,0 +1,157 @@
1
+ # Researching an AI Surface graph
2
+
3
+ The graph is the primary result: AI-relevant components, connections, evidence
4
+ and gaps. Inspect configuration to establish or explain those connections,
5
+ not to inventory every setting in an application. The shared
6
+ [skill discovery guide](../../plugins/n8r-surface/skills/research/references/discovery-map.md)
7
+ contains the navigation rules and product-knowledge approach.
8
+
9
+ Use the [short installation and first-trial route](researcher-skill.md#research-01-investigate-and-continue).
10
+ These instructions describe candidate 0.1.8; see the
11
+ [verification record](researcher-skill-verification.md) for exercised paths and
12
+ unverified live inspection. No Lab or new runner is required.
13
+
14
+ The [controlled LibreChat trial](researcher-reconciliation-trial.md) supplies a
15
+ repeatable baseline/change/readback check. The [recreation handoff](recreation-handoff.md)
16
+ explains how a selected description can guide recipient-owned Lab setup and what
17
+ still needs consumer verification.
18
+
19
+ ## Three related views
20
+
21
+ There is one AI Surface Model. The Researcher distinguishes three useful views
22
+ of a system rather than treating every discovered possibility as a running edge:
23
+
24
+ | View | Question | Typical evidence |
25
+ | --- | --- | --- |
26
+ | Possible connections | What can this product/version support, and where should we look? | Product guide, applicable docs and implementation evidence; alternatives remain alternatives. |
27
+ | Declared setup | Which components/connections does this particular composition select? | Identified repository/build/configuration, intended choices and a selected Surface definition. |
28
+ | Observed running graph | Which instances and connections are actually configured/enabled here? | Dated deployment binding and applicable effective settings/observations; stored settings alone have a narrower meaning. |
29
+
30
+ For a synthetic example, a product supports 50 possibilities, a setup selects 25,
31
+ and a running deployment enables 10. The repository may still contain the code for
32
+ all 50; configuration selection is distinct from implementation support. Which
33
+ of the enabled connections were actually exercised needs its own evidence.
34
+ Do not turn an enablement read into a successful connection or usage claim.
35
+
36
+ The generic discovery guide is broader than any product: it supplies questions
37
+ and navigation, not a giant selected Surface containing every possible edge.
38
+ Reusable product knowledge narrows it to applicable capabilities. A selected
39
+ definition describes a composition; deployment observations remain linked,
40
+ dated evidence and do not rewrite that definition. These views often narrow the
41
+ possibilities, but plugins, external configuration or services may also introduce
42
+ connections outside the supplied checkout. This is not guaranteed set inheritance.
43
+
44
+ Component identity and evidence connect the views. The model's existing
45
+ [definition/observation distinction](../../spec/README.md#configuration-and-evidence)
46
+ continues to apply; no new schema or hierarchy is introduced here.
47
+
48
+ ## Skeleton brief and linked evidence
49
+
50
+ Ask for **Skeleton Surface v0.1** when the useful result is a brief of key nodes
51
+ and relationships. Its security focus is where an integration could intercept
52
+ LLM and actual tool calls, with what powers and gaps. The
53
+ [bundled procedure](../../plugins/n8r-surface/skills/research/references/skeleton-surface.md)
54
+ defines what stays in the brief and what belongs in linked evidence. It works
55
+ from source-only capabilities or supplied setup evidence; bindings are not a
56
+ prerequisite. The larger research descriptions are not minimum-size templates.
57
+
58
+ This is a named Markdown working profile, not a universal schema or a new CLI
59
+ command. Detailed and recreation profiles remain future work. Follow
60
+ [SKELETON-01 and SKELETON-02](researcher-skeleton-check.md) to exercise the brief
61
+ and a successor after a declaration change through the installed skill.
62
+
63
+ ## Revision lifecycle
64
+
65
+ 1. **Research the available sources.** Save a scoped description of capabilities,
66
+ roles and relationships, with evidence and gaps. A required database role or
67
+ supported MCP/vector-store connection need not have a selected instance.
68
+ 2. **Configure through a Lab in a later task.** An Experiment selects its desired
69
+ setup and asks the Lab to configure resources. The intended consumer behavior
70
+ is to record successor setup/binding revisions as changes happen, with the
71
+ request, result and effective-state evidence distinguished. Failed or partial
72
+ configuration must not be recorded as successful. Automatic recording belongs
73
+ to future Lab integration, not this skill or an implemented API in this repo.
74
+ 3. **Reconcile changes made outside the Lab explicitly.** Saved descriptions do
75
+ not watch external changes. Run the Researcher against current identified
76
+ sources/settings and the prior description; save an authorized successor with
77
+ the differences and their evidence. A changed settings file establishes a
78
+ declaration, not that a running process loaded it or a connection succeeded.
79
+
80
+ For example, a later setup may bind a required database role and route inference
81
+ through a selected proxy. Retain the role IDs and record resource mappings in
82
+ linked binding records, keeping secrets outside research. A successor can refer
83
+ to the same definition with new bindings; changes to composition or intended
84
+ settings require a successor definition. A newly described proxy may itself need
85
+ an identity and relationships. Do not disguise a topology change as just an address.
86
+
87
+ Profile version changes when output rules change. Surface/setup revisions change
88
+ when the described composition, knowledge or bindings change. Preserve predecessors
89
+ and the exact definition/effective setup used by earlier Runs. Discovery time does
90
+ not prove when an external change took effect. The Researcher describes and
91
+ reconciles; it does not install or reconfigure the target.
92
+
93
+ ## Graph discovery, reconciliation and live evidence
94
+
95
+ Use the same installation and notes convention. These are conversational intents,
96
+ not new CLI commands. The skill supplies instructions; each host supplies actual
97
+ file, web, API and computer access. A missing capability remains a visible gap.
98
+
99
+ **DISCOVER-01: start with the available material.** In a local chat with a selected
100
+ source folder (or supplied docs), select the skill and ask:
101
+
102
+ > Map the AI-relevant components and connections in these sources. Reuse any
103
+ > applicable guides, research or Surface definitions I supplied. Start with a
104
+ > shallow graph and follow its useful gaps. Include configuration only when it
105
+ > explains the graph. Save working notes and show me the result.
106
+
107
+ Expect a graph or edge table, scope/revision, source references, separate supported
108
+ alternatives and selected connections, and missing evidence. Code-only, docs-only,
109
+ prior-model-only and mixed inputs are valid starts. A bounded finding of no AI
110
+ relevance is valid; inventing an AI node or treating a package list as the Surface
111
+ is a failure. Open the note and follow a representative edge's source reference.
112
+
113
+ **RECONCILE-01: compare a supplied Surface.** Provide the prior JSON/notes and the
114
+ current identified sources, then ask:
115
+
116
+ > Compare this Surface with the current sources. Preserve the original. For its
117
+ > AI-relevant nodes and connections, show supported agreements, differences,
118
+ > additional discoveries and unknowns with evidence. Separate capabilities,
119
+ > intended setup, declared settings and runtime observations. Save the comparison.
120
+
121
+ Expect claim-by-claim research, including unsupported format/vocabulary meanings,
122
+ without a silent rewrite or universal validation claim. For example, code that
123
+ supports OIDC does not prove it is enabled; a current staging file declaring it
124
+ disabled is not evidence that a live process loaded it. Missing model fields do
125
+ not mean absent capabilities. Open the comparison and confirm the original bytes
126
+ are unchanged. Validated generated Surface JSON remains outside this increment.
127
+
128
+ **LIVE-01: inspect an available admin page/API.** Prerequisites: a user-selected
129
+ test environment and admin location, an appropriate account, supported host tools
130
+ and permitted read access. Use the host's supported sign-in handoff if required;
131
+ enter credentials directly there, not in chat. Then ask:
132
+
133
+ > Inspect the selected environment's identity settings read-only. Establish
134
+ > whether OIDC is enabled and which identity service it connects to. Record
135
+ > nonsecret evidence for that graph edge; do not reveal credentials, change
136
+ > settings or test the connection. Save a dated observation in my working notes.
137
+
138
+ Expect the actual environment, time, page/section or API operation, nonsecret
139
+ enablement and target where visible, and explicit unknowns elsewhere. Read the
140
+ relevant view/fields again to verify the observation and open the saved note.
141
+ Distinguish stored settings from runtime-effective settings. Do not treat masked
142
+ credentials as valid credentials or a settings read as successful OIDC login.
143
+ No product is assumed to expose all settings in an admin UI. A missing tool,
144
+ blocked route or unavailable field is a blocker/limit, not permission to bypass
145
+ access or an assertion that the connection is disabled.
146
+
147
+ For these chat interactions there is no process exit code. Success is the
148
+ specified visible result plus saved-byte readback; wording and identities vary.
149
+ No target settings should change. Keep notes; no target cleanup is expected.
150
+ Inspect only graph-relevant fields, avoiding secret reveals, raw config exports
151
+ and screenshots containing credentials. Real admin UI/API acceptance must be
152
+ recorded separately from synthetic cases or source-only trials.
153
+
154
+ ChatGPT Work access depends on the actual browser/session and account permissions;
155
+ it does not inherit all sign-ins automatically. See the official
156
+ [Work browser/session boundaries](https://learn.chatgpt.com/docs/enterprise/chatgpt-work-local-security#browser-sessions-and-existing-sign-ins),
157
+ reviewed 4 November 2026. The skill cannot grant or broaden host access.
@@ -0,0 +1,117 @@
1
+ # Try the prepared example
2
+
3
+ Test whether Researcher can describe an AI system, save its findings and notice a
4
+ small change while preserving earlier work. This uses fictional documents and a
5
+ pretend configuration; no application needs to be installed or started.
6
+
7
+ ## Before you start
8
+
9
+ Open your local vault in your file browser. You need a local chat app
10
+ with **n8r-surface Researcher 0.1.7 already installed**, access to the prepared example in this repository,
11
+ and permission to save files in your vault. If access or the skill is missing, record
12
+ **Blocked** and what is missing. You do not need to diagnose the installation.
13
+ Follow the [fresh-context guidance](researcher-vault.md#start-with-fresh-context) before
14
+ the first prompt in each test chat.
15
+
16
+ ## Tasks
17
+
18
+ - [ ] **1. Make your working copy.** In the `n8r-surface` repository, open
19
+ `examples/researcher-vault/`. Copy the whole `chat-service` folder into `runs/`
20
+ in your local vault (create `runs/` if needed) and rename the copy `check-001`. If that
21
+ name already exists, choose the next unused number and use it throughout these
22
+ steps. Open the copy: it should contain `scope.md`, `system.md` and `current.env`.
23
+
24
+ **Look for:** `DOCUMENT_SEARCH_URL=` in your copy of `current.env`, with nothing
25
+ after the equals sign. Leave the shared files in `examples/researcher-vault/` unchanged.
26
+
27
+ - [ ] **2. Start the investigation.** Open a fresh local chat in your
28
+ vault folder and select **n8r-surface Researcher**
29
+ (`n8r-surface:research`). Paste this, adjusting `check-001` if needed:
30
+
31
+ > Use only scope.md, system.md and current.env in runs/check-001 as source
32
+ > material. Describe the main AI-related components and connections. Explain
33
+ > what the product supports, what the supplied settings say, and what is still
34
+ > unknown about a running system. Cite the files you used. Save your findings
35
+ > as a new numbered note under runs/check-001/notes and give me a link to
36
+ > open it. Create the notes folder if needed.
37
+ > Use the installed skill; do not consult other chats, memories, projects,
38
+ > the web or the test walkthroughs.
39
+
40
+ **Look for:** a readable map or connection table, source references, unknowns
41
+ and an openable saved note. Open the note and confirm it matches the chat. It
42
+ should connect the browser, chat application, model gateway and conversation
43
+ store, and describe optional document search. The supplied settings give no
44
+ document-search address; they do give a model-gateway address. Running services,
45
+ the language model and authentication details remain unverified or unknown.
46
+
47
+ Check **Recommended next steps**: each item names the next investigation, why
48
+ it matters and a source location or missing evidence from which to resume.
49
+
50
+ Make a copy of this first note named `first-note-backup.md` directly in your
51
+ `check-001` folder. Keep the original in `notes/` for the next chat.
52
+
53
+ - [ ] **3. Change one setting.** Open your working copy of `current.env` in a text
54
+ editor. Change `DOCUMENT_SEARCH_URL=` to
55
+ `DOCUMENT_SEARCH_URL=https://search.example.test`. Save and reopen the file.
56
+ Leave every other line and file unchanged. This is a placeholder address;
57
+ do not visit it or run the settings file.
58
+
59
+ **Look for:** the new address in your working copy. The shared example should
60
+ still have the empty value.
61
+
62
+ - [ ] **4. Ask Researcher to compare.** Start another fresh local chat in your
63
+ vault folder and select Researcher again. Give it the original saved note from
64
+ `notes/` by attaching the file or pasting its path, then paste:
65
+
66
+ > Read the saved recommendations and continue within these supplied sources.
67
+ > Compare my saved findings with scope.md, system.md and current.env in
68
+ > runs/check-001. Tell me what changed, what stayed the same and what is
69
+ > still unknown, with references to the evidence. Save the comparison as a new
70
+ > numbered note under runs/check-001/notes and give me a link. Keep the
71
+ > original note unchanged.
72
+ > Use the installed skill and these supplied sources only; do not consult
73
+ > other chats, memories, projects, the web or the test walkthroughs.
74
+
75
+ **Look for:** a second file with a different name. Open it: document search
76
+ should now have a declared target of `https://search.example.test`. The model
77
+ gateway address, other components and unresolved questions should carry forward.
78
+ Whether any service is running or working remains unknown. A claim such as
79
+ “document search now works” fails this check. Reopen the first note and compare
80
+ it with `first-note-backup.md`; its contents should be unchanged. The successor
81
+ should update **Recommended next steps**, explaining resolved items or blockers
82
+ and where to resume. It must not silently copy recommendations made obsolete by
83
+ the changed settings.
84
+
85
+ - [ ] **5. Check the setup explanation.** In the chat, ask:
86
+
87
+ > In the current AI Surface Model, who owns an Experiment's desired setup,
88
+ > and who prepares the resources it needs?
89
+
90
+ **Look for:** the Experiment owns its desired setup and asks its Lab directly;
91
+ the Lab configures resources and supplies local bindings. The current chain is
92
+ **Lab → Experiment → Setup**.
93
+
94
+ ## Report the result
95
+
96
+ Keep the run folder for review. Record this for yourself, or send it to the person
97
+ who assigned the test:
98
+
99
+ > Result: Pass / Fail / Blocked
100
+ >
101
+ > App used and Researcher version shown in the chat:
102
+ >
103
+ > Run folder, first note and comparison note:
104
+ >
105
+ > Task number and what happened, if anything differed:
106
+
107
+ **Pass:** every task produced the expected result. **Fail:** a task ran but gave a
108
+ wrong result, lost earlier work or failed to save a file. **Blocked:** missing
109
+ access or setup prevented a task. Different wording, supported extra findings
110
+ and different note numbers are fine. Copy the relevant response or error; you
111
+ need not diagnose it. These are chat interactions, so there are no command exit
112
+ codes to check.
113
+
114
+ This is a document-based rehearsal of the workflow. It does not establish code
115
+ discovery, a working service or Lab recreation. For real source exploration,
116
+ [try another repository](researcher-repository-check.md), or use the deeper
117
+ [LibreChat declaration trial](researcher-reconciliation-trial.md).