@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.
Files changed (118) hide show
  1. package/README.md +30 -4
  2. package/dist/cli.js +174 -22
  3. package/dist/codec.d.ts +2 -0
  4. package/dist/codec.js +22 -7
  5. package/dist/codex.d.ts +1 -1
  6. package/dist/codex.js +26 -10
  7. package/dist/contracts.d.ts +108 -2
  8. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  9. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  10. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  11. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  12. package/dist/cyclonedx-validation.d.ts +1 -0
  13. package/dist/cyclonedx-validation.js +45 -0
  14. package/dist/html.js +27 -3
  15. package/dist/recent.d.ts +9 -0
  16. package/dist/recent.js +71 -0
  17. package/dist/revisions.js +42 -0
  18. package/dist/skill-artifacts-cli.d.ts +1 -0
  19. package/dist/skill-artifacts-cli.js +13 -0
  20. package/dist/skill-artifacts.d.ts +15 -0
  21. package/dist/skill-artifacts.js +184 -0
  22. package/dist/skill-cyclonedx.d.ts +26 -0
  23. package/dist/skill-cyclonedx.js +214 -0
  24. package/dist/skill-presentation.d.ts +10 -0
  25. package/dist/skill-presentation.js +108 -0
  26. package/dist/skill-surface-cli.d.ts +1 -0
  27. package/dist/skill-surface-cli.js +37 -0
  28. package/dist/skill-surface-store.d.ts +7 -0
  29. package/dist/skill-surface-store.js +126 -0
  30. package/dist/surface-bom.d.ts +73 -0
  31. package/dist/surface-bom.js +139 -0
  32. package/dist/surface-draft.d.ts +6 -3
  33. package/dist/surface-draft.js +20 -3
  34. package/dist/surface-instructions.d.ts +2 -1
  35. package/dist/surface-instructions.js +10 -1
  36. package/dist/surface-overview.d.ts +15 -0
  37. package/dist/surface-overview.js +86 -0
  38. package/dist/surface-store.d.ts +5 -7
  39. package/dist/surface-store.js +34 -2
  40. package/dist/surface-view.d.ts +3 -0
  41. package/dist/surface-view.js +50 -0
  42. package/dist/validate.js +298 -0
  43. package/docs/n8r-surface/cli-bundles.md +72 -0
  44. package/docs/n8r-surface/command-outcomes.md +151 -4
  45. package/docs/n8r-surface/contracts.md +10 -0
  46. package/docs/n8r-surface/critical-path.md +21 -0
  47. package/docs/n8r-surface/first-use-access.md +143 -0
  48. package/docs/n8r-surface/first-use-overview.md +262 -0
  49. package/docs/n8r-surface/getting-started.md +55 -88
  50. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  51. package/docs/n8r-surface/implementation-decisions.md +14 -14
  52. package/docs/n8r-surface/instance-first-research.md +209 -0
  53. package/docs/n8r-surface/npm-distribution.md +39 -69
  54. package/docs/n8r-surface/npm-release.md +141 -14
  55. package/docs/n8r-surface/product-direction.md +327 -0
  56. package/docs/n8r-surface/researcher-skill.md +105 -51
  57. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  58. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  59. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  60. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  61. package/docs/n8r-surface/skill-manual.md +129 -0
  62. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  63. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  64. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  65. package/docs/n8r-surface/surface-description-contract.md +224 -0
  66. package/docs/n8r-surface/surface-descriptions.md +173 -0
  67. package/docs/n8r-surface/surface-relationships.md +231 -0
  68. package/docs/n8r-surface/tester-candidate.md +158 -0
  69. package/docs/n8r-surface/versioning.md +55 -66
  70. package/docs/n8r-surface/workspace-human-check.md +101 -0
  71. package/docs/n8r-surface/workspace-installation.md +68 -0
  72. package/docs/n8r-surface/workspace-verification.md +350 -0
  73. package/docs/n8r-surface/workspace.md +83 -0
  74. package/examples/researcher/README.md +8 -0
  75. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  76. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  77. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  78. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  79. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  80. package/examples/researcher/descriptions/README.md +29 -0
  81. package/examples/researcher/descriptions/bound-r1.json +141 -0
  82. package/examples/researcher/descriptions/bound-r2.json +153 -0
  83. package/examples/researcher/descriptions/capability.json +167 -0
  84. package/examples/researcher/descriptions/research-r1.json +153 -0
  85. package/examples/researcher/descriptions/research-r2.json +157 -0
  86. package/examples/researcher/descriptions/sources.md +24 -0
  87. package/examples/researcher/relationships/README.md +34 -0
  88. package/examples/researcher/relationships/bound-r1.json +346 -0
  89. package/examples/researcher/relationships/bound-r2.json +358 -0
  90. package/examples/researcher/relationships/capability.json +325 -0
  91. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  92. package/examples/researcher/relationships/research-r1.json +300 -0
  93. package/examples/researcher/relationships/research-r2.json +304 -0
  94. package/examples/researcher/relationships/sources.md +38 -0
  95. package/examples/researcher/surface-bom/README.md +17 -0
  96. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  97. package/package.json +1 -1
  98. package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
  99. package/plugins/n8r-surface/LICENSING.md +3 -0
  100. package/plugins/n8r-surface/plugin.json +2 -2
  101. package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
  102. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  103. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  104. package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
  105. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  106. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  107. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  108. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  109. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  110. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  111. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  112. package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
  113. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  114. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  115. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  116. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  117. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  118. 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
