@n8r/surface 0.0.0-stage → 0.1.0-experimental.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/LICENSE-DOCS +395 -0
- package/LICENSING.md +36 -0
- package/README.md +207 -2
- package/dist/activity.d.ts +16 -0
- package/dist/activity.js +44 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +412 -0
- package/dist/codec.d.ts +6 -0
- package/dist/codec.js +56 -0
- package/dist/codex.d.ts +72 -0
- package/dist/codex.js +526 -0
- package/dist/contracts.d.ts +235 -0
- package/dist/contracts.js +1 -0
- 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.d.ts +5 -0
- package/dist/html.js +74 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +5 -0
- package/dist/notes.d.ts +52 -0
- package/dist/notes.js +184 -0
- package/dist/portable.d.ts +10 -0
- package/dist/portable.js +71 -0
- package/dist/recent.d.ts +9 -0
- package/dist/recent.js +71 -0
- package/dist/revisions.d.ts +2 -0
- package/dist/revisions.js +60 -0
- package/dist/settings.d.ts +23 -0
- package/dist/settings.js +100 -0
- package/dist/setup.d.ts +9 -0
- package/dist/setup.js +161 -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/source-tools.d.ts +102 -0
- package/dist/source-tools.js +201 -0
- package/dist/startup.d.ts +7 -0
- package/dist/startup.js +74 -0
- package/dist/surface-bom.d.ts +73 -0
- package/dist/surface-bom.js +139 -0
- package/dist/surface-draft.d.ts +22 -0
- package/dist/surface-draft.js +112 -0
- package/dist/surface-instructions.d.ts +3 -0
- package/dist/surface-instructions.js +32 -0
- package/dist/surface-overview.d.ts +15 -0
- package/dist/surface-overview.js +86 -0
- package/dist/surface-store.d.ts +34 -0
- package/dist/surface-store.js +213 -0
- package/dist/surface-view.d.ts +3 -0
- package/dist/surface-view.js +50 -0
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +482 -0
- package/docs/n8r-surface/README.md +133 -0
- package/docs/n8r-surface/cli-bundles.md +72 -0
- package/docs/n8r-surface/codex-research-transcript.md +51 -0
- package/docs/n8r-surface/codex-research-verification.md +176 -0
- package/docs/n8r-surface/command-outcomes.md +711 -0
- package/docs/n8r-surface/contracts.md +220 -0
- package/docs/n8r-surface/critical-path.md +184 -0
- package/docs/n8r-surface/design.md +289 -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 +74 -0
- package/docs/n8r-surface/guided-journey-verification.md +137 -0
- package/docs/n8r-surface/host-contract.md +176 -0
- package/docs/n8r-surface/implementation-decisions.md +96 -0
- package/docs/n8r-surface/instance-first-research.md +209 -0
- package/docs/n8r-surface/npm-distribution.md +107 -0
- package/docs/n8r-surface/npm-release.md +315 -0
- package/docs/n8r-surface/product-direction.md +327 -0
- package/docs/n8r-surface/recreation-handoff.md +117 -0
- package/docs/n8r-surface/researcher-discovery.md +157 -0
- package/docs/n8r-surface/researcher-prepared-check.md +117 -0
- package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
- package/docs/n8r-surface/researcher-repository-check.md +95 -0
- package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
- package/docs/n8r-surface/researcher-skill-verification.md +725 -0
- package/docs/n8r-surface/researcher-skill.md +309 -0
- package/docs/n8r-surface/researcher-vault.md +134 -0
- package/docs/n8r-surface/save-reopen-transcript.md +211 -0
- package/docs/n8r-surface/save-reopen-verification.md +152 -0
- 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/startup-human-check.md +172 -0
- package/docs/n8r-surface/startup-verification.md +161 -0
- package/docs/n8r-surface/startup.md +151 -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/surface-revisions-transcript.md +552 -0
- package/docs/n8r-surface/surface-revisions-verification.md +161 -0
- package/docs/n8r-surface/tester-candidate.md +158 -0
- package/docs/n8r-surface/vault-setup-verification.md +210 -0
- package/docs/n8r-surface/verification.md +117 -0
- package/docs/n8r-surface/versioning.md +172 -0
- 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 +100 -0
- package/examples/researcher/composed.surface.json +430 -0
- package/examples/researcher/composed.surface.yaml +283 -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/harbor-r1.research.html +193 -0
- package/examples/researcher/harbor-r2.research.html +226 -0
- package/examples/researcher/lumen-manual-edit.pending.html +271 -0
- package/examples/researcher/lumen-r1.research.html +271 -0
- package/examples/researcher/lumen-r2.research.html +280 -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/sources/harbor-api.md +16 -0
- package/examples/researcher/sources/harbor-auth.md +8 -0
- package/examples/researcher/sources/lumen-guide.md +28 -0
- package/examples/researcher/sources/lumen-settings.md +9 -0
- package/examples/researcher/surface-bom/README.md +17 -0
- package/examples/researcher/surface-bom/initial.cdx.json +188 -0
- package/package.json +45 -4
- package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
- package/plugins/n8r-surface/LICENSE +202 -0
- package/plugins/n8r-surface/LICENSE-DOCS +395 -0
- package/plugins/n8r-surface/LICENSING.md +39 -0
- package/plugins/n8r-surface/assets/icon.svg +5 -0
- package/plugins/n8r-surface/plugin.json +27 -0
- package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
- package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
- 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 +178 -0
- 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/model-meanings.md +55 -0
- package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
- package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
- 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,315 @@
|
|
|
1
|
+
# First public npm release
|
|
2
|
+
|
|
3
|
+
## Verified scoped release
|
|
4
|
+
|
|
5
|
+
Published on 5 November 2026:
|
|
6
|
+
**[`@n8r/surface@0.1.0-experimental.2`](https://www.npmjs.com/package/@n8r/surface/v/0.1.0-experimental.2)**,
|
|
7
|
+
from commit `f38153645cd12f7ea60f76af251edfbaebb73409` and permanent tag
|
|
8
|
+
`v0.1.0-experimental.2`. The
|
|
9
|
+
[GitHub prerelease](https://github.com/injectionator/n8r-surface/releases/tag/v0.1.0-experimental.2)
|
|
10
|
+
is finalized and read back as `immutable: true`. Its attached
|
|
11
|
+
[verification summary](https://github.com/injectionator/n8r-surface/releases/download/v0.1.0-experimental.2/scoped-registry-verification.json)
|
|
12
|
+
records the exact digest and checks.
|
|
13
|
+
|
|
14
|
+
The maintainer approved **scoped-only** publication after npm accepted the scoped
|
|
15
|
+
stage but rejected the unscoped submission with E403. `n8r-surface` remains the
|
|
16
|
+
executable name; the unscoped registry package was not published or secured.
|
|
17
|
+
Its archive remains retained solely as evidence of the original dual build.
|
|
18
|
+
Unscoped publication and name reservation have since been removed from the plan.
|
|
19
|
+
|
|
20
|
+
Independent readback verified registry bytes against the retained archive,
|
|
21
|
+
installed library/assets and CLI identity on Node 22.23.2, 24.22.2 and 26.13.0,
|
|
22
|
+
empty-home startup and a fresh-cache npm-exec invocation. npm audit verified
|
|
23
|
+
registry signatures and the scoped package's provenance. Separate cryptographic
|
|
24
|
+
verification required the exact GitHub workflow/tag certificate identity; the
|
|
25
|
+
attestation subject digest and source commit/repository matched the release.
|
|
26
|
+
These release checks are not new real-model research evidence.
|
|
27
|
+
|
|
28
|
+
Use the exact version or npm tag `experimental`. `latest` still points to npm's
|
|
29
|
+
`0.0.0-stage` placeholder; it has not been promoted. The `.1` preparation stopped
|
|
30
|
+
before npm staging because of a faulty remote-tag API lookup. Its permanent tag
|
|
31
|
+
and unpublished draft artifacts remain retained.
|
|
32
|
+
|
|
33
|
+
## Experimental.5 release
|
|
34
|
+
|
|
35
|
+
The maintainer authorized a new scoped release on 14 November 2026 after accepting
|
|
36
|
+
PR #82. Version `0.1.0-experimental.5` packages the current library/CLI and
|
|
37
|
+
Researcher skill 0.1.16. Earlier `.3`/`.4` candidates remain distinct; their older
|
|
38
|
+
CLI evidence does not establish current release behavior. Only `@n8r/surface`
|
|
39
|
+
is built or submitted. The source stays private and `latest` is unchanged.
|
|
40
|
+
|
|
41
|
+
This release includes self-contained CycloneDX Surface saves in the skill,
|
|
42
|
+
connected overviews and journals, instance-first investigation and progressive
|
|
43
|
+
source-access guidance. CLI save formats remain separate; bundling the skill does
|
|
44
|
+
not establish CLI/BOM parity. The [first-use evidence](first-use-access.md)
|
|
45
|
+
records useful signed-in web responses but unresolved portable delivery/helper
|
|
46
|
+
execution. Those limits remain; publication does not establish end-to-end web
|
|
47
|
+
acceptance, runtime conformance or consumer compatibility.
|
|
48
|
+
|
|
49
|
+
### Preparation and publication
|
|
50
|
+
|
|
51
|
+
Start at the reviewed, clean release commit after Node 22/24/26 tests and installed
|
|
52
|
+
package checks pass. Confirm GitHub account/repository and commit author. Create
|
|
53
|
+
an annotated `v0.1.0-experimental.5` tag and push only that tag. It must be on `main`.
|
|
54
|
+
Do not reuse or move a permanent release tag.
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=prepare
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The workflow builds one fresh publishable scoped archive, records its revision and
|
|
61
|
+
SHA-256, retains a build artifact and creates a draft prerelease. Inspect its
|
|
62
|
+
`candidates.json` and archive manifest: exact version, `@n8r/surface`,
|
|
63
|
+
`private: false`, public registry and `experimental`. The source remains private.
|
|
64
|
+
Download those assets; do not rebuild between preparation and staging.
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=stage
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The existing stage-only `NPM_BOOTSTRAP_TOKEN` route requires valid package write
|
|
71
|
+
access. An expired credential blocks staging; renew it outside tracked files or
|
|
72
|
+
review trusted publishing separately. A stage is not publication. Inspect the
|
|
73
|
+
reported stage ID and validation state, then approve that exact stage with npm
|
|
74
|
+
2FA. [npm's staged-publishing procedure](https://docs.npmjs.com/staged-publishing/)
|
|
75
|
+
was rechecked on 14 November 2026. After approval:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=verify
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Independently verify registry signatures and the package's own signed provenance,
|
|
82
|
+
workflow/tag identity, source commit and archive digest. Exercise the isolated
|
|
83
|
+
installation below on supported Node majors and a fresh-cache exact-version
|
|
84
|
+
npm-exec route. Attach evidence and release notes before finalizing the immutable
|
|
85
|
+
GitHub prerelease. Verify `immutable: true` afterward. Never promote `latest` as
|
|
86
|
+
part of this procedure. Failed staging/readback leaves the draft incomplete;
|
|
87
|
+
retain its bytes and verify existing registry state before retrying.
|
|
88
|
+
|
|
89
|
+
### Human verification task list
|
|
90
|
+
|
|
91
|
+
Maintainer preparation: provide the retained scoped archive from the draft release
|
|
92
|
+
in a temporary directory, with Node 22/24/26 and npm installed. Run from that
|
|
93
|
+
directory; `ARCHIVE` below is the archive's absolute path. No normal installation,
|
|
94
|
+
Codex sign-in or research vault changes are needed.
|
|
95
|
+
|
|
96
|
+
- [ ] Create an isolated consumer and install the archive:
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
export ARCHIVE="$PWD/n8r-surface-0.1.0-experimental.5-scoped.tgz"
|
|
100
|
+
mkdir consumer
|
|
101
|
+
cd consumer
|
|
102
|
+
npm init --yes
|
|
103
|
+
npm install --ignore-scripts --no-audit --no-fund --package-lock=false "$ARCHIVE"
|
|
104
|
+
node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
|
|
105
|
+
./node_modules/.bin/n8r-surface --version
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Expect exits 0, `function`, and `n8r-surface 0.1.0-experimental.5`.
|
|
109
|
+
- [ ] Inspect `node_modules/@n8r/surface/plugins/n8r-surface/plugin.json`.
|
|
110
|
+
Expect skill version `0.1.16`. This does not install a plugin into a web host.
|
|
111
|
+
- [ ] Exercise closed-input startup in an isolated home:
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
mkdir empty-home
|
|
115
|
+
env HOME="$PWD/empty-home" USERPROFILE="$PWD/empty-home" ./node_modules/.bin/n8r-surface </dev/null
|
|
116
|
+
echo "$?"
|
|
117
|
+
ls -A empty-home
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Expect setup guidance, exit **1**, and an empty home. Missing imports, wrong
|
|
121
|
+
versions or home writes fail. After publication, repeat installation using
|
|
122
|
+
`@n8r/surface@0.1.0-experimental.5` in a new consumer and compare the result.
|
|
123
|
+
- [ ] Report **Pass / Fail / Blocked**, Node/npm versions, archive digest and CLI
|
|
124
|
+
output. Missing archive/authentication is Blocked; any unexpected behavior is
|
|
125
|
+
Fail. Keep evidence, leave the consumer and remove only these temporary files.
|
|
126
|
+
|
|
127
|
+
Agent rehearsal and human acceptance are separate. Build/registry evidence will
|
|
128
|
+
be attached to the release; this preparation document does not assert publication.
|
|
129
|
+
|
|
130
|
+
## Retained preparation procedure
|
|
131
|
+
|
|
132
|
+
The procedure below records the original dual-package preparation. Its two-name
|
|
133
|
+
acceptance requirement was superseded by the maintainer's scoped-only decision.
|
|
134
|
+
Do not rerun it for the released version. The current workflow targets scoped experimental.5; the historical commands
|
|
135
|
+
below are retained as first-release evidence only. Future
|
|
136
|
+
releases require updated version guards, reviewed
|
|
137
|
+
authentication configuration, and a new permanent version/tag. Trusted publishing
|
|
138
|
+
has not been exercised; this release used stage-only token authentication and
|
|
139
|
+
maintainer 2FA approval.
|
|
140
|
+
|
|
141
|
+
## User outcome and starting evidence
|
|
142
|
+
|
|
143
|
+
Given private local candidates and no verified registry versions, the maintainer
|
|
144
|
+
can prepare both publishable archives from one reviewed commit, publish their
|
|
145
|
+
retained bytes with provenance, and independently install either exact version.
|
|
146
|
+
The source remains private to prevent publishing the checkout accidentally.
|
|
147
|
+
|
|
148
|
+
The original installed/candidate checks passed, but those archives were private.
|
|
149
|
+
Before this increment, `npm whoami` returned E401 and both names returned E404.
|
|
150
|
+
After interactive login, npm identified the intended account and confirmed its
|
|
151
|
+
`n8r` owner role. Both names still returned E404. These responses do not prove
|
|
152
|
+
name availability or successful first publication. At that starting point, no placeholder existed.
|
|
153
|
+
|
|
154
|
+
## Maintainer preparation
|
|
155
|
+
|
|
156
|
+
1. Review and merge the release-preparation PR after acceptance. Merging is a
|
|
157
|
+
separate maintainer decision. The workflow must exist on the default branch.
|
|
158
|
+
2. Use an authorized npm account with `n8r` organization rights and permission
|
|
159
|
+
to create the unscoped package. For this first release, the selected route is
|
|
160
|
+
a short-lived granular npm token with package **read/write (stage only)**
|
|
161
|
+
permission covering `@n8r/surface` and the new unscoped `n8r-surface`.
|
|
162
|
+
Selecting package `n8r` or scope `@injectionator` is insufficient. If npm
|
|
163
|
+
cannot select an unpublished unscoped name, temporarily use all-packages
|
|
164
|
+
coverage; organization-management permissions are unnecessary. Store it only as
|
|
165
|
+
repository Actions secret `NPM_BOOTSTRAP_TOKEN`. Never put it in a command,
|
|
166
|
+
issue, report or committed file. npm account 2FA remains enabled.
|
|
167
|
+
3. Enable **Settings → General → Releases → Enable release immutability** before
|
|
168
|
+
creating the draft. An administrator may be needed; an API 404 under a
|
|
169
|
+
non-admin account is not proof the setting is disabled.
|
|
170
|
+
4. Verify all required Node 22/24/26 checks on the reviewed revision. From its
|
|
171
|
+
clean checkout, create an annotated `v0.1.0-experimental.2` tag and push only
|
|
172
|
+
that tag. Never move or reuse it. Record its full commit SHA.
|
|
173
|
+
|
|
174
|
+
References checked 5 November 2026: [npm token setup](https://docs.npmjs.com/creating-and-viewing-access-tokens/),
|
|
175
|
+
[provenance](https://docs.npmjs.com/generating-provenance-statements/),
|
|
176
|
+
[trusted publishing](https://docs.npmjs.com/trusted-publishers/), and
|
|
177
|
+
[release immutability](https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/prevent-release-changes).
|
|
178
|
+
Trusted publishers require existing packages. npm offered stage-only tokens;
|
|
179
|
+
the maintainer explicitly approved staged first publication, including the
|
|
180
|
+
public `0.0.0-stage` placeholders it creates. The actual release versions require
|
|
181
|
+
maintainer approval with 2FA. See [npm staged publishing](https://docs.npmjs.com/staged-publishing/).
|
|
182
|
+
|
|
183
|
+
## Human check before publication
|
|
184
|
+
|
|
185
|
+
Prerequisites: the PR checkout with dependencies installed, Node 22/24/26, npm,
|
|
186
|
+
Git and POSIX `tar`. Staging uses npm 11.20.0 (staging requires 11.15+). Start in the repository root. These steps require no npm
|
|
187
|
+
write credentials and do not alter normal settings or installations.
|
|
188
|
+
|
|
189
|
+
- Create fresh publishable candidates:
|
|
190
|
+
|
|
191
|
+
```sh
|
|
192
|
+
release_run=$(mktemp -d)
|
|
193
|
+
npm run pack:candidates -- "$release_run/packages" --publishable
|
|
194
|
+
tar -xOf "$release_run/packages/scoped/n8r-surface-0.1.0-experimental.2.tgz" package/package.json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Expect exit 0, version `0.1.0-experimental.2`, name `@n8r/surface`,
|
|
198
|
+
`private: false`, public npm registry/access and tag `experimental`.
|
|
199
|
+
The source `package.json` must still have `private: true`.
|
|
200
|
+
- Install and run the preferred archive:
|
|
201
|
+
|
|
202
|
+
```sh
|
|
203
|
+
mkdir "$release_run/consumer"
|
|
204
|
+
cd "$release_run/consumer"
|
|
205
|
+
npm install --offline --ignore-scripts --no-audit --no-fund --package-lock=false "$release_run/packages/scoped/n8r-surface-0.1.0-experimental.2.tgz"
|
|
206
|
+
node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
|
|
207
|
+
./node_modules/.bin/n8r-surface --version
|
|
208
|
+
mkdir "$release_run/home"
|
|
209
|
+
HOME="$release_run/home" USERPROFILE="$release_run/home" ./node_modules/.bin/n8r-surface </dev/null
|
|
210
|
+
echo "$?"
|
|
211
|
+
ls -A "$release_run/home"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Expect install/import/version exits 0, `function`, and
|
|
215
|
+
`n8r-surface 0.1.0-experimental.2`. Bare startup prints setup guidance,
|
|
216
|
+
exits **1**, and leaves the isolated home empty.
|
|
217
|
+
- Repeat in a new consumer and home directory using the `unscoped/` archive
|
|
218
|
+
and import `n8r-surface`. Expect identical behavior, with that installed name.
|
|
219
|
+
- Report **Pass / Fail / Blocked**, both CLI outputs, Node/npm versions and
|
|
220
|
+
candidate revision/dirty flag. Unexpected version, missing imports, or home
|
|
221
|
+
writes are Fail. Missing prerequisites are Blocked. Leave the consumer and
|
|
222
|
+
remove only the temporary directory created above after retaining evidence.
|
|
223
|
+
|
|
224
|
+
## Prepare and stage retained artifacts
|
|
225
|
+
|
|
226
|
+
The manual [workflow](../../.github/workflows/npm-release.yml) accepts only the
|
|
227
|
+
annotated first-version tag, requires it to be on `main`, and checks clean source.
|
|
228
|
+
Preparation runs tests and both installed-package suites, builds both archives
|
|
229
|
+
once, retains the complete build as an Actions artifact for 90 days, and stores
|
|
230
|
+
the archives with `candidates.json` on a draft GitHub Release. An existing
|
|
231
|
+
release prevents preparation from rebuilding. Downloads and hash validation are
|
|
232
|
+
performed before any publication. Network access includes npm, GitHub and Sigstore;
|
|
233
|
+
write effects are draft release assets and, only for `stage`, npm staged versions and first-package placeholders.
|
|
234
|
+
|
|
235
|
+
From the repository root with GitHub CLI access:
|
|
236
|
+
|
|
237
|
+
```sh
|
|
238
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=prepare
|
|
239
|
+
gh run list --workflow npm-release.yml --limit 1
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Inspect the run and draft assets; record the run ID and full source revision.
|
|
243
|
+
Preparation must finish successfully before selecting staging:
|
|
244
|
+
|
|
245
|
+
```sh
|
|
246
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=stage
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The publisher reads both registry versions first. An existing version must match
|
|
250
|
+
retained SHA-256 and registry SHA-512 integrity and expose provenance metadata;
|
|
251
|
+
only absent versions are staged. Existing stages are downloaded and compared
|
|
252
|
+
to retained SHA-256 before they are reused; duplicate stages or differing bytes
|
|
253
|
+
stop the run. Non-404 lookup errors stop the run. The
|
|
254
|
+
workflow never finalizes the GitHub Release and never promotes `latest`.
|
|
255
|
+
Provenance metadata presence is not cryptographic verification.
|
|
256
|
+
|
|
257
|
+
On partial failure, retain the draft and its exact assets. Retry **stage** only
|
|
258
|
+
after diagnosing the failure; never rerun preparation or rebuild a published
|
|
259
|
+
version. Existing bytes that differ require a new approved version for both
|
|
260
|
+
packages. If draft creation succeeds but an upload fails, recover missing assets
|
|
261
|
+
from the original run's `npm-release-COMMIT_SHA` Actions artifact. Download it
|
|
262
|
+
with `gh run download RUN_ID -n npm-release-COMMIT_SHA -D NEW_DIRECTORY`, verify
|
|
263
|
+
`candidates.json` revision and each archive SHA-256, and upload only missing
|
|
264
|
+
assets without `--clobber`. Run `check:release` before retrying staging.
|
|
265
|
+
Keep a durable independent copy before the 90-day retention expires. If the
|
|
266
|
+
original bytes cannot be recovered, stop; do not regenerate them.
|
|
267
|
+
|
|
268
|
+
## Approve each staged version with 2FA
|
|
269
|
+
|
|
270
|
+
Open npm's **Staged Packages** page as the authorized maintainer. For each of
|
|
271
|
+
`@n8r/surface` and `n8r-surface`, inspect version `0.1.0-experimental.2`, tag
|
|
272
|
+
`experimental`, the workflow's stage ID and downloaded bytes. Approve each with
|
|
273
|
+
2FA. Alternatively run `npm stage approve STAGE_ID` in your authenticated terminal.
|
|
274
|
+
These actions publish the real versions; the placeholders are not acceptance.
|
|
275
|
+
|
|
276
|
+
Then run the read-only verification operation:
|
|
277
|
+
|
|
278
|
+
```sh
|
|
279
|
+
gh workflow run npm-release.yml --ref v0.1.0-experimental.2 -f operation=verify
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Expect success only when both exact registry versions match retained bytes and
|
|
283
|
+
expose provenance metadata. This operation cannot stage or approve anything.
|
|
284
|
+
|
|
285
|
+
## Independent registry acceptance and finalization
|
|
286
|
+
|
|
287
|
+
For each package, use a separate fresh consumer outside the checkout. Install
|
|
288
|
+
its exact version with lifecycle scripts disabled, run `npm audit signatures`,
|
|
289
|
+
read the installed name/version, import `decode`, run `--version` and the isolated
|
|
290
|
+
closed-input startup above. Also exercise the two explicit one-off routes:
|
|
291
|
+
|
|
292
|
+
```sh
|
|
293
|
+
npm exec --yes --package=@n8r/surface@0.1.0-experimental.2 -- n8r-surface --version
|
|
294
|
+
npm exec --yes --package=n8r-surface@0.1.0-experimental.2 -- n8r-surface --version
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Both must print `n8r-surface 0.1.0-experimental.2` and exit 0. Download each
|
|
298
|
+
registry tarball and compare its bytes/digests with the draft assets. Inspect
|
|
299
|
+
its own provenance attestation, including source repository, full commit,
|
|
300
|
+
workflow identity and subject digest; an attested dependency is insufficient.
|
|
301
|
+
Record registry `dist.integrity`, publication and install results independently.
|
|
302
|
+
|
|
303
|
+
After both routes pass, configure trusted publishing separately for both names:
|
|
304
|
+
GitHub owner `injectionator`, repository `n8r-surface`, workflow `npm-release.yml`,
|
|
305
|
+
no environment, permission to stage. Keep maintainer 2FA approval for promotion. A new configuration must succeed within
|
|
306
|
+
two days; do not configure it long before its next use. Verify the configuration
|
|
307
|
+
and its first actual OIDC publication before claiming it works. Remove the
|
|
308
|
+
bootstrap secret and revoke its token when no longer needed. A future version
|
|
309
|
+
requires a reviewed update to the deliberate first-version guards.
|
|
310
|
+
|
|
311
|
+
Attach independent evidence and final release notes, then finalize the draft
|
|
312
|
+
with prerelease true and latest false. Read it back with `check:release` and
|
|
313
|
+
require `immutable: true`. Finalization remains blocked on failed registry,
|
|
314
|
+
provenance, identity or immutability checks. Record **Pass / Fail / Blocked** with
|
|
315
|
+
both package results; local rehearsals do not establish a completed release.
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Product direction: security investigation of composed AI systems
|
|
2
|
+
|
|
3
|
+
Captured 11 November 2026; strategic context expanded 12 November 2026.
|
|
4
|
+
Documentation scope:
|
|
5
|
+
[#64](https://github.com/injectionator/n8r-surface/issues/64).
|
|
6
|
+
This records the user-established direction and a proposed smallest demonstration.
|
|
7
|
+
The demonstration scope below is a recommendation for review, not authorization
|
|
8
|
+
to implement, deploy or test a system. No demonstration results are claimed here.
|
|
9
|
+
|
|
10
|
+
The next proposed increment is the [Joe/Maya design and delivery sequence](../superpowers/specs/2026-11-14-joe-maya-proof-design.md):
|
|
11
|
+
recover the existing lab, revisit the same evolving target, and connect a bounded
|
|
12
|
+
policy/evaluation/observation proof to retained Surface history. Surface is the
|
|
13
|
+
independently useful public node; target operations and harness authoring/execution
|
|
14
|
+
belong to n8r-runtime and n8r-probe respectively, initially private Labs modules.
|
|
15
|
+
Surface discovers Promptfoo, alternatives and Langfuse integrations without
|
|
16
|
+
operating them. Prompt injection remains a test family within wider AI surface
|
|
17
|
+
security; the original inline sidecar is deferred. Developing the integrated proof
|
|
18
|
+
does not make Labs a prerequisite or release its private components.
|
|
19
|
+
|
|
20
|
+
## Strategic context
|
|
21
|
+
|
|
22
|
+
The agreed destination is a practical [AI Surface security assurance framework](security-assurance-strategy.md)
|
|
23
|
+
and professional service: policy and assurance levels connect to controls,
|
|
24
|
+
implementation guidance, static/live assessment and observable verification.
|
|
25
|
+
The primary reader is the consultant advising an engineer or architect and the
|
|
26
|
+
system owner. Discovery and this first demonstration are increments toward that
|
|
27
|
+
destination; they do not constitute the whole framework. The strategy maps existing
|
|
28
|
+
work and proposed milestones, including assessment coverage and scoring decisions.
|
|
29
|
+
|
|
30
|
+
## Why and for whom
|
|
31
|
+
|
|
32
|
+
People use AI to assemble software and services into agentic systems they did
|
|
33
|
+
not architect and may not understand. Others inherit those systems or must make
|
|
34
|
+
a release decision about them. They may not know which security questions to ask.
|
|
35
|
+
Firing inputs at an interface and hoping for a useful score does not explain
|
|
36
|
+
where authority is exercised, which controls exist or what downstream effects
|
|
37
|
+
occurred. Experienced investigators may instead arrive with a precise question.
|
|
38
|
+
|
|
39
|
+
The product direction is professional security investigation: discover enough of
|
|
40
|
+
the system to identify consequential questions, establish what the evidence says,
|
|
41
|
+
and help the owner make and verify a corrective change. The first value should
|
|
42
|
+
be an understandable, reproducible security finding and demonstrated improvement,
|
|
43
|
+
with legitimate use preserved. Findings support a release decision; they do not
|
|
44
|
+
certify that an entire system is secure.
|
|
45
|
+
|
|
46
|
+
The AI Surface Model makes this work traceable across components, relationships,
|
|
47
|
+
configurations and revisions. It remains independently usable; security
|
|
48
|
+
investigation is a product use of the model, not a restriction on its meaning.
|
|
49
|
+
The installed n8r-surface skill in Codex is the discovery entry point. CLI breadth,
|
|
50
|
+
a general telemetry backend and a larger schema are not outcomes in themselves.
|
|
51
|
+
|
|
52
|
+
## Presentation: brief by default, explanation within reach
|
|
53
|
+
|
|
54
|
+
Default to a short, at-a-glance view with colour where the host supports it,
|
|
55
|
+
recognizable short names and plain-language status labels. Show the relevant
|
|
56
|
+
components and connections, the main finding or question, material uncertainty
|
|
57
|
+
and the next useful action. Short names must remain unambiguous within the view
|
|
58
|
+
and resolve to the same full names and stable identities in expanded detail.
|
|
59
|
+
|
|
60
|
+
Keep “Explain this” or “More” one click away where interactive controls are
|
|
61
|
+
available, or one natural-language request away in Codex. Explain the selected
|
|
62
|
+
item in context: what it means, why it matters, the supporting evidence and its
|
|
63
|
+
limits. Evidence links should lead to the underlying sources or retained records.
|
|
64
|
+
Expansion uses the same claims and revisions as the summary; fetching new evidence
|
|
65
|
+
is a separate investigation and must be identified as such.
|
|
66
|
+
|
|
67
|
+
Users who prefer a longer explanation can request it directly. Honour their
|
|
68
|
+
chosen level of detail throughout the current conversation. Persistent preferences
|
|
69
|
+
across chats are a later implementation choice, not an existing capability claim.
|
|
70
|
+
|
|
71
|
+
Colour reinforces text and symbols; it is never the only carrier of meaning.
|
|
72
|
+
Provide a readable plain-text fallback and keep labels consistent across views.
|
|
73
|
+
Evidence status (possible, configured, observed, unknown) is distinct from a
|
|
74
|
+
security result (for example, a demonstrated unauthorized read). Colour must not
|
|
75
|
+
turn “configured” into “safe”, or a passing scoped check into whole-system approval.
|
|
76
|
+
Material gaps and conditions stay visible in the compact view; longer reasoning,
|
|
77
|
+
source excerpts and investigation history can sit behind expansion.
|
|
78
|
+
|
|
79
|
+
## Investigations we bring to the system
|
|
80
|
+
|
|
81
|
+
For broad intake, the investigator selects relevant questions from discovered
|
|
82
|
+
boundaries rather than requiring the owner to identify a vulnerability first.
|
|
83
|
+
A specific user question can narrow the same process. Each investigation needs
|
|
84
|
+
an intended rule with a stated basis: owner policy, documented contract or an
|
|
85
|
+
explicit hypothesis awaiting confirmation.
|
|
86
|
+
|
|
87
|
+
| Family | Questions to investigate |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| Enforcement | Where is a promised rule not enforced? Where is a rule enforced in one component but only assumed in another? Which security assumptions are never checked? |
|
|
90
|
+
| Dependencies and composition | Which undocumented behaviours matter, and what happens if they change? Which individually permitted operations become unsafe when chained? |
|
|
91
|
+
| Identity and access paths | Can different paths to the same object confer different permissions? Can object ownership or identity be rebound without the required checks? |
|
|
92
|
+
| Failures and effects | Can rejected or failed requests still cause effects? Can a transaction roll back while external effects survive? |
|
|
93
|
+
| Ordering and lifecycle | Do checks depend on event order? Does access survive deletion or revocation? Can unauthorized users undo transitions? Can contradictory states enable forbidden operations? |
|
|
94
|
+
|
|
95
|
+
Component configuration, internal composition and external behaviour provide
|
|
96
|
+
complementary evidence. There is no prerequisite to finish auditing every
|
|
97
|
+
component before examining their composition. Prompt injection is one possible
|
|
98
|
+
trigger; direct requests, alternate paths and state transitions can also reveal
|
|
99
|
+
an authority failure. A service account alone does not establish a vulnerability.
|
|
100
|
+
|
|
101
|
+
## Start with resources, not an assumed deployed system
|
|
102
|
+
|
|
103
|
+
A user can bring local folders, repositories, websites and documentation URLs
|
|
104
|
+
into a selected workspace, then add sources as the conversation develops. The
|
|
105
|
+
skill follows relevant evidence as a graph, preserving source identity and
|
|
106
|
+
unresolved endpoints. Repository boundaries are not necessarily component
|
|
107
|
+
boundaries: several repositories may contribute to one system, and one repository
|
|
108
|
+
may describe several components or alternatives.
|
|
109
|
+
|
|
110
|
+
Consider a synthetic three-repository case: a conventional HR application, a
|
|
111
|
+
separate chat integration and a separate MCP interface. The HR application alone
|
|
112
|
+
need not contain AI. The chat and MCP repositories are additional sources for a
|
|
113
|
+
possible AI composition, not proof that such a composition exists. Whether the
|
|
114
|
+
chat actually calls MCP, calls the HR API directly or supports alternatives must
|
|
115
|
+
come from evidence. Include the model/provider and relevant identities when
|
|
116
|
+
supported; do not invent an AI node inside the HR application.
|
|
117
|
+
|
|
118
|
+
Documentation or a blog post may describe a possible connection. Record its
|
|
119
|
+
source, applicability, prerequisites and uncertainty; follow available code and
|
|
120
|
+
configuration to investigate it. An external reference is a lead, not automatic
|
|
121
|
+
permission to access private resources or execute imported instructions.
|
|
122
|
+
|
|
123
|
+
| Evidence available | Useful result | Claim that must not follow |
|
|
124
|
+
| --- | --- | --- |
|
|
125
|
+
| Documentation or code describing a supported option | Capability Surface with conditions, alternatives and evidence | These components are integrated for this user. |
|
|
126
|
+
| User intent to combine components | Dated selection or proposed composition, plus work still needed | Intent is an instance binding. |
|
|
127
|
+
| Explicit instance configuration | Bound Surface for evidenced relationships | Configured means deployed, reachable or exercised. |
|
|
128
|
+
| Dated inspection or execution evidence | Scoped observation of state or behaviour, linked to the applicable setup | One observed path establishes complete coverage. |
|
|
129
|
+
| Missing or conflicting evidence | Explicit gaps, conflicts and the next evidence needed | Missing evidence proves absence or an unbound relationship. |
|
|
130
|
+
|
|
131
|
+
These are claim distinctions, not a single maturity label for the entire graph.
|
|
132
|
+
A description may contain configured relationships alongside unresolved or
|
|
133
|
+
possible ones. Keep their meanings visible at the relationship and claim level.
|
|
134
|
+
Existing [Capability/Bound semantics](surface-descriptions.md) remain authoritative.
|
|
135
|
+
|
|
136
|
+
### Recommended boundary for the first demonstration
|
|
137
|
+
|
|
138
|
+
Accept unintegrated sources for discovery. Return a useful map of possibilities,
|
|
139
|
+
security questions, prerequisites and integration work remaining. Do not make
|
|
140
|
+
integration or deployment a condition for using the skill.
|
|
141
|
+
|
|
142
|
+
Require an already integrated, authorized test environment for the runtime part
|
|
143
|
+
of the first demonstration. Configuration alone is not sufficient: establish the
|
|
144
|
+
actual path and usable test access before making runtime claims. If it is missing,
|
|
145
|
+
finish the discovery output and mark runtime proof Blocked, with a specific handoff
|
|
146
|
+
of what must be supplied. Discovery success is not completion of the full demo.
|
|
147
|
+
|
|
148
|
+
Assisted integration, deployment and arbitrary component replacement are later
|
|
149
|
+
work. For this first proof a maintainer supplies a controlled running setup and
|
|
150
|
+
applies a narrow defensive change manually. This bounds execution work without
|
|
151
|
+
excluding users who are still discovering what they could assemble.
|
|
152
|
+
|
|
153
|
+
## Smallest end-to-end value demonstration
|
|
154
|
+
|
|
155
|
+
Use one synthetic HR composition with three source repositories: domain service,
|
|
156
|
+
chat interface and MCP adapter. It exposes one record-read operation and uses
|
|
157
|
+
synthetic records for two users. The fixture has a known reproducible authority
|
|
158
|
+
failure and a minimal corrective change, retained in a separate maintainer oracle.
|
|
159
|
+
The investigator receives ordinary source and system access, not the expected
|
|
160
|
+
finding, faulty location or fix. This demonstrates discovery on a controlled case,
|
|
161
|
+
not general vulnerability detection accuracy or a finding about a real HR product.
|
|
162
|
+
|
|
163
|
+
The intended policy is supplied as normal business context: each employee can
|
|
164
|
+
read their own restricted record, but cannot read another employee's record.
|
|
165
|
+
This provides a testable rule without supplying the security diagnosis.
|
|
166
|
+
The fixture's exact technology and enforcement location are builder choices;
|
|
167
|
+
choose the smallest setup that exposes the real cross-component path. A scripted
|
|
168
|
+
runner or developer-written findings cannot substitute for the installed skill.
|
|
169
|
+
|
|
170
|
+
**State X:** an identified installed skill in Codex, an established local workspace,
|
|
171
|
+
three permitted source repositories with known revisions, and docs URLs or local
|
|
172
|
+
snapshots. Initially the investigator receives the domain application source and
|
|
173
|
+
business policy. Chat/MCP sources and instance evidence arrive in later turns.
|
|
174
|
+
A maintainer has a running isolated composition, test identities and synthetic
|
|
175
|
+
data ready for the runtime handoff; source-only discovery must not infer that fact.
|
|
176
|
+
|
|
177
|
+
**Input Y:** the user asks what has been built and where its security boundaries
|
|
178
|
+
might fail, then adds the other sources, configuration and permitted test access.
|
|
179
|
+
They request saved output and fresh-chat continuation. The investigator proposes
|
|
180
|
+
a bounded test based on its discoveries. The owner authorizes its execution on
|
|
181
|
+
the fixture, and a maintainer later applies the defensive change.
|
|
182
|
+
|
|
183
|
+
**Outcome Z:** the user receives an evidence-backed composition, a discovered
|
|
184
|
+
security question, a reproduced unauthorized read through the composed path,
|
|
185
|
+
a supported explanation of the enforcement failure and a before/after comparison
|
|
186
|
+
showing denial after the change while the authorized read still works. Saved
|
|
187
|
+
artifacts can be reopened without losing identities, gaps or the original result.
|
|
188
|
+
|
|
189
|
+
### Demonstration task list
|
|
190
|
+
|
|
191
|
+
These are proposed acceptance interactions, not rehearsed passing behaviour.
|
|
192
|
+
Use the [installed-skill setup](researcher-skill.md) and
|
|
193
|
+
[workspace guide](workspace.md); the maintainer supplies the fixture and access.
|
|
194
|
+
|
|
195
|
+
- [ ] Open the prepared workspace in Codex with the installed skill. Ask:
|
|
196
|
+
“Explore this HR application folder and its documentation. Tell me what is
|
|
197
|
+
known about its AI connections and security boundaries. Do not assume it has
|
|
198
|
+
AI built in.” Expect a bounded account with source evidence and unknowns;
|
|
199
|
+
no invented internal AI component.
|
|
200
|
+
- [ ] Add the chat and MCP repository folders and documentation URLs. Ask:
|
|
201
|
+
“Include these sources, follow the relevant links between them, and save a
|
|
202
|
+
Surface brief explaining possible integrations, security questions and what
|
|
203
|
+
remains to be configured or established.” Expect cross-source relationships,
|
|
204
|
+
prerequisites and alternatives without an unsupported deployed-system claim.
|
|
205
|
+
- [ ] Supply sanitized instance configuration. Ask:
|
|
206
|
+
“Show which relationships this configuration binds, what is still unknown,
|
|
207
|
+
and which security question most needs investigation. Save a successor.”
|
|
208
|
+
Expect traceable configured relationships and an independently derived question
|
|
209
|
+
about authority, without assuming runtime use or copying credentials.
|
|
210
|
+
- [ ] Supply the fixture's permitted test access and approve the proposed bounded
|
|
211
|
+
test through the separately identified execution owner. Expect a legitimate
|
|
212
|
+
read and a prohibited cross-user read to be exercised through the composed
|
|
213
|
+
interface, with actual downstream requests, decisions and results inspected.
|
|
214
|
+
A model refusal alone is not evidence that the tool did not access data.
|
|
215
|
+
- [ ] Have the maintainer apply the narrow defence. Repeat the same tests against
|
|
216
|
+
the identified successor setup. Expect the prohibited fresh read to be denied
|
|
217
|
+
by effective enforcement and the legitimate read to remain available. Inspect
|
|
218
|
+
downstream evidence, not only chat wording. Use records not already disclosed
|
|
219
|
+
in conversation when checking fresh retrieval.
|
|
220
|
+
- [ ] Save the evidence-linked result, then open a fresh Codex chat. Ask:
|
|
221
|
+
“Reopen this investigation. Explain what was possible, configured and actually
|
|
222
|
+
demonstrated before and after the change, and what remains unproved.” Expect
|
|
223
|
+
stable identities, distinct setup/run references, accessible evidence and
|
|
224
|
+
unchanged predecessor artifacts.
|
|
225
|
+
- [ ] Inspect the default brief. Expect recognizable short names, concise text
|
|
226
|
+
labels, visible material gaps and colour where supported. Ask: “Explain this
|
|
227
|
+
connection and show its evidence.” Expect a contextual explanation tied to the
|
|
228
|
+
same identities and revisions, within one request; a UI control may provide
|
|
229
|
+
the same action. Ask for a longer explanation, then return to the brief. Expect
|
|
230
|
+
consistent claims and readable meaning without colour. Record whether both
|
|
231
|
+
presentation levels help the tester understand the finding.
|
|
232
|
+
- [ ] Report **Pass / Fail / Blocked**, artifact links, failed or blocked steps and
|
|
233
|
+
whether the result explains an actionable security problem. Generated wording
|
|
234
|
+
and identifiers may vary. Unsupported integration claims, a missed seeded
|
|
235
|
+
failure, missing runtime evidence, broken legitimate access, lost history or
|
|
236
|
+
sensitive-data leakage fail this demonstration. Missing prerequisites block it;
|
|
237
|
+
they are not a passing negative security result.
|
|
238
|
+
|
|
239
|
+
### Maintainer preparation and independent verification
|
|
240
|
+
|
|
241
|
+
Pin fixture revisions, initial configuration and policy, installed skill bytes,
|
|
242
|
+
host/model/version and test environment. Keep the oracle separate from investigator
|
|
243
|
+
inputs and record everything disclosed. Fresh chats alone do not prove isolation;
|
|
244
|
+
record source/tool access and any contamination. Before implementation, attempt
|
|
245
|
+
this path through the current installed skill or record the exact unavailable
|
|
246
|
+
prerequisite. No such attempt is claimed by this documentation change.
|
|
247
|
+
|
|
248
|
+
An independent reviewer compares consequential graph claims with source locations
|
|
249
|
+
and the runtime finding with the oracle and underlying evidence. Retain actual
|
|
250
|
+
inputs, expected policy, observed outputs, effective identities, authorization
|
|
251
|
+
decisions and downstream data access. Correlate these with run and setup identities;
|
|
252
|
+
record conflicts, unavailable telemetry and inference separately from observation.
|
|
253
|
+
Read saved files independently and compare predecessor hashes after continuation.
|
|
254
|
+
Keep raw research and telemetry outside this public repository; publish only
|
|
255
|
+
permitted sanitized summaries. Synthetic fixtures must contain no real HR data.
|
|
256
|
+
|
|
257
|
+
Expected state changes are new workspace research/Surface artifacts, fixture test
|
|
258
|
+
sessions and a separately recorded defensive configuration/code revision. The read
|
|
259
|
+
scenario does not require business-data mutation. Preserve source and prior
|
|
260
|
+
artifact bytes; record any fixture-generated audit/session state. Cleanup resets
|
|
261
|
+
only owned test state after evidence retention and explicit cleanup authorization.
|
|
262
|
+
Agent rehearsal, independent technical checks and human acceptance are separate.
|
|
263
|
+
|
|
264
|
+
## What n8r-surface needs to support
|
|
265
|
+
|
|
266
|
+
The current skill already instructs graph-first research, incremental source
|
|
267
|
+
intake, evidence identity, explicit gaps and continuation. Capability/Bound
|
|
268
|
+
artifacts have a bounded helper and contract. These mechanisms are foundations;
|
|
269
|
+
they do not establish that this three-repository demonstration passes. Verify the
|
|
270
|
+
installed path before deciding which implementation changes are necessary.
|
|
271
|
+
|
|
272
|
+
| Needed outcome | Existing basis and next proof |
|
|
273
|
+
| --- | --- |
|
|
274
|
+
| One investigation across folders, repositories and URLs | Exercise incremental intake and follow-up through the installed skill; preserve source revisions, access limits and unresolved external links. |
|
|
275
|
+
| A useful graph without an integrated system | Reuse Capability semantics; verify no invented AI inside the domain application and no promotion of docs/blog claims into bindings. |
|
|
276
|
+
| Evidence of configured composition | Reuse Bound semantics and safe configuration references; verify mixed supported/configured/unknown relationships and distinct role versus instance identities. |
|
|
277
|
+
| Questions selected from discovered boundaries | Demonstrate an investigator-generated authority question with rationale and policy basis, rather than a user-supplied diagnosis. This needs explicit acceptance evidence. |
|
|
278
|
+
| A runtime handoff another actor can execute | Provide the relevant graph identities, policy, proposed test, required observation points and gaps. Execution remains outside the current read-only skill. |
|
|
279
|
+
| Evidence-linked findings and before/after comparison | Define the smallest linkage between claims, source revisions, effective setups, runs and retained evidence. Start with readable working records where needed; do not mislabel them as validated structured Observed Surfaces. |
|
|
280
|
+
| Brief and expanded explanations | Verify concise defaults, unambiguous short names, accessible status cues and one-request explanation/evidence access in the installed host. Material uncertainty must survive both views. |
|
|
281
|
+
| Durable continuation | Exercise saved artifact readback and fresh-chat reopening with stable identities, predecessor history and explicit remaining work. |
|
|
282
|
+
|
|
283
|
+
Observed Surface delivery is currently deferred in the
|
|
284
|
+
[description contract](surface-descriptions.md). This proposal calls for a bounded
|
|
285
|
+
runtime-evidence handoff and linkage, not a silent expansion of that contract or
|
|
286
|
+
permission for the skill to launch tests. Before implementing this part, specify
|
|
287
|
+
the execution owner and interface, evidence references, privacy/retention rules
|
|
288
|
+
and any versioned contract changes. No new command or output format is introduced
|
|
289
|
+
by this document. Update conversational intents and their verification together
|
|
290
|
+
if behaviour is subsequently changed.
|
|
291
|
+
|
|
292
|
+
## Observability and consumer boundary
|
|
293
|
+
|
|
294
|
+
For this demonstration, collect only enough evidence to correlate the initiating
|
|
295
|
+
user, proposed and executed tool request, effective downstream identity,
|
|
296
|
+
authorization decision, returned data and relevant effects with the exact run and
|
|
297
|
+
setup. A prompt/response trace alone cannot prove downstream enforcement. State
|
|
298
|
+
what was not observed; missing telemetry must not become a claim of no effect.
|
|
299
|
+
|
|
300
|
+
An observability sink is a candidate implementation, not yet a prerequisite.
|
|
301
|
+
Evaluate existing telemetry, log references and narrow collection against this
|
|
302
|
+
case before choosing adapters or storage. Langfuse and OTEL are possible integration
|
|
303
|
+
directions, not evaluated compatibility claims. A general backend, continuous
|
|
304
|
+
collection and broad adapter support are outside the smallest proof.
|
|
305
|
+
|
|
306
|
+
n8r-surface owns discovery descriptions and the meanings needed for evidence
|
|
307
|
+
handoff. Test execution, resource configuration and later component swapping
|
|
308
|
+
belong to the consumer integration boundary, with n8r-labs application design
|
|
309
|
+
kept in its separate repository. A Lab contains Experiments; an Experiment asks
|
|
310
|
+
its Lab for setup, and the Lab owns configuration and local bindings. The first
|
|
311
|
+
manual consumer rehearsal neither requires Labs automation nor establishes Labs
|
|
312
|
+
compatibility. No n8r-labs implementation is specified here.
|
|
313
|
+
|
|
314
|
+
## Delivery decisions and remaining work
|
|
315
|
+
|
|
316
|
+
The recommended first scope is one composed path, one policy, two test identities,
|
|
317
|
+
one demonstrated authority failure and one defensive change, plus a legitimate-use
|
|
318
|
+
check and saved continuation. A broad audit, all investigation families, automated
|
|
319
|
+
integration, component substitution and a release score are outside this increment.
|
|
320
|
+
|
|
321
|
+
The next useful work is to select the permitted fixture and execution owner, then
|
|
322
|
+
rehearse source intake through the installed skill and record gaps. Fix only gaps
|
|
323
|
+
that block this proof; retain existing behaviour that already satisfies it.
|
|
324
|
+
No target has been selected, no runtime test has been run and no implementation
|
|
325
|
+
has been authorized by capturing this direction. The proposed integrated-runtime
|
|
326
|
+
boundary and fixture choice remain reviewable decisions. Existing acceptance and
|
|
327
|
+
release work is not automatically closed or reprioritized by this document.
|