@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,350 @@
|
|
|
1
|
+
# Workspace verification status
|
|
2
|
+
|
|
3
|
+
Issue [#41](https://github.com/injectionator/n8r-surface/issues/41) adds identity
|
|
4
|
+
and safeguards to expected README-based baseline behavior. Code/test success is
|
|
5
|
+
not closure: installed-product scenarios now pass within the recorded limits;
|
|
6
|
+
overall PM acceptance, review readiness, merge and release remain separate.
|
|
7
|
+
|
|
8
|
+
## Installed 0.1.8 baseline — 8 November 2026
|
|
9
|
+
|
|
10
|
+
Two separate local desktop chats exercised setup and readiness. The installed
|
|
11
|
+
plugin's files matched source commit `3effc41bf7e8466651722b7b4c64035f862b1901`;
|
|
12
|
+
exact installation provenance was unknown. SKILL.md SHA-256:
|
|
13
|
+
`cd38dcd85f67ca962f06d86178009308aea527c9783fa0e0a3f834f783f1ebf4`.
|
|
14
|
+
Host version was 26.1023.51421, build 22530. The PM reported GPT-6 Astra medium;
|
|
15
|
+
the chat API did not independently expose the per-run model.
|
|
16
|
+
|
|
17
|
+
Create took one turn and about 36 seconds. It created README and a research
|
|
18
|
+
placeholder, with no identity record or research. PM feedback: “No problems.”
|
|
19
|
+
Fresh-chat readiness took one turn and about 30 seconds, recovered saved purpose,
|
|
20
|
+
accurately stated that no findings existed and offered useful next actions without
|
|
21
|
+
research. No separate reopen satisfaction rating was supplied. Content bytes were
|
|
22
|
+
unchanged; a host Git checkpoint subtree appeared. The destination already had
|
|
23
|
+
`.git` at its first product listing, so a strictly empty initial state is unproved.
|
|
24
|
+
|
|
25
|
+
The future identity contract was absent, as expected in 0.1.8, not a regression.
|
|
26
|
+
Outcome against that new contract was not met; useful interaction and saved-context
|
|
27
|
+
continuation were observed strengths. Other baseline scenarios were untested.
|
|
28
|
+
Fresh chats were observed, but enforced denial of history/filesystem access was
|
|
29
|
+
not established. Private transcripts and machine paths are retained outside this
|
|
30
|
+
public repository; this summary contains only sanitized observations.
|
|
31
|
+
|
|
32
|
+
## Candidate 0.1.9
|
|
33
|
+
|
|
34
|
+
Source changes implement the helper and skill guidance. All planned product
|
|
35
|
+
scenario outcomes passed: empty/missing creation, repeat, fresh-chat recognition,
|
|
36
|
+
both adoption choices, all refusals and moved identity. The chronological entries
|
|
37
|
+
below preserve earlier incomplete attempts and their status at the time.
|
|
38
|
+
No PM product acceptance, merge or release is claimed. Normal installation was
|
|
39
|
+
subsequently replaced with explicit PM authorization, as recorded below. CLI/Labs workspace integration and other hosts remain unverified.
|
|
40
|
+
|
|
41
|
+
## Scenario and evidence mapping
|
|
42
|
+
|
|
43
|
+
| Canonical scenario | Deterministic supporting evidence | Product/experience evidence |
|
|
44
|
+
| --- | --- | --- |
|
|
45
|
+
| Create; missing/empty | `tests/workspace.test.mjs`: actual files, record readback and no scaffolds | Candidate empty and missing destination creation passed |
|
|
46
|
+
| Repeat with note | Same suite: byte-preserving reuse and unknown fields | Candidate PM repeat passed; independent hashes unchanged |
|
|
47
|
+
| Fresh reopen; moved identity | Same suite: separate process and moved folder inspection | Fresh-chat reopen passed after destination clarification; independent moved-folder chat passed |
|
|
48
|
+
| Adoption question and both choices | Same suite: no-write refusal, in-place and alternative destination | Both adoption choices passed |
|
|
49
|
+
| Malformed/conflicting/unsupported | Same suite: complete before/after snapshots | All three installed-product refusal trials passed |
|
|
50
|
+
| Interrupted setup | Same suite: publication failure and no-overwrite guard | Technical evidence only |
|
|
51
|
+
| Installed helper availability | Same suite: copied helper with no checkout dependencies; package smoke | Installed 0.1.9 reads and helper execution verified in product chats |
|
|
52
|
+
|
|
53
|
+
Run `node --test tests/workspace.test.mjs` or the full `npm test` from the repo
|
|
54
|
+
root. These tests own temporary folders and remove them. Publication failure is
|
|
55
|
+
injected at the filesystem boundary; this is not a real machine crash trial.
|
|
56
|
+
The [human checklist and rubric](workspace-human-check.md) retain exact prompts,
|
|
57
|
+
readback, ownership and separate outcome/experience reports. All canonical
|
|
58
|
+
Gherkin is in [the feature file](../../tests/acceptance/skill-workspace.feature).
|
|
59
|
+
|
|
60
|
+
## Implementation checks
|
|
61
|
+
|
|
62
|
+
On macOS with Node.js 26.13.0, the full `npm test` passed 139 tests, including
|
|
63
|
+
nine workspace checks. `npm run check:package` passed both legacy archive names
|
|
64
|
+
and their offline installed-command rehearsals. The expanded installed helper/terminal checks passed on Node 22.23.4, 24.22.2
|
|
65
|
+
and 26.13.0 for both legacy archive names. The full 139-test suite also passed
|
|
66
|
+
on Node 22 and 24. An initial parallel matrix run collided on the existing
|
|
67
|
+
`dist/obsolete-candidate-check.js` fixture in two Node 24 distribution tests;
|
|
68
|
+
the serial rerun passed. No product fix was required for that orchestration error.
|
|
69
|
+
Markdownlint 0.24.0, lychee 0.24.2 offline links/fragments, cffconvert 2.0.0,
|
|
70
|
+
Python fixture/workflow tests (24), shell syntax and skill frontmatter validation
|
|
71
|
+
passed. A fresh independent code review found no actionable findings and reran
|
|
72
|
+
the nine helper tests. These are technical checks, not PM acceptance.
|
|
73
|
+
|
|
74
|
+
The initial helper test failed because it was absent; eight behavioral checks
|
|
75
|
+
then failed against placeholder exports before implementation. The first full
|
|
76
|
+
implementation exposed a macOS temporary-directory alias in executable detection;
|
|
77
|
+
using the real script path fixed the copied-helper check. Failed test output remains in the implementation chat evidence. No fixture was silently repaired to claim a product pass.
|
|
78
|
+
|
|
79
|
+
## Identified installed candidate — 8 November 2026
|
|
80
|
+
|
|
81
|
+
Candidate commit: `3cb08f59a4a932121bdd1c742fbac724d12a6d74`, plugin `0.1.9`,
|
|
82
|
+
[draft PR #42](https://github.com/injectionator/n8r-surface/pull/42).
|
|
83
|
+
Codex CLI 0.166.0 fetched this exact commit through the Git repository marketplace.
|
|
84
|
+
Clean installation and upgrade from baseline `3effc41` were exercised in separate
|
|
85
|
+
isolated homes. Every one of the 14 plugin files matched the committed source by
|
|
86
|
+
relative filename and SHA-256. Both manifests and the installed list reported
|
|
87
|
+
`0.1.9`, enabled. A synthetic workspace outside the installations remained
|
|
88
|
+
byte-for-byte unchanged. The normal registration/configuration and baseline
|
|
89
|
+
plugin bytes were unchanged during these isolated trials.
|
|
90
|
+
|
|
91
|
+
The PM then explicitly authorized switching the normal installation to this
|
|
92
|
+
pinned candidate. Its original registration details were retained privately;
|
|
93
|
+
marketplace removal, pinned registration and plugin installation all exited 0.
|
|
94
|
+
The normal installed entry is enabled `0.1.9`, and all 14 files again match the
|
|
95
|
+
candidate. This is installed-byte evidence; desktop fresh-chat loading was pending at installation; the create trial below now verifies it.
|
|
96
|
+
|
|
97
|
+
SKILL.md SHA-256: `91abc353f4e0dea663a81decd5eaba6d72470c32b432b904e684c1a3b1092b3b`.
|
|
98
|
+
Complete file-map SHA-256: `de5d16d92f714f2f8ea900266078db8e113f6116d78ee4c98e68dcab8a696180`
|
|
99
|
+
(sorted relative-path → SHA-256 JSON, compact separators, UTF-8). The full map,
|
|
100
|
+
Git/CLI receipts, original registration, test logs and retained baseline evidence
|
|
101
|
+
are stored in the private task inventory, outside tracked files.
|
|
102
|
+
|
|
103
|
+
The prepared fixtures began as empty destinations or explicit synthetic
|
|
104
|
+
adoption/refusal inputs. No successful workspace was seeded for the creation
|
|
105
|
+
trial. The PM created the product chats; the implementation agent inspected their
|
|
106
|
+
receipts and independently read saved files. All planned outcomes have now been
|
|
107
|
+
exercised. The first reopen attempt omitted its target and is retained below;
|
|
108
|
+
explicit-target continuation passed, followed by an independent moved-folder chat.
|
|
109
|
+
Overall PM acceptance remains separate from these observations. Fixtures and a
|
|
110
|
+
final private evidence copy are deliberately retained; no cleanup, merge or release.
|
|
111
|
+
|
|
112
|
+
## PM create trial — 8 November 2026
|
|
113
|
+
|
|
114
|
+
**Outcome: Pass for the observed create operation. Experience: Pass.** The PM
|
|
115
|
+
reported “Worked fine.” One fresh product chat completed in one turn (18.978
|
|
116
|
+
seconds) without questions or technical rescue. Its tool receipts show reads of
|
|
117
|
+
the installed `0.1.9` skill and workspace reference, then the installed helper's
|
|
118
|
+
`setup` invocation with the supplied destination and purpose; exit 0. The helper
|
|
119
|
+
path was in the installed plugin cache, not the developer checkout. All 14
|
|
120
|
+
installed file hashes still match the identified candidate.
|
|
121
|
+
|
|
122
|
+
The prepared destination was empty before the trial. Independent readback found
|
|
123
|
+
only `.n8r/workspace.json`, with exact format `n8r.workspace/1`, a valid generated
|
|
124
|
+
UUID v4, folder-derived nonempty name and supplied purpose. All pre-existing
|
|
125
|
+
fixture entries and file hashes were unchanged. The final response linked the
|
|
126
|
+
actual workspace, identified format/ID and purpose, accurately separated app
|
|
127
|
+
attachment, and offered a next research action without starting it. The visible
|
|
128
|
+
tool trace contains no source fetch, credential request or global-setting write.
|
|
129
|
+
A complete global-settings before/after snapshot was not collected for this trial.
|
|
130
|
+
|
|
131
|
+
| Experience criterion | Verdict and observed evidence |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| Orientation | Pass: final response links location and identifies completion and next action. |
|
|
134
|
+
| Necessary questions | Pass: no repeated authorization or unnecessary setup questions. |
|
|
135
|
+
| User effort | Pass: one prompt, no schema choice, manual setup or technical rescue. |
|
|
136
|
+
| Honest boundaries | Pass: completion matches independent files; attachment explicitly separate. |
|
|
137
|
+
| Scope | Pass: setup only; no research in the tool trace or saved output. |
|
|
138
|
+
|
|
139
|
+
This verifies loaded installed bytes and the create interaction, not the complete
|
|
140
|
+
issue. The chat's working directory was an existing user folder while the prompt
|
|
141
|
+
explicitly selected the separate empty destination; the requested boundary was
|
|
142
|
+
honored. A separate chat does not prove enforced history/filesystem isolation.
|
|
143
|
+
Host/model were not independently remeasured for this trial. Private chat receipts,
|
|
144
|
+
full metadata, hashes and PM feedback are retained in the task evidence inventory;
|
|
145
|
+
no raw transcript or machine path is published here.
|
|
146
|
+
|
|
147
|
+
After create readback, the coordinator added the documented synthetic user note
|
|
148
|
+
exclusively and captured a new before-inventory for repeat setup. That preparation
|
|
149
|
+
is distinct from product output. Repeat, fresh reopen, move, missing destination,
|
|
150
|
+
both adoption choices and refusal product trials remain pending. No repair,
|
|
151
|
+
cleanup, merge or release occurred.
|
|
152
|
+
|
|
153
|
+
## PM repeat-setup trial — 8 November 2026
|
|
154
|
+
|
|
155
|
+
**Outcome: Pass. Experience: Pass.** The PM reported “Looks good.” In the same
|
|
156
|
+
product chat, the user selected the installed Researcher and asked to set up the
|
|
157
|
+
same workspace again. One turn completed in 10.978 seconds. The tool receipt
|
|
158
|
+
shows the installed `0.1.9` helper invoked against the original destination;
|
|
159
|
+
exit 0. No repeated confirmation or technical rescue was required.
|
|
160
|
+
|
|
161
|
+
The response recognized the same saved ID, format, name and purpose, linked the
|
|
162
|
+
workspace, and kept research and app attachment separate. Independent comparison
|
|
163
|
+
against the inventory captured after synthetic-note preparation found exact
|
|
164
|
+
agreement: no added/deleted entries and no changed file hashes, including both
|
|
165
|
+
identity metadata and the note. This verifies preservation, not merely an
|
|
166
|
+
assistant statement that files were unchanged.
|
|
167
|
+
|
|
168
|
+
All five experience criteria pass for this turn: clear orientation, no unnecessary
|
|
169
|
+
questions, no user repair burden, accurate completion/attachment statements and
|
|
170
|
+
setup-only scope. The private evidence inventory retains the full tool receipt,
|
|
171
|
+
before/after hashes and PM judgment. A read-only snapshot has been retained for
|
|
172
|
+
the next fresh-chat reopen trial. Reopen, move, missing destination, adoption and
|
|
173
|
+
refusal product trials remain pending; the issue and PR remain open/draft.
|
|
174
|
+
|
|
175
|
+
## Additional same-chat readiness check — 8 November 2026
|
|
176
|
+
|
|
177
|
+
The user supplied a readiness response matching the saved identity and purpose.
|
|
178
|
+
Its actual tool receipt belongs to the original setup chat, so this does **not**
|
|
179
|
+
exercise fresh-chat reopen. Retain it as a successful read-only readiness check;
|
|
180
|
+
the fresh-session scenario remains pending, not a product failure.
|
|
181
|
+
|
|
182
|
+
One turn completed in 12.477 seconds. The installed `0.1.9` helper ran `inspect`
|
|
183
|
+
against the selected workspace and exited 0. Independent full inventory/hash
|
|
184
|
+
comparison found no changes to metadata or the synthetic note. The response
|
|
185
|
+
identified readiness, accurately separated attachment and offered a next action
|
|
186
|
+
without research. Visible experience criteria were met; no separate PM satisfaction
|
|
187
|
+
rating was supplied for this turn. The private receipt and verdict retain the
|
|
188
|
+
same-chat limitation explicitly. No repair or fixture reset was performed.
|
|
189
|
+
|
|
190
|
+
## Fresh-chat attempt without the target location — 8 November 2026
|
|
191
|
+
|
|
192
|
+
A distinct product chat received the readiness question without the prepared
|
|
193
|
+
workspace path. Its current folder was the earlier user-selected baseline folder,
|
|
194
|
+
not the candidate workspace. The installed `0.1.9` skill/reference were loaded;
|
|
195
|
+
the helper inspected that current folder and returned exit 3 (nonempty,
|
|
196
|
+
unrecognized). The assistant reported that state and asked for a destination
|
|
197
|
+
choice. No mutation command appears in the receipt.
|
|
198
|
+
|
|
199
|
+
Fresh reopen is **Blocked for this attempt: the intended workspace was not made
|
|
200
|
+
available as the selected target**. This is not evidence that the saved identity
|
|
201
|
+
could not be recognized. Independent readback confirms the actual candidate
|
|
202
|
+
workspace and synthetic note remain byte-for-byte unchanged. The 21.996-second
|
|
203
|
+
trial and missing-location precondition are retained privately rather than
|
|
204
|
+
silently relabeled as a pass. No fixture repair or product change was made.
|
|
205
|
+
The new chat can receive the explicit target and perform read-only recognition;
|
|
206
|
+
creation in the unrelated current folder is not needed for this scenario.
|
|
207
|
+
|
|
208
|
+
## Fresh-chat reopen after destination clarification — 8 November 2026
|
|
209
|
+
|
|
210
|
+
**Outcome: Pass for fresh-chat recognition with the explicit destination.** In the
|
|
211
|
+
separate readiness chat, the user supplied the saved workspace path and requested
|
|
212
|
+
inspection without initialization. No setup conversation or expected identity was
|
|
213
|
+
supplied. The installed `0.1.9` helper ran `inspect` on that exact destination;
|
|
214
|
+
exit 0. This turn took 12.697 seconds. The earlier missing-location attempt remains
|
|
215
|
+
part of the trial evidence; this was not a successful first-turn reopen.
|
|
216
|
+
|
|
217
|
+
The response recovered the original ID, format, name and purpose from the saved
|
|
218
|
+
workspace. It offered a useful next research action while distinguishing readiness
|
|
219
|
+
from source access, prior findings and app attachment. Independent complete
|
|
220
|
+
inventory/hash comparison confirms unchanged metadata and synthetic note, with
|
|
221
|
+
no added/deleted entries. No initialization, research or technical repair occurred.
|
|
222
|
+
The visible experience criteria were met after destination clarification; the PM
|
|
223
|
+
supplied the response but no separate satisfaction rating for this turn.
|
|
224
|
+
|
|
225
|
+
The create → repeat → fresh-chat recognition path now has installed-helper tool
|
|
226
|
+
evidence and independent state readback. A distinct chat is observed; enforced
|
|
227
|
+
denial of broader history/filesystem access remains unproved. Host/model limits
|
|
228
|
+
remain as recorded above. This does not complete issue #41: moved-folder identity,
|
|
229
|
+
missing destination, both adoption choices and malformed/conflicting/unsupported
|
|
230
|
+
product refusal trials are still pending, as is overall PM acceptance. Automated
|
|
231
|
+
coverage for those cases is supporting evidence, not a substitute. PR remains
|
|
232
|
+
draft; no merge, release or cleanup.
|
|
233
|
+
|
|
234
|
+
## PM missing-destination creation — 8 November 2026
|
|
235
|
+
|
|
236
|
+
**Outcome: Pass. Experience: Pass.** The PM reported “looks good.” A separate
|
|
237
|
+
product chat loaded installed `0.1.9` and its workspace reference, then ran the
|
|
238
|
+
bundled helper's `setup` at the explicitly supplied missing destination; exit 0.
|
|
239
|
+
One turn took 20.101 seconds, without additional questions or technical rescue.
|
|
240
|
+
|
|
241
|
+
The preparation inventory recorded this destination as absent. Independent
|
|
242
|
+
readback now finds only `.n8r/workspace.json`: exact supported format, a valid
|
|
243
|
+
UUID v4 distinct from the first workspace, folder-derived name and supplied
|
|
244
|
+
purpose. The final response matches that readback, links the location and keeps
|
|
245
|
+
research and attachment separate. Existing first-workspace metadata and note
|
|
246
|
+
hashes remain unchanged. The five visible experience criteria are met. Private
|
|
247
|
+
receipts, inventories and PM feedback are retained. Adoption fixtures were also
|
|
248
|
+
rechecked: each still contains only its unchanged synthetic note. Their product
|
|
249
|
+
trials, refusal cases and moved-folder recognition remain pending.
|
|
250
|
+
|
|
251
|
+
## PM in-place adoption — 8 November 2026
|
|
252
|
+
|
|
253
|
+
**Outcome: Pass. Visible experience criteria met; no separate PM rating supplied.**
|
|
254
|
+
The installed `0.1.9` helper first returned exit 3 for the nonempty unrecognized
|
|
255
|
+
fixture. The assistant asked for the destination choice. Independent inspection
|
|
256
|
+
before the PM answered found exactly the original note, with unchanged bytes and
|
|
257
|
+
no metadata. That first turn took 21.636 seconds.
|
|
258
|
+
|
|
259
|
+
After the PM said “Initialize here,” the installed helper ran `setup --adopt`
|
|
260
|
+
against the same destination; exit 0, 11.461-second turn. Independent readback
|
|
261
|
+
verified the reported UUID v4, supported format, folder-derived name and supplied
|
|
262
|
+
purpose. Only `.n8r/workspace.json` and its parent directory were added; the
|
|
263
|
+
original note is byte-for-byte unchanged. The response links the location and
|
|
264
|
+
separates research/attachment. No repeated permission or technical rescue occurred.
|
|
265
|
+
Both turn receipts and the before-choice/after-choice inventories are retained
|
|
266
|
+
privately. The alternative-choice fixtures remain untouched and inventoried for
|
|
267
|
+
the next trial. Alternative adoption, refusal and move trials remain pending.
|
|
268
|
+
|
|
269
|
+
## PM alternative-folder adoption — 8 November 2026
|
|
270
|
+
|
|
271
|
+
**Outcome: Pass. Visible experience criteria met; no separate PM rating supplied.**
|
|
272
|
+
The installed helper returned exit 3 for the second nonempty unrecognized fixture;
|
|
273
|
+
the assistant asked for a destination choice (18.840-second turn). Before the PM
|
|
274
|
+
answered, independent comparison confirmed the original note/folder unchanged and
|
|
275
|
+
the alternative destination still empty.
|
|
276
|
+
|
|
277
|
+
The PM chose the alternative path. The installed `0.1.9` helper ran ordinary
|
|
278
|
+
`setup` there without `--adopt`, exited 0, and completed in 10.476 seconds.
|
|
279
|
+
Independent readback verified the reported UUID v4, supported format,
|
|
280
|
+
folder-derived name and retained purpose. Only identity metadata was created in
|
|
281
|
+
the alternative; the original folder and note remain exactly unchanged. The
|
|
282
|
+
response identifies the chosen destination and keeps research/attachment separate.
|
|
283
|
+
Both receipts, choice-boundary inventory and final readback are retained privately.
|
|
284
|
+
All three refusal fixtures were rechecked against their initial inventories and
|
|
285
|
+
remain unchanged for independent product trials. Refusals and moved-folder
|
|
286
|
+
recognition remain pending; no merge, release or cleanup.
|
|
287
|
+
|
|
288
|
+
## PM refusal trials — 8 November 2026
|
|
289
|
+
|
|
290
|
+
**Outcome: Pass for each expected refusal. Visible experience criteria met;
|
|
291
|
+
no separate PM satisfaction ratings supplied.** Each independent product chat
|
|
292
|
+
loaded the installed `0.1.9` skill/reference and invoked its bundled helper with
|
|
293
|
+
an ordinary setup request at the selected fixture. All returned exit 2:
|
|
294
|
+
|
|
295
|
+
| Fixture | Observed explanation | Turn duration |
|
|
296
|
+
| --- | --- | --- |
|
|
297
|
+
| Malformed JSON | Invalid workspace JSON; another folder or separate repair assessment. | 19.458 seconds |
|
|
298
|
+
| Conflicting `.n8r` file | Metadata conflict; another folder or separate repair assessment. | 23.887 seconds |
|
|
299
|
+
| Unsupported format | Unsupported workspace format; another destination or repair assessment. | 17.353 seconds |
|
|
300
|
+
|
|
301
|
+
Independent before/after comparisons found exact agreement for every directory
|
|
302
|
+
entry and file hash in all three fixtures. No initialization, repair, migration,
|
|
303
|
+
downgrade or deletion occurred; the assistant made no success or research claim.
|
|
304
|
+
These are passing refusal scenarios, not blocked test runs. Receipts, inventories
|
|
305
|
+
and criterion-level verdicts are retained in the private evidence inventory.
|
|
306
|
+
|
|
307
|
+
For the final move trial, the coordinator renamed the inventoried disposable
|
|
308
|
+
first workspace to a new folder name, preserving all metadata and note bytes.
|
|
309
|
+
The old path is absent and the new path is recorded privately. This is fixture
|
|
310
|
+
preparation, not product behavior; installed-product recognition after the move
|
|
311
|
+
remains pending. No borrowed/user-owned baseline folder was moved or changed.
|
|
312
|
+
|
|
313
|
+
## PM moved-folder recognition — 8 November 2026
|
|
314
|
+
|
|
315
|
+
**Outcome: Pass. Visible experience criteria met; no separate PM rating supplied.**
|
|
316
|
+
A new product chat received the moved destination, with no original ID or setup
|
|
317
|
+
conversation supplied. It loaded installed `0.1.9` and the workspace reference,
|
|
318
|
+
then ran the installed helper's `inspect` against that path; exit 0. One turn
|
|
319
|
+
took 20.379 seconds. The response recovered the original identity and saved name,
|
|
320
|
+
retained the purpose/format, linked the new location, and offered a concrete next
|
|
321
|
+
research prompt. It separated metadata readiness from prior research, configured
|
|
322
|
+
targets and app attachment.
|
|
323
|
+
|
|
324
|
+
Independent complete inventory/hash comparison with the pre-move snapshot
|
|
325
|
+
confirms unchanged metadata and note bytes; the old path remains absent. All 14
|
|
326
|
+
installed plugin files still match candidate `3cb08f5`. Private receipts,
|
|
327
|
+
criterion verdicts, snapshots and a final fixture copy are retained with explicit
|
|
328
|
+
ownership; the live disposable fixtures are deliberately retained too. No user
|
|
329
|
+
baseline folder or Labs work was moved or cleaned up.
|
|
330
|
+
|
|
331
|
+
## Completion boundary and current checks
|
|
332
|
+
|
|
333
|
+
All planned product scenario outcomes passed within this host/environment scope.
|
|
334
|
+
The PM explicitly rated creation, repeat and missing-destination interaction
|
|
335
|
+
positively. Later responses meet the observable experience rubric, but supplying
|
|
336
|
+
those responses is not recorded as blanket acceptance. Overall PM acceptance and
|
|
337
|
+
review readiness are still pending; PR #42 remains draft and issue #41 open.
|
|
338
|
+
|
|
339
|
+
Known limits remain: fresh chats do not prove enforced denial of history or broad
|
|
340
|
+
filesystem access; host/model were not remeasured per candidate run; global-state
|
|
341
|
+
preservation is supported by tool traces rather than a complete system snapshot.
|
|
342
|
+
Interruption is covered by injected filesystem failures, not a machine crash.
|
|
343
|
+
Other hosts and CLI/Labs workspace integration remain unverified.
|
|
344
|
+
|
|
345
|
+
Local Markdown, pinned offline link/anchor and diff checks passed after evidence
|
|
346
|
+
updates. In CI run `42470396419`, all three Node jobs, fixtures/tooling and Markdown
|
|
347
|
+
passed; the local-links job failed downloading the pinned checker (curl exit 22)
|
|
348
|
+
before checking any links. Its release asset exists. This is not a passing CI
|
|
349
|
+
link check; the final branch run must be checked separately. No workflow or product
|
|
350
|
+
change was made to conceal the failed download.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Surface workspace v1
|
|
2
|
+
|
|
3
|
+
The issue #41 candidate adds standalone workspace setup and read-only recognition
|
|
4
|
+
to the existing Researcher skill. A workspace is a user-owned folder with only
|
|
5
|
+
`.n8r/workspace.json` initially. It needs no vault, Git repository, source checkout,
|
|
6
|
+
Lab, credentials or app attachment. Research and content folders are lazy.
|
|
7
|
+
|
|
8
|
+
The [bundled workspace reference](../../plugins/n8r-surface/skills/research/references/workspace.md)
|
|
9
|
+
defines the record and interaction rules used by the installed skill. The
|
|
10
|
+
[shared module](../../plugins/n8r-surface/skills/research/scripts/workspace.mjs)
|
|
11
|
+
is the authoritative validator and filesystem implementation. Plugin removal or
|
|
12
|
+
upgrade does not own or remove user workspaces.
|
|
13
|
+
|
|
14
|
+
## Public consumer boundary
|
|
15
|
+
|
|
16
|
+
Import the bundled ESM module using Node.js 22, 24 or 26. It uses built-ins only:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
import { inspectWorkspace, setupWorkspace, validateWorkspace }
|
|
20
|
+
from './plugins/n8r-surface/skills/research/scripts/workspace.mjs';
|
|
21
|
+
|
|
22
|
+
const state = inspectWorkspace(selectedDirectory); // read-only
|
|
23
|
+
// Only after an explicit setup request; adopt only after an initialize-here choice.
|
|
24
|
+
const created = setupWorkspace(selectedDirectory, { purpose: 'Investigate LibreChat' });
|
|
25
|
+
const validation = validateWorkspace(JSON.parse(savedText));
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`selectedDirectory` and `savedText` are supplied by the host. The return value has
|
|
29
|
+
`status`, `message`, `directory` when available, and `record` only for supported
|
|
30
|
+
metadata. The helper's [result table and script interface](../../plugins/n8r-surface/skills/research/references/workspace.md#interpret-the-result)
|
|
31
|
+
apply equally to importers. Imports do not run the script interface. There is no
|
|
32
|
+
npm export alias or new `n8r-surface` CLI command for this module in this slice.
|
|
33
|
+
|
|
34
|
+
Host adapters must preserve the distinction between inspection and authorized
|
|
35
|
+
setup, and between an explicit setup request and consent to adopt a nonempty
|
|
36
|
+
folder. They must consume this module rather than reimplement filesystem rules.
|
|
37
|
+
The module cannot verify conversational authorization: that is the caller's duty.
|
|
38
|
+
CLI/Labs integration and compatibility are not verified.
|
|
39
|
+
|
|
40
|
+
## Persistence and limitations
|
|
41
|
+
|
|
42
|
+
Identity uses `n8r.workspace/1`, a generated UUID v4, a nonempty display name and
|
|
43
|
+
optional purpose. The exact supported record is distinct from plugin and AI
|
|
44
|
+
Surface Model versions. Unknown fields confer no authority and are preserved by
|
|
45
|
+
read-only reuse. Rename/move preserves ID; copying a workspace copies its ID and
|
|
46
|
+
is not a new-identity operation. No rename, copy, repair or migration API is added.
|
|
47
|
+
|
|
48
|
+
Setup writes a complete temporary record, flushes it, publishes it with an atomic
|
|
49
|
+
no-overwrite hard link, removes that temporary link, and reads the result back.
|
|
50
|
+
If publication fails, setup reports failure and retains staging evidence; a
|
|
51
|
+
later request refuses incomplete `.n8r` contents. An interruption after publication
|
|
52
|
+
may leave a complete valid identity and staging file; recognition reads the
|
|
53
|
+
identity and never deletes the staging file. It cannot accept partial JSON.
|
|
54
|
+
|
|
55
|
+
This targets ordinary local macOS/Linux filesystems supporting hard links.
|
|
56
|
+
Unsupported filesystems report an I/O failure, without a weaker overwrite fallback.
|
|
57
|
+
Destination and metadata symlinks/nonregular files are refused. Ancestor aliases
|
|
58
|
+
may resolve normally; this is not an adversarial filesystem sandbox. Concurrent
|
|
59
|
+
writers, malicious path replacement and power-loss durability are outside scope.
|
|
60
|
+
No network, credentials or global settings are used. Read-only here means no
|
|
61
|
+
intentional writes; operating-system access times and host checkpoints are separate.
|
|
62
|
+
|
|
63
|
+
## Intent and evidence
|
|
64
|
+
|
|
65
|
+
**State X:** an identified installed skill, a selected writable destination and a
|
|
66
|
+
fresh product chat. **Input Y:** “Help me set up an n8r workspace here for
|
|
67
|
+
investigating LibreChat. Set it up only; do not start researching yet.”
|
|
68
|
+
**Outcome Z:** one valid identity record, a useful next action, no research or
|
|
69
|
+
unrelated configuration; repeat and fresh-session inspection preserve identity
|
|
70
|
+
and all existing bytes.
|
|
71
|
+
|
|
72
|
+
[Canonical Gherkin](../../tests/acceptance/skill-workspace.feature),
|
|
73
|
+
[human walkthrough](workspace-human-check.md) and
|
|
74
|
+
[verification status](workspace-verification.md) distinguish deterministic checks,
|
|
75
|
+
installed-product rehearsal and PM acceptance. Gherkin is manually runnable; no
|
|
76
|
+
framework is installed.
|
|
77
|
+
|
|
78
|
+
Skill instructions, helper and references ship together in plugin `0.1.9`; both
|
|
79
|
+
manifests match. The repository marketplace points to that same subtree and has
|
|
80
|
+
no separate version field. The npm package version remains unchanged. The existing
|
|
81
|
+
CLI instruction-bundle revision guard is aligned so packaging does not break;
|
|
82
|
+
its restricted runner gains no workspace tools. Future consumer releases must
|
|
83
|
+
identify the bundled helper revision and rerun the same contract checks.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Synthetic Researcher acceptance cases
|
|
2
|
+
|
|
3
|
+
These fictional products and documents exercise the
|
|
4
|
+
[experimental 0.1 contracts](../../docs/n8r-surface/contracts.md). They are not
|
|
5
|
+
LibreChat findings, AI-generated discovery results or a working integration.
|
|
6
|
+
No inference, credentials, network access or running target is needed to check them.
|
|
7
|
+
|
|
8
|
+
Lumen Desk is a fictional AI support-summary application. Harbor Archive is an
|
|
9
|
+
independent fictional document/event archive. A synthetic human selects a proposed
|
|
10
|
+
composition after researching both. The sources establish possible interfaces;
|
|
11
|
+
payload compatibility and effective configuration remain unverified.
|
|
12
|
+
|
|
13
|
+
| File | Case |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| [Lumen guide](sources/lumen-guide.md), [settings](sources/lumen-settings.md) | Conflicting batch limits of 10 and 25; inference model unknown. |
|
|
16
|
+
| [Lumen r1](lumen-r1.research.html) | Initial research; archive/identity selected, callback deferred. |
|
|
17
|
+
| [Pending manual edit](lumen-manual-edit.pending.html) | Deliberately invalid visible edit; embedded data remains r1. |
|
|
18
|
+
| [Lumen r2](lumen-r2.research.html) | Human-reviewed callback selection, preserving findings and opaque extension data. |
|
|
19
|
+
| [Harbor interface notes](sources/harbor-api.md) | Independent product with unknown authentication. |
|
|
20
|
+
| [Harbor r1](harbor-r1.research.html) | Useful incomplete research from one source. |
|
|
21
|
+
| [Harbor authentication note](sources/harbor-auth.md) | Second supplied source establishes an OIDC option. |
|
|
22
|
+
| [Harbor r2](harbor-r2.research.html) | Continuation keeps the authentication finding's identity and records a human selection. |
|
|
23
|
+
| [Selected JSON](composed.surface.json), [selected YAML](composed.surface.yaml) | Same partial graph, referencing the exact r2 records. |
|
|
24
|
+
|
|
25
|
+
Open a research HTML file in a browser to read its findings and inspect its embedded
|
|
26
|
+
data. The data owns all facts; rendering is a derived view. These checked fixtures
|
|
27
|
+
are inert, but arbitrary imported HTML must be validated before trusted rendering.
|
|
28
|
+
|
|
29
|
+
The separate [Capability and Bound examples](descriptions/README.md) exercise the
|
|
30
|
+
JSON-only `0.2` description contract. They do not convert these selected `0.1`
|
|
31
|
+
definitions into deployments.
|
|
32
|
+
|
|
33
|
+
For the revised #50 inspection, use the [shared relationship 0.3 examples](relationships/README.md).
|
|
34
|
+
They put purpose, integration mechanism, safe config references and evidence on
|
|
35
|
+
the edges in both Capability and Bound descriptions.
|
|
36
|
+
|
|
37
|
+
## Selected composition
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
flowchart LR
|
|
41
|
+
Lumen[Lumen Desk] -->|documents| Harbor[Harbor Archive]
|
|
42
|
+
Lumen -->|audit events| Harbor
|
|
43
|
+
Harbor -->|callback| Lumen
|
|
44
|
+
Lumen -->|uses identity| Identity[Shared identity service]
|
|
45
|
+
Harbor -->|uses identity| Identity
|
|
46
|
+
Lumen -->|uses inference| Inference[Inference service]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The graph has shared identity, a cycle, identified parallel edges and node/edge
|
|
50
|
+
attributes. All edges are declared only. The identity service's product and
|
|
51
|
+
inference version remain unknown. Configuration/secret requirements are explicit
|
|
52
|
+
local references without credential values. Attributes exercise known, unknown,
|
|
53
|
+
omitted, redacted, absent and out-of-scope states. The conflicting batch limit is
|
|
54
|
+
unknown in the selected definition and points back to both research claims.
|
|
55
|
+
|
|
56
|
+
The example vocabulary `urn:n8r:vocabulary:researcher-example` version `0.1` has
|
|
57
|
+
node terms `application`, `service`, `inference-service` and relationship terms
|
|
58
|
+
`sends-documents`, `sends-audit`, `notifies`, `uses-identity`, `uses-inference`.
|
|
59
|
+
These mean precisely the labeled roles/connections above, with no hidden protocol
|
|
60
|
+
or lifecycle behavior. They are not a general ontology or a consumer capability.
|
|
61
|
+
|
|
62
|
+
## Manual-edit case
|
|
63
|
+
|
|
64
|
+
The pending file changes only the visible callback-decision reason. Its original
|
|
65
|
+
embedded decision remains deferred. `readResearchHtml` must reject it as an
|
|
66
|
+
HTML/data conflict. It must not silently choose the old embedded data or assume
|
|
67
|
+
that visible prose establishes a structured decision.
|
|
68
|
+
|
|
69
|
+
The synthetic review resolves the intended change: include callbacks in the desired
|
|
70
|
+
composition, while retaining compatibility gaps. Lumen r2 records that selection,
|
|
71
|
+
its author/time/reason and a human note, then regenerates the visible projection.
|
|
72
|
+
Its parent digest pins r1; both earlier and pending files remain available.
|
|
73
|
+
This demonstrates a reviewed result, not an implemented automatic reconciliation
|
|
74
|
+
or persistence command.
|
|
75
|
+
|
|
76
|
+
## Run the checks
|
|
77
|
+
|
|
78
|
+
From the repository root, with a supported Node.js and npm:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
npm ci
|
|
82
|
+
npm test
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Dependency installation uses the npm registry. The tests themselves are offline.
|
|
86
|
+
They check source-byte hashes, internal references, exact external revisions,
|
|
87
|
+
HTML/data agreement, rejection of the pending edit, successor lineage, unknown
|
|
88
|
+
values and JSON/YAML equality. Semantic assertions verify the competing limits,
|
|
89
|
+
new authentication evidence and selected graph structure. These checks do not
|
|
90
|
+
verify an AI Researcher, facts about a real product or Lab compatibility.
|
|
91
|
+
|
|
92
|
+
The future #17 runner and external skill must use these same cases, including a
|
|
93
|
+
second source and human correction, and compare facts/choices/gaps rather than
|
|
94
|
+
exact generated wording. Later Lab import/continuation must retain incomplete
|
|
95
|
+
records, IDs, versions, provenance and extensions, and report unsupported meanings.
|
|
96
|
+
|
|
97
|
+
Machine-readable fixtures and their rendered research HTML use
|
|
98
|
+
[Apache-2.0](../../LICENSE). The synthetic source documents and this guide use
|
|
99
|
+
[CC-BY-4.0](../../LICENSE-DOCS); credit AI Surface Model contributors. All material
|
|
100
|
+
was created for these fixtures; no third-party product documentation is included.
|