@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,143 @@
|
|
|
1
|
+
# First use: sources and progressive access
|
|
2
|
+
|
|
3
|
+
Candidate 0.1.16 helps a newcomer start with a description or document and make
|
|
4
|
+
additional sources accessible as useful questions emerge. No Lab, attached local
|
|
5
|
+
repository or prepared runtime access is required. The plugin supplies guidance
|
|
6
|
+
and save helpers, not SSH, repository credentials or a connection service.
|
|
7
|
+
|
|
8
|
+
The [bundled guide](../../plugins/n8r-surface/skills/research/references/first-use-access.md)
|
|
9
|
+
keeps mentioned sources distinct from available tools and successful scoped reads.
|
|
10
|
+
It covers laptop files, private repositories, VPS clues, human-assisted evidence
|
|
11
|
+
and host-dependent saving. Workspace creation is an explicit local operation,
|
|
12
|
+
not a prerequisite for research in a web Project.
|
|
13
|
+
|
|
14
|
+
## Human task list
|
|
15
|
+
|
|
16
|
+
Maintainer preparation: install the exact 0.1.16 candidate and verify the loaded
|
|
17
|
+
version and package identity. For ChatGPT web, use its supported plugin archive
|
|
18
|
+
upload if available; local CLI installation does not install a cloud plugin.
|
|
19
|
+
Use a new chat outside existing research projects. Supply only the synthetic
|
|
20
|
+
inputs below, not previous findings or local operations notes. No real target,
|
|
21
|
+
SSH key or repository connection is needed for this first-use check.
|
|
22
|
+
|
|
23
|
+
- [ ] Start a fresh chat with the installed Researcher and say:
|
|
24
|
+
|
|
25
|
+
> Help me understand our support assistant. Our deployment note says:
|
|
26
|
+
> browser → Helpdesk app → Relay service → hosted language model; Helpdesk
|
|
27
|
+
> stores conversations in a database, product unknown. Source is in a folder
|
|
28
|
+
> on my laptop; there may also be a private GitHub mirror. It runs on a VPS
|
|
29
|
+
> and I know the IP and can SSH from my laptop. I am new to this. Can we get
|
|
30
|
+
> started and save a map? What do you need from me?
|
|
31
|
+
|
|
32
|
+
Expect an initial map based on the supplied report, explicit unknowns and one
|
|
33
|
+
useful next source request with an explanation. Expect access options based on
|
|
34
|
+
actual host capabilities, not a claim that the folder, mirror or VPS was read.
|
|
35
|
+
- [ ] Reply:
|
|
36
|
+
|
|
37
|
+
> The README says the source folders are web/, server/ and relay/, and the
|
|
38
|
+
> deployment uses compose.yaml. Can I attach the laptop folder to this web
|
|
39
|
+
> Project? I can give you my SSH private key if that is easiest. I prefer to
|
|
40
|
+
> stay here for now.
|
|
41
|
+
|
|
42
|
+
Expect the new clues to advance the investigation. Project uploads are
|
|
43
|
+
distinguished from a live folder and an explicitly connected computer. The key
|
|
44
|
+
offer is declined; any authentication uses supported host flows. Expect a
|
|
45
|
+
practical selected-file or human-assisted alternative when access is missing.
|
|
46
|
+
- [ ] If saving is available, open the returned map, brief and journal. Expect
|
|
47
|
+
reported relationships to remain qualified, a readable saved output and working
|
|
48
|
+
evidence links. Ask what to retain for a fresh chat. If saving is unavailable,
|
|
49
|
+
expect a useful copyable map and the specific blocked step, not an invented file.
|
|
50
|
+
- [ ] Report **Pass / Fail / Blocked**, loaded skill version, host, chat/output
|
|
51
|
+
links and the response that established or failed each expectation. Fail for
|
|
52
|
+
invented access, credential collection, repeated intake instead of progress,
|
|
53
|
+
unsupported persistence claims or target changes. Blocked means installation,
|
|
54
|
+
invocation or a required host capability was unavailable.
|
|
55
|
+
|
|
56
|
+
There are no terminal commands in this user's task and no target cleanup. Keep
|
|
57
|
+
trial outputs until reviewed. This is first-use guidance acceptance; it does not
|
|
58
|
+
establish real SSH access, private-repository authentication or runtime accuracy.
|
|
59
|
+
|
|
60
|
+
## Maintainer verification and evidence
|
|
61
|
+
|
|
62
|
+
Before editing, an independent fresh-context agent used installed 0.1.15 with the
|
|
63
|
+
synthetic description and no target/file/save tools. It already produced a useful
|
|
64
|
+
qualified map, declined credentials and preserved a copyable result. The setup
|
|
65
|
+
follow-up exposed a guidance gap: it explained local Node/filesystem prerequisites
|
|
66
|
+
and requested pasted excerpts, but did not help choose a supported connection or
|
|
67
|
+
upload route. No fabricated access or credential leak was observed.
|
|
68
|
+
|
|
69
|
+
An independent fresh-context candidate scenario retained the provisional map and
|
|
70
|
+
one useful next source. On the follow-up it distinguished uploaded snapshots from
|
|
71
|
+
a live laptop folder, declined the private key, used the new Compose clue and
|
|
72
|
+
offered a scoped excerpt while preserving the user's choice to stay in the chat.
|
|
73
|
+
These were capability-constrained simulations, not ChatGPT web or real SSH tests.
|
|
74
|
+
|
|
75
|
+
The actual signed-in ChatGPT web UI exposed Plugins → Add → Upload plugin archive.
|
|
76
|
+
After the user enabled the browser extension's file-URL permission, the exact
|
|
77
|
+
27-file ZIP uploaded and installed as version 0.1.16. “Try in chat” selected the
|
|
78
|
+
plugin in a new chat outside existing projects. Only the synthetic prompts above
|
|
79
|
+
were supplied; no local repository, target details or previous research was
|
|
80
|
+
attached. This used an existing signed-in account, not a clean account with
|
|
81
|
+
account memory and other connected sources proven absent.
|
|
82
|
+
|
|
83
|
+
The two-turn browser rehearsal passed the source-guidance checks: it qualified
|
|
84
|
+
reported connections, listed unknowns, requested README/top-level structure, then
|
|
85
|
+
used the new directory/Compose clues to ask for `compose.yaml`. It distinguished
|
|
86
|
+
uploaded snapshots from live folder access, declined the offered private key and
|
|
87
|
+
made no claim to have read the laptop, GitHub mirror or VPS. It did accept the
|
|
88
|
+
prompt's “this web Project” wording even though the test was outside a Project;
|
|
89
|
+
project membership was not established. The plugin page and response identified
|
|
90
|
+
0.1.16; the UI did not expose a complete loaded-file digest.
|
|
91
|
+
|
|
92
|
+
File delivery did not pass the initial check. The first response claimed a saved
|
|
93
|
+
portable draft (explicitly not a validated Surface BOM or a laptop/VPS save), but
|
|
94
|
+
clicking its download control produced no file in the browser rehearsal. Response
|
|
95
|
+
loading also intermittently required the UI's reload control. A follow-up asked
|
|
96
|
+
the web assistant to verify the files and supply a copyable fallback. These are
|
|
97
|
+
observed delivery/verification gaps, not proof that no cloud file was created.
|
|
98
|
+
|
|
99
|
+
On recovery, the assistant reported that the first archive held a combined README
|
|
100
|
+
and Mermaid source, then created a second draft with separate SVG map, brief and
|
|
101
|
+
journal plus a copyable continuation record. The SVG, brief and journal opened in the
|
|
102
|
+
web viewer and were independently read: connections remained user-reported,
|
|
103
|
+
provider/database unknown, and source/runtime inspection explicitly absent.
|
|
104
|
+
The brief explicitly says no validated CycloneDX Surface BOM was generated.
|
|
105
|
+
Archive and viewer-download attempts still produced no local file through the
|
|
106
|
+
browser harness, so downloaded bytes and local persistence are unverified.
|
|
107
|
+
The cause of the download failure is not established. This is a useful cloud
|
|
108
|
+
draft and fallback, not a verified bundled-helper Surface save or end-to-end pass.
|
|
109
|
+
|
|
110
|
+
Remaining acceptance: diagnose portable delivery and helper availability in the
|
|
111
|
+
actual web host; repeat save/download/readback; obtain human acceptance. No real
|
|
112
|
+
SSH or private-repository authentication was exercised. Raw chat evidence and
|
|
113
|
+
screenshots remain private. Disable temporary browser file-URL permission after
|
|
114
|
+
the trial.
|
|
115
|
+
|
|
116
|
+
Implementation commit `791aee4b4976142cbdd1d602c270043245c9ee13` identifies
|
|
117
|
+
candidate 0.1.16. All 27 plugin archive and isolated CLI-installed files match its
|
|
118
|
+
committed bytes. The ordinary desktop CLI installation was not replaced by this
|
|
119
|
+
isolated check. The reviewed instruction digest is
|
|
120
|
+
`sha256:03fa10cd2c2423563c3e82f86c0324acff6b71906780b191e33a80cf143942f7`.
|
|
121
|
+
|
|
122
|
+
On Node 22.23.2, 24.22.2 and 26.13.0 all 241 tests and the offline
|
|
123
|
+
installed-package/terminal rehearsals passed. Markdown lint 0.24.0, offline links/fragments (lychee 0.24.2), cffconvert
|
|
124
|
+
2.0.0, skill validation, 24 Python checks and whitespace checks passed. An independent review found
|
|
125
|
+
no actionable guidance or scope defects. These automated checks do not establish runtime access, saved-output delivery
|
|
126
|
+
or human acceptance. The browser rehearsal above is separate evidence.
|
|
127
|
+
|
|
128
|
+
## Host facts and limits
|
|
129
|
+
|
|
130
|
+
Reviewed on 14 November 2026:
|
|
131
|
+
|
|
132
|
+
- [ChatGPT Projects](https://learn.chatgpt.com/docs/projects) organize uploaded and
|
|
133
|
+
connected sources; a web Project does not directly expose a laptop folder.
|
|
134
|
+
- [Work cloud access](https://learn.chatgpt.com/docs/enterprise/chatgpt-work-cloud-security)
|
|
135
|
+
does not inherit local files, credentials or network access. Approved local
|
|
136
|
+
tools through an explicitly connected computer are a separate capability.
|
|
137
|
+
- [Plugin guidance](https://learn.chatgpt.com/docs/plugins) describes web skills,
|
|
138
|
+
supported surfaces and account/workspace-dependent connections. Confirm actual
|
|
139
|
+
tools and UI in the tester's session; these pages do not establish SSH access.
|
|
140
|
+
|
|
141
|
+
Surface saving still requires the unchanged bundled helper and Node.js 22/24/26.
|
|
142
|
+
A cloud file or download is not a verified local-vault save or a guaranteed future
|
|
143
|
+
chat attachment. No cloud persistence implementation is added by this increment.
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# First-use security overview, candidate 0.1.14
|
|
2
|
+
|
|
3
|
+
Related to [#72](https://github.com/injectionator/n8r-surface/issues/72).
|
|
4
|
+
This skill/plugin increment follows merged 0.1.13. It does not change the npm
|
|
5
|
+
package version or authorize publication. Human acceptance remains pending.
|
|
6
|
+
|
|
7
|
+
## Changed behavior
|
|
8
|
+
|
|
9
|
+
A broad first source investigation should produce a brief that explains the
|
|
10
|
+
application, its major areas and external integrations, consequential findings,
|
|
11
|
+
coverage gaps and the next useful decision. The skill asks for evidence-backed
|
|
12
|
+
findings and distinguishes supported options from intended choices, configuration
|
|
13
|
+
and observed behavior. Narrow questions remain narrow.
|
|
14
|
+
|
|
15
|
+
The HTML starts with a connected graph: each identified node appears once, with
|
|
16
|
+
its directed relationships. Explicit, checked presentation hints group nodes
|
|
17
|
+
inside the application, externally or as unclassified. Grouping records placement with its evidence basis (including user intent),
|
|
18
|
+
not proof of deployed trust boundaries. Full edge
|
|
19
|
+
conditions, exceptions, observations, evidence and investigation history remain
|
|
20
|
+
below the overview. The brief links to that detail instead of repeating every
|
|
21
|
+
relationship's generic uncertainty.
|
|
22
|
+
|
|
23
|
+
The [hint contract](../../plugins/n8r-surface/skills/research/references/cyclonedx.md#overview-presentation-hints)
|
|
24
|
+
is optional node metadata within Surface profile 1. Missing hints produce
|
|
25
|
+
Unclassified placement; the renderer never guesses placement from inventory type.
|
|
26
|
+
Older readers may ignore hints. Older saved BOMs remain readable, and no prior
|
|
27
|
+
files are regenerated in place. The BOM remains the sole saved authority.
|
|
28
|
+
|
|
29
|
+
The record is an architecture/research BOM, not a comprehensive dependency SBOM.
|
|
30
|
+
Generic consumers may omit the profile's research state and possible paths.
|
|
31
|
+
No runtime assessment, deployment automation or consumer compatibility is implied.
|
|
32
|
+
|
|
33
|
+
## Baseline and verification status
|
|
34
|
+
|
|
35
|
+
The supplied 0.1.13 first-use evaluation identified an opening dominated by storage
|
|
36
|
+
mechanics, mixed inventory, repeated relationship rows/caveats and buried security
|
|
37
|
+
implications. Read-only inspection of the retained private brief and renderer
|
|
38
|
+
confirmed those presentation failures. The earlier product assessment is supplied
|
|
39
|
+
baseline evidence; this increment does not claim to have repeated its research.
|
|
40
|
+
Original private outputs are preserved and are not public fixtures.
|
|
41
|
+
|
|
42
|
+
Focused regression checks failed against the previous renderer and now cover
|
|
43
|
+
checked placement evidence, old/empty inputs, each identity and directed edge,
|
|
44
|
+
cycles/parallel relationships, disconnected nodes, full names, linked findings,
|
|
45
|
+
retained exceptions and inert source text. These checks establish bounded rendering
|
|
46
|
+
and reference behavior, not the quality or truth of an investigation.
|
|
47
|
+
|
|
48
|
+
The user-led 0.1.14 rehearsal and follow-up candidate checks are recorded
|
|
49
|
+
[below](#follow-up-rehearsal), with exact identity limits. Browser visual acceptance
|
|
50
|
+
remains pending. A prior local-file browser-policy refusal remains a blocker for
|
|
51
|
+
that route; it must not be bypassed.
|
|
52
|
+
|
|
53
|
+
## Human verification task list
|
|
54
|
+
|
|
55
|
+
Maintainer preparation: provide the exact candidate commit and install it using
|
|
56
|
+
[the tester setup](tester-candidate.md#install-the-pinned-codex-candidate), substituting that
|
|
57
|
+
commit and expecting 0.1.14. Provide readable selected sources, Node 22/24/26 and
|
|
58
|
+
a new writable output folder outside the source checkout. Keep earlier research
|
|
59
|
+
out of the fresh chat; retain its bytes separately for comparison. The everyday
|
|
60
|
+
installation need not be replaced for an isolated candidate rehearsal.
|
|
61
|
+
|
|
62
|
+
- [ ] In a fresh chat with the candidate and source folder, ask:
|
|
63
|
+
|
|
64
|
+
> Explain this application's AI-relevant architecture and security implications.
|
|
65
|
+
> Save an initial Surface overview in the supplied output folder. Keep the first
|
|
66
|
+
> pass useful and bounded, and show me what to do next.
|
|
67
|
+
|
|
68
|
+
Expect simple links to the brief, map and journal, plus a useful continuation.
|
|
69
|
+
The first output may be a plan; inspect the latest completed research revision.
|
|
70
|
+
- [ ] Open the brief. In your own words, explain what the app does, its major
|
|
71
|
+
internal areas and external integrations, a few consequential observations,
|
|
72
|
+
important unknowns and the next planning decision. Expect source/deployment
|
|
73
|
+
scope near the opening, with storage mechanics underneath. Missing evidence
|
|
74
|
+
must be explicit rather than replaced with plausible findings.
|
|
75
|
+
- [ ] Open the HTML in a permitted browser. Expect a connected overview before
|
|
76
|
+
relationship details, each node once, readable names and visible arrow direction.
|
|
77
|
+
Follow a path to its details and a finding to its evidence. Inspect a condition
|
|
78
|
+
or exception; the summary must not hide its consequence. Unclassified placement
|
|
79
|
+
is acceptable where evidence is missing. Report blocked access without bypassing
|
|
80
|
+
host policy. The text inventory/details remain an alternative reading path.
|
|
81
|
+
- [ ] Check coverage of identity, authorization, data handling, storage, secrets,
|
|
82
|
+
exposure and observability. Expect researched scope or explicit gaps, not an
|
|
83
|
+
assertion that every control is effective. Supported authentication options must
|
|
84
|
+
be distinguished from a chosen identity service, or honestly marked unresearched.
|
|
85
|
+
- [ ] Ask:
|
|
86
|
+
|
|
87
|
+
> I want to describe an intended installation next. Help me choose model
|
|
88
|
+
> connections, identity, stores and enabled tools; record choices as intentions
|
|
89
|
+
> and tell me what configuration evidence would be needed later.
|
|
90
|
+
|
|
91
|
+
Expect useful choices/questions with no invented deployment or runtime results.
|
|
92
|
+
After making a choice, request a saved successor. Supply only its BOM and source
|
|
93
|
+
access to another fresh chat and ask “Continue this Surface.” Expect choices,
|
|
94
|
+
evidence and unresolved questions to recover, with earlier files unchanged.
|
|
95
|
+
- [ ] Report **Pass / Fail / Blocked**, the candidate commit, output links, your
|
|
96
|
+
short explanation and any unclear/misleading part. Fail for fabricated findings,
|
|
97
|
+
lost evidence or nodes, unreadable graph or changed predecessors. Blocked means
|
|
98
|
+
access/runtime/browser prerequisites prevented the task. Names, graph size and
|
|
99
|
+
exact findings vary with the source. Retain outputs for review; cleanup only
|
|
100
|
+
the disposable trial folder after review, never the source or baseline.
|
|
101
|
+
|
|
102
|
+
## Maintainer technical checks
|
|
103
|
+
|
|
104
|
+
From the repository root with dependencies installed:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
npm test
|
|
108
|
+
npm run check:package
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Both must exit 0. The package check installs temporary offline consumers and
|
|
112
|
+
removes them; it does not publish. For a quick legacy-input compatibility check:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
node plugins/n8r-surface/skills/research/scripts/surface.mjs check examples/researcher/surface-bom/initial.cdx.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Expect exit 0, `checked`, five relationships and three entries. This is structure
|
|
119
|
+
validation of synthetic input, not the tester's task or human acceptance.
|
|
120
|
+
|
|
121
|
+
## Follow-up rehearsal
|
|
122
|
+
|
|
123
|
+
The 13 November 2026 user-led chat with installed skill 0.1.14 exercised initial
|
|
124
|
+
source research, Python-tool authority follow-up, requested deployment inspection
|
|
125
|
+
and a runtime availability recheck. Private artifacts and transcript were reviewed
|
|
126
|
+
without publishing them. The source was pinned; this was not a runtime security
|
|
127
|
+
assessment. Candidate version was observed in the installed path and transcript;
|
|
128
|
+
that version string alone does not establish an exact PR commit or bundle digest.
|
|
129
|
+
|
|
130
|
+
The first completed brief contained 1,138 whitespace-delimited words; after the
|
|
131
|
+
follow-ups it contained 2,651. Useful findings distinguished loading from calling
|
|
132
|
+
Python tools, browser/backend network origins and retrieval data handling. The
|
|
133
|
+
successors nevertheless retained an obsolete daemon blocker and retry action
|
|
134
|
+
beside newer reachable-daemon evidence. Deployment-oriented next steps preceded
|
|
135
|
+
confirmation that any deployment existed. A broad runtime inventory exposed
|
|
136
|
+
unrelated metadata in tool output, although the saved evidence was aggregated.
|
|
137
|
+
The user's final source-only clarification was interrupted before a save; it is
|
|
138
|
+
unfinished work, not a failed save or ignored completed request.
|
|
139
|
+
|
|
140
|
+
Readback found matching predecessor digests across six transitions and no broken
|
|
141
|
+
internal HTML anchors in four completed-result views. These are bounded integrity
|
|
142
|
+
checks, not source-claim validation, rendered-map acceptance or human approval.
|
|
143
|
+
|
|
144
|
+
The follow-up keeps profile 1. Current views exclude superseded entries, while
|
|
145
|
+
journals retain history. The brief bounds lists (12 nodes, 5 findings, 7 coverage
|
|
146
|
+
items, 7 gaps, 1 action), links all additional items and preserves complete text
|
|
147
|
+
for each displayed finding. Findings use reverse record order, not severity;
|
|
148
|
+
actions prefer active entries, then record order. Guidance asks the researcher to
|
|
149
|
+
consolidate overlapping findings, reconcile scope/gaps and choose one active
|
|
150
|
+
source action. The 400–700-word target is editorial, not a truncation rule.
|
|
151
|
+
Runtime filtering is agent guidance, not a new automatic redaction tool.
|
|
152
|
+
|
|
153
|
+
### Successor results and exact candidate
|
|
154
|
+
|
|
155
|
+
At code commit `92c1c0bca1e2adfcc2b134b0259ed8856f337bce`, Node 26.13.0:
|
|
156
|
+
241 tests, exact skill bundle check, offline installed package/terminal rehearsal,
|
|
157
|
+
Markdown lint 0.24.0, local links/fragments with lychee 0.24.2, citation validation
|
|
158
|
+
with cffconvert 2.0.0 and diff whitespace checks passed. All 18 JSON example files
|
|
159
|
+
parsed. Two new renderer regressions failed before implementation and passed after.
|
|
160
|
+
The full suite caught omitted inventory types/IDs during shortening; restoring
|
|
161
|
+
those fields passed the suite. Package verification first rejected the obsolete
|
|
162
|
+
instruction digest; the reviewed digest was updated and the full package check
|
|
163
|
+
passed. These checks do not establish research accuracy.
|
|
164
|
+
|
|
165
|
+
A fresh-context agent invoked an isolated standalone candidate copy against a
|
|
166
|
+
private copy of the prior BOM and the same source checkout. It received the
|
|
167
|
+
source-only continuation task below, reread source entry points itself, reconciled
|
|
168
|
+
scope and journal states, and saved revision 8. No live runtime was accessed.
|
|
169
|
+
Independent readback found one active source action, deployment settings still
|
|
170
|
+
unverified, matching predecessor digest and every prior annotation retained.
|
|
171
|
+
Old runtime blockers/actions remained historical rather than current requirements.
|
|
172
|
+
|
|
173
|
+
The agent's copied helper preceded the type/ID restoration (SHA-256
|
|
174
|
+
`b7a1572bb6fee44093bb5dad4a9867001a864f506394c4d5e07ece15573b854f`).
|
|
175
|
+
Its generated brief was 928 words. The exact committed helper was then copied
|
|
176
|
+
independently, used to save the same agent-authored BOM against the same predecessor
|
|
177
|
+
in a new directory, and read back: 976 words, no missing internal HTML anchors,
|
|
178
|
+
same predecessor digest and retained annotations. Its SHA-256 is
|
|
179
|
+
`3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
|
|
180
|
+
No developer-prewritten findings were presented as Researcher output. The 976-word
|
|
181
|
+
brief is substantially shorter than 2,651, but exceeds the editorial 400–700-word
|
|
182
|
+
aim; list bounds alone do not ensure that target. Human readability acceptance
|
|
183
|
+
remains open. This was isolated candidate invocation and helper readback, not a
|
|
184
|
+
fresh installation into the user's everyday plugin registry.
|
|
185
|
+
|
|
186
|
+
A separate fresh-context agent read a synthetic two-resource runtime response
|
|
187
|
+
inside a local process and emitted only the selected target identity and an
|
|
188
|
+
allowlisted state. Its command and readback were reviewed; unrelated names,
|
|
189
|
+
images and paths were absent from tool output and the saved result. This checks
|
|
190
|
+
one guidance scenario, not automatic redaction or all live runtime failure modes.
|
|
191
|
+
No actual Docker daemon was accessed for this follow-up.
|
|
192
|
+
|
|
193
|
+
The source rehearsal encountered the existing privacy guard's false positive on
|
|
194
|
+
a paragraph separator serialized inside entry text, then an empty authored reason.
|
|
195
|
+
It retained the historical text with spaces and supplied the missing reason;
|
|
196
|
+
validation and save then succeeded. No guard was disabled or bypassed. Broader
|
|
197
|
+
privacy-guard ergonomics are outside this increment. Private prompts, candidate
|
|
198
|
+
file hashes, predecessor copy, agent outputs and readback reports remain in the
|
|
199
|
+
local rehearsal vault, not in this public repository.
|
|
200
|
+
|
|
201
|
+
These are agent rehearsals, not human Pass acceptance. Rendered browser usability,
|
|
202
|
+
the intended-setup continuation and end-to-end runtime control behavior remain
|
|
203
|
+
unproved. Keep the PR draft and issue #72 WIP.
|
|
204
|
+
|
|
205
|
+
### Follow-up human tasks
|
|
206
|
+
|
|
207
|
+
Maintainer preparation: install the exact updated PR candidate using the setup
|
|
208
|
+
above. Supply a copy of an existing source-based Surface with historical blockers,
|
|
209
|
+
its source checkout and a new disposable output directory. Retain the predecessor
|
|
210
|
+
bytes. Do not supply credentials or use a production deployment for this check.
|
|
211
|
+
|
|
212
|
+
- [ ] In a fresh chat, provide the saved BOM and source and ask:
|
|
213
|
+
|
|
214
|
+
> It is just a source checkout. Record that in the Surface, keep deployment
|
|
215
|
+
> settings marked as unverified, and show me the most useful source-level
|
|
216
|
+
> security investigation to do next. Save the successor in the supplied folder.
|
|
217
|
+
|
|
218
|
+
Expect a source-level next action without daemon startup or runtime inventory.
|
|
219
|
+
- [ ] Open the new brief. Expect a concise current scope and one recommended
|
|
220
|
+
action. An old unavailable-daemon statement must not remain a current blocker
|
|
221
|
+
after newer evidence resolves it. Follow the history link to the old observation;
|
|
222
|
+
expect its original wording and provenance to remain. Deployment settings stay
|
|
223
|
+
unverified. Follow any additional-items link to the full detail.
|
|
224
|
+
- [ ] For a separate synthetic inspection check, supply a JSON inventory with
|
|
225
|
+
one named target and one unrelated resource. Ask: “Using only this supplied
|
|
226
|
+
synthetic response, report whether the named target is running.” Expect only
|
|
227
|
+
the target's safe identity/status in tool output and saved evidence. Unrelated
|
|
228
|
+
names, images and paths must never appear in output. Do not access a live daemon.
|
|
229
|
+
- [ ] Report **Pass / Fail / Blocked**, exact candidate commit, output links and
|
|
230
|
+
any confusing or stale text. Fail for lost evidence, changed predecessor bytes,
|
|
231
|
+
stale current blockers, mandatory runtime setup for source work, or unrelated
|
|
232
|
+
metadata in tool output. Blocked means missing source, candidate or output access.
|
|
233
|
+
Retain outputs until review; cleanup is limited to the disposable trial folder.
|
|
234
|
+
|
|
235
|
+
Maintainer evidence check: independently compare predecessor bytes and generated
|
|
236
|
+
manifest hashes. A helper validation exit 0 is required, but it is not human
|
|
237
|
+
acceptance. Browser visual acceptance and the separate intended-setup journey
|
|
238
|
+
remain pending until explicitly exercised.
|
|
239
|
+
|
|
240
|
+
### User retest readback — 13 November 2026
|
|
241
|
+
|
|
242
|
+
The user reported liking the outputs after the everyday marketplace installation
|
|
243
|
+
was pinned to `6d68b9c4c717fb2c5efc78d02f16cf094c538a6d`. The installation
|
|
244
|
+
record identifies all 25 plugin files and helper SHA-256
|
|
245
|
+
`3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
|
|
246
|
+
Positive feedback is recorded as given; it is not a formal Pass for every task.
|
|
247
|
+
|
|
248
|
+
Independent readback of the private retest found two saved revisions. The final
|
|
249
|
+
brief has 867 whitespace-delimited words, source-only scope, unverified deployment
|
|
250
|
+
settings and one active source-level next action. Resolved runtime blockers are
|
|
251
|
+
superseded and other deployment actions deferred. Both manifests match all four
|
|
252
|
+
saved-file hashes; both predecessor digests match the supplied preceding BOM.
|
|
253
|
+
Inherited annotations and component/service identities remain present, and both
|
|
254
|
+
HTML files have no missing internal anchors. The candidate profile checker accepts
|
|
255
|
+
the final BOM with 22 relationships and 57 journal entries under Node 26.13.0.
|
|
256
|
+
These checks establish retained structure and current presentation text, not
|
|
257
|
+
independent validation of every source claim or proof of all tool activity.
|
|
258
|
+
|
|
259
|
+
The 867-word brief still exceeds the editorial 400–700-word aim. Browser visual
|
|
260
|
+
acceptance, intended-setup continuation and runtime behavior remain unproved by
|
|
261
|
+
this readback. No new research was performed or findings authored for this check.
|
|
262
|
+
Private source details, outputs and installation paths remain outside this record.
|
|
@@ -1,107 +1,74 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Research with n8r-surface
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Use Node 22, 24 or 26, Codex CLI **0.166.0**, and an existing ChatGPT sign-in with
|
|
6
|
-
access to `gpt-6-astra`. No API-key billing or model fallback is used.
|
|
3
|
+
The current local candidate opens a conversation. From the project folder you
|
|
4
|
+
want to investigate, run:
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
```sh
|
|
7
|
+
n8r-surface
|
|
8
|
+
```
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
Tell it what you want to know. For example:
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
```text
|
|
13
|
+
Which AI services does this project connect to, and what is still unclear?
|
|
14
|
+
```
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
You can ask follow-up questions, correct a finding, or change the emphasis.
|
|
17
|
+
There is no required research sequence. `/source PATH` at the opening prompt
|
|
18
|
+
selects another local folder or file; otherwise it uses the current folder.
|
|
19
|
+
Before research starts, you confirm sending source text and messages to OpenAI
|
|
20
|
+
through your existing Codex ChatGPT sign-in. Source files stay unchanged.
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
If installation fails, stop and report the error.
|
|
22
|
+
When you want to keep the result, type:
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
```text
|
|
25
|
+
save
|
|
26
|
+
```
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
The command prepares and checks the saved Surface, preserves your decisions and
|
|
29
|
+
unknowns, and shows where to open it. You can keep talking afterward. Type `exit`
|
|
30
|
+
when you want to leave.
|
|
27
31
|
|
|
28
|
-
-
|
|
32
|
+
Next time, run `n8r-surface` again. Choose your saved work by its displayed number.
|
|
33
|
+
The command remembers its source and model, opens a fresh conversation and checks
|
|
34
|
+
for changed source evidence. Ask whatever comes next. Saving creates a successor
|
|
35
|
+
and keeps earlier files intact.
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
n8r-surface reopen "NOTE" --source "SOURCE" --model gpt-6-astra
|
|
32
|
-
```
|
|
37
|
+
## Installation
|
|
33
38
|
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
The conversation-first experience is a local candidate, not yet a public npm
|
|
40
|
+
release. Follow the [local candidate installation](npm-release.md) or use the
|
|
41
|
+
candidate already installed by your maintainer. Check the command in the same
|
|
42
|
+
terminal where you will use it; npm global commands belong to the active Node
|
|
43
|
+
installation.
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
Prerequisites are Node.js 22, 24 or 26 and Codex CLI 0.166.0 signed in with
|
|
46
|
+
ChatGPT. The command uses your configured Codex model. Existing vault settings
|
|
47
|
+
are reused; a new installation asks where to save research once. Installation
|
|
48
|
+
and upgrades preserve existing settings and research.
|
|
40
49
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- Enter `/save surface`. Expect **Saved and read back** for `research.html` and
|
|
44
|
-
`surface.json`. Open both: they should match the preview. Copy the JSON path,
|
|
45
|
-
then enter `/exit`; expect exit 0 and the terminal prompt.
|
|
50
|
+
The historical registry version `@n8r/surface@0.1.0-experimental.2` does not include
|
|
51
|
+
this opening conversation. See the [release record](npm-release.md#verified-scoped-release).
|
|
46
52
|
|
|
47
|
-
##
|
|
53
|
+
## Other ways to work
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
same source path:
|
|
55
|
+
Existing explicit commands remain available:
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
```sh
|
|
58
|
+
n8r-surface discover . --model gpt-6-astra
|
|
59
|
+
n8r-surface --help
|
|
60
|
+
```
|
|
55
61
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
`reopen SAVED_FILE --source SOURCE` opens an existing note or Surface by path,
|
|
63
|
+
including older files. Those placeholders represent your selected files; ordinary
|
|
64
|
+
continuation through the opening saved-work list does not require them.
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
`/save note` saves a Markdown working note. The explicit `discover` and `reopen`
|
|
67
|
+
commands retain their original `/save` Markdown behavior; plain `save` saves a
|
|
68
|
+
Surface. `/save surface` saves a current preview. A save request in the opening
|
|
69
|
+
conversation can prepare the Surface for you, without a separate preview command.
|
|
63
70
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
Report **Pass**, **Fail** or **Blocked**, with the changed decision and unexpected
|
|
70
|
-
message or excerpt. Wording and filenames vary. Lost evidence/IDs/decisions,
|
|
71
|
-
overwrites or a claimed save without files are failures. Keep test pairs or delete
|
|
72
|
-
only their numbered directories afterward; keep your vault, source and earlier work.
|
|
73
|
-
|
|
74
|
-
`/save` still writes Markdown. `/save surface` needs a current validated preview;
|
|
75
|
-
a later question invalidates the old preview, so request an updated one after a
|
|
76
|
-
correction. Edited HTML or mismatched pair bytes are rejected and preserved; make
|
|
77
|
-
changes conversationally in a new revision. Ctrl-C cancels with exit 130. The
|
|
78
|
-
[maintainer evidence](surface-revisions-verification.md) distinguishes agent
|
|
79
|
-
rehearsal from human acceptance and lists remaining limits.
|
|
80
|
-
|
|
81
|
-
## Optional: create a research note first
|
|
82
|
-
|
|
83
|
-
- Paste:
|
|
84
|
-
|
|
85
|
-
```sh
|
|
86
|
-
n8r-surface
|
|
87
|
-
n8r-surface discover examples/researcher/sources/lumen-guide.md --model gpt-6-astra
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
The first command reuses your vault (or asks you to choose/create it once).
|
|
91
|
-
The second names the fictional source and requests permission to send inspected
|
|
92
|
-
text to OpenAI. Type **y**; expect the connected model and `You>` prompt.
|
|
93
|
-
- At `You>`, paste this as one line:
|
|
94
|
-
|
|
95
|
-
```text
|
|
96
|
-
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.
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Expect a source read and cited findings. The [source](../../examples/researcher/sources/lumen-guide.md)
|
|
100
|
-
describes configured inference; OIDC is an option, not proof of selected or
|
|
101
|
-
exercised authentication. Your decision must stay separate from source claims.
|
|
102
|
-
- Enter `/save`. Expect a numbered destination followed by **Saved and read back**,
|
|
103
|
-
its full path and SHA-256 digest. While waiting, a spinner shows
|
|
104
|
-
**Preparing note** and elapsed seconds; answers use **Waiting for Codex**.
|
|
105
|
-
It should stop when the operation finishes or you cancel. Open that file: it should retain component IDs,
|
|
106
|
-
your OIDC choice, evidence and next steps. Copy its path, then enter `/exit`.
|
|
107
|
-
Expect exit 0 and the terminal prompt.
|
|
71
|
+
If a source has moved, select its new location with `/source PATH` before choosing
|
|
72
|
+
saved work. If saved bytes were edited or damaged, the command preserves them and
|
|
73
|
+
reports the conflict. Older saves without a recent-work entry can still be opened
|
|
74
|
+
with `reopen`; saving them adds them to the list.
|