@n8r/surface 0.1.0-experimental.2 → 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.
- package/README.md +30 -4
- package/dist/cli.js +174 -22
- package/dist/codec.d.ts +2 -0
- package/dist/codec.js +22 -7
- package/dist/codex.d.ts +1 -1
- package/dist/codex.js +26 -10
- package/dist/contracts.d.ts +108 -2
- package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
- package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
- package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
- package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
- package/dist/cyclonedx-validation.d.ts +1 -0
- package/dist/cyclonedx-validation.js +45 -0
- package/dist/html.js +27 -3
- package/dist/recent.d.ts +9 -0
- package/dist/recent.js +71 -0
- package/dist/revisions.js +42 -0
- package/dist/skill-artifacts-cli.d.ts +1 -0
- package/dist/skill-artifacts-cli.js +13 -0
- package/dist/skill-artifacts.d.ts +15 -0
- package/dist/skill-artifacts.js +184 -0
- package/dist/skill-cyclonedx.d.ts +26 -0
- package/dist/skill-cyclonedx.js +214 -0
- package/dist/skill-presentation.d.ts +10 -0
- package/dist/skill-presentation.js +108 -0
- package/dist/skill-surface-cli.d.ts +1 -0
- package/dist/skill-surface-cli.js +37 -0
- package/dist/skill-surface-store.d.ts +7 -0
- package/dist/skill-surface-store.js +126 -0
- package/dist/surface-bom.d.ts +73 -0
- package/dist/surface-bom.js +139 -0
- package/dist/surface-draft.d.ts +6 -3
- package/dist/surface-draft.js +20 -3
- package/dist/surface-instructions.d.ts +2 -1
- package/dist/surface-instructions.js +10 -1
- package/dist/surface-overview.d.ts +15 -0
- package/dist/surface-overview.js +86 -0
- package/dist/surface-store.d.ts +5 -7
- package/dist/surface-store.js +34 -2
- package/dist/surface-view.d.ts +3 -0
- package/dist/surface-view.js +50 -0
- package/dist/validate.js +298 -0
- package/docs/n8r-surface/cli-bundles.md +72 -0
- package/docs/n8r-surface/command-outcomes.md +151 -4
- package/docs/n8r-surface/contracts.md +10 -0
- package/docs/n8r-surface/critical-path.md +21 -0
- package/docs/n8r-surface/first-use-access.md +143 -0
- package/docs/n8r-surface/first-use-overview.md +262 -0
- package/docs/n8r-surface/getting-started.md +55 -88
- package/docs/n8r-surface/guided-journey-verification.md +137 -0
- package/docs/n8r-surface/implementation-decisions.md +14 -14
- package/docs/n8r-surface/instance-first-research.md +209 -0
- package/docs/n8r-surface/npm-distribution.md +39 -69
- package/docs/n8r-surface/npm-release.md +141 -14
- package/docs/n8r-surface/product-direction.md +327 -0
- package/docs/n8r-surface/researcher-skill.md +105 -51
- package/docs/n8r-surface/security-assurance-strategy.md +267 -0
- package/docs/n8r-surface/skill-bom-verification.md +142 -0
- package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
- package/docs/n8r-surface/skill-cyclonedx.md +85 -0
- package/docs/n8r-surface/skill-manual.md +129 -0
- package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
- package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
- package/docs/n8r-surface/skill-workspace-automation.md +359 -0
- package/docs/n8r-surface/surface-description-contract.md +224 -0
- package/docs/n8r-surface/surface-descriptions.md +173 -0
- package/docs/n8r-surface/surface-relationships.md +231 -0
- package/docs/n8r-surface/tester-candidate.md +158 -0
- package/docs/n8r-surface/versioning.md +55 -66
- package/docs/n8r-surface/workspace-human-check.md +101 -0
- package/docs/n8r-surface/workspace-installation.md +68 -0
- package/docs/n8r-surface/workspace-verification.md +350 -0
- package/docs/n8r-surface/workspace.md +83 -0
- package/examples/researcher/README.md +8 -0
- package/examples/researcher/cyclonedx/configured/README.md +7 -0
- package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
- package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
- package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
- package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
- package/examples/researcher/descriptions/README.md +29 -0
- package/examples/researcher/descriptions/bound-r1.json +141 -0
- package/examples/researcher/descriptions/bound-r2.json +153 -0
- package/examples/researcher/descriptions/capability.json +167 -0
- package/examples/researcher/descriptions/research-r1.json +153 -0
- package/examples/researcher/descriptions/research-r2.json +157 -0
- package/examples/researcher/descriptions/sources.md +24 -0
- package/examples/researcher/relationships/README.md +34 -0
- package/examples/researcher/relationships/bound-r1.json +346 -0
- package/examples/researcher/relationships/bound-r2.json +358 -0
- package/examples/researcher/relationships/capability.json +325 -0
- package/examples/researcher/relationships/config/assistant.env.example +4 -0
- package/examples/researcher/relationships/research-r1.json +300 -0
- package/examples/researcher/relationships/research-r2.json +304 -0
- package/examples/researcher/relationships/sources.md +38 -0
- package/examples/researcher/surface-bom/README.md +17 -0
- package/examples/researcher/surface-bom/initial.cdx.json +188 -0
- package/package.json +1 -1
- package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
- package/plugins/n8r-surface/LICENSING.md +3 -0
- package/plugins/n8r-surface/plugin.json +2 -2
- package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
- package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
- package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
- package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
- package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
- package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
- package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
- package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
- package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
- package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
- package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
- package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
- package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
- package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
- package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
- package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
- package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
- package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Capability and Bound Surface delivery
|
|
2
|
+
|
|
3
|
+
Agreed intent, 8 November 2026. The contract layer is implemented separately;
|
|
4
|
+
these installed-skill outcomes remain planned, not evidence of product acceptance.
|
|
5
|
+
Parent: [#17](https://github.com/injectionator/n8r-surface/issues/17).
|
|
6
|
+
|
|
7
|
+
## Intent and names
|
|
8
|
+
|
|
9
|
+
The installed Researcher uses artifacts in a selected workspace, supplemented by
|
|
10
|
+
authorized research, to produce and revise useful evidence-backed descriptions.
|
|
11
|
+
It preserves sources, component identities, human decisions, gaps and history.
|
|
12
|
+
There is one AI Surface Model; the following are descriptions within it, not
|
|
13
|
+
separate models. Size and depth are independent of these distinctions.
|
|
14
|
+
|
|
15
|
+
| Description | Question answered | Evidence boundary |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| Capability Surface | What connections and capabilities can this product support? | Docs/code establish possibilities, without asserting instance bindings. |
|
|
18
|
+
| Bound Surface | Which relationships are configured for this instance? | Explicit instance configuration is enough to mark a relationship bound. Runtime use need not be proved. |
|
|
19
|
+
| Observed Surface | What configuration and state were observed for an instance at a particular time? | Dated instance inspection; any runtime claim needs runtime evidence. Deferred from this delivery. |
|
|
20
|
+
|
|
21
|
+
For example, a Capability Surface may describe support for OIDC authentication
|
|
22
|
+
and MongoDB. A Bound Surface may identify OIDC and MongoDB Atlas as the configured
|
|
23
|
+
authentication and database relationships. These examples are illustrative, not
|
|
24
|
+
findings about an inspected deployment. Actual setting values are outside this
|
|
25
|
+
increment. Configured does not mean reachable, exercised or successfully deployed.
|
|
26
|
+
|
|
27
|
+
Missing evidence means unknown, not unbound. Supported alternatives remain
|
|
28
|
+
separate from selected bindings. Conflicting evidence remains visible rather than
|
|
29
|
+
being silently resolved. Definitions and instance bindings retain separate
|
|
30
|
+
identity/revision meaning; later evidence cannot rewrite prior descriptions or Runs.
|
|
31
|
+
|
|
32
|
+
## Shared component and relationship structure
|
|
33
|
+
|
|
34
|
+
Capability and Bound descriptions both contain component nodes and identified,
|
|
35
|
+
typed relationship edges. Relationships carry purpose (why), integration mechanism
|
|
36
|
+
(how), configuration references (owner, setting names and safe documented locations),
|
|
37
|
+
and evidence for each detail. Unknown or conflicting details remain explicit.
|
|
38
|
+
The Bound description retains this useful context and adds configured-target
|
|
39
|
+
claims; it is not merely a list of targets detached from their integrations.
|
|
40
|
+
|
|
41
|
+
Configuration references describe where/how settings are defined, never their
|
|
42
|
+
actual values. Role endpoints and concrete bound targets have distinct identities;
|
|
43
|
+
a successor can change the target without changing the relationship's purpose or
|
|
44
|
+
rewriting its predecessor. The [bounded representation](surface-relationships.md)
|
|
45
|
+
keeps earlier contracts readable and describes compatibility limits.
|
|
46
|
+
|
|
47
|
+
## Outputs and privacy
|
|
48
|
+
|
|
49
|
+
On an authorized save, provide a concise readable Surface brief, a research HTML
|
|
50
|
+
record and checked structured Surface output in JSON, with openable file links.
|
|
51
|
+
Working Markdown notes remain useful intermediate artifacts. The brief may be
|
|
52
|
+
included in the readable record; an additional file is not mandatory. Outputs
|
|
53
|
+
identify their description type, scope, evidence, gaps and recommended next step.
|
|
54
|
+
|
|
55
|
+
For a Bound Surface, retain the target's useful role/product identity and the
|
|
56
|
+
fact of its configured relationship. Omit or mask sensitive URLs, IPs, usernames,
|
|
57
|
+
passwords and keys. Do not put those values in generated notes, HTML, JSON,
|
|
58
|
+
filenames, validation errors or retained evidence. Use opaque identities that do
|
|
59
|
+
not encode sensitive values; do not copy a raw value merely to redact it later.
|
|
60
|
+
An inability to inspect a source safely is a coverage limit, not permission to
|
|
61
|
+
collect secrets. Existing workspace/source secrets are not copied into output.
|
|
62
|
+
|
|
63
|
+
No raw-secret store is required or introduced. Credentials remain in their
|
|
64
|
+
existing stores. Recoverable exact settings and secure storage would require a
|
|
65
|
+
separate future design. Observed Surface is deferred, including actual settings
|
|
66
|
+
capture and live/runtime inspection; no continuous synchronization is promised.
|
|
67
|
+
|
|
68
|
+
## Contract boundary and implementation choices
|
|
69
|
+
|
|
70
|
+
The [current experimental contract](contracts.md) represents selected definitions
|
|
71
|
+
and leaves deployment bindings outside its profile. This document does not
|
|
72
|
+
silently extend that contract or relabel existing definitions as Bound Surfaces.
|
|
73
|
+
The [shared relationship contract 0.3](surface-relationships.md) defines the
|
|
74
|
+
representation and versioning for #50; installed artifact production remains #51.
|
|
75
|
+
Capability alternatives have an explicit representation; mutually exclusive possibilities must not be flattened
|
|
76
|
+
into a selected composition. Preserve shared identities and exact evidence links.
|
|
77
|
+
|
|
78
|
+
Reuse existing codecs, validators, HTML rendering and revision checks where
|
|
79
|
+
suitable. The builder selects file layout, helper/API integration and the bounded
|
|
80
|
+
representation, documenting compatibility limits and checking them against the
|
|
81
|
+
agreed meanings. JSON is the first structured representation. YAML expansion,
|
|
82
|
+
other hosts, Lab integration, deployment changes and release work are deferred.
|
|
83
|
+
The first supported acceptance environment is the installed skill in Codex.
|
|
84
|
+
The skill is standalone: it must not invoke or depend on the `n8r-surface` CLI.
|
|
85
|
+
Artifact production and checks must work through the host and bundled skill
|
|
86
|
+
resources independently of that executable.
|
|
87
|
+
|
|
88
|
+
## Intent and verification
|
|
89
|
+
|
|
90
|
+
**State X:** an identified installed skill, a selected supported workspace and
|
|
91
|
+
accessible, permitted docs/code artifacts with recorded source identity. Begin
|
|
92
|
+
with no instance binding evidence. Reuse established workspace setup; record any
|
|
93
|
+
missing prerequisite as Blocked. Before implementation, attempt the current
|
|
94
|
+
installed path and retain actual behavior or its prerequisite blocker.
|
|
95
|
+
|
|
96
|
+
**Input Y:** ask for a Capability Surface and saved artifacts; then supply permitted
|
|
97
|
+
instance configuration, a human correction and a second source, and request a
|
|
98
|
+
Bound Surface. In a fresh chat, reopen the saved artifacts and revise one binding.
|
|
99
|
+
|
|
100
|
+
**Outcome Z:** useful readable and checked structured outputs, supported
|
|
101
|
+
capabilities separated from configured relationships, traceable claims and gaps,
|
|
102
|
+
privacy-preserving output, and a successor retaining identities and history.
|
|
103
|
+
Only authorized workspace artifacts change. Source files and prior outputs remain
|
|
104
|
+
unchanged; no configuration, services, credentials or runtime are modified.
|
|
105
|
+
|
|
106
|
+
### Maintainer preparation and technical evidence
|
|
107
|
+
|
|
108
|
+
- Identify the installed candidate revision/digests, host/model, source revisions
|
|
109
|
+
and initial workspace inventory. Use the established installation procedure in
|
|
110
|
+
[the skill guide](researcher-skill.md).
|
|
111
|
+
- Prepare permitted source packs for two unrelated products, including incomplete
|
|
112
|
+
evidence, a second source and a known configuration change. Synthetic sensitive
|
|
113
|
+
sentinels allow exact leak detection without using real secrets.
|
|
114
|
+
- Exercise the actual installed skill; do not seed findings and claim the
|
|
115
|
+
Researcher produced them. Independently read saved bytes, sample consequential
|
|
116
|
+
claims against sources, run contract/reference/successor checks and compare
|
|
117
|
+
prior-file hashes. Scan all generated files and retained evidence for sentinels.
|
|
118
|
+
- Keep source transmission within authorized access. Retain private evidence
|
|
119
|
+
outside the public repository; publish only sanitized summaries and fixtures.
|
|
120
|
+
- Leave malformed data, reference failures, failed saves and preservation cases
|
|
121
|
+
to focused automation. Fixture checks do not prove research quality or host
|
|
122
|
+
acceptance. Record expected, observed, verified and unproved outcomes separately.
|
|
123
|
+
|
|
124
|
+
### Human verification task list
|
|
125
|
+
|
|
126
|
+
These are the target interactions, to be exercised against the installed candidate
|
|
127
|
+
once implemented. They have not been rehearsed as passing product behavior by
|
|
128
|
+
this documentation increment. The maintainer supplies the selected workspace and
|
|
129
|
+
source pack; the tester does not need to choose a schema or run validators.
|
|
130
|
+
|
|
131
|
+
- [ ] Open the prepared workspace in Codex and select the installed Researcher.
|
|
132
|
+
Ask: “Use the supplied docs/code to create a Capability Surface. Save the brief,
|
|
133
|
+
research HTML and structured Surface in this workspace.” Open the returned
|
|
134
|
+
links. Expect supported possibilities and explicit gaps, without asserted
|
|
135
|
+
instance bindings; the files must exist and answer the question.
|
|
136
|
+
- [ ] Supply the prepared instance configuration and second source. Ask: “Create
|
|
137
|
+
a Bound Surface from this evidence. Configuration is sufficient to mark a
|
|
138
|
+
relationship bound. Omit sensitive setting values.” Expect the evidenced
|
|
139
|
+
targets, such as OIDC and MongoDB Atlas, with no runtime-use claim or leaked
|
|
140
|
+
synthetic sensitive values. Missing/conflicting evidence must stay visible.
|
|
141
|
+
- [ ] Give the prepared human correction. Expect a scoped decision/correction
|
|
142
|
+
without erasure of contrary source evidence. Authorize a saved successor.
|
|
143
|
+
- [ ] Start a fresh chat with the same workspace and the saved artifact selected.
|
|
144
|
+
Supply the prepared changed-binding evidence. Ask: “Reopen this Surface and
|
|
145
|
+
save a successor reflecting this binding change.” Expect retained component
|
|
146
|
+
identities, a clear change and predecessor reference, and unchanged old files.
|
|
147
|
+
- [ ] Repeat the bounded journey with the unrelated source pack. Expect the same
|
|
148
|
+
meaningful distinctions without product-specific implementation or user repair.
|
|
149
|
+
- [ ] Report **Pass / Fail / Blocked**, the output links, which step failed or was
|
|
150
|
+
blocked, and whether the outputs were useful and understandable. Wording,
|
|
151
|
+
timestamps and generated IDs may vary; unsupported bindings, secret leakage,
|
|
152
|
+
lost decisions/history, broken files or false success claims are failures.
|
|
153
|
+
|
|
154
|
+
Agent rehearsal and human acceptance are separate records. Fresh chats do not
|
|
155
|
+
prove enforced memory/tool isolation. Retain owned trial artifacts for review;
|
|
156
|
+
cleanup is a separate authorized action and must not touch borrowed source data.
|
|
157
|
+
|
|
158
|
+
## Three delivery tasks
|
|
159
|
+
|
|
160
|
+
1. [#50 — Descriptions and contract](https://github.com/injectionator/n8r-surface/issues/50):
|
|
161
|
+
capture this intent, then define bounded representations, versioning and
|
|
162
|
+
synthetic examples with meaningful checks. See the implemented
|
|
163
|
+
[contract and human check](surface-relationships.md).
|
|
164
|
+
2. [#51 — Installed-skill artifact production and revision](https://github.com/injectionator/n8r-surface/issues/51):
|
|
165
|
+
implement generation, validation, privacy, saving and fresh-chat continuation
|
|
166
|
+
using workspace evidence. Depends on #50.
|
|
167
|
+
3. [#52 — Installed-workflow acceptance](https://github.com/injectionator/n8r-surface/issues/52):
|
|
168
|
+
exercise both products, inspect outputs independently, fix observed failures
|
|
169
|
+
and record human acceptance. Depends on #51.
|
|
170
|
+
|
|
171
|
+
Creating these tasks authorizes neither their implementation nor review readiness,
|
|
172
|
+
merge or release. Broader #17 host/live/consumer scope remains separately visible;
|
|
173
|
+
finishing this bounded delivery does not automatically complete the parent issue.
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Shared Surface relationships contract 0.3
|
|
2
|
+
|
|
3
|
+
Capability and Bound Surfaces describe one graph vocabulary: **component nodes
|
|
4
|
+
and identified relationship edges with their own data and evidence**. A connection
|
|
5
|
+
must explain why it exists, how it integrates and where configuration is defined,
|
|
6
|
+
as far as the sources establish. Size/depth remains independent of description kind.
|
|
7
|
+
|
|
8
|
+
This is the revised bounded #50 contract, following human verification of the
|
|
9
|
+
[earlier 0.2 increment](surface-description-contract.md). It implements a reusable
|
|
10
|
+
structure, not a universal ontology or a real-product integration claim. The
|
|
11
|
+
[synthetic examples](../../examples/researcher/relationships/README.md) are fictional;
|
|
12
|
+
their setting names and data purposes are not findings about LibreChat.
|
|
13
|
+
|
|
14
|
+
## Common graph and relationship data
|
|
15
|
+
|
|
16
|
+
Both kinds use `contract: "n8r.surface/0.3"`, the existing envelope, `records`,
|
|
17
|
+
`vocabularies`, `nodes`, `relationships`, `coverage` and `gaps`. Nodes remain
|
|
18
|
+
`{id, label, type: {vocabulary, term}}`. A shared component retains the same ID.
|
|
19
|
+
Relationships can share endpoints, form cycles or connect a node to itself.
|
|
20
|
+
|
|
21
|
+
Every relationship has these required fields:
|
|
22
|
+
|
|
23
|
+
| Field | Meaning |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `id` | Stable identity of the integration relationship. |
|
|
26
|
+
| `from`, `to` | Local component IDs identifying source and target integration roles. |
|
|
27
|
+
| `type` | `{vocabulary, term}` giving the relationship's meaning, such as `persists-data` or `authenticates-via`. |
|
|
28
|
+
| `purpose` | Why the source uses the target; which task or data requires this integration. |
|
|
29
|
+
| `integration` | How it connects: driver, API, protocol or other evidenced mechanism. |
|
|
30
|
+
| `configuration` | Safe references identifying who owns the configuration, its mechanism, setting names and documented locations. |
|
|
31
|
+
| `basis` | Research finding references establishing support for this relationship. |
|
|
32
|
+
| `conditions`, `note` | Material conditions, applicability and remaining limits. |
|
|
33
|
+
|
|
34
|
+
`purpose`, `integration` and `configuration` each have the same detail shape:
|
|
35
|
+
`{state, claims, note}`. Each claim is `{value, basis}` with nonempty basis entries
|
|
36
|
+
`{record, revision, items}`. Purpose/integration values are nonempty text;
|
|
37
|
+
configuration values are arrays of configuration references. This keeps evidence
|
|
38
|
+
on the fact it establishes rather than implying that one citation proves every
|
|
39
|
+
property of an edge.
|
|
40
|
+
|
|
41
|
+
| Detail state | Claims |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `known` | Exactly one agreed value, supported by known findings. |
|
|
44
|
+
| `conflicting` | At least two distinct sourced claims with differing values or known-versus-absent assertions; no selected answer. |
|
|
45
|
+
| `absent` | Exactly one sourced, scoped absence claim; the note explains what is absent. |
|
|
46
|
+
| `unknown`, `omitted`, `redacted`, `out-of-scope` | No values; the note explains the knowledge boundary. |
|
|
47
|
+
|
|
48
|
+
A detail finding's `subject` is the relationship ID, `property` is exactly
|
|
49
|
+
`purpose`, `integration` or `configuration`, and its claim value matches the
|
|
50
|
+
corresponding detail claim. All competing values in cited findings must remain
|
|
51
|
+
visible. Known/absent details must agree with the finding state. A conflicting
|
|
52
|
+
detail can cite conflicting findings, multiple known findings with differing
|
|
53
|
+
values, or known and absent findings. Opposed known/absent assertions can use the
|
|
54
|
+
same value; keep separate claims/basis links so the source states remain visible.
|
|
55
|
+
Two agreeing known sources do not establish conflict. Reference verification also checks uncited findings for the same
|
|
56
|
+
relationship/property in the description's referenced research, preventing a
|
|
57
|
+
contradiction from disappearing through selective basis links. Unknown details
|
|
58
|
+
can remain conservative without asserting absence.
|
|
59
|
+
|
|
60
|
+
A type vocabulary supplies the meaning of its terms; it does not substitute for
|
|
61
|
+
purpose, mechanism or configuration evidence. Unknown terms remain opaque, as in
|
|
62
|
+
prior profiles. A broader ontology and executable constraint language are not
|
|
63
|
+
required to represent these relationship facts.
|
|
64
|
+
|
|
65
|
+
## Safe configuration references
|
|
66
|
+
|
|
67
|
+
A configuration reference is `{owner, mechanism, key, location}`:
|
|
68
|
+
|
|
69
|
+
- `owner` resolves to a local component node; configuration belongs to that
|
|
70
|
+
component, not implicitly to whichever endpoint a reader guesses.
|
|
71
|
+
- `mechanism` is `environment-variable`, `file-key`, `argument`, `admin-setting`
|
|
72
|
+
or `code` in this bounded vocabulary.
|
|
73
|
+
- `key` identifies the setting or entry, such as the fictional `CHAT_STORE_URI`.
|
|
74
|
+
- `location` is a safe relative documentation/source location, such as
|
|
75
|
+
`config/assistant.env.example`. For an environment variable or admin setting,
|
|
76
|
+
this can point to the source documenting where it is configured.
|
|
77
|
+
|
|
78
|
+
Locations cannot be absolute paths, URLs, traversal paths or contain query/fragment
|
|
79
|
+
syntax. Use the research source locator for a section/line/key within the document.
|
|
80
|
+
A location is descriptive metadata, not authority to access a file or proof that
|
|
81
|
+
it exists on a user's deployment. Its source finding links to the exact research
|
|
82
|
+
revision, source digest and locator; a host resolves the supplied source context.
|
|
83
|
+
If the owner/name/location cannot be described safely, retain an unknown/redacted
|
|
84
|
+
configuration detail and explain the limit.
|
|
85
|
+
|
|
86
|
+
There is **no actual setting value** field. A known configuration detail says where
|
|
87
|
+
and how configuration is defined; it does not mean the instance is configured.
|
|
88
|
+
Passwords, connection strings, IPs, private deployment paths and account names
|
|
89
|
+
must not appear in fields, prose, filenames or retained evidence. The checker
|
|
90
|
+
rejects unknown setting-value fields and unsafe location syntax, but is not a
|
|
91
|
+
secret detector. Producers remain responsible for safe collection and output
|
|
92
|
+
inspection. No raw-secret store is introduced.
|
|
93
|
+
|
|
94
|
+
## Capability and Bound distinctions
|
|
95
|
+
|
|
96
|
+
A Capability relationship adds `state` using the existing possible/unknown/omitted/
|
|
97
|
+
redacted/absent/out-of-scope/conflicting support states. Support basis retains
|
|
98
|
+
[0.2's subject/property/target rules](surface-description-contract.md#capability-surface).
|
|
99
|
+
`exclusiveGroups` now names relationship IDs. Knowing why/how to integrate does
|
|
100
|
+
not assert that any instance selected that relationship.
|
|
101
|
+
|
|
102
|
+
A Bound Surface pins one Capability revision and identifies one opaque `instance`.
|
|
103
|
+
Every included relationship uses the same ID, `from`, `to` and `type` as its pinned
|
|
104
|
+
Capability edge. It repeats the useful relationship details with its own exact
|
|
105
|
+
research references, so the Bound file can answer why/how/where without forcing
|
|
106
|
+
a reader to reconstruct another document. Details may reflect instance-specific
|
|
107
|
+
facts or corrections when separately evidenced; the pinned Capability stays intact.
|
|
108
|
+
|
|
109
|
+
Instead of `state`, each Bound relationship has a `binding` annotation:
|
|
110
|
+
`{state, claims, decisions, note}`. These retain [0.2 binding semantics](surface-description-contract.md#bound-surface):
|
|
111
|
+
one configured target, multiple conflicting targets, or no claims for unknown/
|
|
112
|
+
omitted/redacted/out-of-scope. Claims are `{target, basis}`; targets resolve to local
|
|
113
|
+
nodes. Decisions refer separately to human decisions, never substitute for source
|
|
114
|
+
configuration evidence, and cannot erase contradictions. Missing evidence is not
|
|
115
|
+
unbound. Configuration evidence is sufficient; no runtime-use claim follows.
|
|
116
|
+
|
|
117
|
+
**Role endpoint versus configured target:** a database relationship's `to` may
|
|
118
|
+
identify the MongoDB component role, while `binding.claims[].target` identifies
|
|
119
|
+
MongoDB Atlas for this instance. Both are explicit local component nodes. The
|
|
120
|
+
relationship keeps its identity and purpose when a successor changes the binding
|
|
121
|
+
target to self-hosted MongoDB. A renderer must show the binding annotation/target;
|
|
122
|
+
drawing only `from`/`to` shows the role graph, not the full configured view. Unknown
|
|
123
|
+
or conflicting bindings must not be rendered as selected concrete edges.
|
|
124
|
+
|
|
125
|
+
A Bound file may include only the relevant subset of Capability relationships;
|
|
126
|
+
omission means unspecified, never absent. A configured binding requires a possible
|
|
127
|
+
Capability relationship. Exclusive groups still prevent selecting incompatible
|
|
128
|
+
options together. Same-ID nodes must retain their type across the linked graphs.
|
|
129
|
+
|
|
130
|
+
## Versioning, checking and revision limits
|
|
131
|
+
|
|
132
|
+
This shape is explicitly `0.3`, not a silent alteration of `0.2`. Existing `0.1`
|
|
133
|
+
selected definitions and `0.2` descriptions remain readable with unchanged shapes
|
|
134
|
+
and retained fixtures. `0.3` readers reject top-level `capabilities`/`bindings` and
|
|
135
|
+
require the shared `relationships` representation. Older readers reject `0.3`.
|
|
136
|
+
There is no automatic conversion or downgrade: invented metadata, dropped
|
|
137
|
+
property-level evidence and flattened conflicts would be losses. Preserve the
|
|
138
|
+
original and review any projection separately. These remain descriptions within
|
|
139
|
+
one AI Surface Model, not separate models.
|
|
140
|
+
|
|
141
|
+
Use the existing APIs: `validateArtefact`, `encode`/`decode` (JSON only),
|
|
142
|
+
`verifyReferences` and `verifySuccessor`. Local validation checks fields, states,
|
|
143
|
+
node endpoints, config owners and declared research references. Reference checks
|
|
144
|
+
require the exact research/Capability revisions and digests, evidence roles and
|
|
145
|
+
matching values. No network access or filesystem writes occur. Passing checks
|
|
146
|
+
cannot establish that source prose is true or complete.
|
|
147
|
+
|
|
148
|
+
Successors retain node types and relationship endpoints/type for retained IDs.
|
|
149
|
+
Description kind, instance identity and Capability-artifact identity cannot change.
|
|
150
|
+
Metadata can gain evidence or corrections in a successor; earlier bytes must remain
|
|
151
|
+
unchanged. Changing a concrete binding target does not change role endpoints.
|
|
152
|
+
Two-snapshot checks do not enforce corpus-wide identity retention or persistence;
|
|
153
|
+
hosts must preserve history and prevent reusing retired IDs for different things.
|
|
154
|
+
The existing 2 MiB/depth-64 codec limits, empty extensions and privacy boundaries
|
|
155
|
+
remain in effect. Observed Surface and actual settings capture remain deferred.
|
|
156
|
+
|
|
157
|
+
## Human verification task list
|
|
158
|
+
|
|
159
|
+
Open [the new relationship fixtures](../../examples/researcher/relationships/README.md).
|
|
160
|
+
No CLI, inference, credentials or live instance is required for this contract check.
|
|
161
|
+
|
|
162
|
+
- [ ] Open `capability.json`, then find `urn:cap:database` in `relationships`.
|
|
163
|
+
Expect Assistant → MongoDB, type `persists-data`, purpose “Persist conversation
|
|
164
|
+
history and user profiles”, and a MongoDB driver/wire-protocol mechanism.
|
|
165
|
+
- [ ] Inspect that edge's `configuration`. Expect owner `urn:node:app`, mechanism
|
|
166
|
+
`environment-variable`, key `CHAT_STORE_URI`, and location
|
|
167
|
+
`config/assistant.env.example`. Open that supplied file: it documents the name
|
|
168
|
+
and owner without a connection string. Follow the configuration claim's basis
|
|
169
|
+
to `research-r1.json`, then its source/locator. Expect the config source, while
|
|
170
|
+
purpose and integration cite the separate explanatory source pack.
|
|
171
|
+
- [ ] Open `bound-r1.json` and find the same relationship ID. Expect the same
|
|
172
|
+
endpoints and useful integration details plus a **configured** Atlas binding.
|
|
173
|
+
Authentication still has **conflicting** targets and a separate human preference;
|
|
174
|
+
inference purpose/mechanism/configuration and binding remain **unknown**.
|
|
175
|
+
- [ ] Compare `bound-r2.json` and `research-r2.json`. Expect the same relationship,
|
|
176
|
+
role endpoints and purpose, new self-hosted MongoDB target and exact predecessor
|
|
177
|
+
references. The old files retain Atlas. No settings values should appear.
|
|
178
|
+
- [ ] Report **Pass / Fail / Blocked**, filenames and any missing explanation,
|
|
179
|
+
incorrect configuration reference, lost conflict or exposed value. These are
|
|
180
|
+
developer-authored fixtures, not installed Researcher or human acceptance evidence.
|
|
181
|
+
|
|
182
|
+
### Maintainer preparation and runnable readback
|
|
183
|
+
|
|
184
|
+
From the repository root, use Node.js 22, 24 or 26 and npm. `npm ci` and
|
|
185
|
+
`npm run build` must exit 0; installation uses the registry. Then run:
|
|
186
|
+
|
|
187
|
+
```sh
|
|
188
|
+
node --input-type=module <<'JS'
|
|
189
|
+
import {readFileSync} from 'node:fs';
|
|
190
|
+
import {decode, verifyReferences, verifySuccessor} from './dist/index.js';
|
|
191
|
+
const read = name => decode(readFileSync(
|
|
192
|
+
`examples/researcher/relationships/${name}.json`, 'utf8'), 'json');
|
|
193
|
+
const context = ['research-r1', 'research-r2', 'capability'].map(read);
|
|
194
|
+
const before = read('bound-r1'), after = read('bound-r2');
|
|
195
|
+
verifyReferences(context[2], context);
|
|
196
|
+
verifyReferences(before, context);
|
|
197
|
+
verifyReferences(after, context);
|
|
198
|
+
verifySuccessor(before, after);
|
|
199
|
+
const edge = before.relationships[0];
|
|
200
|
+
console.log(edge.purpose.claims[0].value);
|
|
201
|
+
const config = edge.configuration.claims[0].value[0];
|
|
202
|
+
console.log(`${config.owner}: ${config.key} at ${config.location}`);
|
|
203
|
+
console.log(`${edge.binding.claims[0].target} -> ${after.relationships[0].binding.claims[0].target}`);
|
|
204
|
+
JS
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Expect exit 0 and exactly:
|
|
208
|
+
|
|
209
|
+
```text
|
|
210
|
+
Persist conversation history and user profiles.
|
|
211
|
+
urn:node:app: CHAT_STORE_URI at config/assistant.env.example
|
|
212
|
+
urn:target:atlas -> urn:target:mongodb
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Readback changes no files and needs no cleanup. Different output or a nonzero exit
|
|
216
|
+
fails. `npm test` additionally covers missing/mismatched metadata evidence,
|
|
217
|
+
contradictions, local endpoints/config owners, unsupported fields, privacy,
|
|
218
|
+
revision integrity and the preserved earlier contracts.
|
|
219
|
+
|
|
220
|
+
## Baseline and acceptance boundary
|
|
221
|
+
|
|
222
|
+
Human inspection of #50 at `18478d7` found the generic `uses` edge insufficient.
|
|
223
|
+
Library readback of its retained `0.2` fixtures confirmed no structured purpose or
|
|
224
|
+
configuration and no Bound `relationships` array. The `0.3` fixtures exercise that
|
|
225
|
+
same task: identify a relationship and read its purpose, mechanism, configuration
|
|
226
|
+
reference and evidence in both descriptions, then read back a revised binding.
|
|
227
|
+
|
|
228
|
+
The installed skill 0.1.9's previously recorded artifact-generation blocker remains
|
|
229
|
+
unchanged. #51 must implement production/checking through the standalone skill,
|
|
230
|
+
without invoking or depending on the `n8r-surface` CLI. #52 owns installed-workflow
|
|
231
|
+
and human acceptance. Library/package checks are not evidence of those outcomes.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Try Researcher candidate 0.1.13
|
|
2
|
+
|
|
3
|
+
**Takeaway: understand what your supplied sources reveal about an AI system,
|
|
4
|
+
and choose the next useful investigation.** Save that understanding, its evidence
|
|
5
|
+
and unanswered questions so you can return to it later.
|
|
6
|
+
|
|
7
|
+
This is an interim test candidate, not a release or security certification.
|
|
8
|
+
It describes and investigates; it does not configure or deploy your system.
|
|
9
|
+
A source checkout shows supported possibilities. Nonsecret configuration can
|
|
10
|
+
establish selected connections; dated runtime evidence is needed to claim use.
|
|
11
|
+
|
|
12
|
+
## Choose a host
|
|
13
|
+
|
|
14
|
+
| Host | Candidate evidence | Installation effort |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Codex CLI | Installed research/save/continuation rehearsed; human acceptance pending. | Existing CLI and sign-in, Node 22/24/26, then three commands below. |
|
|
17
|
+
| Codex desktop / ChatGPT Work | CLI registration is checked; fresh desktop loading and acceptance remain pending. | Maintainer-assisted installation, restart and fresh-chat selection check. |
|
|
18
|
+
| Claude Code | Skill file installation checked; research/save/continuation untested. | Existing Claude Code, Node and Git; one installer command below. |
|
|
19
|
+
| Claude web / desktop Chat | Host supports custom skill ZIP upload; this candidate is untested there. | Upload a skill-shaped ZIP in Customize > Skills and enable it; source access, helper runtime and persistence still need checking. |
|
|
20
|
+
|
|
21
|
+
The instructions use the host's tools and model rather than an OpenAI API client.
|
|
22
|
+
Portability of instructions does not establish equivalent host behavior.
|
|
23
|
+
Claude Code's local filesystem access is distinct from web/desktop Chat's
|
|
24
|
+
execution environment. A local path mentioned in chat does not grant access.
|
|
25
|
+
Cowork is another environment requiring its own rehearsal.
|
|
26
|
+
|
|
27
|
+
For a nontechnical tester today, use an existing Codex installation with
|
|
28
|
+
maintainer help for setup, then follow the short task below. There is no verified
|
|
29
|
+
one-click cross-host installation. Claude's upload route is potentially simpler,
|
|
30
|
+
but is not yet a recommended route for testing this candidate's saved Surfaces.
|
|
31
|
+
|
|
32
|
+
## Install the pinned Codex candidate
|
|
33
|
+
|
|
34
|
+
Prerequisites: Codex CLI 0.166.0, Git/network access and Node.js 22, 24 or 26.
|
|
35
|
+
Research also needs the host's sign-in and access to the supplied sources.
|
|
36
|
+
From any directory, for a **new** n8r-surface marketplace registration:
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
codex plugin marketplace add injectionator/n8r-surface --ref d0ec3ece555fbcffb9788aed6593f380900e2d25 --json
|
|
40
|
+
codex plugin add n8r-surface@n8r-surface --json
|
|
41
|
+
codex plugin list --marketplace n8r-surface --json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Expect exit 0 for each command and exactly one installed/enabled entry at
|
|
45
|
+
`0.1.13`. These commands fetch GitHub content and write the selected Codex home's
|
|
46
|
+
plugin configuration/cache. They do not install the npm product CLI or research
|
|
47
|
+
the source. Existing registrations may be pinned elsewhere: have the maintainer
|
|
48
|
+
inspect the source before following the [replacement procedure](workspace-installation.md).
|
|
49
|
+
Do not silently replace a tester's existing registration.
|
|
50
|
+
|
|
51
|
+
Restart the desktop host when applicable, open a fresh chat and select
|
|
52
|
+
**n8r-surface Researcher**. Missing selection or an unexpected version is Blocked;
|
|
53
|
+
CLI installation alone does not pass this desktop check.
|
|
54
|
+
|
|
55
|
+
## Can I use npx?
|
|
56
|
+
|
|
57
|
+
Yes, for a standalone skill installation through the third-party
|
|
58
|
+
[Vercel Labs skills installer](https://github.com/vercel-labs/skills).
|
|
59
|
+
This is different from running `npx @n8r/surface`, which starts the separate npm
|
|
60
|
+
command and does not install the Researcher skill.
|
|
61
|
+
|
|
62
|
+
The following exact command was exercised with `skills` 1.8.1 and Node 26.13.0.
|
|
63
|
+
Run it in a new trial project folder, with Git/network access, for **Claude Code**:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
env DISABLE_TELEMETRY=1 npx --yes skills@1.8.1 add https://github.com/injectionator/n8r-surface/tree/d0ec3ece555fbcffb9788aed6593f380900e2d25/plugins/n8r-surface/skills/research --skill research --agent claude-code --copy --yes
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Expect exit 0, `.claude/skills/research/` and `skills-lock.json` in that folder.
|
|
70
|
+
All 18 copied skill files matched the pinned source in the installation check.
|
|
71
|
+
It downloads/runs the installer through npm's cache and fetches the source from
|
|
72
|
+
GitHub; telemetry is disabled by the process-scoped variable. It copies the skill,
|
|
73
|
+
not plugin manifests, icons or root licence files. Do not redistribute that bare
|
|
74
|
+
copy as the complete licensed plugin package. Do not run over an existing
|
|
75
|
+
same-named `research` skill. This project-scoped command does not register a
|
|
76
|
+
Codex plugin or install into Claude web/desktop Chat.
|
|
77
|
+
|
|
78
|
+
In Claude Code opened in that folder, `/research` is the host-documented invocation
|
|
79
|
+
for a standalone skill named `research`. Actual candidate invocation, source
|
|
80
|
+
research, helper execution and fresh-session continuation remain **untested**.
|
|
81
|
+
Do not treat the install success as a support claim. Other agent targets offered
|
|
82
|
+
by the installer were not rehearsed here.
|
|
83
|
+
|
|
84
|
+
## Tester task: one useful explanation
|
|
85
|
+
|
|
86
|
+
Maintainer preparation: verify installation and provide a readable source pack
|
|
87
|
+
and a writable output folder. Reuse the [working manual](skill-manual.md) and
|
|
88
|
+
[recorded rehearsal](skill-bom-verification.md); no services need starting.
|
|
89
|
+
For a synthetic trial, provide [Lumen's guide](../../examples/researcher/sources/lumen-guide.md)
|
|
90
|
+
and [settings](../../examples/researcher/sources/lumen-settings.md).
|
|
91
|
+
|
|
92
|
+
- [ ] Open a fresh chat with the installed Researcher selected and supply the
|
|
93
|
+
source files. Ask:
|
|
94
|
+
|
|
95
|
+
> Explain what these sources reveal about the AI system. Keep the first answer
|
|
96
|
+
> short: Sources provided (distinguish inspected from merely supplied), Summary
|
|
97
|
+
> (link the evidence), and Now what? (one useful next action). Save the Surface
|
|
98
|
+
> in the output folder I supplied. Keep deployment choices unknown unless the
|
|
99
|
+
> supplied evidence establishes them. Do not execute the source or start services.
|
|
100
|
+
|
|
101
|
+
Expect an evidence-linked explanation, explicit coverage limits and links to
|
|
102
|
+
the saved brief, map and journal. For Lumen, retain conflicting batch maxima
|
|
103
|
+
10 and 25 and the unknown model version; do not silently choose one value.
|
|
104
|
+
- [ ] Open the linked files. Follow one evidence reference back to the supplied
|
|
105
|
+
source. Expect the cited claim to be supported and unsupported selections to
|
|
106
|
+
remain unknown. The current generated brief is longer than the requested chat
|
|
107
|
+
summary; report whether that obstructs understanding.
|
|
108
|
+
- [ ] Answer the Researcher's question or redirect it, then ask it to save.
|
|
109
|
+
Expect a new numbered revision retaining your decision and the earlier files.
|
|
110
|
+
- [ ] Open a fresh chat with the same skill. Supply the latest
|
|
111
|
+
`surface.cdx.json` and source access. Ask: “Continue this Surface. What did I
|
|
112
|
+
choose, what remains uncertain, and what should we investigate next?” Expect
|
|
113
|
+
the choice and gaps to survive; unavailable evidence must be acknowledged.
|
|
114
|
+
|
|
115
|
+
Return **Pass / Fail / Blocked**, the host/version, what you asked, one useful
|
|
116
|
+
finding, and any missing or confusing result. Include nonsecret output references.
|
|
117
|
+
Pass means useful explanation, inspectable evidence and preserved continuation;
|
|
118
|
+
fabrication, lost choices or overwritten predecessors are failures. Missing host,
|
|
119
|
+
source or runtime access is Blocked. Wording, filenames and findings may vary.
|
|
120
|
+
Human acceptance is separate from the earlier agent rehearsals.
|
|
121
|
+
|
|
122
|
+
Optional cleanup: use `codex plugin remove n8r-surface@n8r-surface --json` for
|
|
123
|
+
this Codex installation, or remove only the newly created Claude trial folder.
|
|
124
|
+
Keep your research outputs. Do not delete pre-existing skills or project files.
|
|
125
|
+
|
|
126
|
+
## Package identity and remaining work
|
|
127
|
+
|
|
128
|
+
The retained complete plugin ZIP is `n8r-surface-skill-0.1.13.zip`, containing
|
|
129
|
+
24 files under `n8r-surface/`, including licences and notices. SHA-256:
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
bdab66880bc1763c73ee30d98d3b188a4c8ae2af410f03b364785fbcc58640dd
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
It matches commit `d0ec3ece555fbcffb9788aed6593f380900e2d25` byte for byte.
|
|
136
|
+
This plugin-shaped ZIP is **not** a verified Claude custom-skill upload ZIP;
|
|
137
|
+
Claude expects a skill folder with SKILL.md. No upload or publication was done.
|
|
138
|
+
|
|
139
|
+
On 13 November 2026, an isolated Codex home fetched that commit and installed
|
|
140
|
+
0.1.13 with all 24 files matching; a separate trial folder exercised the npx
|
|
141
|
+
command with all 18 skill files matching. Both commands exited 0. The prior
|
|
142
|
+
installed research evidence is linked above; no new research acceptance is claimed.
|
|
143
|
+
|
|
144
|
+
The proposed primary presentation is **Sources provided / Summary / Now what?**,
|
|
145
|
+
with expandable inspected-source detail and links to deeper evidence. This was
|
|
146
|
+
reviewed as an editorial preview, not implemented in the generator. Candidate
|
|
147
|
+
0.1.13 still generates inventory, connections and gaps. Preserving an authored,
|
|
148
|
+
evidence-linked summary in the authoritative Surface and regenerating it remains
|
|
149
|
+
follow-up work; this package does not promise that presentation is already saved.
|
|
150
|
+
|
|
151
|
+
## Official host references
|
|
152
|
+
|
|
153
|
+
Reviewed 13 November 2026; host support does not establish candidate acceptance:
|
|
154
|
+
|
|
155
|
+
- [OpenAI plugin packaging and marketplaces](https://developers.openai.com/plugins/build/plugins)
|
|
156
|
+
- [Claude Code skills, invocation and local locations](https://code.claude.com/docs/en/skills)
|
|
157
|
+
- [Claude custom skill upload and prerequisites](https://support.claude.com/en/articles/12512180-use-skills-in-claude)
|
|
158
|
+
- [Vercel Labs installer commands and scope](https://github.com/vercel-labs/skills/blob/main/docs/commands.md)
|