@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
@@ -1,15 +1,142 @@
1
1
  # First public npm release
2
2
 
3
- The maintainer authorized publication of both `@n8r/surface` and `n8r-surface`
4
- at **0.1.0-experimental.2** on 5 November 2026. This procedure is release
5
- preparation, not evidence that publication succeeded. Both packages use the
6
- explicit `experimental` tag. No `latest` promotion is included.
3
+ ## Verified scoped release
4
+
5
+ Published on 5 November 2026:
6
+ **[`@n8r/surface@0.1.0-experimental.2`](https://www.npmjs.com/package/@n8r/surface/v/0.1.0-experimental.2)**,
7
+ from commit `f38153645cd12f7ea60f76af251edfbaebb73409` and permanent tag
8
+ `v0.1.0-experimental.2`. The
9
+ [GitHub prerelease](https://github.com/injectionator/n8r-surface/releases/tag/v0.1.0-experimental.2)
10
+ is finalized and read back as `immutable: true`. Its attached
11
+ [verification summary](https://github.com/injectionator/n8r-surface/releases/download/v0.1.0-experimental.2/scoped-registry-verification.json)
12
+ records the exact digest and checks.
13
+
14
+ The maintainer approved **scoped-only** publication after npm accepted the scoped
15
+ stage but rejected the unscoped submission with E403. `n8r-surface` remains the
16
+ executable name; the unscoped registry package was not published or secured.
17
+ Its archive remains retained solely as evidence of the original dual build.
18
+ Unscoped publication and name reservation have since been removed from the plan.
19
+
20
+ Independent readback verified registry bytes against the retained archive,
21
+ installed library/assets and CLI identity on Node 22.23.2, 24.22.2 and 26.13.0,
22
+ empty-home startup and a fresh-cache npm-exec invocation. npm audit verified
23
+ registry signatures and the scoped package's provenance. Separate cryptographic
24
+ verification required the exact GitHub workflow/tag certificate identity; the
25
+ attestation subject digest and source commit/repository matched the release.
26
+ These release checks are not new real-model research evidence.
27
+
28
+ Use the exact version or npm tag `experimental`. `latest` still points to npm's
29
+ `0.0.0-stage` placeholder; it has not been promoted. The `.1` preparation stopped
30
+ before npm staging because of a faulty remote-tag API lookup. Its permanent tag
31
+ and unpublished draft artifacts remain retained.
32
+
33
+ ## Experimental.5 release
34
+
35
+ The maintainer authorized a new scoped release on 14 November 2026 after accepting
36
+ PR #82. Version `0.1.0-experimental.5` packages the current library/CLI and
37
+ Researcher skill 0.1.16. Earlier `.3`/`.4` candidates remain distinct; their older
38
+ CLI evidence does not establish current release behavior. Only `@n8r/surface`
39
+ is built or submitted. The source stays private and `latest` is unchanged.
40
+
41
+ This release includes self-contained CycloneDX Surface saves in the skill,
42
+ connected overviews and journals, instance-first investigation and progressive
43
+ source-access guidance. CLI save formats remain separate; bundling the skill does
44
+ not establish CLI/BOM parity. The [first-use evidence](first-use-access.md)
45
+ records useful signed-in web responses but unresolved portable delivery/helper
46
+ execution. Those limits remain; publication does not establish end-to-end web
47
+ acceptance, runtime conformance or consumer compatibility.
48
+
49
+ ### Preparation and publication
50
+
51
+ Start at the reviewed, clean release commit after Node 22/24/26 tests and installed
52
+ package checks pass. Confirm GitHub account/repository and commit author. Create
53
+ an annotated `v0.1.0-experimental.5` tag and push only that tag. It must be on `main`.
54
+ Do not reuse or move a permanent release tag.
7
55
 
8
- The `.1` preparation run built and retained both archives but failed remote-tag
9
- verification before any npm staging. Its permanent tag and draft assets remain
10
- for diagnosis. The maintainer approved `.2` after the verifier was corrected to
11
- read the exact Git reference and dereference annotated tag objects. No `.1`
12
- package or placeholder was staged or published by that run.
56
+ ```sh
57
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=prepare
58
+ ```
59
+
60
+ The workflow builds one fresh publishable scoped archive, records its revision and
61
+ SHA-256, retains a build artifact and creates a draft prerelease. Inspect its
62
+ `candidates.json` and archive manifest: exact version, `@n8r/surface`,
63
+ `private: false`, public registry and `experimental`. The source remains private.
64
+ Download those assets; do not rebuild between preparation and staging.
65
+
66
+ ```sh
67
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=stage
68
+ ```
69
+
70
+ The existing stage-only `NPM_BOOTSTRAP_TOKEN` route requires valid package write
71
+ access. An expired credential blocks staging; renew it outside tracked files or
72
+ review trusted publishing separately. A stage is not publication. Inspect the
73
+ reported stage ID and validation state, then approve that exact stage with npm
74
+ 2FA. [npm's staged-publishing procedure](https://docs.npmjs.com/staged-publishing/)
75
+ was rechecked on 14 November 2026. After approval:
76
+
77
+ ```sh
78
+ gh workflow run npm-release.yml --ref v0.1.0-experimental.5 -f operation=verify
79
+ ```
80
+
81
+ Independently verify registry signatures and the package's own signed provenance,
82
+ workflow/tag identity, source commit and archive digest. Exercise the isolated
83
+ installation below on supported Node majors and a fresh-cache exact-version
84
+ npm-exec route. Attach evidence and release notes before finalizing the immutable
85
+ GitHub prerelease. Verify `immutable: true` afterward. Never promote `latest` as
86
+ part of this procedure. Failed staging/readback leaves the draft incomplete;
87
+ retain its bytes and verify existing registry state before retrying.
88
+
89
+ ### Human verification task list
90
+
91
+ Maintainer preparation: provide the retained scoped archive from the draft release
92
+ in a temporary directory, with Node 22/24/26 and npm installed. Run from that
93
+ directory; `ARCHIVE` below is the archive's absolute path. No normal installation,
94
+ Codex sign-in or research vault changes are needed.
95
+
96
+ - [ ] Create an isolated consumer and install the archive:
97
+
98
+ ```sh
99
+ export ARCHIVE="$PWD/n8r-surface-0.1.0-experimental.5-scoped.tgz"
100
+ mkdir consumer
101
+ cd consumer
102
+ npm init --yes
103
+ npm install --ignore-scripts --no-audit --no-fund --package-lock=false "$ARCHIVE"
104
+ node --input-type=module -e 'import {decode} from "@n8r/surface"; console.log(typeof decode)'
105
+ ./node_modules/.bin/n8r-surface --version
106
+ ```
107
+
108
+ Expect exits 0, `function`, and `n8r-surface 0.1.0-experimental.5`.
109
+ - [ ] Inspect `node_modules/@n8r/surface/plugins/n8r-surface/plugin.json`.
110
+ Expect skill version `0.1.16`. This does not install a plugin into a web host.
111
+ - [ ] Exercise closed-input startup in an isolated home:
112
+
113
+ ```sh
114
+ mkdir empty-home
115
+ env HOME="$PWD/empty-home" USERPROFILE="$PWD/empty-home" ./node_modules/.bin/n8r-surface </dev/null
116
+ echo "$?"
117
+ ls -A empty-home
118
+ ```
119
+
120
+ Expect setup guidance, exit **1**, and an empty home. Missing imports, wrong
121
+ versions or home writes fail. After publication, repeat installation using
122
+ `@n8r/surface@0.1.0-experimental.5` in a new consumer and compare the result.
123
+ - [ ] Report **Pass / Fail / Blocked**, Node/npm versions, archive digest and CLI
124
+ output. Missing archive/authentication is Blocked; any unexpected behavior is
125
+ Fail. Keep evidence, leave the consumer and remove only these temporary files.
126
+
127
+ Agent rehearsal and human acceptance are separate. Build/registry evidence will
128
+ be attached to the release; this preparation document does not assert publication.
129
+
130
+ ## Retained preparation procedure
131
+
132
+ The procedure below records the original dual-package preparation. Its two-name
133
+ acceptance requirement was superseded by the maintainer's scoped-only decision.
134
+ Do not rerun it for the released version. The current workflow targets scoped experimental.5; the historical commands
135
+ below are retained as first-release evidence only. Future
136
+ releases require updated version guards, reviewed
137
+ authentication configuration, and a new permanent version/tag. Trusted publishing
138
+ has not been exercised; this release used stage-only token authentication and
139
+ maintainer 2FA approval.
13
140
 
14
141
  ## User outcome and starting evidence
15
142
 
@@ -22,7 +149,7 @@ The original installed/candidate checks passed, but those archives were private.
22
149
  Before this increment, `npm whoami` returned E401 and both names returned E404.
23
150
  After interactive login, npm identified the intended account and confirmed its
24
151
  `n8r` owner role. Both names still returned E404. These responses do not prove
25
- name availability or successful first publication. No placeholder was published.
152
+ name availability or successful first publication. At that starting point, no placeholder existed.
26
153
 
27
154
  ## Maintainer preparation
28
155
 
@@ -59,7 +186,7 @@ Prerequisites: the PR checkout with dependencies installed, Node 22/24/26, npm,
59
186
  Git and POSIX `tar`. Staging uses npm 11.20.0 (staging requires 11.15+). Start in the repository root. These steps require no npm
60
187
  write credentials and do not alter normal settings or installations.
61
188
 
62
- - [ ] Create fresh publishable candidates:
189
+ - Create fresh publishable candidates:
63
190
 
64
191
  ```sh
65
192
  release_run=$(mktemp -d)
@@ -70,7 +197,7 @@ write credentials and do not alter normal settings or installations.
70
197
  Expect exit 0, version `0.1.0-experimental.2`, name `@n8r/surface`,
71
198
  `private: false`, public npm registry/access and tag `experimental`.
72
199
  The source `package.json` must still have `private: true`.
73
- - [ ] Install and run the preferred archive:
200
+ - Install and run the preferred archive:
74
201
 
75
202
  ```sh
76
203
  mkdir "$release_run/consumer"
@@ -87,9 +214,9 @@ write credentials and do not alter normal settings or installations.
87
214
  Expect install/import/version exits 0, `function`, and
88
215
  `n8r-surface 0.1.0-experimental.2`. Bare startup prints setup guidance,
89
216
  exits **1**, and leaves the isolated home empty.
90
- - [ ] Repeat in a new consumer and home directory using the `unscoped/` archive
217
+ - Repeat in a new consumer and home directory using the `unscoped/` archive
91
218
  and import `n8r-surface`. Expect identical behavior, with that installed name.
92
- - [ ] Report **Pass / Fail / Blocked**, both CLI outputs, Node/npm versions and
219
+ - Report **Pass / Fail / Blocked**, both CLI outputs, Node/npm versions and
93
220
  candidate revision/dirty flag. Unexpected version, missing imports, or home
94
221
  writes are Fail. Missing prerequisites are Blocked. Leave the consumer and
95
222
  remove only the temporary directory created above after retaining evidence.
@@ -0,0 +1,327 @@
1
+ # Product direction: security investigation of composed AI systems
2
+
3
+ Captured 11 November 2026; strategic context expanded 12 November 2026.
4
+ Documentation scope:
5
+ [#64](https://github.com/injectionator/n8r-surface/issues/64).
6
+ This records the user-established direction and a proposed smallest demonstration.
7
+ The demonstration scope below is a recommendation for review, not authorization
8
+ to implement, deploy or test a system. No demonstration results are claimed here.
9
+
10
+ The next proposed increment is the [Joe/Maya design and delivery sequence](../superpowers/specs/2026-11-14-joe-maya-proof-design.md):
11
+ recover the existing lab, revisit the same evolving target, and connect a bounded
12
+ policy/evaluation/observation proof to retained Surface history. Surface is the
13
+ independently useful public node; target operations and harness authoring/execution
14
+ belong to n8r-runtime and n8r-probe respectively, initially private Labs modules.
15
+ Surface discovers Promptfoo, alternatives and Langfuse integrations without
16
+ operating them. Prompt injection remains a test family within wider AI surface
17
+ security; the original inline sidecar is deferred. Developing the integrated proof
18
+ does not make Labs a prerequisite or release its private components.
19
+
20
+ ## Strategic context
21
+
22
+ The agreed destination is a practical [AI Surface security assurance framework](security-assurance-strategy.md)
23
+ and professional service: policy and assurance levels connect to controls,
24
+ implementation guidance, static/live assessment and observable verification.
25
+ The primary reader is the consultant advising an engineer or architect and the
26
+ system owner. Discovery and this first demonstration are increments toward that
27
+ destination; they do not constitute the whole framework. The strategy maps existing
28
+ work and proposed milestones, including assessment coverage and scoring decisions.
29
+
30
+ ## Why and for whom
31
+
32
+ People use AI to assemble software and services into agentic systems they did
33
+ not architect and may not understand. Others inherit those systems or must make
34
+ a release decision about them. They may not know which security questions to ask.
35
+ Firing inputs at an interface and hoping for a useful score does not explain
36
+ where authority is exercised, which controls exist or what downstream effects
37
+ occurred. Experienced investigators may instead arrive with a precise question.
38
+
39
+ The product direction is professional security investigation: discover enough of
40
+ the system to identify consequential questions, establish what the evidence says,
41
+ and help the owner make and verify a corrective change. The first value should
42
+ be an understandable, reproducible security finding and demonstrated improvement,
43
+ with legitimate use preserved. Findings support a release decision; they do not
44
+ certify that an entire system is secure.
45
+
46
+ The AI Surface Model makes this work traceable across components, relationships,
47
+ configurations and revisions. It remains independently usable; security
48
+ investigation is a product use of the model, not a restriction on its meaning.
49
+ The installed n8r-surface skill in Codex is the discovery entry point. CLI breadth,
50
+ a general telemetry backend and a larger schema are not outcomes in themselves.
51
+
52
+ ## Presentation: brief by default, explanation within reach
53
+
54
+ Default to a short, at-a-glance view with colour where the host supports it,
55
+ recognizable short names and plain-language status labels. Show the relevant
56
+ components and connections, the main finding or question, material uncertainty
57
+ and the next useful action. Short names must remain unambiguous within the view
58
+ and resolve to the same full names and stable identities in expanded detail.
59
+
60
+ Keep “Explain this” or “More” one click away where interactive controls are
61
+ available, or one natural-language request away in Codex. Explain the selected
62
+ item in context: what it means, why it matters, the supporting evidence and its
63
+ limits. Evidence links should lead to the underlying sources or retained records.
64
+ Expansion uses the same claims and revisions as the summary; fetching new evidence
65
+ is a separate investigation and must be identified as such.
66
+
67
+ Users who prefer a longer explanation can request it directly. Honour their
68
+ chosen level of detail throughout the current conversation. Persistent preferences
69
+ across chats are a later implementation choice, not an existing capability claim.
70
+
71
+ Colour reinforces text and symbols; it is never the only carrier of meaning.
72
+ Provide a readable plain-text fallback and keep labels consistent across views.
73
+ Evidence status (possible, configured, observed, unknown) is distinct from a
74
+ security result (for example, a demonstrated unauthorized read). Colour must not
75
+ turn “configured” into “safe”, or a passing scoped check into whole-system approval.
76
+ Material gaps and conditions stay visible in the compact view; longer reasoning,
77
+ source excerpts and investigation history can sit behind expansion.
78
+
79
+ ## Investigations we bring to the system
80
+
81
+ For broad intake, the investigator selects relevant questions from discovered
82
+ boundaries rather than requiring the owner to identify a vulnerability first.
83
+ A specific user question can narrow the same process. Each investigation needs
84
+ an intended rule with a stated basis: owner policy, documented contract or an
85
+ explicit hypothesis awaiting confirmation.
86
+
87
+ | Family | Questions to investigate |
88
+ | --- | --- |
89
+ | Enforcement | Where is a promised rule not enforced? Where is a rule enforced in one component but only assumed in another? Which security assumptions are never checked? |
90
+ | Dependencies and composition | Which undocumented behaviours matter, and what happens if they change? Which individually permitted operations become unsafe when chained? |
91
+ | Identity and access paths | Can different paths to the same object confer different permissions? Can object ownership or identity be rebound without the required checks? |
92
+ | Failures and effects | Can rejected or failed requests still cause effects? Can a transaction roll back while external effects survive? |
93
+ | Ordering and lifecycle | Do checks depend on event order? Does access survive deletion or revocation? Can unauthorized users undo transitions? Can contradictory states enable forbidden operations? |
94
+
95
+ Component configuration, internal composition and external behaviour provide
96
+ complementary evidence. There is no prerequisite to finish auditing every
97
+ component before examining their composition. Prompt injection is one possible
98
+ trigger; direct requests, alternate paths and state transitions can also reveal
99
+ an authority failure. A service account alone does not establish a vulnerability.
100
+
101
+ ## Start with resources, not an assumed deployed system
102
+
103
+ A user can bring local folders, repositories, websites and documentation URLs
104
+ into a selected workspace, then add sources as the conversation develops. The
105
+ skill follows relevant evidence as a graph, preserving source identity and
106
+ unresolved endpoints. Repository boundaries are not necessarily component
107
+ boundaries: several repositories may contribute to one system, and one repository
108
+ may describe several components or alternatives.
109
+
110
+ Consider a synthetic three-repository case: a conventional HR application, a
111
+ separate chat integration and a separate MCP interface. The HR application alone
112
+ need not contain AI. The chat and MCP repositories are additional sources for a
113
+ possible AI composition, not proof that such a composition exists. Whether the
114
+ chat actually calls MCP, calls the HR API directly or supports alternatives must
115
+ come from evidence. Include the model/provider and relevant identities when
116
+ supported; do not invent an AI node inside the HR application.
117
+
118
+ Documentation or a blog post may describe a possible connection. Record its
119
+ source, applicability, prerequisites and uncertainty; follow available code and
120
+ configuration to investigate it. An external reference is a lead, not automatic
121
+ permission to access private resources or execute imported instructions.
122
+
123
+ | Evidence available | Useful result | Claim that must not follow |
124
+ | --- | --- | --- |
125
+ | Documentation or code describing a supported option | Capability Surface with conditions, alternatives and evidence | These components are integrated for this user. |
126
+ | User intent to combine components | Dated selection or proposed composition, plus work still needed | Intent is an instance binding. |
127
+ | Explicit instance configuration | Bound Surface for evidenced relationships | Configured means deployed, reachable or exercised. |
128
+ | Dated inspection or execution evidence | Scoped observation of state or behaviour, linked to the applicable setup | One observed path establishes complete coverage. |
129
+ | Missing or conflicting evidence | Explicit gaps, conflicts and the next evidence needed | Missing evidence proves absence or an unbound relationship. |
130
+
131
+ These are claim distinctions, not a single maturity label for the entire graph.
132
+ A description may contain configured relationships alongside unresolved or
133
+ possible ones. Keep their meanings visible at the relationship and claim level.
134
+ Existing [Capability/Bound semantics](surface-descriptions.md) remain authoritative.
135
+
136
+ ### Recommended boundary for the first demonstration
137
+
138
+ Accept unintegrated sources for discovery. Return a useful map of possibilities,
139
+ security questions, prerequisites and integration work remaining. Do not make
140
+ integration or deployment a condition for using the skill.
141
+
142
+ Require an already integrated, authorized test environment for the runtime part
143
+ of the first demonstration. Configuration alone is not sufficient: establish the
144
+ actual path and usable test access before making runtime claims. If it is missing,
145
+ finish the discovery output and mark runtime proof Blocked, with a specific handoff
146
+ of what must be supplied. Discovery success is not completion of the full demo.
147
+
148
+ Assisted integration, deployment and arbitrary component replacement are later
149
+ work. For this first proof a maintainer supplies a controlled running setup and
150
+ applies a narrow defensive change manually. This bounds execution work without
151
+ excluding users who are still discovering what they could assemble.
152
+
153
+ ## Smallest end-to-end value demonstration
154
+
155
+ Use one synthetic HR composition with three source repositories: domain service,
156
+ chat interface and MCP adapter. It exposes one record-read operation and uses
157
+ synthetic records for two users. The fixture has a known reproducible authority
158
+ failure and a minimal corrective change, retained in a separate maintainer oracle.
159
+ The investigator receives ordinary source and system access, not the expected
160
+ finding, faulty location or fix. This demonstrates discovery on a controlled case,
161
+ not general vulnerability detection accuracy or a finding about a real HR product.
162
+
163
+ The intended policy is supplied as normal business context: each employee can
164
+ read their own restricted record, but cannot read another employee's record.
165
+ This provides a testable rule without supplying the security diagnosis.
166
+ The fixture's exact technology and enforcement location are builder choices;
167
+ choose the smallest setup that exposes the real cross-component path. A scripted
168
+ runner or developer-written findings cannot substitute for the installed skill.
169
+
170
+ **State X:** an identified installed skill in Codex, an established local workspace,
171
+ three permitted source repositories with known revisions, and docs URLs or local
172
+ snapshots. Initially the investigator receives the domain application source and
173
+ business policy. Chat/MCP sources and instance evidence arrive in later turns.
174
+ A maintainer has a running isolated composition, test identities and synthetic
175
+ data ready for the runtime handoff; source-only discovery must not infer that fact.
176
+
177
+ **Input Y:** the user asks what has been built and where its security boundaries
178
+ might fail, then adds the other sources, configuration and permitted test access.
179
+ They request saved output and fresh-chat continuation. The investigator proposes
180
+ a bounded test based on its discoveries. The owner authorizes its execution on
181
+ the fixture, and a maintainer later applies the defensive change.
182
+
183
+ **Outcome Z:** the user receives an evidence-backed composition, a discovered
184
+ security question, a reproduced unauthorized read through the composed path,
185
+ a supported explanation of the enforcement failure and a before/after comparison
186
+ showing denial after the change while the authorized read still works. Saved
187
+ artifacts can be reopened without losing identities, gaps or the original result.
188
+
189
+ ### Demonstration task list
190
+
191
+ These are proposed acceptance interactions, not rehearsed passing behaviour.
192
+ Use the [installed-skill setup](researcher-skill.md) and
193
+ [workspace guide](workspace.md); the maintainer supplies the fixture and access.
194
+
195
+ - [ ] Open the prepared workspace in Codex with the installed skill. Ask:
196
+ “Explore this HR application folder and its documentation. Tell me what is
197
+ known about its AI connections and security boundaries. Do not assume it has
198
+ AI built in.” Expect a bounded account with source evidence and unknowns;
199
+ no invented internal AI component.
200
+ - [ ] Add the chat and MCP repository folders and documentation URLs. Ask:
201
+ “Include these sources, follow the relevant links between them, and save a
202
+ Surface brief explaining possible integrations, security questions and what
203
+ remains to be configured or established.” Expect cross-source relationships,
204
+ prerequisites and alternatives without an unsupported deployed-system claim.
205
+ - [ ] Supply sanitized instance configuration. Ask:
206
+ “Show which relationships this configuration binds, what is still unknown,
207
+ and which security question most needs investigation. Save a successor.”
208
+ Expect traceable configured relationships and an independently derived question
209
+ about authority, without assuming runtime use or copying credentials.
210
+ - [ ] Supply the fixture's permitted test access and approve the proposed bounded
211
+ test through the separately identified execution owner. Expect a legitimate
212
+ read and a prohibited cross-user read to be exercised through the composed
213
+ interface, with actual downstream requests, decisions and results inspected.
214
+ A model refusal alone is not evidence that the tool did not access data.
215
+ - [ ] Have the maintainer apply the narrow defence. Repeat the same tests against
216
+ the identified successor setup. Expect the prohibited fresh read to be denied
217
+ by effective enforcement and the legitimate read to remain available. Inspect
218
+ downstream evidence, not only chat wording. Use records not already disclosed
219
+ in conversation when checking fresh retrieval.
220
+ - [ ] Save the evidence-linked result, then open a fresh Codex chat. Ask:
221
+ “Reopen this investigation. Explain what was possible, configured and actually
222
+ demonstrated before and after the change, and what remains unproved.” Expect
223
+ stable identities, distinct setup/run references, accessible evidence and
224
+ unchanged predecessor artifacts.
225
+ - [ ] Inspect the default brief. Expect recognizable short names, concise text
226
+ labels, visible material gaps and colour where supported. Ask: “Explain this
227
+ connection and show its evidence.” Expect a contextual explanation tied to the
228
+ same identities and revisions, within one request; a UI control may provide
229
+ the same action. Ask for a longer explanation, then return to the brief. Expect
230
+ consistent claims and readable meaning without colour. Record whether both
231
+ presentation levels help the tester understand the finding.
232
+ - [ ] Report **Pass / Fail / Blocked**, artifact links, failed or blocked steps and
233
+ whether the result explains an actionable security problem. Generated wording
234
+ and identifiers may vary. Unsupported integration claims, a missed seeded
235
+ failure, missing runtime evidence, broken legitimate access, lost history or
236
+ sensitive-data leakage fail this demonstration. Missing prerequisites block it;
237
+ they are not a passing negative security result.
238
+
239
+ ### Maintainer preparation and independent verification
240
+
241
+ Pin fixture revisions, initial configuration and policy, installed skill bytes,
242
+ host/model/version and test environment. Keep the oracle separate from investigator
243
+ inputs and record everything disclosed. Fresh chats alone do not prove isolation;
244
+ record source/tool access and any contamination. Before implementation, attempt
245
+ this path through the current installed skill or record the exact unavailable
246
+ prerequisite. No such attempt is claimed by this documentation change.
247
+
248
+ An independent reviewer compares consequential graph claims with source locations
249
+ and the runtime finding with the oracle and underlying evidence. Retain actual
250
+ inputs, expected policy, observed outputs, effective identities, authorization
251
+ decisions and downstream data access. Correlate these with run and setup identities;
252
+ record conflicts, unavailable telemetry and inference separately from observation.
253
+ Read saved files independently and compare predecessor hashes after continuation.
254
+ Keep raw research and telemetry outside this public repository; publish only
255
+ permitted sanitized summaries. Synthetic fixtures must contain no real HR data.
256
+
257
+ Expected state changes are new workspace research/Surface artifacts, fixture test
258
+ sessions and a separately recorded defensive configuration/code revision. The read
259
+ scenario does not require business-data mutation. Preserve source and prior
260
+ artifact bytes; record any fixture-generated audit/session state. Cleanup resets
261
+ only owned test state after evidence retention and explicit cleanup authorization.
262
+ Agent rehearsal, independent technical checks and human acceptance are separate.
263
+
264
+ ## What n8r-surface needs to support
265
+
266
+ The current skill already instructs graph-first research, incremental source
267
+ intake, evidence identity, explicit gaps and continuation. Capability/Bound
268
+ artifacts have a bounded helper and contract. These mechanisms are foundations;
269
+ they do not establish that this three-repository demonstration passes. Verify the
270
+ installed path before deciding which implementation changes are necessary.
271
+
272
+ | Needed outcome | Existing basis and next proof |
273
+ | --- | --- |
274
+ | One investigation across folders, repositories and URLs | Exercise incremental intake and follow-up through the installed skill; preserve source revisions, access limits and unresolved external links. |
275
+ | A useful graph without an integrated system | Reuse Capability semantics; verify no invented AI inside the domain application and no promotion of docs/blog claims into bindings. |
276
+ | Evidence of configured composition | Reuse Bound semantics and safe configuration references; verify mixed supported/configured/unknown relationships and distinct role versus instance identities. |
277
+ | Questions selected from discovered boundaries | Demonstrate an investigator-generated authority question with rationale and policy basis, rather than a user-supplied diagnosis. This needs explicit acceptance evidence. |
278
+ | A runtime handoff another actor can execute | Provide the relevant graph identities, policy, proposed test, required observation points and gaps. Execution remains outside the current read-only skill. |
279
+ | Evidence-linked findings and before/after comparison | Define the smallest linkage between claims, source revisions, effective setups, runs and retained evidence. Start with readable working records where needed; do not mislabel them as validated structured Observed Surfaces. |
280
+ | Brief and expanded explanations | Verify concise defaults, unambiguous short names, accessible status cues and one-request explanation/evidence access in the installed host. Material uncertainty must survive both views. |
281
+ | Durable continuation | Exercise saved artifact readback and fresh-chat reopening with stable identities, predecessor history and explicit remaining work. |
282
+
283
+ Observed Surface delivery is currently deferred in the
284
+ [description contract](surface-descriptions.md). This proposal calls for a bounded
285
+ runtime-evidence handoff and linkage, not a silent expansion of that contract or
286
+ permission for the skill to launch tests. Before implementing this part, specify
287
+ the execution owner and interface, evidence references, privacy/retention rules
288
+ and any versioned contract changes. No new command or output format is introduced
289
+ by this document. Update conversational intents and their verification together
290
+ if behaviour is subsequently changed.
291
+
292
+ ## Observability and consumer boundary
293
+
294
+ For this demonstration, collect only enough evidence to correlate the initiating
295
+ user, proposed and executed tool request, effective downstream identity,
296
+ authorization decision, returned data and relevant effects with the exact run and
297
+ setup. A prompt/response trace alone cannot prove downstream enforcement. State
298
+ what was not observed; missing telemetry must not become a claim of no effect.
299
+
300
+ An observability sink is a candidate implementation, not yet a prerequisite.
301
+ Evaluate existing telemetry, log references and narrow collection against this
302
+ case before choosing adapters or storage. Langfuse and OTEL are possible integration
303
+ directions, not evaluated compatibility claims. A general backend, continuous
304
+ collection and broad adapter support are outside the smallest proof.
305
+
306
+ n8r-surface owns discovery descriptions and the meanings needed for evidence
307
+ handoff. Test execution, resource configuration and later component swapping
308
+ belong to the consumer integration boundary, with n8r-labs application design
309
+ kept in its separate repository. A Lab contains Experiments; an Experiment asks
310
+ its Lab for setup, and the Lab owns configuration and local bindings. The first
311
+ manual consumer rehearsal neither requires Labs automation nor establishes Labs
312
+ compatibility. No n8r-labs implementation is specified here.
313
+
314
+ ## Delivery decisions and remaining work
315
+
316
+ The recommended first scope is one composed path, one policy, two test identities,
317
+ one demonstrated authority failure and one defensive change, plus a legitimate-use
318
+ check and saved continuation. A broad audit, all investigation families, automated
319
+ integration, component substitution and a release score are outside this increment.
320
+
321
+ The next useful work is to select the permitted fixture and execution owner, then
322
+ rehearse source intake through the installed skill and record gaps. Fix only gaps
323
+ that block this proof; retain existing behaviour that already satisfies it.
324
+ No target has been selected, no runtime test has been run and no implementation
325
+ has been authorized by capturing this direction. The proposed integrated-runtime
326
+ boundary and fixture choice remain reviewable decisions. Existing acceptance and
327
+ release work is not automatically closed or reprioritized by this document.