- # Create a Surface from saved research
1
+ # Research with n8r-surface
2
2
 
3
- This candidate adds a linked research HTML record and partial Surface JSON to
4
- the existing Markdown research workflow. Reopen either saved file to revise the pair. The package remains private and unpublished.
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
- For isolated checks of both official npm package candidates, use the
9
- [distribution walkthrough](npm-distribution.md). The global install below uses
10
- the checkout tarball and replaces the command in your npm global prefix.
6
+ ```sh
7
+ n8r-surface
8
+ ```
11
9
 
12
- ## 1. Install
10
+ Tell it what you want to know. For example:
13
11
 
14
- - Open a terminal in this checkout at the reviewed candidate revision and paste:
12
+ ```text
13
+ Which AI services does this project connect to, and what is still unclear?
14
+ ```
15
15
 
16
- ```sh
17
- npm ci && npm pack && npm install --global ./n8r-surface-0.1.0-experimental.2.tgz
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
- Expect successful installation and the terminal prompt. Stay in the checkout.
21
- If installation fails, stop and report the error.
22
+ When you want to keep the result, type:
22
23
 
23
- ## 2. Create and save a Surface
24
+ ```text
25
+ save
26
+ ```
24
27
 
25
- Use your existing saved note and its original source. Replace `NOTE` and `SOURCE`
26
- with their paths (keep quotes). If you have no note, use the optional steps below.
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
- - Paste:
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
- ```sh
31
- n8r-surface reopen "NOTE" --source "SOURCE" --model gpt-6-astra
32
- ```
37
+ ## Installation
33
38
 
34
- Type **y** at the transmission prompt. Expect evidence comparisons, a fresh
35
- conversation and your retained choices. At `You>`, paste:
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
- ```text
38
- Create a Surface from these notes; show me what is selected and still unknown. Preserve the component IDs, source evidence and my decisions. Prepare the linked research and Surface preview.
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
- Expect a **Validated partial Surface preview** listing components, declared
42
- connections, human decisions, requirements, coverage, gaps and evidence.
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
- ## 3. Reopen and revise
53
+ ## Other ways to work
48
54
 
49
- - Paste, replacing `SURFACE_JSON` with the saved JSON path and `SOURCE` with the
50
- same source path:
55
+ Existing explicit commands remain available:
51
56
 
52
- ```sh
53
- n8r-surface reopen "SURFACE_JSON" --source "SOURCE" --model gpt-6-astra
54
- ```
57
+ ```sh
58
+ n8r-surface discover . --model gpt-6-astra
59
+ n8r-surface --help
60
+ ```
55
61
 
56
- Type **y**. Expect the same component identities and decisions. Ask to change
57
- one decision, with your reason, and prepare an updated Surface. For the optional
58
- Lumen case below, paste:
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
- ```text
61
- Select external OIDC in the desired composition because this investigation now requires centralized sign-in. This is my selection, not proof of a configured provider. Keep the provider and model unknown, preserve existing IDs and evidence, and prepare the updated Surface preview.
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
- - Inspect the preview, enter `/save surface`, then `/exit`. Expect a new numbered
65
- pair, exit 0 and the original pair unchanged. Open both revisions and compare
66
- component IDs, evidence, the decision and parent references. The new
67
- `research.html` path can also be used with the same reopen command.
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.