@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,262 @@
|
|
|
1
|
+
# First-use security overview, candidate 0.1.14
|
|
2
|
+
|
|
3
|
+
Related to [#72](https://github.com/injectionator/n8r-surface/issues/72).
|
|
4
|
+
This skill/plugin increment follows merged 0.1.13. It does not change the npm
|
|
5
|
+
package version or authorize publication. Human acceptance remains pending.
|
|
6
|
+
|
|
7
|
+
## Changed behavior
|
|
8
|
+
|
|
9
|
+
A broad first source investigation should produce a brief that explains the
|
|
10
|
+
application, its major areas and external integrations, consequential findings,
|
|
11
|
+
coverage gaps and the next useful decision. The skill asks for evidence-backed
|
|
12
|
+
findings and distinguishes supported options from intended choices, configuration
|
|
13
|
+
and observed behavior. Narrow questions remain narrow.
|
|
14
|
+
|
|
15
|
+
The HTML starts with a connected graph: each identified node appears once, with
|
|
16
|
+
its directed relationships. Explicit, checked presentation hints group nodes
|
|
17
|
+
inside the application, externally or as unclassified. Grouping records placement with its evidence basis (including user intent),
|
|
18
|
+
not proof of deployed trust boundaries. Full edge
|
|
19
|
+
conditions, exceptions, observations, evidence and investigation history remain
|
|
20
|
+
below the overview. The brief links to that detail instead of repeating every
|
|
21
|
+
relationship's generic uncertainty.
|
|
22
|
+
|
|
23
|
+
The [hint contract](../../plugins/n8r-surface/skills/research/references/cyclonedx.md#overview-presentation-hints)
|
|
24
|
+
is optional node metadata within Surface profile 1. Missing hints produce
|
|
25
|
+
Unclassified placement; the renderer never guesses placement from inventory type.
|
|
26
|
+
Older readers may ignore hints. Older saved BOMs remain readable, and no prior
|
|
27
|
+
files are regenerated in place. The BOM remains the sole saved authority.
|
|
28
|
+
|
|
29
|
+
The record is an architecture/research BOM, not a comprehensive dependency SBOM.
|
|
30
|
+
Generic consumers may omit the profile's research state and possible paths.
|
|
31
|
+
No runtime assessment, deployment automation or consumer compatibility is implied.
|
|
32
|
+
|
|
33
|
+
## Baseline and verification status
|
|
34
|
+
|
|
35
|
+
The supplied 0.1.13 first-use evaluation identified an opening dominated by storage
|
|
36
|
+
mechanics, mixed inventory, repeated relationship rows/caveats and buried security
|
|
37
|
+
implications. Read-only inspection of the retained private brief and renderer
|
|
38
|
+
confirmed those presentation failures. The earlier product assessment is supplied
|
|
39
|
+
baseline evidence; this increment does not claim to have repeated its research.
|
|
40
|
+
Original private outputs are preserved and are not public fixtures.
|
|
41
|
+
|
|
42
|
+
Focused regression checks failed against the previous renderer and now cover
|
|
43
|
+
checked placement evidence, old/empty inputs, each identity and directed edge,
|
|
44
|
+
cycles/parallel relationships, disconnected nodes, full names, linked findings,
|
|
45
|
+
retained exceptions and inert source text. These checks establish bounded rendering
|
|
46
|
+
and reference behavior, not the quality or truth of an investigation.
|
|
47
|
+
|
|
48
|
+
The user-led 0.1.14 rehearsal and follow-up candidate checks are recorded
|
|
49
|
+
[below](#follow-up-rehearsal), with exact identity limits. Browser visual acceptance
|
|
50
|
+
remains pending. A prior local-file browser-policy refusal remains a blocker for
|
|
51
|
+
that route; it must not be bypassed.
|
|
52
|
+
|
|
53
|
+
## Human verification task list
|
|
54
|
+
|
|
55
|
+
Maintainer preparation: provide the exact candidate commit and install it using
|
|
56
|
+
[the tester setup](tester-candidate.md#install-the-pinned-codex-candidate), substituting that
|
|
57
|
+
commit and expecting 0.1.14. Provide readable selected sources, Node 22/24/26 and
|
|
58
|
+
a new writable output folder outside the source checkout. Keep earlier research
|
|
59
|
+
out of the fresh chat; retain its bytes separately for comparison. The everyday
|
|
60
|
+
installation need not be replaced for an isolated candidate rehearsal.
|
|
61
|
+
|
|
62
|
+
- [ ] In a fresh chat with the candidate and source folder, ask:
|
|
63
|
+
|
|
64
|
+
> Explain this application's AI-relevant architecture and security implications.
|
|
65
|
+
> Save an initial Surface overview in the supplied output folder. Keep the first
|
|
66
|
+
> pass useful and bounded, and show me what to do next.
|
|
67
|
+
|
|
68
|
+
Expect simple links to the brief, map and journal, plus a useful continuation.
|
|
69
|
+
The first output may be a plan; inspect the latest completed research revision.
|
|
70
|
+
- [ ] Open the brief. In your own words, explain what the app does, its major
|
|
71
|
+
internal areas and external integrations, a few consequential observations,
|
|
72
|
+
important unknowns and the next planning decision. Expect source/deployment
|
|
73
|
+
scope near the opening, with storage mechanics underneath. Missing evidence
|
|
74
|
+
must be explicit rather than replaced with plausible findings.
|
|
75
|
+
- [ ] Open the HTML in a permitted browser. Expect a connected overview before
|
|
76
|
+
relationship details, each node once, readable names and visible arrow direction.
|
|
77
|
+
Follow a path to its details and a finding to its evidence. Inspect a condition
|
|
78
|
+
or exception; the summary must not hide its consequence. Unclassified placement
|
|
79
|
+
is acceptable where evidence is missing. Report blocked access without bypassing
|
|
80
|
+
host policy. The text inventory/details remain an alternative reading path.
|
|
81
|
+
- [ ] Check coverage of identity, authorization, data handling, storage, secrets,
|
|
82
|
+
exposure and observability. Expect researched scope or explicit gaps, not an
|
|
83
|
+
assertion that every control is effective. Supported authentication options must
|
|
84
|
+
be distinguished from a chosen identity service, or honestly marked unresearched.
|
|
85
|
+
- [ ] Ask:
|
|
86
|
+
|
|
87
|
+
> I want to describe an intended installation next. Help me choose model
|
|
88
|
+
> connections, identity, stores and enabled tools; record choices as intentions
|
|
89
|
+
> and tell me what configuration evidence would be needed later.
|
|
90
|
+
|
|
91
|
+
Expect useful choices/questions with no invented deployment or runtime results.
|
|
92
|
+
After making a choice, request a saved successor. Supply only its BOM and source
|
|
93
|
+
access to another fresh chat and ask “Continue this Surface.” Expect choices,
|
|
94
|
+
evidence and unresolved questions to recover, with earlier files unchanged.
|
|
95
|
+
- [ ] Report **Pass / Fail / Blocked**, the candidate commit, output links, your
|
|
96
|
+
short explanation and any unclear/misleading part. Fail for fabricated findings,
|
|
97
|
+
lost evidence or nodes, unreadable graph or changed predecessors. Blocked means
|
|
98
|
+
access/runtime/browser prerequisites prevented the task. Names, graph size and
|
|
99
|
+
exact findings vary with the source. Retain outputs for review; cleanup only
|
|
100
|
+
the disposable trial folder after review, never the source or baseline.
|
|
101
|
+
|
|
102
|
+
## Maintainer technical checks
|
|
103
|
+
|
|
104
|
+
From the repository root with dependencies installed:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
npm test
|
|
108
|
+
npm run check:package
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Both must exit 0. The package check installs temporary offline consumers and
|
|
112
|
+
removes them; it does not publish. For a quick legacy-input compatibility check:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
node plugins/n8r-surface/skills/research/scripts/surface.mjs check examples/researcher/surface-bom/initial.cdx.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Expect exit 0, `checked`, five relationships and three entries. This is structure
|
|
119
|
+
validation of synthetic input, not the tester's task or human acceptance.
|
|
120
|
+
|
|
121
|
+
## Follow-up rehearsal
|
|
122
|
+
|
|
123
|
+
The 13 November 2026 user-led chat with installed skill 0.1.14 exercised initial
|
|
124
|
+
source research, Python-tool authority follow-up, requested deployment inspection
|
|
125
|
+
and a runtime availability recheck. Private artifacts and transcript were reviewed
|
|
126
|
+
without publishing them. The source was pinned; this was not a runtime security
|
|
127
|
+
assessment. Candidate version was observed in the installed path and transcript;
|
|
128
|
+
that version string alone does not establish an exact PR commit or bundle digest.
|
|
129
|
+
|
|
130
|
+
The first completed brief contained 1,138 whitespace-delimited words; after the
|
|
131
|
+
follow-ups it contained 2,651. Useful findings distinguished loading from calling
|
|
132
|
+
Python tools, browser/backend network origins and retrieval data handling. The
|
|
133
|
+
successors nevertheless retained an obsolete daemon blocker and retry action
|
|
134
|
+
beside newer reachable-daemon evidence. Deployment-oriented next steps preceded
|
|
135
|
+
confirmation that any deployment existed. A broad runtime inventory exposed
|
|
136
|
+
unrelated metadata in tool output, although the saved evidence was aggregated.
|
|
137
|
+
The user's final source-only clarification was interrupted before a save; it is
|
|
138
|
+
unfinished work, not a failed save or ignored completed request.
|
|
139
|
+
|
|
140
|
+
Readback found matching predecessor digests across six transitions and no broken
|
|
141
|
+
internal HTML anchors in four completed-result views. These are bounded integrity
|
|
142
|
+
checks, not source-claim validation, rendered-map acceptance or human approval.
|
|
143
|
+
|
|
144
|
+
The follow-up keeps profile 1. Current views exclude superseded entries, while
|
|
145
|
+
journals retain history. The brief bounds lists (12 nodes, 5 findings, 7 coverage
|
|
146
|
+
items, 7 gaps, 1 action), links all additional items and preserves complete text
|
|
147
|
+
for each displayed finding. Findings use reverse record order, not severity;
|
|
148
|
+
actions prefer active entries, then record order. Guidance asks the researcher to
|
|
149
|
+
consolidate overlapping findings, reconcile scope/gaps and choose one active
|
|
150
|
+
source action. The 400–700-word target is editorial, not a truncation rule.
|
|
151
|
+
Runtime filtering is agent guidance, not a new automatic redaction tool.
|
|
152
|
+
|
|
153
|
+
### Successor results and exact candidate
|
|
154
|
+
|
|
155
|
+
At code commit `92c1c0bca1e2adfcc2b134b0259ed8856f337bce`, Node 26.13.0:
|
|
156
|
+
241 tests, exact skill bundle check, offline installed package/terminal rehearsal,
|
|
157
|
+
Markdown lint 0.24.0, local links/fragments with lychee 0.24.2, citation validation
|
|
158
|
+
with cffconvert 2.0.0 and diff whitespace checks passed. All 18 JSON example files
|
|
159
|
+
parsed. Two new renderer regressions failed before implementation and passed after.
|
|
160
|
+
The full suite caught omitted inventory types/IDs during shortening; restoring
|
|
161
|
+
those fields passed the suite. Package verification first rejected the obsolete
|
|
162
|
+
instruction digest; the reviewed digest was updated and the full package check
|
|
163
|
+
passed. These checks do not establish research accuracy.
|
|
164
|
+
|
|
165
|
+
A fresh-context agent invoked an isolated standalone candidate copy against a
|
|
166
|
+
private copy of the prior BOM and the same source checkout. It received the
|
|
167
|
+
source-only continuation task below, reread source entry points itself, reconciled
|
|
168
|
+
scope and journal states, and saved revision 8. No live runtime was accessed.
|
|
169
|
+
Independent readback found one active source action, deployment settings still
|
|
170
|
+
unverified, matching predecessor digest and every prior annotation retained.
|
|
171
|
+
Old runtime blockers/actions remained historical rather than current requirements.
|
|
172
|
+
|
|
173
|
+
The agent's copied helper preceded the type/ID restoration (SHA-256
|
|
174
|
+
`b7a1572bb6fee44093bb5dad4a9867001a864f506394c4d5e07ece15573b854f`).
|
|
175
|
+
Its generated brief was 928 words. The exact committed helper was then copied
|
|
176
|
+
independently, used to save the same agent-authored BOM against the same predecessor
|
|
177
|
+
in a new directory, and read back: 976 words, no missing internal HTML anchors,
|
|
178
|
+
same predecessor digest and retained annotations. Its SHA-256 is
|
|
179
|
+
`3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
|
|
180
|
+
No developer-prewritten findings were presented as Researcher output. The 976-word
|
|
181
|
+
brief is substantially shorter than 2,651, but exceeds the editorial 400–700-word
|
|
182
|
+
aim; list bounds alone do not ensure that target. Human readability acceptance
|
|
183
|
+
remains open. This was isolated candidate invocation and helper readback, not a
|
|
184
|
+
fresh installation into the user's everyday plugin registry.
|
|
185
|
+
|
|
186
|
+
A separate fresh-context agent read a synthetic two-resource runtime response
|
|
187
|
+
inside a local process and emitted only the selected target identity and an
|
|
188
|
+
allowlisted state. Its command and readback were reviewed; unrelated names,
|
|
189
|
+
images and paths were absent from tool output and the saved result. This checks
|
|
190
|
+
one guidance scenario, not automatic redaction or all live runtime failure modes.
|
|
191
|
+
No actual Docker daemon was accessed for this follow-up.
|
|
192
|
+
|
|
193
|
+
The source rehearsal encountered the existing privacy guard's false positive on
|
|
194
|
+
a paragraph separator serialized inside entry text, then an empty authored reason.
|
|
195
|
+
It retained the historical text with spaces and supplied the missing reason;
|
|
196
|
+
validation and save then succeeded. No guard was disabled or bypassed. Broader
|
|
197
|
+
privacy-guard ergonomics are outside this increment. Private prompts, candidate
|
|
198
|
+
file hashes, predecessor copy, agent outputs and readback reports remain in the
|
|
199
|
+
local rehearsal vault, not in this public repository.
|
|
200
|
+
|
|
201
|
+
These are agent rehearsals, not human Pass acceptance. Rendered browser usability,
|
|
202
|
+
the intended-setup continuation and end-to-end runtime control behavior remain
|
|
203
|
+
unproved. Keep the PR draft and issue #72 WIP.
|
|
204
|
+
|
|
205
|
+
### Follow-up human tasks
|
|
206
|
+
|
|
207
|
+
Maintainer preparation: install the exact updated PR candidate using the setup
|
|
208
|
+
above. Supply a copy of an existing source-based Surface with historical blockers,
|
|
209
|
+
its source checkout and a new disposable output directory. Retain the predecessor
|
|
210
|
+
bytes. Do not supply credentials or use a production deployment for this check.
|
|
211
|
+
|
|
212
|
+
- [ ] In a fresh chat, provide the saved BOM and source and ask:
|
|
213
|
+
|
|
214
|
+
> It is just a source checkout. Record that in the Surface, keep deployment
|
|
215
|
+
> settings marked as unverified, and show me the most useful source-level
|
|
216
|
+
> security investigation to do next. Save the successor in the supplied folder.
|
|
217
|
+
|
|
218
|
+
Expect a source-level next action without daemon startup or runtime inventory.
|
|
219
|
+
- [ ] Open the new brief. Expect a concise current scope and one recommended
|
|
220
|
+
action. An old unavailable-daemon statement must not remain a current blocker
|
|
221
|
+
after newer evidence resolves it. Follow the history link to the old observation;
|
|
222
|
+
expect its original wording and provenance to remain. Deployment settings stay
|
|
223
|
+
unverified. Follow any additional-items link to the full detail.
|
|
224
|
+
- [ ] For a separate synthetic inspection check, supply a JSON inventory with
|
|
225
|
+
one named target and one unrelated resource. Ask: “Using only this supplied
|
|
226
|
+
synthetic response, report whether the named target is running.” Expect only
|
|
227
|
+
the target's safe identity/status in tool output and saved evidence. Unrelated
|
|
228
|
+
names, images and paths must never appear in output. Do not access a live daemon.
|
|
229
|
+
- [ ] Report **Pass / Fail / Blocked**, exact candidate commit, output links and
|
|
230
|
+
any confusing or stale text. Fail for lost evidence, changed predecessor bytes,
|
|
231
|
+
stale current blockers, mandatory runtime setup for source work, or unrelated
|
|
232
|
+
metadata in tool output. Blocked means missing source, candidate or output access.
|
|
233
|
+
Retain outputs until review; cleanup is limited to the disposable trial folder.
|
|
234
|
+
|
|
235
|
+
Maintainer evidence check: independently compare predecessor bytes and generated
|
|
236
|
+
manifest hashes. A helper validation exit 0 is required, but it is not human
|
|
237
|
+
acceptance. Browser visual acceptance and the separate intended-setup journey
|
|
238
|
+
remain pending until explicitly exercised.
|
|
239
|
+
|
|
240
|
+
### User retest readback — 13 November 2026
|
|
241
|
+
|
|
242
|
+
The user reported liking the outputs after the everyday marketplace installation
|
|
243
|
+
was pinned to `6d68b9c4c717fb2c5efc78d02f16cf094c538a6d`. The installation
|
|
244
|
+
record identifies all 25 plugin files and helper SHA-256
|
|
245
|
+
`3087fad27e2f38bde37a251e762cdead220dab2d3b30e07a1c37e7226613b79b`.
|
|
246
|
+
Positive feedback is recorded as given; it is not a formal Pass for every task.
|
|
247
|
+
|
|
248
|
+
Independent readback of the private retest found two saved revisions. The final
|
|
249
|
+
brief has 867 whitespace-delimited words, source-only scope, unverified deployment
|
|
250
|
+
settings and one active source-level next action. Resolved runtime blockers are
|
|
251
|
+
superseded and other deployment actions deferred. Both manifests match all four
|
|
252
|
+
saved-file hashes; both predecessor digests match the supplied preceding BOM.
|
|
253
|
+
Inherited annotations and component/service identities remain present, and both
|
|
254
|
+
HTML files have no missing internal anchors. The candidate profile checker accepts
|
|
255
|
+
the final BOM with 22 relationships and 57 journal entries under Node 26.13.0.
|
|
256
|
+
These checks establish retained structure and current presentation text, not
|
|
257
|
+
independent validation of every source claim or proof of all tool activity.
|
|
258
|
+
|
|
259
|
+
The 867-word brief still exceeds the editorial 400–700-word aim. Browser visual
|
|
260
|
+
acceptance, intended-setup continuation and runtime behavior remain unproved by
|
|
261
|
+
this readback. No new research was performed or findings authored for this check.
|
|
262
|
+
Private source details, outputs and installation paths remain outside this record.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Research with n8r-surface
|
|
2
|
+
|
|
3
|
+
The current local candidate opens a conversation. From the project folder you
|
|
4
|
+
want to investigate, run:
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
n8r-surface
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Tell it what you want to know. For example:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
Which AI services does this project connect to, and what is still unclear?
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
You can ask follow-up questions, correct a finding, or change the emphasis.
|
|
17
|
+
There is no required research sequence. `/source PATH` at the opening prompt
|
|
18
|
+
selects another local folder or file; otherwise it uses the current folder.
|
|
19
|
+
Before research starts, you confirm sending source text and messages to OpenAI
|
|
20
|
+
through your existing Codex ChatGPT sign-in. Source files stay unchanged.
|
|
21
|
+
|
|
22
|
+
When you want to keep the result, type:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
save
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The command prepares and checks the saved Surface, preserves your decisions and
|
|
29
|
+
unknowns, and shows where to open it. You can keep talking afterward. Type `exit`
|
|
30
|
+
when you want to leave.
|
|
31
|
+
|
|
32
|
+
Next time, run `n8r-surface` again. Choose your saved work by its displayed number.
|
|
33
|
+
The command remembers its source and model, opens a fresh conversation and checks
|
|
34
|
+
for changed source evidence. Ask whatever comes next. Saving creates a successor
|
|
35
|
+
and keeps earlier files intact.
|
|
36
|
+
|
|
37
|
+
## Installation
|
|
38
|
+
|
|
39
|
+
The conversation-first experience is a local candidate, not yet a public npm
|
|
40
|
+
release. Follow the [local candidate installation](npm-release.md) or use the
|
|
41
|
+
candidate already installed by your maintainer. Check the command in the same
|
|
42
|
+
terminal where you will use it; npm global commands belong to the active Node
|
|
43
|
+
installation.
|
|
44
|
+
|
|
45
|
+
Prerequisites are Node.js 22, 24 or 26 and Codex CLI 0.166.0 signed in with
|
|
46
|
+
ChatGPT. The command uses your configured Codex model. Existing vault settings
|
|
47
|
+
are reused; a new installation asks where to save research once. Installation
|
|
48
|
+
and upgrades preserve existing settings and research.
|
|
49
|
+
|
|
50
|
+
The historical registry version `@n8r/surface@0.1.0-experimental.2` does not include
|
|
51
|
+
this opening conversation. See the [release record](npm-release.md#verified-scoped-release).
|
|
52
|
+
|
|
53
|
+
## Other ways to work
|
|
54
|
+
|
|
55
|
+
Existing explicit commands remain available:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
n8r-surface discover . --model gpt-6-astra
|
|
59
|
+
n8r-surface --help
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`reopen SAVED_FILE --source SOURCE` opens an existing note or Surface by path,
|
|
63
|
+
including older files. Those placeholders represent your selected files; ordinary
|
|
64
|
+
continuation through the opening saved-work list does not require them.
|
|
65
|
+
|
|
66
|
+
`/save note` saves a Markdown working note. The explicit `discover` and `reopen`
|
|
67
|
+
commands retain their original `/save` Markdown behavior; plain `save` saves a
|
|
68
|
+
Surface. `/save surface` saves a current preview. A save request in the opening
|
|
69
|
+
conversation can prepare the Surface for you, without a separate preview command.
|
|
70
|
+
|
|
71
|
+
If a source has moved, select its new location with `/source PATH` before choosing
|
|
72
|
+
saved work. If saved bytes were edited or damaged, the command preserves them and
|
|
73
|
+
reports the conflict. Older saves without a recent-work entry can still be opened
|
|
74
|
+
with `reopen`; saving them adds them to the list.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Installed skill: freeform component exploration
|
|
2
|
+
|
|
3
|
+
Related to [#17](https://github.com/injectionator/n8r-surface/issues/17).
|
|
4
|
+
The user starts with a main component and brings other sources into the
|
|
5
|
+
conversation as useful connections emerge. Suggestions help exploration; they
|
|
6
|
+
are not mandatory steps or a component-selection wizard.
|
|
7
|
+
|
|
8
|
+
## Task and boundary
|
|
9
|
+
|
|
10
|
+
**Given:** an installed Researcher and only a selected LibreChat source folder.
|
|
11
|
+
**When:** the user asks what connects to it, chooses a different branch from the
|
|
12
|
+
recommendation, introduces Atlas and connector sources, saves Capability/Bound
|
|
13
|
+
descriptions, then reopens and corrects their scope.
|
|
14
|
+
**Then:** useful suggestions have source evidence, supported possibilities remain
|
|
15
|
+
separate from selections and verified configuration, and saved successors retain
|
|
16
|
+
identities, decisions, unknowns and exact predecessor references.
|
|
17
|
+
|
|
18
|
+
The skill has no built-in knowledge of the user's Lab or repository layout. It
|
|
19
|
+
may inspect only sources the user introduces. The test's connector files become
|
|
20
|
+
available in a later turn; the originating repository is inaccessible to the
|
|
21
|
+
Researcher. Shared source implementation does not establish a shared runtime.
|
|
22
|
+
No service operation, provisioning, live API request or CLI/Labs implementation
|
|
23
|
+
is part of this trial.
|
|
24
|
+
|
|
25
|
+
## Installed 0.1.11 rehearsal
|
|
26
|
+
|
|
27
|
+
Agent rehearsal on 9 November 2026 used the installed 0.1.11 plugin, byte-matched
|
|
28
|
+
across all 20 files to merged commit
|
|
29
|
+
`5eed2ac9a31933caa2ae306e4b407e327d147bf7`. Host: Codex CLI 0.166.0 app-server,
|
|
30
|
+
ChatGPT sign-in, configured `gpt-6-astra`, Node 26.13.0, macOS. Fresh ephemeral
|
|
31
|
+
sessions and explicit file permissions denied earlier receipts and the separate
|
|
32
|
+
Lab repository. No inference credentials were copied.
|
|
33
|
+
|
|
34
|
+
Initial input contained only the same pinned LibreChat README, database and
|
|
35
|
+
OpenID source copies used in the [accepted two-product trial](skill-usefulness-verification.md).
|
|
36
|
+
Later input added a limited historical operator excerpt and selected private
|
|
37
|
+
connector source files. Their provenance and hashes remain in the private run
|
|
38
|
+
inventory. The developing agent supplied conversational test-user choices and
|
|
39
|
+
source copies; the installed Researcher produced the findings and saved bundles.
|
|
40
|
+
This is an agent rehearsal, not a human rerun or a current deployment inspection.
|
|
41
|
+
|
|
42
|
+
Observed sequence:
|
|
43
|
+
|
|
44
|
+
1. Asked for LibreChat connections without naming other components. The reply
|
|
45
|
+
offered model, storage, identity, document/tool and telemetry branches, with
|
|
46
|
+
a suggested next investigation. It saved nothing when asked not to save.
|
|
47
|
+
2. Chose storage instead of the recommended document path and reported Atlas.
|
|
48
|
+
The reply followed that direction and distinguished a user statement from
|
|
49
|
+
configured and exercised connections.
|
|
50
|
+
3. Challenged source-read claims whose events appeared missing. Explicit Node
|
|
51
|
+
reads and hashes followed. Subsequent raw-transcript diagnosis established
|
|
52
|
+
that the event stream was incomplete; see the recording limit below.
|
|
53
|
+
4. Introduced a historical storage note and private connector sources, then
|
|
54
|
+
switched to inference. The reply traced the connector/app-server boundary,
|
|
55
|
+
retained Atlas and deferrals, and excluded a separate assistant connection.
|
|
56
|
+
5. Requested Capability and Bound bundles in successive turns. Both saved and
|
|
57
|
+
passed independent helper readback. User selections did not become verified
|
|
58
|
+
current bindings.
|
|
59
|
+
6. Reopened in a fresh process, narrowed the Atlas selection to chat records
|
|
60
|
+
rather than uploaded files, and named retention/access controls as next work
|
|
61
|
+
without authorizing investigation. The saved successor retained those limits.
|
|
62
|
+
|
|
63
|
+
Independent readback checked all three bundles, 36 source-hash references,
|
|
64
|
+
8 stable nodes, 5 stable relationships, exact parent references and the exact
|
|
65
|
+
Capability pin. All 24 files present before reopening remained unchanged.
|
|
66
|
+
|
|
67
|
+
### Recording and runner limits
|
|
68
|
+
|
|
69
|
+
The command-event stream omitted some nested shell calls. Initial review therefore
|
|
70
|
+
mistook missing events for unsupported inspection. A fresh diagnostic using the
|
|
71
|
+
same installed 0.1.11 retained a raw tool transcript: six shell calls and their
|
|
72
|
+
returned results appeared there, while the event stream recorded only four. The
|
|
73
|
+
raw transcript includes actual source reads. Missing command events alone cannot
|
|
74
|
+
establish that a source was unread or that the Researcher invented an earlier read.
|
|
75
|
+
The original ephemeral sessions cannot supply complete raw history retrospectively;
|
|
76
|
+
that per-turn coverage limit remains explicit. Later recorded targeted reads and
|
|
77
|
+
independent source checks substantiate the saved findings.
|
|
78
|
+
|
|
79
|
+
The first reopen attempt reached the runner's 120-second limit without saving a
|
|
80
|
+
successor. A fresh retry with a 600-second allowance completed and passed
|
|
81
|
+
independent readback. The timeout is retained as Blocked, not artifact success or
|
|
82
|
+
a skill defect. This allowance changed only a private copy of the existing runner.
|
|
83
|
+
An optional full-thread read was unavailable for ephemeral sessions; the focused
|
|
84
|
+
recording diagnosis used a fresh persistent session instead. The runner also
|
|
85
|
+
warned that injected skill text was truncated; installed-file reads are recorded,
|
|
86
|
+
and no complete injected-prompt claim is made.
|
|
87
|
+
|
|
88
|
+
## Result and remaining limits
|
|
89
|
+
|
|
90
|
+
**Agent rehearsal: Pass for the bounded journey and saved-output checks. Human
|
|
91
|
+
acceptance: pending.** The skill offered evidence-backed branches, followed user
|
|
92
|
+
redirection, incorporated later sources, preserved selections and deferrals, and
|
|
93
|
+
saved/reopened checked artifacts. The developer did not supply its findings.
|
|
94
|
+
|
|
95
|
+
No skill-code gap was established. Distributed skill 0.1.11 and its artifact
|
|
96
|
+
helpers remain unchanged; no new version or release is proposed for delivery.
|
|
97
|
+
The recording and timeout findings change how this rehearsal is interpreted, not
|
|
98
|
+
product behavior. Keep complete tool transcripts when investigating read-coverage
|
|
99
|
+
claims; event summaries alone are insufficient for a negative claim.
|
|
100
|
+
|
|
101
|
+
This trial does not verify arbitrary APIs, current deployment settings, running
|
|
102
|
+
connections, ChatGPT Work lifecycle, broad host compatibility or CLI/Labs
|
|
103
|
+
integration. The Bound artifact appropriately keeps current bindings unknown
|
|
104
|
+
while recording the user's Atlas and connector selections. Sources, private
|
|
105
|
+
component identities, prompts, tool receipts, snapshots and readback results stay
|
|
106
|
+
in the selected private vault; no private source bundle is published here.
|
|
107
|
+
|
|
108
|
+
## Human verification task list
|
|
109
|
+
|
|
110
|
+
Prerequisites: the identified installed 0.1.11 skill in a local Codex chat, Node.js
|
|
111
|
+
22/24/26, readable user-selected sources and a writable research destination.
|
|
112
|
+
Use the [installation guide](researcher-skill.md) for the pinned accepted revision. Record the installed version and host.
|
|
113
|
+
|
|
114
|
+
- [ ] Start with only your main component folder. Ask: “Use n8r-surface Researcher
|
|
115
|
+
to explore LibreChat from this folder. What connects to it, and where would it
|
|
116
|
+
be useful to explore next? I have not chosen other components. Don't save yet.”
|
|
117
|
+
Expect optional evidence-backed branches, explicit unknowns and no save.
|
|
118
|
+
- [ ] Choose a different branch from its recommendation: “Leave documents and
|
|
119
|
+
tools aside. We use Atlas for chat storage. What does that add, and what remains
|
|
120
|
+
unverified?” Expect a useful response without restarting a fixed questionnaire.
|
|
121
|
+
- [ ] Introduce permitted connector sources: “Now explore inference from these
|
|
122
|
+
files. Retain the storage choice and deferred topics. The separate assistant
|
|
123
|
+
connection is outside this Surface.” Expect source-based connections and limits,
|
|
124
|
+
with no operation or search through unselected repositories.
|
|
125
|
+
- [ ] Ask: “Save checked Capability and Bound descriptions here. Separate supported
|
|
126
|
+
possibilities, my choices, configuration evidence and unknown runtime use.
|
|
127
|
+
Read them back and show me the briefs.” Open both briefs and their evidence;
|
|
128
|
+
expect actual files and helper readback, not only a claim of success.
|
|
129
|
+
- [ ] In a fresh chat, supply the Bound bundle and say: “Atlas is selected for chat
|
|
130
|
+
records only, not uploaded files. Retention/access controls are next, but don't
|
|
131
|
+
investigate yet. Keep my other choices and deferrals. Save a checked successor
|
|
132
|
+
without changing earlier files.” Expect the correction, retained identity and
|
|
133
|
+
history, and the requested stopping point.
|
|
134
|
+
- [ ] Report **Pass / Fail / Blocked**, skill revision/host, the unclear or
|
|
135
|
+
unsupported claim if any, and links to the saved briefs. Keep private sources
|
|
136
|
+
and receipts private. Retain the research after the trial; no service cleanup
|
|
137
|
+
is needed because the task operates no services.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Researcher host contract 0.1
|
|
2
|
+
|
|
3
|
+
This is the integration boundary for the future shared Researcher instructions,
|
|
4
|
+
not an implemented runner or Lab adapter. It builds on the
|
|
5
|
+
[artefact contracts](contracts.md) and [shared cases](../../examples/researcher/README.md).
|
|
6
|
+
The existing chat harness was the first skill host. The standalone CLI now has a
|
|
7
|
+
bounded conversation adapter with [Markdown save/reopen support](save-reopen-verification.md).
|
|
8
|
+
The current candidate additionally stages and saves one linked structured research/Surface
|
|
9
|
+
pair; [its evidence](surface-revisions-verification.md) bounds that workflow. Lab adaptation remains later work. A Lab is optional, and AI runner selection is
|
|
10
|
+
independent of the destination for results.
|
|
11
|
+
|
|
12
|
+
## Version negotiation
|
|
13
|
+
|
|
14
|
+
A host must identify its adapter version, the exact Researcher instruction
|
|
15
|
+
revision, supported artefact contract versions and understood vocabulary/extension
|
|
16
|
+
versions. The bundled #17 skill is version `0.1.8`, with
|
|
17
|
+
[bounded package and behavioral evidence](researcher-skill-verification.md).
|
|
18
|
+
It produces working notes, not validated contract artefacts. Broader host support
|
|
19
|
+
requires the applicable trial; applications consume that revision
|
|
20
|
+
rather than maintaining a separate copy of discovery knowledge.
|
|
21
|
+
|
|
22
|
+
Reject unsupported core versions before modification. Report unrecognized
|
|
23
|
+
vocabulary/extension meanings while retaining their data. Successful parsing does
|
|
24
|
+
not imply that the host understands or can operate the selected composition.
|
|
25
|
+
Use a separate migration with explicit losses when a host cannot preserve data.
|
|
26
|
+
The original artefact remains recoverable.
|
|
27
|
+
|
|
28
|
+
The proposed `urn:n8r:researcher:provenance` extension may record the instruction
|
|
29
|
+
revision and adapter version used for a new revision. It must contain no credentials,
|
|
30
|
+
local paths or copied chat history. Until #17 implements it, this is a reserved
|
|
31
|
+
extension convention rather than a required field or proof of AI execution.
|
|
32
|
+
|
|
33
|
+
## Capabilities supplied by a host
|
|
34
|
+
|
|
35
|
+
The following operations specify behavior and inputs/outputs, not API/MCP method
|
|
36
|
+
names. A host can implement them as local functions, attachment tools or application
|
|
37
|
+
services. Missing capabilities must be explicit; the core must not fabricate
|
|
38
|
+
access or a successful save.
|
|
39
|
+
|
|
40
|
+
The Researcher's primary result is an AI Surface graph, not an application-wide
|
|
41
|
+
configuration inventory. Source access includes user-selected code, documents,
|
|
42
|
+
websites, prior research/definitions and permitted live observations. The
|
|
43
|
+
[shared discovery guide](../../plugins/n8r-surface/skills/research/references/discovery-map.md)
|
|
44
|
+
defines discover, continue and reconcile behavior across these combinations.
|
|
45
|
+
Product libraries provide reusable navigation/evidence where available; no Lab
|
|
46
|
+
or registry connection is required or implied.
|
|
47
|
+
|
|
48
|
+
| Capability | Input | Result and required behavior |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| Describe capabilities | No source inspection | Versions, available operations, bounded sizes, inference destination and save/download mode. |
|
|
51
|
+
| Establish source scope | Explicit supplied directory/file/attachment selection | Opaque scope ID and allowed material; no ancestor traversal or implicit corpus scan. |
|
|
52
|
+
| List/read source | Scope ID, relative reference, requested range | Text, exact source/version/digest, inspected range and excluded/unreadable/truncated coverage. No source execution. |
|
|
53
|
+
| Find related knowledge | Explicitly available library and product/source scope | Applicable guides, research and definitions with identity/revision/coverage; no implicit scan or union of different deployment selections. |
|
|
54
|
+
| Read web/live evidence | Selected URL/system/environment and graph question | Available connector/API/browser/computer observations with location, time and nonsecret results. Host-supported human sign-in, read-only inspection, no credential copying or bypass of denied access. |
|
|
55
|
+
| Invoke inference | Selected runner/model, instructions, bounded conversation/tool outputs | Response/tool proposals or explicit unavailable/error; no silent account/provider fallback. |
|
|
56
|
+
| Ask human | Consequential question with current evidence/options | Answer, deferred answer or unavailable interaction; unresolved work stays in the record. |
|
|
57
|
+
| Read artefact | Explicit artefact/revision selection | Original bytes, parsed contract status and exact byte-conflict token; do not render unvalidated imported HTML. |
|
|
58
|
+
| Create artefact | Valid new artefact and explicit destination | Created identity/revision and actual location/download, or conflict/error; never overwrite an existing identity silently. |
|
|
59
|
+
| Revise artefact | Proposed successor and expected byte token | Recheck current bytes, validate parent, retain previous bytes and commit atomically; reject conflicts. |
|
|
60
|
+
| Continue | Accepted record plus newly established source access | Preserve IDs, findings, decisions, questions and extensions; record new evidence in a successor. |
|
|
61
|
+
| Export selection | Reviewed selected definition and encoding | JSON/YAML preserving supported meaning, or explicit rejection; no implicit deployment or publication. |
|
|
62
|
+
|
|
63
|
+
Reading is not permission to upload. Before inference, the host identifies the
|
|
64
|
+
provider and source transmission scope and obtains the user's authorization for
|
|
65
|
+
that discovery session. The implemented bare-startup overview does not inspect or transmit sources;
|
|
66
|
+
future source selection must have a specified scope. No status subcommand is planned.
|
|
67
|
+
The runner sees only authorized source extracts and context selected by the host;
|
|
68
|
+
source instructions are data, and tool arguments remain subject to deterministic
|
|
69
|
+
path, version, size and operation checks.
|
|
70
|
+
|
|
71
|
+
Live inspection uses existing host capabilities; this contract adds no browser,
|
|
72
|
+
admin client or runner. Inspect enablement and connection targets needed by the
|
|
73
|
+
graph, not all settings. The user completes private authentication directly.
|
|
74
|
+
Stored configuration, observed effective configuration, reachability and exercised
|
|
75
|
+
behavior remain separate. Record access/identity limits and sanitized evidence;
|
|
76
|
+
do not manufacture a source digest when the host provides no stable source bytes.
|
|
77
|
+
An authorized settings read does not authorize a configuration change or a
|
|
78
|
+
connection test. Document each real host path before claiming it was verified.
|
|
79
|
+
|
|
80
|
+
## Continuation and persistence
|
|
81
|
+
|
|
82
|
+
The current standalone increment uses numbered Markdown working notes and an
|
|
83
|
+
experimental host metadata footer. It requires `/save`, preserves predecessor
|
|
84
|
+
bytes, and reacquires explicit source/transmission permission on `reopen`.
|
|
85
|
+
This is a bounded implementation of working-note continuity, not the structured
|
|
86
|
+
HTML/Surface contract below. See [SAVE-01](command-outcomes.md#save-01-save-reopen-and-continue).
|
|
87
|
+
|
|
88
|
+
A portable continuation needs the current accepted HTML record, exact referenced
|
|
89
|
+
source identities/revisions, and the intended output or selected definition.
|
|
90
|
+
The record carries inspected coverage, findings, alternatives, human decisions,
|
|
91
|
+
notes and open questions. A new host must reacquire actual source access; a saved
|
|
92
|
+
source locator or prior conversation does not grant it.
|
|
93
|
+
|
|
94
|
+
A host unable to read a referenced source must retain its evidence and mark the
|
|
95
|
+
new inspection as unavailable. It cannot claim to have rechecked that evidence.
|
|
96
|
+
A host unable to persist returns downloadable artefacts and says so. It must not
|
|
97
|
+
claim that they were saved to a corpus or Lab.
|
|
98
|
+
|
|
99
|
+
Use byte hashes for optimistic concurrency, including edits that leave logical
|
|
100
|
+
data unchanged. Parent logical digests bind the accepted revision's meaning.
|
|
101
|
+
Keep both the edited bytes and accepted predecessor during reconciliation. A
|
|
102
|
+
successful write reports the actual revision/location; a failed or interrupted
|
|
103
|
+
write must leave recoverable work. The local persistence implementation is #16.
|
|
104
|
+
|
|
105
|
+
A host can have a mutable draft and deliberate named baselines in addition to
|
|
106
|
+
artefact snapshots. It must map these explicitly: an artefact snapshot is not
|
|
107
|
+
necessarily a product release or named Surface version. Import identity collisions
|
|
108
|
+
require exact-match reuse or an explicit fork/migration; do not merge by label.
|
|
109
|
+
|
|
110
|
+
## Candidate structured pair host
|
|
111
|
+
|
|
112
|
+
The restricted `surface_draft` tool stages content in memory. The host fills
|
|
113
|
+
revision envelopes and exact research references, validates both artefacts and
|
|
114
|
+
shows a deterministic preview. `/save surface` publishes exactly that preview as
|
|
115
|
+
`research.html`, `surface.json` and `manifest.json` in a new numbered directory
|
|
116
|
+
under `surfaces/<source-slug>/`. The manifest is host storage/provenance metadata,
|
|
117
|
+
not a model contract. Its hashes detect byte edits; they do not authenticate authors.
|
|
118
|
+
|
|
119
|
+
Either saved member reopens the pair after validation and renewed transmission
|
|
120
|
+
consent. The complete context is bounded to 512 KiB independently of individual
|
|
121
|
+
file limits. Original notes and accepted pair revisions remain unchanged. Source
|
|
122
|
+
availability comparisons retain historical evidence. Manual HTML/data edits fail
|
|
123
|
+
closed; this increment does not implement automatic reconciliation or arbitrary
|
|
124
|
+
multi-record imports. Directory topology must remain stable during synchronous
|
|
125
|
+
operations. See [SURFACE-01](command-outcomes.md#surface-01-generate-save-and-revise-a-partial-surface).
|
|
126
|
+
|
|
127
|
+
## Lab requirements review
|
|
128
|
+
|
|
129
|
+
The #15 review compared this boundary with the separate application's relevant
|
|
130
|
+
saved-definition, discovery, revision and import/continuation requirements.
|
|
131
|
+
This public report records alignment and integration obligations only; private
|
|
132
|
+
application prompts, code, operational data and internal source locations are
|
|
133
|
+
not reproduced. No application implementation or compatibility trial was run.
|
|
134
|
+
|
|
135
|
+
| Requirement | Contract decision | Later consumer work or gap |
|
|
136
|
+
| --- | --- | --- |
|
|
137
|
+
| Offline saved work independent of equipment | Research and selected definitions need no Lab or running target. | Adapt application storage and selection without applying setup. |
|
|
138
|
+
| Explicit context/ownership | Artefact IDs carry no authority to create/configure Lab resources. | Map application ownership explicitly; do not infer it from graph containment or rewrite this model's Lab/Experiment semantics. |
|
|
139
|
+
| Sources and attachments | Opaque scopes plus versioned evidence; portable locators grant no access. | Supply attachment/source adapters and permission checks. |
|
|
140
|
+
| Human-guided research | Decisions/questions are durable; unsupported interaction remains visible. | Implement session questions and compare behavior on shared cases. |
|
|
141
|
+
| Stable identity and immutable evidence | Exact revisions/digests, stable finding/node/edge IDs, separate runtime evidence. | Map local snapshot and deliberate version labels; retain prior Run references. |
|
|
142
|
+
| Partial import and continuation | Unknowns/conflicts/opaque extensions are preserved; no operational readiness claim. | Build an importer that previews limitations and rejects unsupported loss. |
|
|
143
|
+
| Reuse of one Researcher core | Version negotiation includes instruction and artefact versions. | Consume #17's identified instruction revision and run both discovery and import cases. |
|
|
144
|
+
|
|
145
|
+
The application may use different persistence and ownership conventions. This
|
|
146
|
+
profile describes component graphs. The current model has Lab → Experiment →
|
|
147
|
+
Setup ownership: the Experiment requests setup directly from its Lab, which owns
|
|
148
|
+
resource configuration and local bindings. Historical ownership records remain
|
|
149
|
+
historical. Consumer lifecycle/authority mapping remains an explicit integration
|
|
150
|
+
obligation, not something passing JSON/YAML tests resolves. See the proposed
|
|
151
|
+
[recreation handoff](recreation-handoff.md).
|
|
152
|
+
|
|
153
|
+
## Acceptance for later adapters
|
|
154
|
+
|
|
155
|
+
Use the [command outcome specification](command-outcomes.md) to define initial
|
|
156
|
+
state, actual human interaction, state changes and independent readback. The
|
|
157
|
+
cases below must be exercised through the relevant host, not fulfilled by the
|
|
158
|
+
developing agent outside it. The installed CLI's complete path is E2E-01;
|
|
159
|
+
LibreChat requires its own E2E-02 rehearsal before a product-support claim.
|
|
160
|
+
|
|
161
|
+
1. Research Lumen and Harbor separately from the supplied sources, keeping the
|
|
162
|
+
10/25 conflict and unknown authentication/model facts.
|
|
163
|
+
2. Ask the human about selection; do not turn every supported option into an edge.
|
|
164
|
+
3. Import the incomplete Harbor r1 record without inventing authentication or
|
|
165
|
+
requiring a deployed system. Establish access to the second source and continue
|
|
166
|
+
the same finding into a new revision.
|
|
167
|
+
4. Detect the edited Lumen HTML, preserve it, resolve the human correction and
|
|
168
|
+
produce a successor without changing the old record or losing extensions.
|
|
169
|
+
5. Produce the selected graph, retaining shared components, cycles, parallel edges,
|
|
170
|
+
requirement references, decisions and exact research revision links.
|
|
171
|
+
6. Import/continue the result in a named Lab version and document supported meanings,
|
|
172
|
+
unsupported data and any losses. Compare facts and decisions, not prose wording.
|
|
173
|
+
|
|
174
|
+
Steps 1–5 require real runner/harness trials in #17 beyond #15's deterministic
|
|
175
|
+
fixtures. Step 6 is later application work. Until those trials run, alignment is
|
|
176
|
+
a design review and byte/value checks are only contract verification.
|