@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,234 @@
|
|
|
1
|
+
# Standalone installed-skill Surface artifacts
|
|
2
|
+
|
|
3
|
+
Issue [#51](https://github.com/injectionator/n8r-surface/issues/51) adds a standalone
|
|
4
|
+
artifact helper, now bundled in candidate skill 0.1.11. The host researches sources and prepares
|
|
5
|
+
JSON; the bundled helper checks it, renders research HTML and a brief, and saves
|
|
6
|
+
a new revision directory. It never invokes the `n8r-surface` CLI, reads source
|
|
7
|
+
configuration, connects to a model or makes network requests.
|
|
8
|
+
|
|
9
|
+
## Task and implementation boundary
|
|
10
|
+
|
|
11
|
+
**Given:** the installed candidate, Node.js 22/24/26, an authorized workspace and
|
|
12
|
+
permitted source evidence. **When:** the user requests a saved Capability or Bound
|
|
13
|
+
Surface. **Then:** the host provides openable brief, research HTML and 0.3 JSON,
|
|
14
|
+
with pinned dependency artifacts and a hash manifest. A fresh chat can read the
|
|
15
|
+
saved directory and save a checked successor while preserving the predecessor.
|
|
16
|
+
|
|
17
|
+
The current [relationship contract](surface-relationships.md) supplies validation,
|
|
18
|
+
evidence references and revision rules. The helper reuses that implementation;
|
|
19
|
+
JSON decoding retains the existing strict codec. A development-only esbuild step
|
|
20
|
+
bundles the helper and its YAML parser dependency into one offline Node module.
|
|
21
|
+
The parser's licence is retained alongside it. There is no runtime dependency
|
|
22
|
+
installation. The library reader accepts both presentation generations; the CLI persistence output remains unchanged.
|
|
23
|
+
|
|
24
|
+
`npm run build:skill` regenerates the retained bundle; `npm run check:skill`
|
|
25
|
+
checks exact reproducibility and runs in `npm test`. The helper entrypoint is
|
|
26
|
+
`plugins/n8r-surface/skills/research/scripts/artifacts.mjs`; its host-facing
|
|
27
|
+
[procedure](../../plugins/n8r-surface/skills/research/references/artifacts.md)
|
|
28
|
+
and synthetic examples ship together. Bundled examples illustrate shapes, not
|
|
29
|
+
findings. No helper is allowed to invent research or infer instance bindings.
|
|
30
|
+
|
|
31
|
+
Save creates a new directory exclusively. Existing directories and symlink
|
|
32
|
+
ancestry are refused. Parent directories must already exist. Files use private
|
|
33
|
+
permissions. An I/O failure can leave an incomplete directory for inspection;
|
|
34
|
+
it is never reported as success or overwritten on retry. Stable directory topology
|
|
35
|
+
is required during synchronous operations; this is not a hostile-filesystem sandbox.
|
|
36
|
+
The manifest detects accidental changes, not an attacker able to rewrite all
|
|
37
|
+
files and hashes. No source file, service, credential or predecessor is modified.
|
|
38
|
+
|
|
39
|
+
Privacy starts before source intake: use permitted sanitized projections and
|
|
40
|
+
never print or stage raw settings. The helper rejects recognizable URLs, addresses,
|
|
41
|
+
credential assignments and private paths, with fixed diagnostics that omit input
|
|
42
|
+
values. This is defense in depth, not a guarantee that arbitrary names or opaque
|
|
43
|
+
secrets can be recognized. Human/source review remains necessary. Safe configuration
|
|
44
|
+
owner/key/location and product/role identity remain useful without setting values.
|
|
45
|
+
|
|
46
|
+
## Baseline evidence
|
|
47
|
+
|
|
48
|
+
On 8 November 2026, installed skill 0.1.9 was invoked through Codex CLI 0.166.0
|
|
49
|
+
app-server with a synthetic assistant source and this request:
|
|
50
|
+
|
|
51
|
+
> Use product.md to create a Capability Surface. Save the brief, research HTML and
|
|
52
|
+
> checked structured Surface in this workspace. The skill must work standalone
|
|
53
|
+
> without invoking n8r-surface CLI.
|
|
54
|
+
|
|
55
|
+
It produced provisional brief/HTML/JSON/check files, explicitly reporting that
|
|
56
|
+
contract validation was unavailable because no validator was bundled. This is
|
|
57
|
+
an actual installed baseline, not an inferred test failure. Raw receipts and
|
|
58
|
+
source/output bytes are retained privately in the selected vault's run folder.
|
|
59
|
+
|
|
60
|
+
## Candidate rehearsal and checks
|
|
61
|
+
|
|
62
|
+
A local marketplace installed candidate 0.1.10 in an isolated test home. Codex
|
|
63
|
+
CLI 0.166.0 app-server used fresh ephemeral sessions, the existing ChatGPT sign-in
|
|
64
|
+
model `gpt-6-astra` and Node 26.13.0. The first candidate run reached the existing workspace runner's
|
|
65
|
+
120-second deadline while correcting a draft; no success was claimed. The
|
|
66
|
+
follow-up used the same Host harness with a private 600-second turn deadline.
|
|
67
|
+
This is agent rehearsal, not a new public acceptance-runner mode or desktop proof.
|
|
68
|
+
|
|
69
|
+
The installed host then produced Capability, Bound and fresh-chat Bound-successor
|
|
70
|
+
artifacts from supplied synthetic sources. It used the bundled helper without the
|
|
71
|
+
product CLI. Independent readback checked saved bytes, source hashes, possible
|
|
72
|
+
versus configured states, concrete targets, pinned Capability, stable identities,
|
|
73
|
+
parent digests and retained human deferral. Prior files remained byte-identical.
|
|
74
|
+
Synthetic sensitive URL/address/username/password sentinels were confined to the
|
|
75
|
+
owned raw source fixture; scanning generated files and retained receipts found no
|
|
76
|
+
copies. The host selected only permitted fields before retaining configuration.
|
|
77
|
+
|
|
78
|
+
The synthetic fixture supplements the human task below with `instance.json`
|
|
79
|
+
containing `instance`, `revision`, `modelService`, `configured` and sensitive
|
|
80
|
+
sentinel fields. The interaction explicitly permits only the first four fields.
|
|
81
|
+
The raw fixture is test input, not a retained production evidence store. The
|
|
82
|
+
second source changes the model service identity; no researcher findings were
|
|
83
|
+
prewritten by the developing agent.
|
|
84
|
+
|
|
85
|
+
Focused checks cover standalone execution outside the checkout, Capability/Bound
|
|
86
|
+
readback, missing references, orphan revisions, collisions, symlinks, edited HTML,
|
|
87
|
+
privacy refusals, lost decisions, rewritten pinned dependencies, duplicate JSON
|
|
88
|
+
members and value-free errors. Three independent review findings gained failing
|
|
89
|
+
then passing regressions. A final error-path regression prevents the exported
|
|
90
|
+
digest helper from echoing unsafe property names. All opaque extensions are
|
|
91
|
+
refused in this bounded host; the general library's earlier contracts remain intact.
|
|
92
|
+
|
|
93
|
+
The final installed candidate also saved a further fresh-chat successor selecting
|
|
94
|
+
Model Service C. Independent checks confirmed source hashes, both parent digests,
|
|
95
|
+
unchanged prior artifacts and the retained decision. All 20 installed files matched
|
|
96
|
+
the candidate source. Final instruction digest:
|
|
97
|
+
`sha256:a3480402aef42c93cb4d7e77fbf157b33dab6eaedb6b97f8ef1db1022cfaa58b`.
|
|
98
|
+
Standalone helper SHA-256:
|
|
99
|
+
`aec2dc355b5d33661ff7c3250a1a3edb3e31bf4ea22e614816c9593da37d3019`.
|
|
100
|
+
The final sentinel scan covered 72 generated/retained files, excluding the owned
|
|
101
|
+
raw source fixture and the initial isolated installation cache, with zero matches.
|
|
102
|
+
|
|
103
|
+
Private run records retain installation/source file digests, interaction receipts,
|
|
104
|
+
independent readback and preservation inventories. The final PR identifies the
|
|
105
|
+
exact source revision and final test counts. Neither the first timed-out attempt
|
|
106
|
+
nor fixture/package checks are reported as human acceptance. The broader
|
|
107
|
+
unrelated-product journey and human acceptance remain #52.
|
|
108
|
+
|
|
109
|
+
## Human verification task list
|
|
110
|
+
|
|
111
|
+
Maintainer preparation: identify the installed 0.1.11 candidate and file digests,
|
|
112
|
+
record Codex/model/Node versions, and supply an empty writable workspace containing
|
|
113
|
+
`product.md` with this synthetic source. Use the
|
|
114
|
+
[isolated installation procedure](workspace-installation.md) with the candidate's
|
|
115
|
+
commit and version; it does not replace the normal desktop installation. A tester
|
|
116
|
+
needs the identified skill available in their selected host.
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
# Synthetic assistant
|
|
120
|
+
Revision: fixture-1
|
|
121
|
+
The assistant can send prompts to an OpenAI-compatible model API using HTTPS.
|
|
122
|
+
MODEL_ENDPOINT is documented in config/example.env.
|
|
123
|
+
No instance configuration is supplied.
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- [ ] Open the prepared workspace in Codex, invoke the installed Researcher, and
|
|
127
|
+
ask: “Use product.md to create a Capability Surface. Save the brief, research
|
|
128
|
+
HTML and checked structured Surface in capability-001.” Open all returned
|
|
129
|
+
links. Expect the supported model-API connection, explicit gaps and no selected
|
|
130
|
+
instance target. There must be actual saved files and successful readback.
|
|
131
|
+
- [ ] Supply a permitted summary: “For synthetic instance demo, configuration
|
|
132
|
+
revision 1 selects Model Service A for the model API. This establishes only
|
|
133
|
+
configuration, not runtime use.” Ask: “Save a Bound Surface in bound-001 using
|
|
134
|
+
this summary and the saved Capability. Record my decision to keep runtime
|
|
135
|
+
verification deferred.” Expect the same role relationship, a separate concrete
|
|
136
|
+
target, source evidence for configuration, and a separate human decision.
|
|
137
|
+
- [ ] Start a fresh chat with the same workspace. Supply: “Configuration revision
|
|
138
|
+
2 changes that model API target to Model Service B.” Ask: “Reopen bound-001
|
|
139
|
+
and save a successor in bound-002 reflecting this change.” Open both revisions.
|
|
140
|
+
Expect stable role/component identities, updated binding, preserved decision,
|
|
141
|
+
exact predecessor reference and unchanged prior files.
|
|
142
|
+
- [ ] Report **Pass / Fail / Blocked**, output links and the failing step if any.
|
|
143
|
+
IDs, dates and wording may vary. Broken links, unsupported bindings, leaked
|
|
144
|
+
values, lost decisions/history or success after a failed check are failures.
|
|
145
|
+
|
|
146
|
+
Technical evidence checks belong to the maintainer: read each directory with the
|
|
147
|
+
installed helper, verify source digests and consequential claims independently,
|
|
148
|
+
compare predecessor/source hashes and scan all outputs and receipts for synthetic
|
|
149
|
+
sensitive sentinels. Exit 0 plus `checked`/`saved-and-read-back` is required;
|
|
150
|
+
exit 1 is failure. Retain owned trial outputs for review. Cleanup is a separate
|
|
151
|
+
user decision and must never delete borrowed sources.
|
|
152
|
+
|
|
153
|
+
This bounded agent rehearsal is distinct from human acceptance. Issue #52 retains
|
|
154
|
+
the broader two-product journey, human corrections, usefulness and host acceptance.
|
|
155
|
+
|
|
156
|
+
## Human-readable presentation (candidate 0.1.11)
|
|
157
|
+
|
|
158
|
+
The 0.1.10 rehearsal exposed a usefulness failure: HTML listed contract fields,
|
|
159
|
+
and the brief directed readers elsewhere for evidence. Candidate 0.1.11 renders
|
|
160
|
+
a shared narrative in both formats: current picture, what changed, why it
|
|
161
|
+
matters, evidence locators, human decisions and remaining unknowns. Impact is
|
|
162
|
+
limited to the connection's documented purpose and configured selection; it does
|
|
163
|
+
not invent business outcomes or runtime success. Conflicting claims remain visible.
|
|
164
|
+
|
|
165
|
+
A previous target is compared only when the exact parent research record is in
|
|
166
|
+
the bundle. Otherwise the report says that the comparison is unavailable. Full
|
|
167
|
+
records, source coverage and hashes remain accessible in expandable HTML details.
|
|
168
|
+
The report uses local styles, no scripts, remote fonts or network resources.
|
|
169
|
+
|
|
170
|
+
Saved bundles now use manifest version 2 and HTML presentation 1. Research and
|
|
171
|
+
Surface contracts and canonical digests do not change. The reader still accepts
|
|
172
|
+
unchanged manifest-1 bundles and their original brief/HTML. Both presentations
|
|
173
|
+
reject visible edits; updating a manifest hash alone cannot legitimize prose that
|
|
174
|
+
disagrees with the embedded data. New HTML also checks its embedded Surface and
|
|
175
|
+
dependency context against the accompanying files. Older 0.1.10 helpers cannot
|
|
176
|
+
read the new presentation; install 0.1.11 before continuing it.
|
|
177
|
+
|
|
178
|
+
### Short human check
|
|
179
|
+
|
|
180
|
+
Prerequisite: the identified 0.1.11 candidate and an existing checked Bound
|
|
181
|
+
successor and its predecessor, produced by the task list above. Keep the original
|
|
182
|
+
files. In the same workspace, ask the Researcher:
|
|
183
|
+
|
|
184
|
+
> Read bound-002 and its predecessor bound-001 using the bundled helper. Save the
|
|
185
|
+
> same checked bundle with the new readable presentation in bound-002-readable.
|
|
186
|
+
> Preserve all research and Surface data, decisions and original files. This is
|
|
187
|
+
> a presentation copy, not another research revision. Show the HTML and brief.
|
|
188
|
+
|
|
189
|
+
- [ ] Open the returned HTML. The configured target should be the first useful
|
|
190
|
+
statement. “What changed” should name the previous and current targets when
|
|
191
|
+
the exact parent research is retained.
|
|
192
|
+
- [ ] Read “Why it matters” and “Evidence”. Expect the documented connection
|
|
193
|
+
purpose/integration, configuration-versus-runtime limit and source locators.
|
|
194
|
+
No new source findings or business/security assurances should appear.
|
|
195
|
+
- [ ] Read decisions and unknowns, then expand technical details. The deferred
|
|
196
|
+
decision, unresolved questions and original checked data must remain available.
|
|
197
|
+
- [ ] Open the brief. Expect the same substantive explanation without needing to
|
|
198
|
+
decode identifiers or open the JSON to discover the conclusion.
|
|
199
|
+
- [ ] Report **Pass / Fail / Blocked**, the two output links and any unclear
|
|
200
|
+
wording. Visual usefulness requires human review, separate from data checks.
|
|
201
|
+
|
|
202
|
+
Maintainer evidence: helper save/read must exit 0; compare canonical research,
|
|
203
|
+
Surface and dependency data and byte hashes of all original files. Only HTML,
|
|
204
|
+
brief and their new manifest may differ in the presentation copy. Retain the
|
|
205
|
+
copy for review; no cleanup or registry publication is part of this task.
|
|
206
|
+
|
|
207
|
+
### Presentation evidence and limits
|
|
208
|
+
|
|
209
|
+
The copied standalone 0.1.11 helper re-rendered the previously generated Bound
|
|
210
|
+
successor without new research. Save and independent read exited 0. Research,
|
|
211
|
+
Surface and dependency data compared equal; Surface/dependency JSON bytes were
|
|
212
|
+
identical, and all 29 files present before the presentation copy were unchanged.
|
|
213
|
+
The new brief identifies the old/current targets, source locators and retained
|
|
214
|
+
deferral. Raw receipts remain private. This is helper rehearsal, not a fresh
|
|
215
|
+
installed-skill conversation or human usefulness acceptance. Browser policy
|
|
216
|
+
blocked the local-file preview, so no screenshot or visual acceptance is claimed.
|
|
217
|
+
|
|
218
|
+
Six presentation regressions cover data preservation, legacy reopening, visible
|
|
219
|
+
edits, manifest downgrade, equal-label target identities and conditional/exclusive
|
|
220
|
+
Capabilities. Independent review found the latter three issues before fixes;
|
|
221
|
+
regressions demonstrated each failure, then passed. The complete suite has 201
|
|
222
|
+
checks. Package preparation exposed stale version/digest expectations; those were
|
|
223
|
+
corrected. Concurrent cross-runtime tests collided on a shared temporary build
|
|
224
|
+
file; sequential rerunning passed. Broad usefulness remains the two-product
|
|
225
|
+
skill journey in #52, followed by CLI integration and separate Labs work.
|
|
226
|
+
|
|
227
|
+
## Two-product usefulness result
|
|
228
|
+
|
|
229
|
+
The [installed-skill usefulness check](skill-usefulness-verification.md) exercises
|
|
230
|
+
Capability, Bound and fresh-session revision on two pinned public source packs.
|
|
231
|
+
Both passed independent readback and preservation checks on 0.1.11 without skill
|
|
232
|
+
code changes. The record includes the initial test-instruction blocker and the
|
|
233
|
+
corrected retry. The user accepted this bounded skill verification on 8 November 2026; acceptance
|
|
234
|
+
is distinct from the agent rehearsal and does not imply an additional human run.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Installed Surface skill: two-product usefulness check
|
|
2
|
+
|
|
3
|
+
Related to [#52](https://github.com/injectionator/n8r-surface/issues/52).
|
|
4
|
+
This checks the standalone Surface skill before CLI integration. The products
|
|
5
|
+
are research subjects, not new integrations or deployment targets.
|
|
6
|
+
|
|
7
|
+
## Run identity and scope
|
|
8
|
+
|
|
9
|
+
- Date: 8 November 2026.
|
|
10
|
+
- Skill: 0.1.11, source commit `8e4cb3ade3c9e5ca59ab0a37838ccaf874b7fc42`
|
|
11
|
+
from PR #54. An isolated Codex marketplace installation matched every tracked
|
|
12
|
+
plugin file to that commit before research.
|
|
13
|
+
- Host: Codex CLI 0.166.0 app-server, ChatGPT sign-in, configured model
|
|
14
|
+
`gpt-6-astra`, Node 26.13.0. Fresh ephemeral sessions had no prior turns;
|
|
15
|
+
previous-thread and receipt access were independently denied.
|
|
16
|
+
- Source access: pinned public file copies, read-only research; no source
|
|
17
|
+
execution, additional fetches or deployment inspection. Each product was
|
|
18
|
+
bounded to model API, storage and identity connections.
|
|
19
|
+
- Configuration and reviewer inputs were fictional test fixtures. They do not
|
|
20
|
+
describe a real deployment or constitute human acceptance.
|
|
21
|
+
|
|
22
|
+
| Product | Pinned source | Files supplied |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| LibreChat | [f4154b6](https://github.com/danny-avila/LibreChat/tree/f4154b649efa37e1345ccc517a4d8d1ed2178c82) | README, database connection, OpenID strategy |
|
|
25
|
+
| Open WebUI | [b7a005e](https://github.com/open-webui/open-webui/tree/b7a005e5a5c0c0d869f2aebf4b8f051c5fb37245) | README, SQL database layer, OAuth implementation, model API router |
|
|
26
|
+
|
|
27
|
+
## Interaction exercised
|
|
28
|
+
|
|
29
|
+
1. Ask the installed Researcher which model API, storage and identity connections
|
|
30
|
+
a reviewer should examine; save a checked Capability with source hashes and
|
|
31
|
+
bounded evidence. Do not infer selected targets from supported options.
|
|
32
|
+
2. Supply a fictional configuration declaring Model Service A, Database Service A
|
|
33
|
+
and Identity Service A. Permit only six named nonsecret fields to be projected
|
|
34
|
+
from a fixture containing synthetic sensitive sentinels. Supply a second
|
|
35
|
+
same-revision handover note declaring Identity Service B.
|
|
36
|
+
3. Give a scripted Test reviewer preference for Identity Service A in a future
|
|
37
|
+
revision, explicitly leaving the current contradiction unresolved and runtime
|
|
38
|
+
verification deferred. Save a Bound Surface; retain both source claims and
|
|
39
|
+
keep the reviewer decision separate from evidence.
|
|
40
|
+
4. Start a fresh session, reopen the saved Bound artifacts and supply a later
|
|
41
|
+
configuration selecting Model Service B. Save a successor with stable
|
|
42
|
+
identities, exact parents, unchanged prior files, retained decision and
|
|
43
|
+
unresolved identity conflict. Independently read all saved directories.
|
|
44
|
+
|
|
45
|
+
Shell/file tools and Node are permitted. Only the `n8r-surface` product executable
|
|
46
|
+
is prohibited. The initial fresh-session prompt mistakenly said “no CLI use”;
|
|
47
|
+
both sessions declined file access, accurately reported the blocker and created
|
|
48
|
+
no successor. Those receipts are retained. The retry clarified this instruction
|
|
49
|
+
in new sessions without changing skill code or overwriting previous artifacts.
|
|
50
|
+
|
|
51
|
+
For a repeat of the corrected revision step, start a fresh Researcher chat with
|
|
52
|
+
that trial's workspace selected and send:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Reopen bound-001 and read change.md. Shell/file tools and Node.js are allowed,
|
|
56
|
+
including the installed scripts/artifacts.mjs helper. Do not invoke the
|
|
57
|
+
n8r-surface product executable. Save a checked successor in bound-002 selecting
|
|
58
|
+
Model Service B. Preserve identities, decisions, unresolved identity evidence,
|
|
59
|
+
exact parent references and all previous files. Retain the previous research
|
|
60
|
+
as a dependency. Use the existing safe projection; do not expose private fields
|
|
61
|
+
from instance.json. Saving is authorized. Read back both revisions, compare
|
|
62
|
+
prior-file hashes, return output links and stop.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Useful findings sampled against sources
|
|
66
|
+
|
|
67
|
+
| Product | Finding | Independent source check |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| LibreChat | Model integrations are documented possibilities, not an observed request path. | README lines 74–99 |
|
|
70
|
+
| LibreChat | Storage uses a Mongoose/MongoDB connection; stored AI data and controls remain unverified. | `api/db/connect.js` lines 1–27 and 43–74 |
|
|
71
|
+
| LibreChat | OIDC discovery and login depend on configuration, including PKCE/nonce settings. | `api/strategies/openidStrategy.js` lines 954–1006 |
|
|
72
|
+
| Open WebUI | Chat/Responses routing sends a POST to the selected connection. | `backend/open_webui/routers/openai.py` lines 1506–1587 |
|
|
73
|
+
| Open WebUI | SQLAlchemy has SQLite/PostgreSQL paths and rejects SQLCipher in async URL conversion. | `backend/open_webui/internal/db.py` lines 230–250, 264–285 and 450–468 |
|
|
74
|
+
| Open WebUI | OAuth identity can affect local authority; effective settings remain unknown. | `backend/open_webui/utils/oauth.py` lines 168–190 and 1618–1650 |
|
|
75
|
+
|
|
76
|
+
These are bounded agent checks of cited claims, not exhaustive source review,
|
|
77
|
+
runtime proof or security certification. The developing agent did not author
|
|
78
|
+
the Researcher's findings or saved bundles.
|
|
79
|
+
|
|
80
|
+
## Observed result
|
|
81
|
+
|
|
82
|
+
Both products passed the bounded agent rehearsal on the unchanged 0.1.11 skill.
|
|
83
|
+
No product-specific code or new skill implementation was needed.
|
|
84
|
+
|
|
85
|
+
| Independent check | LibreChat | Open WebUI |
|
|
86
|
+
| --- | --- | --- |
|
|
87
|
+
| Capability, Bound and successor helper readback | Exit 0, checked | Exit 0, checked |
|
|
88
|
+
| Model target revision | A to B | A to B |
|
|
89
|
+
| Database target | A retained | A retained |
|
|
90
|
+
| Conflicting identity declarations | A and B retained | A and B retained |
|
|
91
|
+
| Scripted reviewer decision | Exactly preserved | Exactly preserved |
|
|
92
|
+
| Research/Surface parent references and Capability pin | Exact match | Exact match |
|
|
93
|
+
| Files present before successful revision | 27 unchanged | 24 unchanged |
|
|
94
|
+
| Source hash comparisons, including repeated dependency references | 19 matched | 28 matched |
|
|
95
|
+
| Files scanned for synthetic sensitive sentinels | 68, no matches | 62, no matches |
|
|
96
|
+
|
|
97
|
+
The owned raw sentinel input was excluded from the leak scan; artifacts,
|
|
98
|
+
projections and execution receipts were included. This is evidence about those
|
|
99
|
+
specific sentinels, not complete secret detection. All supplied public source
|
|
100
|
+
copies remained byte-identical. Successor checks independently compared node and
|
|
101
|
+
relationship identities, role endpoints, decisions, pins and parent digests.
|
|
102
|
+
|
|
103
|
+
The initial harness recorded completed *turns* before checking whether outputs
|
|
104
|
+
existed. That was not artifact success: independent readback found both missing
|
|
105
|
+
successors. The retry requires successful helper readback before recording success.
|
|
106
|
+
The blocked attempts and corrected requests remain in the private evidence.
|
|
107
|
+
|
|
108
|
+
Private evidence retains the installation inventory, source identities/hashes,
|
|
109
|
+
requests, execution receipts, before/after inventories, independent helper output
|
|
110
|
+
and per-product verification reports. Saved briefs, HTML and JSON were read back;
|
|
111
|
+
no screenshot or desktop visual acceptance is claimed.
|
|
112
|
+
|
|
113
|
+
## Human acceptance and completion boundary
|
|
114
|
+
|
|
115
|
+
**Agent rehearsal: Pass. User acceptance: accepted on 8 November 2026.** The user accepted the skill verification and authorized PRs #54 and #58 to be
|
|
116
|
+
made ready to merge. The test-reviewer correction was scripted input, not a PM
|
|
117
|
+
decision about a deployment or a separately observed human rerun. There is no remaining
|
|
118
|
+
skill-code blocker identified by this bounded check. Broader research coverage,
|
|
119
|
+
runtime use, CLI integration and Labs compatibility have not been established.
|
|
120
|
+
No further presentation polish or additional product trials are required by this
|
|
121
|
+
increment. Review and merge of PR #54 remain separate decisions.
|
|
122
|
+
|
|
123
|
+
The accepted evidence can be reviewed using the two final `bound-002/brief.md` links supplied with
|
|
124
|
+
this run's handoff; no installation or new research is necessary:
|
|
125
|
+
|
|
126
|
+
- [ ] Read each brief. It must explain Model Service B, the retained database
|
|
127
|
+
target, the unresolved identity disagreement, evidence and unknowns.
|
|
128
|
+
- [ ] Open its research HTML or JSON if a claim needs inspection. The reviewer
|
|
129
|
+
preference must remain separate from source evidence and actual runtime use.
|
|
130
|
+
- [ ] Report **Pass / Fail / Blocked** for usefulness. For Fail, name the unclear
|
|
131
|
+
or unsupported claim; for Blocked, name the inaccessible file or missing context.
|
|
132
|
+
|
|
133
|
+
User acceptance completes the usefulness decision for this scope. Readiness
|
|
134
|
+
authorization does not authorize merge, publication or deployment. Keep #52 WIP while its
|
|
135
|
+
implementing PRs await review/merge, following the repository's issue policy.
|