@n8r/surface 0.1.0-experimental.2 → 0.1.0-experimental.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -4
- package/dist/cli.js +174 -22
- package/dist/codec.d.ts +2 -0
- package/dist/codec.js +22 -7
- package/dist/codex.d.ts +1 -1
- package/dist/codex.js +26 -10
- package/dist/contracts.d.ts +108 -2
- package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
- package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
- package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
- package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
- package/dist/cyclonedx-validation.d.ts +1 -0
- package/dist/cyclonedx-validation.js +45 -0
- package/dist/html.js +27 -3
- package/dist/recent.d.ts +9 -0
- package/dist/recent.js +71 -0
- package/dist/revisions.js +42 -0
- package/dist/skill-artifacts-cli.d.ts +1 -0
- package/dist/skill-artifacts-cli.js +13 -0
- package/dist/skill-artifacts.d.ts +15 -0
- package/dist/skill-artifacts.js +184 -0
- package/dist/skill-cyclonedx.d.ts +26 -0
- package/dist/skill-cyclonedx.js +214 -0
- package/dist/skill-presentation.d.ts +10 -0
- package/dist/skill-presentation.js +108 -0
- package/dist/skill-surface-cli.d.ts +1 -0
- package/dist/skill-surface-cli.js +37 -0
- package/dist/skill-surface-store.d.ts +7 -0
- package/dist/skill-surface-store.js +126 -0
- package/dist/surface-bom.d.ts +73 -0
- package/dist/surface-bom.js +139 -0
- package/dist/surface-draft.d.ts +6 -3
- package/dist/surface-draft.js +20 -3
- package/dist/surface-instructions.d.ts +2 -1
- package/dist/surface-instructions.js +10 -1
- package/dist/surface-overview.d.ts +15 -0
- package/dist/surface-overview.js +86 -0
- package/dist/surface-store.d.ts +5 -7
- package/dist/surface-store.js +34 -2
- package/dist/surface-view.d.ts +3 -0
- package/dist/surface-view.js +50 -0
- package/dist/validate.js +298 -0
- package/docs/n8r-surface/cli-bundles.md +72 -0
- package/docs/n8r-surface/command-outcomes.md +151 -4
- package/docs/n8r-surface/contracts.md +10 -0
- package/docs/n8r-surface/critical-path.md +21 -0
- package/docs/n8r-surface/first-use-access.md +143 -0
- package/docs/n8r-surface/first-use-overview.md +262 -0
- package/docs/n8r-surface/getting-started.md +55 -88
- package/docs/n8r-surface/guided-journey-verification.md +137 -0
- package/docs/n8r-surface/implementation-decisions.md +14 -14
- package/docs/n8r-surface/instance-first-research.md +209 -0
- package/docs/n8r-surface/npm-distribution.md +39 -69
- package/docs/n8r-surface/npm-release.md +141 -14
- package/docs/n8r-surface/product-direction.md +327 -0
- package/docs/n8r-surface/researcher-skill.md +105 -51
- package/docs/n8r-surface/security-assurance-strategy.md +267 -0
- package/docs/n8r-surface/skill-bom-verification.md +142 -0
- package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
- package/docs/n8r-surface/skill-cyclonedx.md +85 -0
- package/docs/n8r-surface/skill-manual.md +129 -0
- package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
- package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
- package/docs/n8r-surface/skill-workspace-automation.md +359 -0
- package/docs/n8r-surface/surface-description-contract.md +224 -0
- package/docs/n8r-surface/surface-descriptions.md +173 -0
- package/docs/n8r-surface/surface-relationships.md +231 -0
- package/docs/n8r-surface/tester-candidate.md +158 -0
- package/docs/n8r-surface/versioning.md +55 -66
- package/docs/n8r-surface/workspace-human-check.md +101 -0
- package/docs/n8r-surface/workspace-installation.md +68 -0
- package/docs/n8r-surface/workspace-verification.md +350 -0
- package/docs/n8r-surface/workspace.md +83 -0
- package/examples/researcher/README.md +8 -0
- package/examples/researcher/cyclonedx/configured/README.md +7 -0
- package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
- package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
- package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
- package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
- package/examples/researcher/descriptions/README.md +29 -0
- package/examples/researcher/descriptions/bound-r1.json +141 -0
- package/examples/researcher/descriptions/bound-r2.json +153 -0
- package/examples/researcher/descriptions/capability.json +167 -0
- package/examples/researcher/descriptions/research-r1.json +153 -0
- package/examples/researcher/descriptions/research-r2.json +157 -0
- package/examples/researcher/descriptions/sources.md +24 -0
- package/examples/researcher/relationships/README.md +34 -0
- package/examples/researcher/relationships/bound-r1.json +346 -0
- package/examples/researcher/relationships/bound-r2.json +358 -0
- package/examples/researcher/relationships/capability.json +325 -0
- package/examples/researcher/relationships/config/assistant.env.example +4 -0
- package/examples/researcher/relationships/research-r1.json +300 -0
- package/examples/researcher/relationships/research-r2.json +304 -0
- package/examples/researcher/relationships/sources.md +38 -0
- package/examples/researcher/surface-bom/README.md +17 -0
- package/examples/researcher/surface-bom/initial.cdx.json +188 -0
- package/package.json +1 -1
- package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
- package/plugins/n8r-surface/LICENSING.md +3 -0
- package/plugins/n8r-surface/plugin.json +2 -2
- package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
- package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
- package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
- package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
- package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
- package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
- package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
- package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
- package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
- package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
- package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
- package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
- package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
- package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
- package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
- package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
- package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
- package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
|
@@ -0,0 +1,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
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
identity against the exact
|
|
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
|
-
#
|
|
1
|
+
# npm distribution and retained candidates
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
32
|
-
payload. Development scripts/dependencies are removed
|
|
33
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
- [ ]
|
|
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
|
-
##
|
|
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@
|
|
96
|
-
|
|
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
|
|
104
|
-
`@n8r/surface
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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.
|