@n8r/surface 0.1.0-experimental.2 → 0.1.0-experimental.5

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