@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.
Files changed (181) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-DOCS +395 -0
  3. package/LICENSING.md +36 -0
  4. package/README.md +207 -2
  5. package/dist/activity.d.ts +16 -0
  6. package/dist/activity.js +44 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +412 -0
  9. package/dist/codec.d.ts +6 -0
  10. package/dist/codec.js +56 -0
  11. package/dist/codex.d.ts +72 -0
  12. package/dist/codex.js +526 -0
  13. package/dist/contracts.d.ts +235 -0
  14. package/dist/contracts.js +1 -0
  15. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  16. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  17. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  18. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  19. package/dist/cyclonedx-validation.d.ts +1 -0
  20. package/dist/cyclonedx-validation.js +45 -0
  21. package/dist/html.d.ts +5 -0
  22. package/dist/html.js +74 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.js +5 -0
  25. package/dist/notes.d.ts +52 -0
  26. package/dist/notes.js +184 -0
  27. package/dist/portable.d.ts +10 -0
  28. package/dist/portable.js +71 -0
  29. package/dist/recent.d.ts +9 -0
  30. package/dist/recent.js +71 -0
  31. package/dist/revisions.d.ts +2 -0
  32. package/dist/revisions.js +60 -0
  33. package/dist/settings.d.ts +23 -0
  34. package/dist/settings.js +100 -0
  35. package/dist/setup.d.ts +9 -0
  36. package/dist/setup.js +161 -0
  37. package/dist/skill-artifacts-cli.d.ts +1 -0
  38. package/dist/skill-artifacts-cli.js +13 -0
  39. package/dist/skill-artifacts.d.ts +15 -0
  40. package/dist/skill-artifacts.js +184 -0
  41. package/dist/skill-cyclonedx.d.ts +26 -0
  42. package/dist/skill-cyclonedx.js +214 -0
  43. package/dist/skill-presentation.d.ts +10 -0
  44. package/dist/skill-presentation.js +108 -0
  45. package/dist/skill-surface-cli.d.ts +1 -0
  46. package/dist/skill-surface-cli.js +37 -0
  47. package/dist/skill-surface-store.d.ts +7 -0
  48. package/dist/skill-surface-store.js +126 -0
  49. package/dist/source-tools.d.ts +102 -0
  50. package/dist/source-tools.js +201 -0
  51. package/dist/startup.d.ts +7 -0
  52. package/dist/startup.js +74 -0
  53. package/dist/surface-bom.d.ts +73 -0
  54. package/dist/surface-bom.js +139 -0
  55. package/dist/surface-draft.d.ts +22 -0
  56. package/dist/surface-draft.js +112 -0
  57. package/dist/surface-instructions.d.ts +3 -0
  58. package/dist/surface-instructions.js +32 -0
  59. package/dist/surface-overview.d.ts +15 -0
  60. package/dist/surface-overview.js +86 -0
  61. package/dist/surface-store.d.ts +34 -0
  62. package/dist/surface-store.js +213 -0
  63. package/dist/surface-view.d.ts +3 -0
  64. package/dist/surface-view.js +50 -0
  65. package/dist/validate.d.ts +4 -0
  66. package/dist/validate.js +482 -0
  67. package/docs/n8r-surface/README.md +133 -0
  68. package/docs/n8r-surface/cli-bundles.md +72 -0
  69. package/docs/n8r-surface/codex-research-transcript.md +51 -0
  70. package/docs/n8r-surface/codex-research-verification.md +176 -0
  71. package/docs/n8r-surface/command-outcomes.md +711 -0
  72. package/docs/n8r-surface/contracts.md +220 -0
  73. package/docs/n8r-surface/critical-path.md +184 -0
  74. package/docs/n8r-surface/design.md +289 -0
  75. package/docs/n8r-surface/first-use-access.md +143 -0
  76. package/docs/n8r-surface/first-use-overview.md +262 -0
  77. package/docs/n8r-surface/getting-started.md +74 -0
  78. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  79. package/docs/n8r-surface/host-contract.md +176 -0
  80. package/docs/n8r-surface/implementation-decisions.md +96 -0
  81. package/docs/n8r-surface/instance-first-research.md +209 -0
  82. package/docs/n8r-surface/npm-distribution.md +107 -0
  83. package/docs/n8r-surface/npm-release.md +315 -0
  84. package/docs/n8r-surface/product-direction.md +327 -0
  85. package/docs/n8r-surface/recreation-handoff.md +117 -0
  86. package/docs/n8r-surface/researcher-discovery.md +157 -0
  87. package/docs/n8r-surface/researcher-prepared-check.md +117 -0
  88. package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
  89. package/docs/n8r-surface/researcher-repository-check.md +95 -0
  90. package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
  91. package/docs/n8r-surface/researcher-skill-verification.md +725 -0
  92. package/docs/n8r-surface/researcher-skill.md +309 -0
  93. package/docs/n8r-surface/researcher-vault.md +134 -0
  94. package/docs/n8r-surface/save-reopen-transcript.md +211 -0
  95. package/docs/n8r-surface/save-reopen-verification.md +152 -0
  96. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  97. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  98. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  99. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  100. package/docs/n8r-surface/skill-manual.md +129 -0
  101. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  102. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  103. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  104. package/docs/n8r-surface/startup-human-check.md +172 -0
  105. package/docs/n8r-surface/startup-verification.md +161 -0
  106. package/docs/n8r-surface/startup.md +151 -0
  107. package/docs/n8r-surface/surface-description-contract.md +224 -0
  108. package/docs/n8r-surface/surface-descriptions.md +173 -0
  109. package/docs/n8r-surface/surface-relationships.md +231 -0
  110. package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
  111. package/docs/n8r-surface/surface-revisions-verification.md +161 -0
  112. package/docs/n8r-surface/tester-candidate.md +158 -0
  113. package/docs/n8r-surface/vault-setup-verification.md +210 -0
  114. package/docs/n8r-surface/verification.md +117 -0
  115. package/docs/n8r-surface/versioning.md +172 -0
  116. package/docs/n8r-surface/workspace-human-check.md +101 -0
  117. package/docs/n8r-surface/workspace-installation.md +68 -0
  118. package/docs/n8r-surface/workspace-verification.md +350 -0
  119. package/docs/n8r-surface/workspace.md +83 -0
  120. package/examples/researcher/README.md +100 -0
  121. package/examples/researcher/composed.surface.json +430 -0
  122. package/examples/researcher/composed.surface.yaml +283 -0
  123. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  124. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  125. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  126. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  127. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  128. package/examples/researcher/descriptions/README.md +29 -0
  129. package/examples/researcher/descriptions/bound-r1.json +141 -0
  130. package/examples/researcher/descriptions/bound-r2.json +153 -0
  131. package/examples/researcher/descriptions/capability.json +167 -0
  132. package/examples/researcher/descriptions/research-r1.json +153 -0
  133. package/examples/researcher/descriptions/research-r2.json +157 -0
  134. package/examples/researcher/descriptions/sources.md +24 -0
  135. package/examples/researcher/harbor-r1.research.html +193 -0
  136. package/examples/researcher/harbor-r2.research.html +226 -0
  137. package/examples/researcher/lumen-manual-edit.pending.html +271 -0
  138. package/examples/researcher/lumen-r1.research.html +271 -0
  139. package/examples/researcher/lumen-r2.research.html +280 -0
  140. package/examples/researcher/relationships/README.md +34 -0
  141. package/examples/researcher/relationships/bound-r1.json +346 -0
  142. package/examples/researcher/relationships/bound-r2.json +358 -0
  143. package/examples/researcher/relationships/capability.json +325 -0
  144. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  145. package/examples/researcher/relationships/research-r1.json +300 -0
  146. package/examples/researcher/relationships/research-r2.json +304 -0
  147. package/examples/researcher/relationships/sources.md +38 -0
  148. package/examples/researcher/sources/harbor-api.md +16 -0
  149. package/examples/researcher/sources/harbor-auth.md +8 -0
  150. package/examples/researcher/sources/lumen-guide.md +28 -0
  151. package/examples/researcher/sources/lumen-settings.md +9 -0
  152. package/examples/researcher/surface-bom/README.md +17 -0
  153. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  154. package/package.json +45 -4
  155. package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
  156. package/plugins/n8r-surface/LICENSE +202 -0
  157. package/plugins/n8r-surface/LICENSE-DOCS +395 -0
  158. package/plugins/n8r-surface/LICENSING.md +39 -0
  159. package/plugins/n8r-surface/assets/icon.svg +5 -0
  160. package/plugins/n8r-surface/plugin.json +27 -0
  161. package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
  162. package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
  163. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  164. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  165. package/plugins/n8r-surface/skills/research/references/discovery-map.md +178 -0
  166. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  167. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  168. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  169. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  170. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  171. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  172. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  173. package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
  174. package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
  175. package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
  176. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  177. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  178. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  179. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  180. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  181. package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
