@n8r/surface 0.0.0-stage → 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 (181) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-DOCS +395 -0
  3. package/LICENSING.md +36 -0
  4. package/README.md +207 -2
  5. package/dist/activity.d.ts +16 -0
  6. package/dist/activity.js +44 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +412 -0
  9. package/dist/codec.d.ts +6 -0
  10. package/dist/codec.js +56 -0
  11. package/dist/codex.d.ts +72 -0
  12. package/dist/codex.js +526 -0
  13. package/dist/contracts.d.ts +235 -0
  14. package/dist/contracts.js +1 -0
  15. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  16. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  17. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  18. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  19. package/dist/cyclonedx-validation.d.ts +1 -0
  20. package/dist/cyclonedx-validation.js +45 -0
  21. package/dist/html.d.ts +5 -0
  22. package/dist/html.js +74 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.js +5 -0
  25. package/dist/notes.d.ts +52 -0
  26. package/dist/notes.js +184 -0
  27. package/dist/portable.d.ts +10 -0
  28. package/dist/portable.js +71 -0
  29. package/dist/recent.d.ts +9 -0
  30. package/dist/recent.js +71 -0
  31. package/dist/revisions.d.ts +2 -0
  32. package/dist/revisions.js +60 -0
  33. package/dist/settings.d.ts +23 -0
  34. package/dist/settings.js +100 -0
  35. package/dist/setup.d.ts +9 -0
  36. package/dist/setup.js +161 -0
  37. package/dist/skill-artifacts-cli.d.ts +1 -0
  38. package/dist/skill-artifacts-cli.js +13 -0
  39. package/dist/skill-artifacts.d.ts +15 -0
  40. package/dist/skill-artifacts.js +184 -0
  41. package/dist/skill-cyclonedx.d.ts +26 -0
  42. package/dist/skill-cyclonedx.js +214 -0
  43. package/dist/skill-presentation.d.ts +10 -0
  44. package/dist/skill-presentation.js +108 -0
  45. package/dist/skill-surface-cli.d.ts +1 -0
  46. package/dist/skill-surface-cli.js +37 -0
  47. package/dist/skill-surface-store.d.ts +7 -0
  48. package/dist/skill-surface-store.js +126 -0
  49. package/dist/source-tools.d.ts +102 -0
  50. package/dist/source-tools.js +201 -0
  51. package/dist/startup.d.ts +7 -0
  52. package/dist/startup.js +74 -0
  53. package/dist/surface-bom.d.ts +73 -0
  54. package/dist/surface-bom.js +139 -0
  55. package/dist/surface-draft.d.ts +22 -0
  56. package/dist/surface-draft.js +112 -0
  57. package/dist/surface-instructions.d.ts +3 -0
  58. package/dist/surface-instructions.js +32 -0
  59. package/dist/surface-overview.d.ts +15 -0
  60. package/dist/surface-overview.js +86 -0
  61. package/dist/surface-store.d.ts +34 -0
  62. package/dist/surface-store.js +213 -0
  63. package/dist/surface-view.d.ts +3 -0
  64. package/dist/surface-view.js +50 -0
  65. package/dist/validate.d.ts +4 -0
  66. package/dist/validate.js +482 -0
  67. package/docs/n8r-surface/README.md +133 -0
  68. package/docs/n8r-surface/cli-bundles.md +72 -0
  69. package/docs/n8r-surface/codex-research-transcript.md +51 -0
  70. package/docs/n8r-surface/codex-research-verification.md +176 -0
  71. package/docs/n8r-surface/command-outcomes.md +711 -0
  72. package/docs/n8r-surface/contracts.md +220 -0
  73. package/docs/n8r-surface/critical-path.md +184 -0
  74. package/docs/n8r-surface/design.md +289 -0
  75. package/docs/n8r-surface/first-use-access.md +143 -0
  76. package/docs/n8r-surface/first-use-overview.md +262 -0
  77. package/docs/n8r-surface/getting-started.md +74 -0
  78. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  79. package/docs/n8r-surface/host-contract.md +176 -0
  80. package/docs/n8r-surface/implementation-decisions.md +96 -0
  81. package/docs/n8r-surface/instance-first-research.md +209 -0
  82. package/docs/n8r-surface/npm-distribution.md +107 -0
  83. package/docs/n8r-surface/npm-release.md +315 -0
  84. package/docs/n8r-surface/product-direction.md +327 -0
  85. package/docs/n8r-surface/recreation-handoff.md +117 -0
  86. package/docs/n8r-surface/researcher-discovery.md +157 -0
  87. package/docs/n8r-surface/researcher-prepared-check.md +117 -0
  88. package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
  89. package/docs/n8r-surface/researcher-repository-check.md +95 -0
  90. package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
  91. package/docs/n8r-surface/researcher-skill-verification.md +725 -0
  92. package/docs/n8r-surface/researcher-skill.md +309 -0
  93. package/docs/n8r-surface/researcher-vault.md +134 -0
  94. package/docs/n8r-surface/save-reopen-transcript.md +211 -0
  95. package/docs/n8r-surface/save-reopen-verification.md +152 -0
  96. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  97. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  98. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  99. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  100. package/docs/n8r-surface/skill-manual.md +129 -0
  101. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  102. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  103. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  104. package/docs/n8r-surface/startup-human-check.md +172 -0
  105. package/docs/n8r-surface/startup-verification.md +161 -0
  106. package/docs/n8r-surface/startup.md +151 -0
  107. package/docs/n8r-surface/surface-description-contract.md +224 -0
  108. package/docs/n8r-surface/surface-descriptions.md +173 -0
  109. package/docs/n8r-surface/surface-relationships.md +231 -0
  110. package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
  111. package/docs/n8r-surface/surface-revisions-verification.md +161 -0
  112. package/docs/n8r-surface/tester-candidate.md +158 -0
  113. package/docs/n8r-surface/vault-setup-verification.md +210 -0
  114. package/docs/n8r-surface/verification.md +117 -0
  115. package/docs/n8r-surface/versioning.md +172 -0
  116. package/docs/n8r-surface/workspace-human-check.md +101 -0
  117. package/docs/n8r-surface/workspace-installation.md +68 -0
  118. package/docs/n8r-surface/workspace-verification.md +350 -0
  119. package/docs/n8r-surface/workspace.md +83 -0
  120. package/examples/researcher/README.md +100 -0
  121. package/examples/researcher/composed.surface.json +430 -0
  122. package/examples/researcher/composed.surface.yaml +283 -0
  123. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  124. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  125. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  126. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  127. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  128. package/examples/researcher/descriptions/README.md +29 -0
  129. package/examples/researcher/descriptions/bound-r1.json +141 -0
  130. package/examples/researcher/descriptions/bound-r2.json +153 -0
  131. package/examples/researcher/descriptions/capability.json +167 -0
  132. package/examples/researcher/descriptions/research-r1.json +153 -0
  133. package/examples/researcher/descriptions/research-r2.json +157 -0
  134. package/examples/researcher/descriptions/sources.md +24 -0
  135. package/examples/researcher/harbor-r1.research.html +193 -0
  136. package/examples/researcher/harbor-r2.research.html +226 -0
  137. package/examples/researcher/lumen-manual-edit.pending.html +271 -0
  138. package/examples/researcher/lumen-r1.research.html +271 -0
  139. package/examples/researcher/lumen-r2.research.html +280 -0
  140. package/examples/researcher/relationships/README.md +34 -0
  141. package/examples/researcher/relationships/bound-r1.json +346 -0
  142. package/examples/researcher/relationships/bound-r2.json +358 -0
  143. package/examples/researcher/relationships/capability.json +325 -0
  144. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  145. package/examples/researcher/relationships/research-r1.json +300 -0
  146. package/examples/researcher/relationships/research-r2.json +304 -0
  147. package/examples/researcher/relationships/sources.md +38 -0
  148. package/examples/researcher/sources/harbor-api.md +16 -0
  149. package/examples/researcher/sources/harbor-auth.md +8 -0
  150. package/examples/researcher/sources/lumen-guide.md +28 -0
  151. package/examples/researcher/sources/lumen-settings.md +9 -0
  152. package/examples/researcher/surface-bom/README.md +17 -0
  153. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  154. package/package.json +45 -4
  155. package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
  156. package/plugins/n8r-surface/LICENSE +202 -0
  157. package/plugins/n8r-surface/LICENSE-DOCS +395 -0
  158. package/plugins/n8r-surface/LICENSING.md +39 -0
  159. package/plugins/n8r-surface/assets/icon.svg +5 -0
  160. package/plugins/n8r-surface/plugin.json +27 -0
  161. package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
  162. package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
  163. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  164. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  165. package/plugins/n8r-surface/skills/research/references/discovery-map.md +178 -0
  166. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  167. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  168. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  169. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  170. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  171. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  172. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  173. package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
  174. package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
  175. package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
  176. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  177. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  178. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  179. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  180. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  181. package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
