@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,142 @@
1
+ # Self-contained Surface verification
2
+
3
+ Issue [#68](https://github.com/injectionator/n8r-surface/issues/68), draft
4
+ [PR #69](https://github.com/injectionator/n8r-surface/pull/69). Candidate 0.1.13.
5
+ This record separates exercised behavior from pending human acceptance.
6
+
7
+ ## Baseline
8
+
9
+ An actual installed 0.1.12 session inspected its instructions/helpers and ran
10
+ exporter help. It reported that BOM-only recovery was unavailable: native records
11
+ and mapping siblings were required. This was a capability inspection, not a full
12
+ research round trip. No product findings or historical research were supplied.
13
+
14
+ ## Synthetic checks
15
+
16
+ The new fixture retains four database alternatives, one selected dependency,
17
+ unknown inference, source evidence, a decision and investigation entries in one
18
+ BOM. Tests exercise copied-BOM recovery, selected graph equality, source/evidence
19
+ references, independent observations, hosting distinctions, successor preservation,
20
+ changed-view reconciliation, unsafe directories and HTML escaping. These are
21
+ bounded automated checks, not model conformance or human acceptance.
22
+
23
+ Sunshine commit `beaab3faf2bab234069a8677fc627de2f0f01a3d` generated HTML with the
24
+ synthetic application, model and services but omitted profile alternatives/evidence
25
+ and investigation entries. It is not the selected investigation renderer.
26
+
27
+ Browser review of the generated local HTML was blocked by the browser tool's
28
+ `file:` URL policy. No alternate route was attempted. File-level checks do not
29
+ establish visual/browser acceptance.
30
+
31
+ CycloneDX Python Library 11.12.0 with JSON validation extras accepted the synthetic
32
+ BOM against 1.7 and loaded both components, four services and sixteen properties.
33
+ It exposes no `annotations` attribute in this deserialization API; no complete
34
+ profile round-trip claim is made. The native profile reader checks the complete
35
+ BOM directly, including annotations and references.
36
+
37
+ ## Independent review
38
+
39
+ Three material findings were reproduced in tests and fixed: BOM-path bypass of
40
+ edited sibling views, disconnected inventory missing from human views, and dropped
41
+ historical observations. The focused suite now has fifteen passing checks.
42
+
43
+ ## Installed assessment
44
+
45
+ The user explicitly selected a local LibreChat checkout. Sources, transcripts and
46
+ research remain in a new private run, separate from prior historical rehearsal.
47
+ The everyday installation remains unchanged. All sessions used Codex CLI 0.166.0,
48
+ ChatGPT sign-in, configured `gpt-6-astra`, Node 26.13.0 and macOS. No API-key or
49
+ provider/model fallback. The exact initial installation matches `2b2816e`; the
50
+ reviewed candidate used for diversion/continuation matches
51
+ `bd2b8aef4ef7e6154d40c23349a846be69146da8` (24 plugin files).
52
+
53
+ The harness supplied the installed skill, selected source and writable private
54
+ workspace. Network, memory, unrelated tools and repository instruction loading
55
+ were disabled. Filesystem probes checked denied historical evidence; these
56
+ specific controls are not a general claim of host-memory isolation.
57
+
58
+ The installed Researcher saved revision 001 with an initial plan before research.
59
+ It independently inspected bounded ranges in fourteen files and saved revision
60
+ 002 with twelve nodes, thirteen relationships, twelve evidence records, ten
61
+ journal entries and five gaps. All fourteen source hashes matched independent
62
+ readback. No deployment selections were asserted. Git inspection was blocked
63
+ inside the rehearsal; the Researcher recorded inspected hashes and the limit,
64
+ rather than asserting a clean checkout. Developer-only source identity metadata
65
+ is retained privately and was not supplied as research findings.
66
+
67
+ The scripted user diversion paused tool/document investigations and prioritized
68
+ authentication. The reviewed candidate inspected two additional files and saved
69
+ revision 003. The BOM retains the rehearsal user decision, seventeen journal
70
+ entries and three deferred paths with reasons. All ten files in revisions 001/002
71
+ remain byte-identical. This is an agent-run user scenario, not human acceptance.
72
+
73
+ One independent presentation assertion searched for an unescaped setting name in
74
+ Markdown and failed after the successful save. The installed agent normalized
75
+ Markdown-escaped underscores and completed readback; both results are retained.
76
+ No saved files were replaced to make the assertion pass.
77
+
78
+ For the final continuation, only revision 003's BOM was copied to a new writable
79
+ workspace. The harness confirmed that the old workspace was denied and the prior
80
+ ephemeral thread was unavailable. The reviewed installation recovered the objective,
81
+ authentication-first choice, deferred paths/reasons and uncertainties, then saved
82
+ revision 004 with a brief/map/journal. It did not need native siblings or old chats.
83
+
84
+ Independent readback found twelve nodes, thirteen unchanged relationships, fifteen
85
+ evidence records, twenty-two journal entries, two scoped rehearsal decisions and
86
+ three deferred paths. All inherited evidence and source-backed claims were unchanged;
87
+ the additional user-basis record describes continuation scope, not a source finding.
88
+ All fifteen files in revisions 001–003 remain byte-identical. Seventeen source
89
+ references across sixteen unique inspected files match their hashes; the original
90
+ checkout's revision and working-tree status remain unchanged.
91
+
92
+ The developer's first final assertion mistakenly required equality of the whole
93
+ evidence array, rejecting the legitimate appended continuation-scope record. It
94
+ was corrected to require preservation of inherited evidence and equality of all
95
+ non-user source evidence; that check passed. Both attempts are recorded privately.
96
+
97
+ These are agent rehearsals of the documented interactions. They do not establish
98
+ human acceptance, actual deployment selections, runtime effectiveness or exhaustive
99
+ source coverage. Selected/possible visual semantics are exercised by the synthetic
100
+ fixture; the real assessment appropriately leaves deployment selection unknown.
101
+
102
+ ## Human task list
103
+
104
+ Prerequisites: candidate 0.1.13 installed, Node 22/24/26 and readable selected
105
+ sources; a new writable Surface folder outside the source checkout. The maintainer
106
+ provides the exact candidate revision/digest and rehearsal output separately.
107
+
108
+ - [ ] Open a fresh chat with the installed Researcher and the selected source.
109
+ Ask: “Explain the AI-relevant paths in this source. Save the Surface and maintain
110
+ an investigation journal in this folder as you go. Show me what to inspect next.”
111
+ Expect an initial plan, useful partial findings and openable journal/map/brief.
112
+ - [ ] Inspect the map. Possible paths and selected paths must look different.
113
+ Open a relationship's evidence; unknown selection must not be called absent.
114
+ Selection must not be called observed runtime use without dated evidence.
115
+ - [ ] Redirect: “Pause that path and investigate authentication first. Keep the
116
+ deferred work and explain what access would help.” Expect a recorded diversion,
117
+ deferred reason, new next steps and a new revision preserving earlier files.
118
+ - [ ] In another fresh chat supply only the latest BOM and source access. Ask:
119
+ “Continue this Surface. What did I choose, what remains uncertain, and what
120
+ should we investigate next?” Expect recovery of the choices, evidence and
121
+ investigation state without requiring a native sibling or old chat.
122
+ - [ ] Report **Pass / Fail / Blocked**, the interaction, candidate revision and
123
+ relevant output paths. Fail for lost decisions, invented bindings, changed old
124
+ files or missing state; Blocked for inaccessible sources/runtime. Keep source
125
+ data private. Retain outputs until reviewed; cleanup is only the disposable run.
126
+
127
+ ## Automated checks and retained candidate
128
+
129
+ - Node 22.23.2, 24.22.2 and 26.13.0: 224 tests and package checks pass on each.
130
+ - Markdown lint 0.24.0, offline lychee 0.24.2 links/anchors, cffconvert 2.0.0,
131
+ JSON parsing (18 examples), workflow shell syntax and 24 Python tests pass.
132
+ - `npm ci` and `npm cache add yaml@2.9.1` completed; no new runtime dependency.
133
+ - Exact reviewed candidate ZIP retained privately; SHA-256
134
+ `bdab66880bc1763c73ee30d98d3b188a4c8ae2af410f03b364785fbcc58640dd`.
135
+ No everyday plugin replacement, release or merge.
136
+
137
+ The first package check failed because its golden instruction digest still named
138
+ the earlier instructions; the reviewed digest was updated and all three package
139
+ checks passed. Earlier red regression runs are retained as development evidence,
140
+ not counted as final successes. Browser visual review and human acceptance remain
141
+ pending. Structure, byte integrity and named consumer reads do not prove research
142
+ accuracy or deployment behavior.
@@ -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.