@@ -0,0 +1,144 @@
1
+ # Historical skill 0.1.12 CycloneDX verification
2
+
3
+ This alongside-records rehearsal used explicitly supplied historical notes and
4
+ model intent; it was not a neutral fresh assessment. It does not verify the revised
5
+ BOM-authority design. See [candidate 0.1.13 evidence](skill-bom-verification.md).
6
+
7
+ Issue [#68](https://github.com/injectionator/n8r-surface/issues/68), draft
8
+ [PR #69](https://github.com/injectionator/n8r-surface/pull/69). Agent rehearsal on
9
+ 13 November 2026; human acceptance, merge and release remain separate decisions.
10
+
11
+ ## Revision and environment
12
+
13
+ The isolated installation contains all 22 plugin files exactly matching source
14
+ commit `da0e445221d2209fc843d0cef682606610d22ad5`, candidate 0.1.12.
15
+ Codex CLI 0.166.0, ChatGPT sign-in, configured `gpt-6-astra`, Node 26.13.0,
16
+ macOS. No API-key or provider/model fallback. The active everyday installation
17
+ remained 0.1.11; this candidate used a separate host home and private workspace.
18
+
19
+ The harness uses ephemeral app-server sessions with the installed skill supplied
20
+ as a skill input. Network, memory, unrelated tools and repository instructions are
21
+ disabled. Only the selected workspace and installed skill are accessible, apart
22
+ from required runtime files. A filesystem probe checks that private evidence and
23
+ unsupplied repository instructions cannot be read. Source-pack provenance, raw
24
+ transcripts, outputs, hashes and environment receipts stay in the selected private
25
+ vault; this public record contains no private deployment configuration.
26
+
27
+ ## Baseline and task
28
+
29
+ State X: installed 0.1.11, supplied source pack and writable workspace. Input Y:
30
+ inspect the installed skill/helper and determine whether checked CycloneDX export
31
+ is available, without substituting invented findings or an external exporter.
32
+ Observed: only native artifact operations were available; the host identified the
33
+ missing mapping/export/validation workflow. This was a bounded capability check,
34
+ not a failed full research run.
35
+
36
+ The candidate task was to research the supplied multi-component sources, explain
37
+ the system to a consultant advising a security engineer, preserve intended versus
38
+ historical configuration, save native records and CycloneDX alongside them, and
39
+ read both back. The source pack contained selected code, documentation and safe
40
+ historical operational projections recovered from prior work. No applicable SBOM
41
+ was supplied; network lookup was unavailable. Upstream revision, package and
42
+ transitive coverage remain explicit gaps.
43
+
44
+ ## Observed initial result
45
+
46
+ The installed candidate performed its own investigation and preparation. The
47
+ developing agent supplied sources and user instructions, not prewritten findings.
48
+
49
+ - Twelve recorded source hashes match their supplied files after the run.
50
+ - Checked native Capability records contain nine nodes and nine relationships.
51
+ - CycloneDX 1.7 contains five components and four services. It has no concrete
52
+ dependencies because the candidate chose Capability for this evidence scope.
53
+ - Native snapshot equals the checked native bundle. Mapping/report retains the
54
+ connection meanings, evidence and uncertainty absent from the BOM view.
55
+ - Intended model and different historical model evidence remain distinct. Source
56
+ control points are identified without asserting present deployment or efficacy.
57
+ - Native brief, HTML and JSON, consultant summary and five-member exchange were
58
+ saved and independently reopened. The candidate corrected one inspection error
59
+ (`mapping.nodes` is nested inside the report), then completed readback. It did
60
+ not replace the successfully checked export with unchecked JSON.
61
+
62
+ ## Fresh-session correction
63
+
64
+ A second ephemeral process confirmed that the previous thread was unavailable,
65
+ then recovered from the saved directories and supplied sources. The rehearsal
66
+ input added an owner decision to keep connector tools disabled in the intended
67
+ configuration and require separate authorization/assessment for a future enabled
68
+ path. It was explicitly design intent, not evidence of deployed configuration.
69
+
70
+ The candidate saved native and exchange successors. Independent developer readback
71
+ confirmed all ten earlier artifact files and all twelve sources were unchanged;
72
+ all nine node identities and the prior decision were preserved. Decisions grew
73
+ from one to two. The BOM serial stayed stable and its version advanced from 1 to
74
+ 2. Native snapshots matched both checked bundles. This is an actual installed-agent
75
+ rehearsal, not human acceptance.
76
+
77
+ ## Independent consumer
78
+
79
+ CycloneDX Python Library **11.12.0**, Python 3.13.1, in a separate environment:
80
+ `JsonStrictValidator(SchemaVersion.V1_7)` returned no validation error;
81
+ `Bom.from_json(data=json.loads(text))` deserialized the synthetic configured BOM.
82
+ The consumer listed its application and separate services and resolved the
83
+ selected application dependency to the concrete Atlas target rather than its
84
+ abstract database role. The [retained synthetic exchange](../../examples/researcher/cyclonedx/configured/README.md)
85
+ is available for inspection. The same independent consumer then validated and
86
+ loaded both actual installed-skill BOMs: five components, four services, versions
87
+ 1 and 2, no dependency edges, as expected for this Capability projection.
88
+ This establishes those bounded read tasks only; it
89
+ is not lossless round-trip, general consumer or runtime compatibility.
90
+
91
+ ## Maintainer checks
92
+
93
+ - Full suite: 208 passing on Node 22.23.2; 209 passing on Node 24.22.2 and
94
+ 26.13.0 after adding the installation-buffer regression. Its focused 15-test
95
+ suite also passes on Node 22.23.2.
96
+ - Installed package checks pass on all three Node majors, including existing
97
+ terminal setup/reuse/preservation interactions. Exact skill bundle and notices
98
+ checks pass; no runtime dependency installation is needed by either helper.
99
+ - Twenty-four Git workflow tests and shell syntax check pass. Example JSON parses;
100
+ native contracts/reference checks and CycloneDX schema/reference checks are
101
+ bounded validation, not universal model conformance.
102
+ - Markdown lint 0.24.0, offline links with lychee 0.24.2, citation metadata with
103
+ cffconvert 2.0.0 and whitespace checks are run before the final handoff.
104
+
105
+ Two integration failures were found and fixed during actual checks: installed-byte
106
+ verification exceeded its old one-MiB Git output buffer, and package smoke checks
107
+ still expected the previous instruction version/digest. The buffer now permits
108
+ 16 MiB with a large-helper regression; the digest was independently calculated
109
+ from the candidate source bytes. A fresh whole-branch reviewer confirmed the
110
+ package-pin failure and found no critical projection issue. Additional tamper and
111
+ classification boundaries were manually exercised by that reviewer; retaining
112
+ more automated variants and clarifying the shared skill paragraph's CLI boundary
113
+ remain minor follow-ups. The new exchange is a standalone skill capability, not
114
+ a new product CLI command.
115
+
116
+ ## Human task list
117
+
118
+ Prerequisites: candidate 0.1.12, Node 22/24/26, a readable source set and a writable
119
+ disposable workspace. Open a fresh Codex chat in that workspace. Maintainers can
120
+ install the pinned source through the normal plugin marketplace mechanism; see
121
+ [skill installation](researcher-skill.md). Do not substitute an older installation.
122
+
123
+ - [ ] Supply your source paths and say: `Use n8r-surface Researcher to explain this
124
+ multi-component Surface. Save checked native records and CycloneDX 1.7 alongside
125
+ them. Explain what the evidence establishes and what remains unknown.` Expect
126
+ source-backed findings and links to the native brief and exchange files.
127
+ - [ ] Open the brief and `mapping.json`. Expect intended/historical/current state
128
+ to remain distinct. Open `surface.cdx.json`; expect identified components and
129
+ services, with only eligible explicitly selected dependencies. Capability output
130
+ may have none. Unknown coverage is explicit.
131
+ - [ ] Start a fresh chat, supply saved directories and say: `Reopen these records.
132
+ Record this correction as a design decision, save successors and preserve all
133
+ earlier records and decisions.` Supply a correction. Expect stable node IDs and
134
+ BOM serial, incremented BOM version and links to both generations.
135
+ - [ ] Report **Pass / Fail / Blocked**, candidate revision, interactions and output
136
+ paths. Missing output, invented facts, lost decisions or modified prior records
137
+ fail. Missing installation/source access blocks. Keep evidence for review; later
138
+ remove only the disposable workspace, not original sources.
139
+
140
+ Values such as names, node counts and selected dependencies depend on the supplied
141
+ sources; the nine-node rehearsal is not a required graph size. The
142
+ [working manual](skill-manual.md) explains the user journey. Technical helper
143
+ verification uses exit 0 for `saved-and-read-back` / `checked`; a nonzero exit is
144
+ not success. Those commands are maintainer evidence, not required user interactions.
@@ -0,0 +1,85 @@
1
+ # Self-contained CycloneDX Surface
2
+
3
+ Skill **0.1.13** introduced the format below; candidate [0.1.14](first-use-overview.md)
4
+ adds checked optional grouping and a connected overview without changing profile 1.
5
+ The 0.1.13 increment replaces the 0.1.12 alongside-native exchange as the
6
+ destination for new Surface saves. Issue [#68](https://github.com/injectionator/n8r-surface/issues/68).
7
+ One CycloneDX 1.7 BOM carries inventory, relationships, evidence, decisions,
8
+ uncertainties and investigation state. The brief, HTML map and Markdown journal
9
+ are generated from it. Earlier saves remain intact and deliberately readable.
10
+ The standalone product CLI retains its existing pair behavior; this is skill-first.
11
+
12
+ ## Standard fields and profile
13
+
14
+ The [CycloneDX 1.7 reference](https://cyclonedx.org/docs/1.7/json/) supplies
15
+ components/services, metadata, dependencies, annotations, external references,
16
+ citations and properties. The [BOM-Link specification](https://cyclonedx.org/capabilities/bomlink/)
17
+ provides version-pinned predecessor identity. We use one BOM per revision, not a
18
+ set whose missing member could hide required investigation state.
19
+
20
+ The exact [Surface profile](../../plugins/n8r-surface/skills/research/references/cyclonedx.md#profile-properties)
21
+ and [synthetic example](../../examples/researcher/surface-bom/initial.cdx.json)
22
+ are bundled with the installed skill. Profile version 1 uses unregistered
23
+ `n8r:surface:` properties: objective, scope, individual relationship/evidence/entry
24
+ records, coverage and gaps. It does not embed the native research/Surface bundle.
25
+
26
+ | Meaning | Standard representation and bounded addition |
27
+ | --- | --- |
28
+ | Application, model, service | `components` / `services` with stable `bom-ref`; model type `machine-learning-model`. |
29
+ | Selected dependency | Standard `dependencies`, mechanically checked against selected dependency-kind profile relationships. |
30
+ | Supported alternative | Individual relationship property with support evidence, optionality/group, selection and conditions. Never an unconditional dependency merely because supported. |
31
+ | Hosting, integration, data flow | Distinct relationship kinds, not interchangeable `dependsOn` edges. |
32
+ | Dated observed use | Observation records with timestamp and observation-basis evidence; independent of support/selection. |
33
+ | Findings, choices, disagreements | Standard annotations with subjects, annotator, timestamp and readable text. |
34
+ | Source identity | External references with safe locator, hash, source version/capture scope in comment; profile evidence points to exact locations and applicability. |
35
+ | Attribution | Standard citations with checked JSON Pointers and attribution references. Not a replacement for evidence. |
36
+ | Investigation journey | Ordered entry properties: objective-driven steps, questions, findings, decisions, branches, supersession, access needs and reasons for deferral. |
37
+ | Lifecycle | Capture context in metadata when established; never a forced whole-Surface evidence state. |
38
+ | Revision | Stable serial, increasing version, exact predecessor BOM-Link and byte digest. |
39
+
40
+ Missing configuration is unestablished selection, not absence. A placeholder is
41
+ not a concrete binding. Safe static configuration can establish selection.
42
+ Selection evidence distinguishes actual configuration from human design intent.
43
+ Optionality is not a confidence score. A group alone does not assert exclusivity.
44
+
45
+ ## Save and recovery boundary
46
+
47
+ The standalone `surface.mjs` checks official pinned schemas, profile shapes,
48
+ references, evidence applicability and exact dependency projection. It saves one
49
+ new private revision folder with BOM, generated views and a byte manifest.
50
+ The BOM alone reopens; sibling files are not semantic dependencies.
51
+
52
+ For directory continuation, edited generated views block ordinary save. Explicit
53
+ reconciliation reads the proposals, retains the edited files, records an accepted
54
+ choice/explanation and writes a successor. Predecessor BOM hashes are still checked.
55
+ Supplying a lone BOM proves only its own structure and supplied predecessor identity,
56
+ not that an unavailable old manifest or source is intact. No authenticity claim.
57
+
58
+ The reader preserves historical annotations/source references and decision
59
+ provenance; corrections add evidence and can supersede decisions. Nodes and
60
+ relationship endpoints/kinds retain identity. Older revisions are never rewritten.
61
+ Unsupported profile versions, dangling references and ambiguous projections fail.
62
+
63
+ Legacy `artifacts.mjs read` and `cyclonedx.mjs read` remain available for deliberately
64
+ supplied old saves. Migration requires reviewing and transferring their meanings
65
+ into a fresh profile BOM, with explicit provenance/limits. No automatic lossless
66
+ legacy conversion is claimed. No second native authority is created for new saves.
67
+
68
+ ## Consumer and visualization limits
69
+
70
+ Generic consumers can read standard inventory and selected dependencies. They
71
+ cannot reconstruct possible paths or investigation state without this profile.
72
+ The helper renders those distinctions as solid selected and dashed other paths,
73
+ with support state, evidence, observations and journal available for inspection.
74
+
75
+ Sunshine at commit `beaab3faf2bab234069a8677fc627de2f0f01a3d` generated HTML from
76
+ the synthetic 1.7 BOM, including application/model names and all four services.
77
+ Its output omitted the profile relationship IDs, evidence and decision entries.
78
+ It is therefore not selected as the investigation visual. This is a file-level
79
+ consumer exercise, not a browser rendering or general 1.7 compatibility claim.
80
+ See [Sunshine source](https://github.com/CycloneDX/Sunshine/tree/beaab3faf2bab234069a8677fc627de2f0f01a3d).
81
+
82
+ The visual requires no scripts, remote assets or network. HTML escaping and a
83
+ restrictive content policy keep saved text inert. Browser visual QA is separately
84
+ tracked in the [verification record](skill-bom-verification.md). Validity does not
85
+ establish research accuracy, complete inventory, deployed controls or runtime use.
@@ -0,0 +1,129 @@
1
+ # Researcher skill: working user manual
2
+
3
+ For installation and a short first trial, use the [tester guide](tester-candidate.md).
4
+
5
+ Candidate 0.1.13 saves the Surface with a brief, visual map and investigation
6
+ journal. This manual develops through actual use; the
7
+ [verification record](skill-bom-verification.md) distinguishes exercised behavior
8
+ from pending human acceptance. The earlier [0.1.12 rehearsal](skill-cyclonedx-verification.md)
9
+ used historical material and a different save format; it was not a neutral fresh
10
+ assessment.
11
+
12
+ ## Start with what you have
13
+
14
+ Candidate 0.1.16 can begin with a short description or deployment document.
15
+ Researcher should show a provisional map, then help you provide one useful next
16
+ source. You do not need to prepare a Lab, repository or SSH connection first.
17
+ See [first-use examples and checks](first-use-access.md). A web Project can hold
18
+ uploaded sources; it does not automatically connect a laptop folder. Saving and
19
+ live access depend on the tools available in the current chat.
20
+
21
+ ## Start with your question and sources
22
+
23
+ Open a fresh chat with the Researcher and explicitly supply a checkout, source
24
+ pack or permitted documentation. You do not need to classify the Surface.
25
+
26
+ > Explain the AI-relevant components and paths in this source for a security
27
+ > engineer. Save the Surface in this folder and maintain an investigation journal
28
+ > as we go. Show me what is known, what remains uncertain and useful next steps.
29
+
30
+ Expect a useful initial plan and a shallow map, then evidence-driven investigation.
31
+ The Researcher uses this chat's supplied sources. It should not search old chats or
32
+ vault research automatically. If the host supplies recognizable historical context,
33
+ it should disclose that context; ask it to exclude it when inappropriate. This
34
+ is not a promise that the host has no memory.
35
+
36
+ ## Start with an existing system
37
+
38
+ If your question concerns a running composition, identify the instance and the
39
+ read-only access you permit. Supply relevant remote repositories, documents or
40
+ URLs through tools available in your Codex/ChatGPT host. A URL alone does not
41
+ provide private access, and a local checkout may describe only one component.
42
+ Candidate 0.1.15 follows this [instance-first workflow](instance-first-research.md).
43
+
44
+ > Understand this running system using the host access I have provided. Explain
45
+ > its components and connections, what is configured, what has been observed and
46
+ > what remains untested. Keep inspection read-only and save the Surface here.
47
+
48
+ Expect partial progress when an integration cannot be inspected. Researcher does
49
+ not start a service, sign in for you or send a test prompt to complete the graph.
50
+ On a later visit, it distinguishes actual target changes from newly learned facts
51
+ and missing access. The existing source-only workflow remains available.
52
+
53
+ ## Inspect the developing Surface
54
+
55
+ Open the latest brief for the current explanation, the HTML map for paths and
56
+ expandable evidence, and the journal for the investigation journey. The Researcher
57
+ should provide the working folder and absolute file links without changing projects.
58
+ The journal retains scope, available evidence, findings, choices, questions,
59
+ diversions, deferred paths and reasons. Each next step explains its purpose and
60
+ needed access. You can inspect the whole map, redirect or stop at any time.
61
+
62
+ A supported database is a possibility; it is not necessarily the selected target.
63
+ Safe static configuration may establish selection, while a placeholder cannot.
64
+ Missing configuration means unknown selection. Solid paths are selected; dashed
65
+ paths require inspecting their support/selection details. Dated observed use is
66
+ separate. Optional does not mean weak evidence.
67
+
68
+ ## Redirect and save
69
+
70
+ > Pause this path and investigate authentication first. Keep the deferred work,
71
+ > explain what access would help, and save the updated Surface.
72
+
73
+ Expect the choice and its reason in the journal, useful next options and a new
74
+ numbered revision. Previous files remain unchanged. Saving generates a brief,
75
+ map and journal from the same Surface; there is no separate native data authority.
76
+ The technical file is CycloneDX 1.7 with a bounded Surface profile. Ordinary users
77
+ need not choose that format or ask for a separate export.
78
+
79
+ ## Return in a fresh chat
80
+
81
+ Supply the latest `surface.cdx.json` and selected sources. The BOM alone retains
82
+ relationships, evidence, choices, uncertainty and the investigation journey.
83
+
84
+ > Continue this Surface. What did I choose, what remains uncertain, and what
85
+ > should we investigate next? Keep earlier decisions and revisions.
86
+
87
+ The Researcher reads the supplied Surface, re-establishes access and tells you
88
+ when evidence cannot be refreshed. A new observation does not rewrite old ones.
89
+ If you edit a generated journal, supply that edited folder and ask to reconcile
90
+ it. The Researcher treats edits as proposals, records accepted changes in a new
91
+ revision and preserves the edited original. It must not silently overwrite it.
92
+
93
+ Old native/exchange saves remain readable when deliberately supplied. Migration
94
+ requires reviewing their evidence and recording limits; no automatic lossless
95
+ conversion is claimed. See the [format details](skill-cyclonedx.md).
96
+
97
+ ## What the fresh rehearsal showed
98
+
99
+ The installed Researcher saved an initial plan before inspecting sources, then a
100
+ second revision with the partial graph and next options. It worked from the
101
+ explicitly supplied checkout, without the old operational notes. It reported that
102
+ Git inspection was unavailable in its session and used inspected-file hashes.
103
+ That is a useful distinction: source identity can be bounded without pretending
104
+ the entire checkout or deployment has been verified.
105
+
106
+ A scripted user diversion successfully moved the investigation to authentication.
107
+ The journal kept the tool/document paths as deferred, with reasons, and retained
108
+ the choice as a rehearsal decision. Earlier files were unchanged. The agent's
109
+ presentation check initially missed a setting name because Markdown escaped its
110
+ underscores; it normalized that escaping and completed readback. If a check fails,
111
+ ask what failed and how readback was verified, rather than accepting a bare success
112
+ claim.
113
+
114
+ The fresh continuation received only a copied BOM and source access. It recovered
115
+ the authentication-first choice and deferred work, proposed two next steps with
116
+ access requirements, and saved another revision. Earlier files, relationships and
117
+ source evidence remained intact. This exercises the ordinary “continue this
118
+ Surface” interaction; human visual review and acceptance remain separate.
119
+
120
+ ## Report your check
121
+
122
+ Pass when the brief is useful, evidence is inspectable, choices survive reopening
123
+ and earlier files remain intact. Fail for invented relationships, lost decisions,
124
+ missing state or unsupported claims of observed use. Blocked means a prerequisite
125
+ such as source access or Node is unavailable. Return the interaction and relevant
126
+ file paths without secrets. Agent rehearsals do not substitute for your acceptance.
127
+
128
+ The Researcher describes and investigates; it does not deploy, attack, certify or
129
+ score the target. A schema check is not evidence that a selected connection works.
@@ -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.