@@ -0,0 +1,96 @@
1
+ # Initial implementation decisions
2
+
3
+ These choices complete the remaining implementation decisions for
4
+ [issue #15](https://github.com/injectionator/n8r-surface/issues/15). They are
5
+ maintainer-reviewable implementation choices within the approved design, not
6
+ claims that the CLI or runner has shipped.
7
+
8
+ ## Runtime and distribution
9
+
10
+ Use TypeScript compiled to ESM JavaScript, npm with a committed lockfile, and the
11
+ built-in Node test runner. The initial supported majors are **Node.js 22, 24 and
12
+ 26**. Test the current patch of each supported major before a release. Odd-numbered
13
+ majors and Bun-only execution are not part of the initial support promise. Revisit
14
+ 22 before its scheduled end of support. The official
15
+ [Node release schedule](https://github.com/nodejs/Release/blob/main/schedule.json)
16
+ lists 22/24/26 support windows through April 2027/2028/2029 respectively (checked
17
+ 4 November 2026).
18
+
19
+ Use **`@n8r/surface`** as the published npm package/library import, exposing the
20
+ `n8r-surface` executable. The maintainer approved a scoped-only first release on
21
+ 5 November 2026, superseding the dual-publication requirement in
22
+ [issue #27](https://github.com/injectionator/n8r-surface/issues/27).
23
+ Unscoped publication and name reservation are removed from the plan. The
24
+ remaining unscoped candidate generation/testing is legacy tooling to remove;
25
+ `n8r-surface` was not published or secured on npm. The [release record](npm-release.md#verified-scoped-release)
26
+ identifies the verified registry version, source and provenance.
27
+
28
+ The [distribution candidate procedure](npm-distribution.md) preserves
29
+ `private: true` in source and default candidates. Explicit publishable preparation
30
+ is guarded to the approved version; it does not publish. The existing workflow
31
+ still assumes dual submission/verification and must be reviewed before future
32
+ releases. The [version policy](versioning.md) keeps the manifest authoritative and
33
+ verifies artifact identity against the exact tag, commit and GitHub Release.
34
+
35
+ Issue #15 ships a library, built declarations, contracts and synthetic assets.
36
+ The first #16 increment adds a `bin` entry for bare startup only; see its
37
+ [settings, parser and inspection decisions](startup.md). It must be exercised
38
+ through the installed tarball outside the source checkout. #17 adds the versioned
39
+ Researcher instructions. Runtime consumers do not need TypeScript or Bun.
40
+
41
+ Use `yaml` 2.9.1 as the single runtime dependency; its parsed nodes allow rejection
42
+ of tags, aliases, duplicate keys and unsupported numeric forms before conversion.
43
+ See its [version 2 documentation](https://eemeli.org/yaml/) and the locked version
44
+ in [package-lock.json](../../package-lock.json). TypeScript 6.0.3 and Node typings
45
+ 22.20.5 are development dependencies. The bounded field/reference checker and
46
+ HTML renderer need no framework, browser runtime or general ontology dependency.
47
+
48
+ ## First CLI AI runner
49
+
50
+ The user revised the order on 4 November 2026: use the Researcher as a
51
+ [shareable skill](researcher-skill.md) in Codex/ChatGPT first, adapt it in n8r-labs
52
+ second, then complete the standalone command. The current host supplies inference,
53
+ file access, search and conversation. The skill does not configure a provider,
54
+ extract credentials, or connect a second AI account.
55
+
56
+ For the later CLI, select installed Codex with ChatGPT sign-in. This supersedes
57
+ the earlier direct OpenAI Responses API adapter decision from #15. The
58
+ [official authentication guide](https://learn.chatgpt.com/docs/auth) distinguishes
59
+ ChatGPT subscription access from separately billed API-key access. The
60
+ [SDK guide](https://learn.chatgpt.com/docs/codex-sdk) documents local-agent control
61
+ and directs interactive clients to app-server. Reviewed 4 November 2026.
62
+
63
+ Before implementing the CLI integration, verify a supported interface against its
64
+ actual installed version, preserve user permissions and source scope, and record
65
+ real tool events, human continuation and saved-output readback. Do not borrow
66
+ application tokens, silently switch accounts/providers or fall back to API billing.
67
+ Source transmission and a result destination remain separate decisions. A Lab is
68
+ optional. No standalone runner or Lab compatibility is established by installing
69
+ the skill. No API key was read or model API invoked by #15's contract tests.
70
+
71
+ ## HTML ownership and numeric scope
72
+
73
+ The embedded data owns the record and the whole readable HTML is its deterministic
74
+ projection. The reader rejects divergence, including benign reformatting, so human
75
+ edits cannot disappear in a later save. Reviewed corrections become successors;
76
+ a rich editor and automatic merging are deferred.
77
+
78
+ Use only safe integer numbers in the initial portable data subset. Decimal and
79
+ large quantities require explicit strings/units. This costs convenience but makes
80
+ lossy numeric conversion an explicit error instead of an undetected change to
81
+ evidence or identity. Expanding either HTML editing or numeric support requires
82
+ versioned tests and a documented migration.
83
+
84
+ ## Verification boundary
85
+
86
+ `npm test` checks this profile, its source/reference fixtures and HTML/data
87
+ consistency. `npm run check:package` packs and installs into a temporary directory,
88
+ then imports built exports and bundled fixtures with no checkout-relative imports.
89
+ Prepare npm's local dependency cache with `npm ci` and `npm cache add yaml@2.9.1`:
90
+ the latter also fetches registry metadata needed on a fresh machine. The installer
91
+ then runs with `--offline --ignore-scripts`. Temporary files are removed after the
92
+ check. See [contributor commands](../../CONTRIBUTING.md#researcher-contract-library).
93
+
94
+ These checks do not prove an AI can research LibreChat, a consumer understands an
95
+ extension, a Lab can import the format, or a selected composition runs. Keep those
96
+ later tests separate and name the actual runner/consumer versions when they run.
@@ -0,0 +1,209 @@
1
+ # Research a running composition through the host
2
+
3
+ Candidate **0.1.15** adds an instance-first path to `n8r-surface:research`.
4
+ Codex/ChatGPT supplies permitted repository, document, URL and runtime access.
5
+ The skill guides investigation through those tools; it installs no access adapter
6
+ and grants no credentials or permissions. The existing CycloneDX Surface profile
7
+ and save/read helper are unchanged. Related to #76; Labs integration is paused.
8
+
9
+ ## Useful user task
10
+
11
+ **State X:** an installed candidate, an identified system, permitted read access
12
+ through the host, and a writable private destination. Supplied repositories and
13
+ operational documents may describe only part of that system. Missing access is
14
+ recorded as a limitation, not silently replaced with another source or target.
15
+
16
+ **Input Y:** ask Researcher to understand the configured/running composition and
17
+ save it, then continue from that saved Surface with further permitted evidence.
18
+
19
+ **Outcome Z:** a useful partial graph, source and capture identity, explicit
20
+ coverage/gaps, and a saved BOM with generated brief, map and journal. Source
21
+ support, configured selection, running components, reachable endpoints and
22
+ exercised paths remain distinguishable. Earlier bytes and identities survive
23
+ continuation. No test request or deployment mutation is needed to save partial work.
24
+
25
+ The [bundled procedure](../../plugins/n8r-surface/skills/research/references/instance-first.md)
26
+ explains host access and source selection. It includes mounted versus loaded
27
+ bytes, side effects behind diagnostic GETs, documentation version mismatch and
28
+ revisit comparisons. These are research judgments, not new schema states or an
29
+ automatic collector. The current host may provide fewer tools than another host.
30
+
31
+ ## Human task list
32
+
33
+ Maintainer preparation: install the exact candidate using the existing
34
+ [isolated installation procedure](workspace-installation.md#isolated-maintainer-installation),
35
+ substituting this candidate revision and expected version 0.1.15. Keep the user's
36
+ ordinary installation and prior artifacts intact. Record installed file hashes
37
+ and the host version. Supply a named target, its permitted access/coverage and a
38
+ new private output folder. Do not supply expected findings. If the host cannot
39
+ access the target or run the Node.js 22/24/26 helper, report that stage Blocked.
40
+
41
+ The tester works in a fresh chat with the installed Researcher and those supplied
42
+ sources. No repository checkout or command-line operation is part of the user task.
43
+
44
+ - [ ] Ask:
45
+
46
+ > Use n8r-surface Researcher to understand this identified running system.
47
+ > Use the host's permitted access to the supplied repositories, documents,
48
+ > URLs and instance evidence. Explain the composition, what is configured,
49
+ > what is observed and what remains untested. Stay read-only and save the
50
+ > Surface in the supplied folder, keeping the investigation journal as we go.
51
+
52
+ Expect a scoped investigation across evidenced components, with available access
53
+ checked rather than assumed. A repository does not become the entire deployment.
54
+ Missing access stays visible. No prompts, connection tests or service changes.
55
+ - [ ] Open the returned brief and map. Follow one configuration claim and one
56
+ observation to their evidence. Expect target/source identity, capture scope and
57
+ time where known, and qualifications beside the claim. Health must not become
58
+ inference or database-use proof. Open the saved journal and BOM links as well.
59
+ - [ ] In a fresh chat, provide the latest BOM and access to the same target. Ask:
60
+
61
+ > Continue this Surface using current permitted evidence. Explain what changed,
62
+ > what was newly learned, what was checked unchanged and what cannot be checked
63
+ > now. Save a successor and retain previous observations and identities.
64
+
65
+ Expect a new revision, reconciled current gaps/actions and preserved history.
66
+ Follow a consolidated finding's evidence links: configuration/source claims
67
+ must still link their original evidence, not only a new runtime-state check.
68
+ If no change is established, that is a useful result; do not mutate the target
69
+ to manufacture one. Newly read old settings are not automatically new deployments.
70
+ - [ ] Report **Pass / Fail / Blocked**, candidate/host versions, output links,
71
+ the claims checked and any missing access or confusing evidence. Fail for
72
+ invented access, unsupported exercised-path claims, lost history or missing
73
+ saved outputs. Blocked means a required source/tool/save prerequisite is absent.
74
+
75
+ Maintainer evidence checks: independently read saved BOM and generated views;
76
+ verify predecessor bytes and any retained evidence hashes. The helper's check,
77
+ save and read operations must exit 0; nonzero is failure to investigate, not a
78
+ successful save. Observation times, target identities and findings vary. Raw
79
+ credentials, environment dumps and logs must not appear in shared evidence.
80
+
81
+ No runtime cleanup should be needed because inspection changes no target settings.
82
+ Retain private rehearsal output until reviewed; remove only an explicitly owned
83
+ test installation/output when cleanup is authorized. Human acceptance is separate
84
+ from an agent executing these same interactions.
85
+
86
+ ## Synthetic mixed-source scenario
87
+
88
+ For a source-independent reasoning check, supply these cards as **synthetic
89
+ reports only**, with no permission to fetch URLs. T1/T2 and abbreviated identities
90
+ are labels, not valid UTC timestamps or SHA-256 hashes. No save should be claimed
91
+ without actual output and sufficient metadata.
92
+
93
+ | Card | Supplied evidence |
94
+ | --- | --- |
95
+ | Repository | `https://example.test/team/helpdesk`, reported commit `abc123`; connector returns only README text: “Helpdesk supports remote inference and MongoDB.” Original file bytes/hash unavailable. |
96
+ | Documentation | `https://example.test/docs/config` describes v4; target is v3. |
97
+ | T1 runtime | Helpdesk c1/image d1 and gateway c2/image d2 are healthy on the same network. Configuration selects gateway and MongoDB. Gateway mount hash h1; process started before the file changed. |
98
+ | Endpoint | Public health GET returned 200. Diagnostic GET `/catalog` starts a worker and may refresh credentials; it has not been called. |
99
+ | Access | Trace connector refused access. |
100
+ | T2 revisit | Same reported container IDs, gateway image d2 → d3, database access unavailable. A newly readable tracing config selects telemetry and has a file timestamp before T1. |
101
+
102
+ Ask the two user interactions above with these supplied cards instead of live
103
+ access. Evaluate actual reasoning: no fabricated original-file hashes or dates;
104
+ no v4-as-v3 claim; no catalog invocation or refusal bypass; no mounted-as-loaded
105
+ claim; image/container inconsistency remains qualified; telemetry is newly learned
106
+ rather than proven newly deployed; unavailable storage remains a coverage gap.
107
+ Separately ask: “Only review this supplied README; no runtime access or save
108
+ requested.” Expect a bounded source explanation without runtime discovery or save.
109
+ These checks do not establish real connector access, persistence or live accuracy.
110
+
111
+ ## Verification record
112
+
113
+ The installed 0.1.14 baseline in the development chat produced private initial
114
+ and observed revisions through its helper. Independent readback checked all four
115
+ retained projection hashes and the unchanged predecessor digest. Container health,
116
+ configuration and public GET responses were inspected; no inference, tool action,
117
+ database query or target mutation was performed. The chat inherited development
118
+ context, so this is not a blind acceptance test.
119
+
120
+ A separate fresh-context agent evaluated the synthetic cards with installed
121
+ 0.1.14. It already maintained the evidence distinctions, refused the side-effecting
122
+ GET, qualified version/identity conflicts and separated lost access from removal.
123
+ No failing baseline is claimed for these behaviors. The added guide makes the
124
+ instance-first route and evidence handling explicit; it preserves these working
125
+ judgments rather than claiming a new runtime capability.
126
+
127
+ ### Candidate rehearsal on 14 November 2026
128
+
129
+ Codex CLI 0.166.0 installed 0.1.15 from the local marketplace into a separate
130
+ private test home: add/install/list exited 0, with one enabled installed candidate.
131
+ All 26 installed files matched the candidate source bytes. The normal installation
132
+ was not changed. This is local candidate installation, not a pinned GitHub fetch
133
+ or desktop plugin-selector test.
134
+
135
+ A fresh-context agent received the installed skill path, selected live target,
136
+ read-only access scope and new private destination, without developer findings or
137
+ prior research. Using the host's shell/SSH and permitted HTTP reads, it saved an
138
+ initial plan and a successor with separate source, configuration and observation
139
+ evidence. It followed the custom endpoint to a separate provider and its mounted
140
+ implementation. No inference, tool action, catalog request, database query or
141
+ runtime mutation was performed. Private infrastructure and observations are not
142
+ included in this public record.
143
+
144
+ Independent readback checked all four retained evidence projections against their
145
+ BOM hashes, serial/version continuity, unchanged predecessor digest and the
146
+ brief/map/journal. The first successor save rejected UTC offset notation; the
147
+ agent normalized equivalent UTC times to `Z` and successfully saved/read it. The
148
+ unchanged helper emitted a nonfatal Node `punycode` warning. The brief was 718
149
+ words, slightly above the editorial 400–700 aim; human readability remains open.
150
+
151
+ A separate fresh-context synthetic candidate evaluation retained the baseline's
152
+ correct distinctions and explicitly described host-tool discovery, projection
153
+ identity and source capture times. Its separate README-only task neither invoked
154
+ runtime access nor claimed a save. These are reasoning checks, not real remote
155
+ repository/document connector exercises.
156
+
157
+ The fresh-context live revisit used only current container metadata, deliberately
158
+ without configuration/source/web access. It retained the same component identities
159
+ and historical evidence, rechecked unchanged IDs/images/start times/running state,
160
+ and treated newly read health/creation timestamps as newly learned facts. No target
161
+ change was established. Earlier configuration remained historical, not removed or
162
+ freshly verified. The helper rejected a standalone time fragment under its privacy
163
+ pattern; the agent rephrased that prose before saving. It did not bypass validation.
164
+
165
+ Independent readback exposed a real provenance gap in that successor: a condensed
166
+ architecture finding cited only the new runtime check while summarizing historical
167
+ configuration/source claims. Graph evidence remained intact, and schema checks
168
+ passed, but the summary's links did not substantiate all its claims. A direct
169
+ claim-to-evidence assertion failed. The guide now explicitly requires carrying
170
+ original evidence IDs into consolidated summaries and opening those links during
171
+ readback. A separate final candidate installation preserves the earlier snapshot
172
+ and the flawed saved revision for comparison.
173
+
174
+ A new fresh-context agent used that final installed guidance with only the saved
175
+ successor and retained evidence. It independently found the incomplete summary
176
+ association, saved revision 004 with original configuration/source citations and
177
+ both runtime captures for comparison, and preserved all 30 preexisting files,
178
+ eight original annotations and six relationships/observations. Independent readback
179
+ verified five evidence hashes, generated views and the predecessor digest; the
180
+ claim-to-evidence assertion now passes. No new live observations were invented.
181
+ Check/save/read exited 0 after rephrasing another standalone clock-time privacy
182
+ false positive. No validator was bypassed. The final brief is 830 words, above the
183
+ editorial target; shortening and human readability remain limitations.
184
+
185
+ The final installed plugin's 26 files match implementation commit
186
+ `7be51fb2b58e38aa252a4b9717781f28c065439c` exactly using the installed-byte verifier.
187
+ On Node 22.23.2, 24.22.2 and 26.13.0, all 241 tests and the offline installed
188
+ package/terminal checks passed. Initial version-guard failures were resolved by
189
+ updating the canonical candidate version, instruction digest and acceptance
190
+ allowlist, with failing-then-passing checks. No CLI tool policy changed.
191
+ Markdown lint 0.24.0, local links/fragments with lychee 0.24.2, cffconvert 2.0.0,
192
+ 24 Python repository checks, skill frontmatter validation and whitespace checks
193
+ passed. An independent review found no actionable scope, evidence-boundary or
194
+ package-coupling defects; the later summary correction was separately verified
195
+ against its observed failure.
196
+
197
+ Exact installed `SKILL.md` SHA-256:
198
+ `851beb7692209a06915e1239187d298d022d444ede13183a297528511ee6931b`.
199
+ Unchanged `surface.mjs` SHA-256:
200
+ `3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
201
+ The private run retains installation receipts, complete installed file hashes,
202
+ actual collected projections, authored drafts and readback reports. The CLI's
203
+ bundled instruction identity also includes the new guide; its reviewed digest is
204
+ pinned by the package smoke check. Its tool permissions are unchanged.
205
+
206
+ Human acceptance, browser visual QA, ChatGPT Work invocation and actual remote
207
+ repository/document connector behavior remain unverified. The live target was
208
+ not changed to manufacture a before/after result. Synthetic change reasoning is
209
+ not evidence of detecting a real deployment change. Keep #76 WIP and the PR draft.
@@ -0,0 +1,107 @@
1
+ # npm distribution and retained candidates
2
+
3
+ The published package is **`@n8r/surface@0.1.0-experimental.2`**, exposing the
4
+ `n8r-surface` executable. The maintainer selected scoped-only publication under
5
+ [issue #27](https://github.com/injectionator/n8r-surface/issues/27).
6
+ Unscoped publication and name reservation have been removed from the plan.
7
+ Historical unscoped archives are retained evidence, not a supported registry route.
8
+ See the [verified release record](npm-release.md#verified-scoped-release).
9
+
10
+ The tooling below generates and tests only the scoped candidate.
11
+ Source and default generated manifests retain `private: true`; explicit
12
+ `--publishable` preparation creates fresh publishable archives without publishing.
13
+ Do not rebuild or restage the released version. A later release requires a new
14
+ reviewed version and updated first-release guards.
15
+
16
+ ## Build and inspect candidates
17
+
18
+ These commands prepare the local 0.1.0-experimental.5 candidate without publishing.
19
+
20
+ From the checkout root, with Node 22, 24 or 26, npm, Git, POSIX `tar` and Python 3.9+:
21
+
22
+ ```sh
23
+ npm ci
24
+ npm cache add yaml@2.9.1
25
+ npm test
26
+ npm run check:package
27
+ candidate_run=$(mktemp -d)
28
+ npm run pack:candidates -- "$candidate_run/packages"
29
+ cat "$candidate_run/packages/candidates.json"
30
+ ```
31
+
32
+ Dependency preparation uses the network. Candidate packing and consumer checks
33
+ use local files/cache with lifecycle scripts disabled. `pack:candidates` builds
34
+ once into a fresh temporary directory (excluding stale checkout `dist/` files),
35
+ captures npm's source payload once, and generates the scoped package from that
36
+ payload. Development scripts/dependencies are removed. Existing destinations
37
+ are refused.
38
+ A failed run may leave an incomplete destination; use a new directory on retry.
39
+
40
+ The tarball is `scoped/n8r-surface-0.1.0-experimental.5.tgz`.
41
+ `candidates.json` records its relative path, SHA-256 digest, version, source HEAD
42
+ and dirty status. This is
43
+ local build evidence, not registry provenance. Each entry also names a unique
44
+ `releaseAsset` for later GitHub upload; see the [version and release policy](versioning.md). Release evidence must use a clean
45
+ reviewed checkout; a dirty report does not identify all inputs by commit alone.
46
+
47
+ `check:package` installs the scoped candidate in a separate temporary consumer outside
48
+ the checkout, imports its own package name, checks installed identity and assets,
49
+ and runs the startup/discovery terminal rehearsals. Temporary homes isolate
50
+ settings and vaults. Discovery uses a scripted offline fixture, not real inference.
51
+ Existing [real Codex evidence](surface-revisions-verification.md) remains separate.
52
+
53
+ ## Human verification
54
+
55
+ Maintainer preparation: supply this checkout and the candidate build above.
56
+ Keep the same terminal so `candidate_run` remains set. No global installation,
57
+ Codex sign-in or existing vault is needed for this distribution check.
58
+
59
+ - [ ] Install the preferred candidate into an isolated consumer and inspect it:
60
+
61
+ ```sh
62
+ mkdir "$candidate_run/consumer"
63
+ cd "$candidate_run/consumer"
64
+ npm init --yes
65
+ npm install --offline --ignore-scripts --no-audit --no-fund --package-lock=false "$candidate_run/packages/scoped/n8r-surface-0.1.0-experimental.5.tgz"
66
+ node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
67
+ ./node_modules/.bin/n8r-surface --version
68
+ ```
69
+
70
+ Expect successful installation, `function`, then
71
+ `n8r-surface 0.1.0-experimental.5`; each exits 0.
72
+ - [ ] Run bare startup with a fresh isolated home and closed input:
73
+
74
+ ```sh
75
+ mkdir "$candidate_run/home"
76
+ HOME="$candidate_run/home" USERPROFILE="$candidate_run/home" ./node_modules/.bin/n8r-surface </dev/null
77
+ echo "$?"
78
+ ls -A "$candidate_run/home"
79
+ ```
80
+
81
+ Expect the overview, `Vault setup required; run n8r-surface in an interactive
82
+ terminal.`, exit **1**, and no home entries. This is the expected unconfigured
83
+ path. No normal settings or vault should change.
84
+ - [ ] Report **Pass / Fail / Blocked**, Node/npm versions, the installed name,
85
+ and unexpected output. Missing imports/assets, a different version or writes
86
+ during closed-input startup are failures. Return the candidate report too.
87
+ After inspection, leave the consumer directory and remove only the temporary
88
+ directory created by `mktemp`; keep any evidence you need first.
89
+
90
+ ## Verified scoped registry route
91
+
92
+ ```sh
93
+ npm install --global @n8r/surface@0.1.0-experimental.2
94
+ npm exec --yes --package=@n8r/surface@0.1.0-experimental.2 -- n8r-surface --version
95
+ ```
96
+
97
+ Library users install the scoped exact version locally and import from
98
+ `@n8r/surface`. The [release record](npm-release.md#verified-scoped-release)
99
+ contains independent bytes, installation and signed-provenance verification.
100
+ Use the exact version or `experimental`; `latest` was not promoted.
101
+
102
+ ## Historical release verification
103
+
104
+ Current packing and publication tooling is scoped-only. The read-only release
105
+ checker retains dual-archive handling for historical .1/.2 reports. Preserve
106
+ those immutable tags, reports and archives. Authentication review, a new release
107
+ tag, registry publication and independent provenance checks remain separate.