@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,137 @@
1
+ # Installed skill: freeform component exploration
2
+
3
+ Related to [#17](https://github.com/injectionator/n8r-surface/issues/17).
4
+ The user starts with a main component and brings other sources into the
5
+ conversation as useful connections emerge. Suggestions help exploration; they
6
+ are not mandatory steps or a component-selection wizard.
7
+
8
+ ## Task and boundary
9
+
10
+ **Given:** an installed Researcher and only a selected LibreChat source folder.
11
+ **When:** the user asks what connects to it, chooses a different branch from the
12
+ recommendation, introduces Atlas and connector sources, saves Capability/Bound
13
+ descriptions, then reopens and corrects their scope.
14
+ **Then:** useful suggestions have source evidence, supported possibilities remain
15
+ separate from selections and verified configuration, and saved successors retain
16
+ identities, decisions, unknowns and exact predecessor references.
17
+
18
+ The skill has no built-in knowledge of the user's Lab or repository layout. It
19
+ may inspect only sources the user introduces. The test's connector files become
20
+ available in a later turn; the originating repository is inaccessible to the
21
+ Researcher. Shared source implementation does not establish a shared runtime.
22
+ No service operation, provisioning, live API request or CLI/Labs implementation
23
+ is part of this trial.
24
+
25
+ ## Installed 0.1.11 rehearsal
26
+
27
+ Agent rehearsal on 9 November 2026 used the installed 0.1.11 plugin, byte-matched
28
+ across all 20 files to merged commit
29
+ `5eed2ac9a31933caa2ae306e4b407e327d147bf7`. Host: Codex CLI 0.166.0 app-server,
30
+ ChatGPT sign-in, configured `gpt-6-astra`, Node 26.13.0, macOS. Fresh ephemeral
31
+ sessions and explicit file permissions denied earlier receipts and the separate
32
+ Lab repository. No inference credentials were copied.
33
+
34
+ Initial input contained only the same pinned LibreChat README, database and
35
+ OpenID source copies used in the [accepted two-product trial](skill-usefulness-verification.md).
36
+ Later input added a limited historical operator excerpt and selected private
37
+ connector source files. Their provenance and hashes remain in the private run
38
+ inventory. The developing agent supplied conversational test-user choices and
39
+ source copies; the installed Researcher produced the findings and saved bundles.
40
+ This is an agent rehearsal, not a human rerun or a current deployment inspection.
41
+
42
+ Observed sequence:
43
+
44
+ 1. Asked for LibreChat connections without naming other components. The reply
45
+ offered model, storage, identity, document/tool and telemetry branches, with
46
+ a suggested next investigation. It saved nothing when asked not to save.
47
+ 2. Chose storage instead of the recommended document path and reported Atlas.
48
+ The reply followed that direction and distinguished a user statement from
49
+ configured and exercised connections.
50
+ 3. Challenged source-read claims whose events appeared missing. Explicit Node
51
+ reads and hashes followed. Subsequent raw-transcript diagnosis established
52
+ that the event stream was incomplete; see the recording limit below.
53
+ 4. Introduced a historical storage note and private connector sources, then
54
+ switched to inference. The reply traced the connector/app-server boundary,
55
+ retained Atlas and deferrals, and excluded a separate assistant connection.
56
+ 5. Requested Capability and Bound bundles in successive turns. Both saved and
57
+ passed independent helper readback. User selections did not become verified
58
+ current bindings.
59
+ 6. Reopened in a fresh process, narrowed the Atlas selection to chat records
60
+ rather than uploaded files, and named retention/access controls as next work
61
+ without authorizing investigation. The saved successor retained those limits.
62
+
63
+ Independent readback checked all three bundles, 36 source-hash references,
64
+ 8 stable nodes, 5 stable relationships, exact parent references and the exact
65
+ Capability pin. All 24 files present before reopening remained unchanged.
66
+
67
+ ### Recording and runner limits
68
+
69
+ The command-event stream omitted some nested shell calls. Initial review therefore
70
+ mistook missing events for unsupported inspection. A fresh diagnostic using the
71
+ same installed 0.1.11 retained a raw tool transcript: six shell calls and their
72
+ returned results appeared there, while the event stream recorded only four. The
73
+ raw transcript includes actual source reads. Missing command events alone cannot
74
+ establish that a source was unread or that the Researcher invented an earlier read.
75
+ The original ephemeral sessions cannot supply complete raw history retrospectively;
76
+ that per-turn coverage limit remains explicit. Later recorded targeted reads and
77
+ independent source checks substantiate the saved findings.
78
+
79
+ The first reopen attempt reached the runner's 120-second limit without saving a
80
+ successor. A fresh retry with a 600-second allowance completed and passed
81
+ independent readback. The timeout is retained as Blocked, not artifact success or
82
+ a skill defect. This allowance changed only a private copy of the existing runner.
83
+ An optional full-thread read was unavailable for ephemeral sessions; the focused
84
+ recording diagnosis used a fresh persistent session instead. The runner also
85
+ warned that injected skill text was truncated; installed-file reads are recorded,
86
+ and no complete injected-prompt claim is made.
87
+
88
+ ## Result and remaining limits
89
+
90
+ **Agent rehearsal: Pass for the bounded journey and saved-output checks. Human
91
+ acceptance: pending.** The skill offered evidence-backed branches, followed user
92
+ redirection, incorporated later sources, preserved selections and deferrals, and
93
+ saved/reopened checked artifacts. The developer did not supply its findings.
94
+
95
+ No skill-code gap was established. Distributed skill 0.1.11 and its artifact
96
+ helpers remain unchanged; no new version or release is proposed for delivery.
97
+ The recording and timeout findings change how this rehearsal is interpreted, not
98
+ product behavior. Keep complete tool transcripts when investigating read-coverage
99
+ claims; event summaries alone are insufficient for a negative claim.
100
+
101
+ This trial does not verify arbitrary APIs, current deployment settings, running
102
+ connections, ChatGPT Work lifecycle, broad host compatibility or CLI/Labs
103
+ integration. The Bound artifact appropriately keeps current bindings unknown
104
+ while recording the user's Atlas and connector selections. Sources, private
105
+ component identities, prompts, tool receipts, snapshots and readback results stay
106
+ in the selected private vault; no private source bundle is published here.
107
+
108
+ ## Human verification task list
109
+
110
+ Prerequisites: the identified installed 0.1.11 skill in a local Codex chat, Node.js
111
+ 22/24/26, readable user-selected sources and a writable research destination.
112
+ Use the [installation guide](researcher-skill.md) for the pinned accepted revision. Record the installed version and host.
113
+
114
+ - [ ] Start with only your main component folder. Ask: “Use n8r-surface Researcher
115
+ to explore LibreChat from this folder. What connects to it, and where would it
116
+ be useful to explore next? I have not chosen other components. Don't save yet.”
117
+ Expect optional evidence-backed branches, explicit unknowns and no save.
118
+ - [ ] Choose a different branch from its recommendation: “Leave documents and
119
+ tools aside. We use Atlas for chat storage. What does that add, and what remains
120
+ unverified?” Expect a useful response without restarting a fixed questionnaire.
121
+ - [ ] Introduce permitted connector sources: “Now explore inference from these
122
+ files. Retain the storage choice and deferred topics. The separate assistant
123
+ connection is outside this Surface.” Expect source-based connections and limits,
124
+ with no operation or search through unselected repositories.
125
+ - [ ] Ask: “Save checked Capability and Bound descriptions here. Separate supported
126
+ possibilities, my choices, configuration evidence and unknown runtime use.
127
+ Read them back and show me the briefs.” Open both briefs and their evidence;
128
+ expect actual files and helper readback, not only a claim of success.
129
+ - [ ] In a fresh chat, supply the Bound bundle and say: “Atlas is selected for chat
130
+ records only, not uploaded files. Retention/access controls are next, but don't
131
+ investigate yet. Keep my other choices and deferrals. Save a checked successor
132
+ without changing earlier files.” Expect the correction, retained identity and
133
+ history, and the requested stopping point.
134
+ - [ ] Report **Pass / Fail / Blocked**, skill revision/host, the unclear or
135
+ unsupported claim if any, and links to the saved briefs. Keep private sources
136
+ and receipts private. Retain the research after the trial; no service cleanup
137
+ is needed because the task operates no services.
@@ -16,21 +16,21 @@ majors and Bun-only execution are not part of the initial support promise. Revis
16
16
  lists 22/24/26 support windows through April 2027/2028/2029 respectively (checked
17
17
  4 November 2026).
18
18
 
19
- Use **`@n8r/surface`** as the preferred npm package/library import and
20
- **`n8r-surface`** as the supported alternative, both exposing `n8r-surface`.
21
- This supersedes the unscoped-first/fallback decision under
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
22
  [issue #27](https://github.com/injectionator/n8r-surface/issues/27).
23
- Generate both from one build with matching payloads and version. The
24
- [distribution candidate procedure](npm-distribution.md) preserves `private: true`
25
- by default. The maintainer confirmed `0.1.0-experimental.2` and authorized
26
- publication; explicit `--publishable` preparation creates fresh public archives.
27
- The [first-release workflow](npm-release.md) retains both archives before
28
- publication, uses stage-only token bootstrap with provenance and maintainer 2FA approval, and requires
29
- independent registry verification. Merge and account prerequisites remain. Registry
30
- lookups do not reserve names or establish publishing rights. The approved
31
- [package version policy](versioning.md) makes the root manifest authoritative,
32
- derives CLI output from the installed manifest and verifies retained artifact
33
- identity against the exact Git tag, commit and GitHub Release metadata.
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
34
 
35
35
  Issue #15 ships a library, built declarations, contracts and synthetic assets.
36
36
  The first #16 increment adds a `bin` entry for bare startup only; see its
@@ -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.
@@ -1,18 +1,22 @@
1
- # Dual npm distribution candidates
1
+ # npm distribution and retained candidates
2
2
 
3
- Issue [#27](https://github.com/injectionator/n8r-surface/issues/27) selects
4
- `@n8r/surface` as the preferred package and library import, with `n8r-surface` as
5
- an official alternative. Both expose the `n8r-surface` executable. Install one
6
- route per environment because they provide the same command name.
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).
7
9
 
8
- This increment prepares **private local candidates**, not a published release.
9
- The root manifest and default generated manifests retain `private: true`. The
10
- maintainer selected `0.1.0-experimental.2` and authorized publication. Explicit
11
- `--publishable` preparation removes the generated guards only; see the
12
- [first-release procedure](npm-release.md). Registry installation remains unproved.
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.
13
15
 
14
16
  ## Build and inspect candidates
15
17
 
18
+ These commands prepare the local 0.1.0-experimental.5 candidate without publishing.
19
+
16
20
  From the checkout root, with Node 22, 24 or 26, npm, Git, POSIX `tar` and Python 3.9+:
17
21
 
18
22
  ```sh
@@ -28,20 +32,19 @@ cat "$candidate_run/packages/candidates.json"
28
32
  Dependency preparation uses the network. Candidate packing and consumer checks
29
33
  use local files/cache with lifecycle scripts disabled. `pack:candidates` builds
30
34
  once into a fresh temporary directory (excluding stale checkout `dist/` files),
31
- captures npm's source payload once, and generates both packages from that
32
- payload. Development scripts/dependencies are removed from both manifests;
33
- only `name` differs between them. Versions, engines, licenses, dependencies,
34
- exports, executable and asset bytes match. Existing destinations are refused.
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.
35
38
  A failed run may leave an incomplete destination; use a new directory on retry.
36
39
 
37
- Both tarballs are named `n8r-surface-0.1.0-experimental.2.tgz`, so they live in
38
- separate `scoped/` and `unscoped/` directories. `candidates.json` records their
39
- relative paths, SHA-256 digests, version, source HEAD and dirty status. This is
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
40
43
  local build evidence, not registry provenance. Each entry also names a unique
41
44
  `releaseAsset` for later GitHub upload; see the [version and release policy](versioning.md). Release evidence must use a clean
42
45
  reviewed checkout; a dirty report does not identify all inputs by commit alone.
43
46
 
44
- `check:package` installs each candidate in a separate temporary consumer outside
47
+ `check:package` installs the scoped candidate in a separate temporary consumer outside
45
48
  the checkout, imports its own package name, checks installed identity and assets,
46
49
  and runs the startup/discovery terminal rehearsals. Temporary homes isolate
47
50
  settings and vaults. Discovery uses a scripted offline fixture, not real inference.
@@ -58,13 +61,14 @@ Codex sign-in or existing vault is needed for this distribution check.
58
61
  ```sh
59
62
  mkdir "$candidate_run/consumer"
60
63
  cd "$candidate_run/consumer"
61
- npm install --offline --ignore-scripts --no-audit --no-fund --package-lock=false "$candidate_run/packages/scoped/n8r-surface-0.1.0-experimental.2.tgz"
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"
62
66
  node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
63
67
  ./node_modules/.bin/n8r-surface --version
64
68
  ```
65
69
 
66
70
  Expect successful installation, `function`, then
67
- `n8r-surface 0.1.0-experimental.2`; each exits 0.
71
+ `n8r-surface 0.1.0-experimental.5`; each exits 0.
68
72
  - [ ] Run bare startup with a fresh isolated home and closed input:
69
73
 
70
74
  ```sh
@@ -77,61 +81,27 @@ Codex sign-in or existing vault is needed for this distribution check.
77
81
  Expect the overview, `Vault setup required; run n8r-surface in an interactive
78
82
  terminal.`, exit **1**, and no home entries. This is the expected unconfigured
79
83
  path. No normal settings or vault should change.
80
- - [ ] Repeat the first two tasks in a new `consumer-alternative` directory,
81
- using the `unscoped/` tarball, import `"n8r-surface"` and a new `home-alternative`.
82
- Expect identical command behavior and exit codes.
83
- - [ ] Report **Pass / Fail / Blocked**, Node/npm versions, both installed names,
84
+ - [ ] Report **Pass / Fail / Blocked**, Node/npm versions, the installed name,
84
85
  and unexpected output. Missing imports/assets, a different version or writes
85
86
  during closed-input startup are failures. Return the candidate report too.
86
87
  After inspection, leave the consumer directory and remove only the temporary
87
88
  directory created by `mktemp`; keep any evidence you need first.
88
89
 
89
- ## Registry routes after a separately approved release
90
-
91
- These are planned routes; do not use them as evidence of a release today.
92
- Replace `VERSION` with the same verified published version for either route:
90
+ ## Verified scoped registry route
93
91
 
94
92
  ```sh
95
- npm install --global @n8r/surface@VERSION
96
- # Alternative in a separate environment:
97
- npm install --global n8r-surface@VERSION
98
- # Explicit executable selection for a one-off invocation:
99
- npm exec --package=@n8r/surface@VERSION -- n8r-surface --version
100
- npm exec --package=n8r-surface@VERSION -- n8r-surface --version
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
101
95
  ```
102
96
 
103
- Library users install the chosen exact version locally and import from
104
- `@n8r/surface` (preferred) or `n8r-surface`. Source links must resolve to
105
- [the official repository](https://github.com/injectionator/n8r-surface).
106
- After publication, check each registry manifest's version, repository and
107
- `dist.integrity`, verify its provenance against the reviewed source revision,
108
- and repeat isolated installs and the command/asset readback for both names.
109
- Matching repository text alone does not prove origin.
110
-
111
- ## Remaining release decisions and recovery
112
-
113
- On 5 November 2026, public metadata lookups returned E404 for both names and
114
- `npm whoami --registry=https://registry.npmjs.org` returned E401. This establishes
115
- neither name availability nor publishing rights. An authorized maintainer must
116
- establish the npm identity, `n8r` organization/team rights and unscoped ownership.
117
- Subsequent authenticated readback identified the intended npm account and its
118
- `n8r` owner role; new-package publication rights still require an actual publish.
119
-
120
- The approved first version is `0.1.0-experimental.2`. Review the release
121
- workflow before merging; account configuration and registry verification remain. Prefer trusted publishing for both packages
122
- from the public repository on GitHub-hosted runners. npm documents Node 22.14+
123
- and npm 11.5.1+ for trusted publishing and automatic provenance for public packages
124
- from public repositories. Configure and verify each package's trust relationship;
125
- local tarball tests cannot do this. See [npm trusted publishing](https://docs.npmjs.com/trusted-publishers/)
126
- (checked 5 November 2026). The manual workflow and its remaining account prerequisites are described in
127
- [the first-release procedure](npm-release.md).
128
-
129
- Use the same version and an explicit `experimental` distribution tag for both
130
- packages; do not promote `latest` implicitly. Record each package's publication,
131
- integrity and verification separately. If only one publishes, report the release
132
- as incomplete and retain the exact approved build. Inspect existing registry
133
- bytes before retrying the missing package; never replace or rebuild a published
134
- version under an assumption of equivalence. Align tags only after both packages
135
- pass registry readback. A mismatching published payload needs a new approved
136
- version for both names. Publication, registry rehearsals, provenance verification
137
- and human acceptance remain open under #27.
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.