@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
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# Package version and release identity
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
The distribution plan is **`@n8r/surface` only**. Its authoritative version is
|
|
4
|
+
`package.json`; the lockfile must agree, and the installed command reads its own
|
|
5
|
+
manifest for `--version`. Package versions do not version the AI Surface Model,
|
|
6
|
+
Researcher skill or individual saved Surface revisions.
|
|
7
|
+
|
|
8
|
+
The maintainer removed unscoped publication and name reservation from the plan
|
|
9
|
+
on 5 November 2026. The first verified release is
|
|
10
|
+
[`@n8r/surface@0.1.0-experimental.2`](npm-release.md#verified-scoped-release).
|
|
11
|
+
Historical dual archives remain evidence, not a second supported package or a
|
|
12
|
+
future publication commitment. Current tooling prepares only the scoped package; preparation does not authorize
|
|
13
|
+
a release.
|
|
9
14
|
|
|
10
15
|
## Compatibility and version changes
|
|
11
16
|
|
|
@@ -31,15 +36,15 @@ Use `npm version VERSION --no-git-tag-version` for an approved version change,
|
|
|
31
36
|
then review both manifests in the issue's PR. `npm run check:version` rejects
|
|
32
37
|
invalid versions and drift in either lockfile version. `npm test` and candidate
|
|
33
38
|
packing run that check. A version bump needs no source-code edit for CLI output.
|
|
34
|
-
The maintainer
|
|
35
|
-
|
|
36
|
-
the [
|
|
39
|
+
The maintainer authorized the next release on 14 November 2026. The current
|
|
40
|
+
release is `0.1.0-experimental.5`; required account actions remain separate. See
|
|
41
|
+
the [release procedure](npm-release.md#experimental5-release).
|
|
37
42
|
|
|
38
43
|
npm distribution tags are movable pointers, unlike permanent Git release tags:
|
|
39
44
|
|
|
40
|
-
- Experimental prereleases use explicit `experimental` on
|
|
45
|
+
- Experimental prereleases use explicit `experimental` on the scoped package.
|
|
41
46
|
- Release candidates use explicit `next`; they must not update `latest`.
|
|
42
|
-
- Stable releases may use `latest` only after
|
|
47
|
+
- Stable releases may use `latest` only after the scoped exact-version route passes
|
|
43
48
|
verification and promotion is authorized. Publish initially under `next` to
|
|
44
49
|
permit independent readback before promotion.
|
|
45
50
|
|
|
@@ -58,19 +63,14 @@ that do not report `immutable: true`. No repository settings are changed by
|
|
|
58
63
|
these local tools. Review/approval of the selected commit is a maintainer
|
|
59
64
|
prerequisite; the verifier checks identity, not the adequacy of code review.
|
|
60
65
|
|
|
61
|
-
Retain
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
bytes under those distinct names when uploading release assets, since npm gives
|
|
65
|
-
both original tarballs the same basename. Upload the report too, and retain the
|
|
66
|
-
build environment, test evidence, release notes and per-package registry results.
|
|
67
|
-
SHA-256 identifies bytes; it does not authenticate the builder.
|
|
66
|
+
Retain the approved scoped archive, its digest report, build environment, test
|
|
67
|
+
evidence, release notes and registry readback. SHA-256 identifies bytes; it does
|
|
68
|
+
not authenticate the builder. Do not rebuild or alter a published version.
|
|
68
69
|
|
|
69
|
-
The
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
verifier accepts private artifacts only for draft metadata rehearsals.
|
|
70
|
+
The packer produces one scoped archive. Preserve the historical reports and both
|
|
71
|
+
archives for verification of `.1` and `.2`; their version-specific verification
|
|
72
|
+
still checks both. Source and default candidates remain private. Never strip a
|
|
73
|
+
guard from an old tarball and retain its old digest or source claim.
|
|
74
74
|
|
|
75
75
|
## Read-only verification commands
|
|
76
76
|
|
|
@@ -84,7 +84,7 @@ npm run check:release -- /path/to/candidates
|
|
|
84
84
|
|
|
85
85
|
The second command reads GitHub's release API and resolves the remote tag. It
|
|
86
86
|
checks the source and lockfile versions, clean HEAD, report revision/dirty flag,
|
|
87
|
-
local and remote tag targets, release target SHA and prerelease flag,
|
|
87
|
+
local and remote tag targets, release target SHA and prerelease flag, required archive
|
|
88
88
|
manifests and hashes, and matching uploaded asset names/digests. It fails closed
|
|
89
89
|
on missing data or API errors. A passing JSON result includes the version,
|
|
90
90
|
revision, tag, draft status, `evidence: "GitHub API readback"`, and explicit
|
|
@@ -107,42 +107,31 @@ performs explicitly selected publication; registry permissions remain external.
|
|
|
107
107
|
|
|
108
108
|
## Authentication, provenance and incomplete releases
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
a read-only readiness check. The maintainer approved this staged route for the
|
|
116
|
-
first release after npm offered stage-only tokens; submit the actual retained
|
|
117
|
-
artifacts, not an empty reservation package. The [procedure](npm-release.md)
|
|
118
|
-
requires maintainer 2FA approval of both real versions.
|
|
110
|
+
Future publication requires an authorized npm identity with write access to
|
|
111
|
+
`@n8r/surface`. Unscoped ownership, reservation and defensive publication are
|
|
112
|
+
out of scope. The first release used a stage-only token, followed by maintainer
|
|
113
|
+
2FA approval; [the release record](npm-release.md#verified-scoped-release)
|
|
114
|
+
contains the observed results.
|
|
119
115
|
|
|
120
116
|
Prefer [trusted publishing](https://docs.npmjs.com/trusted-publishers/) from the
|
|
121
|
-
public repository
|
|
122
|
-
for the
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
Retain the exact build and draft GitHub Release. Inspect the existing published
|
|
140
|
-
bytes and evidence, then retry only the missing package using the retained
|
|
141
|
-
artifact after resolving the failure. Never rebuild or overwrite the published
|
|
142
|
-
version. A mismatch requires a new approved version for both names. Promote both
|
|
143
|
-
npm dist-tags and finalize the immutable GitHub Release only after both routes
|
|
144
|
-
pass. If tag promotion partially fails, record that too and repair only the
|
|
145
|
-
missing pointer update; it does not require republishing package bytes.
|
|
117
|
+
public repository on GitHub-hosted runners for future scoped releases. Configure
|
|
118
|
+
only `@n8r/surface` for the reviewed workflow/environment. This has not yet been
|
|
119
|
+
exercised. Recheck npm's current requirements before setup; a newly configured
|
|
120
|
+
publisher must complete a successful publication within two days or be recreated.
|
|
121
|
+
Keep credentials outside tracked files.
|
|
122
|
+
|
|
123
|
+
For the exact scoped registry version, verify registry signatures and the
|
|
124
|
+
package's own provenance, source repository/commit, workflow identity and subject
|
|
125
|
+
digest. Compare downloaded bytes with the retained SHA-256 and registry integrity.
|
|
126
|
+
Exercise the documented isolated installation and npm-exec route. An attested
|
|
127
|
+
dependency or matching repository text alone is insufficient.
|
|
128
|
+
|
|
129
|
+
If submission or verification fails, keep the release incomplete and retain its
|
|
130
|
+
exact archives. Check whether the version already exists before retrying; verify
|
|
131
|
+
existing bytes instead of overwriting or silently rebuilding them. A mismatch
|
|
132
|
+
requires a new approved version. Finalize the immutable GitHub Release only after
|
|
133
|
+
the scoped package passes acceptance. Promote `latest` only after a separate
|
|
134
|
+
promotion decision; no unscoped publication is required.
|
|
146
135
|
|
|
147
136
|
## Human check for this increment
|
|
148
137
|
|
|
@@ -152,26 +141,26 @@ No npm credentials, real Git tag, GitHub Release or global-install change is nee
|
|
|
152
141
|
Keep the current terminal with `candidate_run` set by that guide.
|
|
153
142
|
|
|
154
143
|
- [ ] From the checkout root run `npm run check:version`. Expect
|
|
155
|
-
`Version consistent: 0.1.0-experimental.
|
|
144
|
+
`Version consistent: 0.1.0-experimental.5`, exit 0. Inspect `package.json` and
|
|
156
145
|
both root version fields in `package-lock.json`; they must match.
|
|
157
146
|
- [ ] Follow the [candidate install steps](npm-distribution.md#human-verification)
|
|
158
|
-
for
|
|
147
|
+
for the scoped package. In its consumer directory run:
|
|
159
148
|
|
|
160
149
|
```sh
|
|
161
150
|
node -p 'require("./node_modules/@n8r/surface/package.json").version'
|
|
162
151
|
./node_modules/.bin/n8r-surface --version
|
|
163
152
|
```
|
|
164
153
|
|
|
165
|
-
|
|
166
|
-
`0.1.0-experimental.
|
|
167
|
-
- [ ] Inspect `candidates.json`:
|
|
168
|
-
the
|
|
154
|
+
Expect
|
|
155
|
+
`0.1.0-experimental.5` and `n8r-surface 0.1.0-experimental.5`, both exit 0.
|
|
156
|
+
- [ ] Inspect `candidates.json`: one scoped entry has its `releaseAsset` name,
|
|
157
|
+
the report version/revision, and a hash matching the retained tarball.
|
|
169
158
|
A clean-commit rehearsal must say `dirty: false`.
|
|
170
159
|
- [ ] Read the compatibility table and release/recovery procedure above. Expect
|
|
171
|
-
one permanent Git tag and exact commit for
|
|
160
|
+
one permanent Git tag and exact commit for the scoped package; `experimental`
|
|
172
161
|
and `next` do not silently promote `latest`.
|
|
173
162
|
- [ ] Report **Pass / Fail / Blocked**, Node/npm versions, report revision and
|
|
174
|
-
|
|
163
|
+
the scoped CLI output. Version drift or missing artifacts is Fail. Missing real
|
|
175
164
|
release/authentication is Blocked for live release verification, not a reason
|
|
176
165
|
to create a tag or publish. Clean up only the temporary consumer directory
|
|
177
166
|
created by the distribution procedure after retaining needed evidence.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Check workspace setup and continuation
|
|
2
|
+
|
|
3
|
+
Use [the canonical scenarios](../../tests/acceptance/skill-workspace.feature).
|
|
4
|
+
This is a PM walkthrough through the installed skill, not a developer executing
|
|
5
|
+
the helper and calling it product acceptance. Keep this guide and expected answers
|
|
6
|
+
out of the product chat. Current results are in [verification](workspace-verification.md).
|
|
7
|
+
|
|
8
|
+
## Maintainer preparation
|
|
9
|
+
|
|
10
|
+
- Identify the candidate commit, plugin version and every installed file digest.
|
|
11
|
+
Follow [candidate installation](workspace-installation.md). Verify the actual
|
|
12
|
+
loaded skill path from tool receipts; a version announcement alone is insufficient.
|
|
13
|
+
- Use a local Codex desktop chat with ordinary inference sign-in, persistent
|
|
14
|
+
filesystem access and Node.js 22, 24 or 26. Record actual app/build, selected
|
|
15
|
+
model and CLI version. Unsupported/cloud-only hosts are blocked, not passed.
|
|
16
|
+
- Prepare disposable folders outside source repositories. Keep evidence outside
|
|
17
|
+
product inputs. Create one empty folder each for create and alternative choice;
|
|
18
|
+
leave a missing destination absent. For each adoption case create a folder with
|
|
19
|
+
`user-note.md` containing `Synthetic user note: preserve this text.`
|
|
20
|
+
- Prepare independent refusal folders: malformed `.n8r/workspace.json` containing
|
|
21
|
+
`{`; conflicting `.n8r` as a plain text file; unsupported identity JSON with
|
|
22
|
+
`format: n8r.workspace/2`. These are inputs, not seeded successful workspaces.
|
|
23
|
+
- Record the owned fixture inventory, all initial file bytes/hashes and directory
|
|
24
|
+
entries. Record global/project instructions, enabled tools, memory/history and
|
|
25
|
+
filesystem access. Verify the selected folder is actually available. Do not
|
|
26
|
+
attribute host-created `.git` to the skill. Do not call a nonempty folder empty.
|
|
27
|
+
- Start a separate fresh product chat. Supply only the installed skill, selected
|
|
28
|
+
folder and ordinary user prompt. Never include this implementation chat,
|
|
29
|
+
expected outputs or hidden repair hints. Record isolation limits; a fresh chat
|
|
30
|
+
alone is not proof that history/filesystem access is excluded.
|
|
31
|
+
|
|
32
|
+
## PM tasks
|
|
33
|
+
|
|
34
|
+
- [ ] Open the prepared empty folder in a fresh local chat. Select the installed
|
|
35
|
+
**n8r-surface Researcher** and send:
|
|
36
|
+
|
|
37
|
+
> Help me set up an n8r workspace here for investigating LibreChat.
|
|
38
|
+
> Set it up only; do not start researching yet.
|
|
39
|
+
|
|
40
|
+
Expect a clear saved location and useful next step, without beginning research.
|
|
41
|
+
It should distinguish creation from app attachment and require no source or
|
|
42
|
+
credentials. Open the folder with hidden files visible: only
|
|
43
|
+
`.n8r/workspace.json` should be new. Open it and record its ID and format.
|
|
44
|
+
- [ ] Add `user-note.md` containing `Synthetic user note: preserve this text.`
|
|
45
|
+
Ask: “Set up this n8r workspace here again.” Expect recognition without a new
|
|
46
|
+
identity, rewrite or repeated permission question. The note remains unchanged.
|
|
47
|
+
- [ ] In a new chat, select the same folder and installed skill, then send:
|
|
48
|
+
|
|
49
|
+
> Is this n8r workspace ready, and what can I do next?
|
|
50
|
+
|
|
51
|
+
Expect the same saved identity/format, useful continuation from saved purpose,
|
|
52
|
+
no claim of completed LibreChat research and no writes or research.
|
|
53
|
+
- [ ] Move the disposable folder using the file manager. Open it in another fresh
|
|
54
|
+
chat and repeat the readiness question. Expect the same identity at the new
|
|
55
|
+
location. Do not move a borrowed/user-owned workspace for this test.
|
|
56
|
+
- [ ] Repeat setup with the absent destination, stating its location in the prompt.
|
|
57
|
+
Expect the same minimal creation without a redundant permission question.
|
|
58
|
+
- [ ] Use each adoption fixture separately. Ask setup; expect a choice before any
|
|
59
|
+
write. Answer “Initialize here” in one run; choose the prepared alternative
|
|
60
|
+
empty folder in the other. Expect the chosen destination initialized and every
|
|
61
|
+
original user file preserved.
|
|
62
|
+
- [ ] Ask setup in each refusal fixture. Expect a specific explanation and next
|
|
63
|
+
action, no success claim, repair, migration or file changes.
|
|
64
|
+
|
|
65
|
+
Answer only genuine questions using the scenario facts. Stop at technical rescue,
|
|
66
|
+
10 exchanges or 15 minutes; retain the failed/incomplete trial. Do not silently
|
|
67
|
+
fix files, change the expectation or retry until a pass.
|
|
68
|
+
|
|
69
|
+
## Independent evidence and report
|
|
70
|
+
|
|
71
|
+
The maintainer compares complete before/after file inventories and hashes, then
|
|
72
|
+
reads saved JSON independently of the helper. Verify UUID v4, exact format,
|
|
73
|
+
nonempty name, optional purpose, stable ID and unchanged note bytes. Record tool
|
|
74
|
+
exit statuses (helper success 0, choice/uninitialized 3, refusal/error 2), actual
|
|
75
|
+
messages/tool receipts, timestamps and unrelated/global-state checks. Helper
|
|
76
|
+
calls in automated tests are supporting evidence, not this chat journey.
|
|
77
|
+
|
|
78
|
+
Report each scenario's **Outcome: Pass / Fail / Blocked**, with file/tool evidence.
|
|
79
|
+
Separately score **Experience: Pass / Fail / Blocked** for each:
|
|
80
|
+
|
|
81
|
+
| Criterion | Evidence to return |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| Orientation | Turn showing location, completion state and useful next action. |
|
|
84
|
+
| Necessary questions | Each question and why its information was missing. |
|
|
85
|
+
| User effort | Any request to choose a schema/structure or perform technical rescue. |
|
|
86
|
+
| Honest boundaries | Attachment, access and failure statements versus actual tools/state. |
|
|
87
|
+
| Scope | Whether setup/readiness ended without research. |
|
|
88
|
+
|
|
89
|
+
False completion, unauthorized effects or lost data fail regardless of conversation
|
|
90
|
+
quality. An expected refusal can pass; an unavailable host is blocked. Record
|
|
91
|
+
invalid environment separately. Wording, paths, names, UUIDs and timings may vary;
|
|
92
|
+
identity changes, unexpected writes or invented research are failures. Retain
|
|
93
|
+
sanitized PM judgments and private evidence references, including failed trials.
|
|
94
|
+
|
|
95
|
+
## Cleanup
|
|
96
|
+
|
|
97
|
+
Retain transcripts, hashes and verdicts before cleanup. Remove only the exact
|
|
98
|
+
inventoried task-owned fixture and isolated-installation roots when authorized;
|
|
99
|
+
verify removal. Never delete the normal installation, borrowed folders or research.
|
|
100
|
+
Record deliberate retention and leftovers. Installation, rehearsal, acceptance,
|
|
101
|
+
merge and release are separate states.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Install an identified workspace candidate
|
|
2
|
+
|
|
3
|
+
Plugin `0.1.9` belongs to issue #41 on `feat/41-skill-workspace`. Pin the reviewed
|
|
4
|
+
commit from the draft PR; a moving branch alone is not repeatable provenance.
|
|
5
|
+
This procedure exercises installation without replacing the normal installation.
|
|
6
|
+
It does not establish desktop invocation or PM acceptance.
|
|
7
|
+
|
|
8
|
+
## Isolated maintainer installation
|
|
9
|
+
|
|
10
|
+
Prerequisites: Git, Codex CLI 0.166.0, Python 3 and network access for a Git
|
|
11
|
+
marketplace. From the n8r-surface checkout at the reviewed commit:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
n8r_candidate_revision=$(git rev-parse HEAD)
|
|
15
|
+
n8r_candidate_root=$(mktemp -d)
|
|
16
|
+
mkdir "$n8r_candidate_root/codex"
|
|
17
|
+
env CODEX_HOME="$n8r_candidate_root/codex" codex plugin marketplace add injectionator/n8r-surface --ref "$n8r_candidate_revision" --json
|
|
18
|
+
env CODEX_HOME="$n8r_candidate_root/codex" codex plugin add n8r-surface@n8r-surface --json
|
|
19
|
+
env CODEX_HOME="$n8r_candidate_root/codex" codex plugin list --marketplace n8r-surface --json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Expected: exit 0; exactly one installed/enabled `n8r-surface@n8r-surface` at
|
|
23
|
+
`0.1.9` in the isolated home. Keep the root and revision in a private run inventory.
|
|
24
|
+
The environment override is scoped to each process, not exported into the normal
|
|
25
|
+
shell. No inference credentials are copied. These install operations need no model
|
|
26
|
+
sign-in. Do not claim that this changes the desktop app's active installation.
|
|
27
|
+
|
|
28
|
+
Use `git archive` of the exact commit to compare every plugin-relative file and
|
|
29
|
+
SHA-256 digest to the listed installed path. Verify both manifests, SKILL.md,
|
|
30
|
+
references and `scripts/workspace.mjs`; preserve a complete digest inventory.
|
|
31
|
+
Run the installed helper only in a separate technical fixture to check packaging.
|
|
32
|
+
Do not use that helper-created fixture as the PM's new-user input.
|
|
33
|
+
|
|
34
|
+
For an offline/local marketplace rehearsal, archive the exact commit's
|
|
35
|
+
`.agents/plugins/marketplace.json` and `plugins/n8r-surface` into a task-owned
|
|
36
|
+
source directory and register that directory instead. This uses the repository
|
|
37
|
+
marketplace layout without editing its name or installing a second skill.
|
|
38
|
+
Record that local delivery route distinctly from Git fetch verification.
|
|
39
|
+
|
|
40
|
+
## Upgrade rehearsal
|
|
41
|
+
|
|
42
|
+
Use another isolated home and install baseline commit
|
|
43
|
+
`3effc41bf7e8466651722b7b4c64035f862b1901` (plugin `0.1.8`) first. Independently
|
|
44
|
+
snapshot a synthetic user workspace outside the installation. Remove only that
|
|
45
|
+
isolated marketplace registration, register the exact candidate revision, and
|
|
46
|
+
run `plugin add` again. A pinned marketplace does not float to a new commit.
|
|
47
|
+
Expect `0.1.9`, byte equality with the candidate, and an unchanged user workspace.
|
|
48
|
+
This tests replacement of the installed snapshot; fresh-chat skill use remains
|
|
49
|
+
[a separate PM task](workspace-human-check.md).
|
|
50
|
+
|
|
51
|
+
## Desktop product rehearsal
|
|
52
|
+
|
|
53
|
+
The PM must choose an explicit installation route for the actual desktop session.
|
|
54
|
+
An isolated CLI installation is not automatically visible there. Record the normal
|
|
55
|
+
registration first. If the PM authorizes replacing it for the trial, use the pinned
|
|
56
|
+
candidate registration/add sequence, verify installed bytes, refresh the app if
|
|
57
|
+
needed and start fresh product chats. Keep the original source/ref available for
|
|
58
|
+
restoration. Never remove/repoint the normal registration silently.
|
|
59
|
+
|
|
60
|
+
Alternatively use a separately verified host configuration that loads the isolated
|
|
61
|
+
installation. Verify this from actual tool receipts before testing. Do not assume
|
|
62
|
+
an environment override affects an already-running desktop process.
|
|
63
|
+
|
|
64
|
+
[Official plugin packaging guidance](https://developers.openai.com/plugins/build/plugins)
|
|
65
|
+
describes the repository marketplace and bundled resources. The commands above
|
|
66
|
+
must also be checked against the installed CLI's help and actual results.
|
|
67
|
+
Neither repository marketplace installation nor a ZIP is a public Plugins
|
|
68
|
+
Directory listing, npm release or authorization to merge.
|