@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,711 @@
1
+ # Command intent, outcomes and verification
2
+
3
+ This is the product acceptance specification for `n8r-surface`. It defines what a
4
+ person should be able to accomplish, what changes, what they can observe, and how
5
+ to verify those outcomes. Implementation plans and lower-level tests must serve
6
+ these tasks. A passing codec test does not establish a working research command.
7
+
8
+ **Status:** product specification approved on 4 November 2026; delivery order
9
+ revised on 5 November 2026 to standalone AI integration, save/reopen/continue verification, then npm distribution. Lab adaptation remains separate.
10
+ [The skill lifecycle and research checks](researcher-skill.md) govern the active
11
+ increment. STATUS-01/CMD-02 are retired before implementation; no status
12
+ subcommand will be added. The existing STARTUP-01 behavior remains the CLI baseline.
13
+
14
+ The original command specification follows, with the planned inventory updated. The first #16
15
+ increment implements bare startup only, using the #15 experimental artefact
16
+ library. See [startup decisions and scope](startup.md). The setup-only increment now adds accepted local vault writes; other commands
17
+ remain broader acceptance work. The bounded RESEARCH-01 conversation is implemented; see the [Codex evidence](codex-research-verification.md). The first skill
18
+ provides instructions for working notes; it does not complete the structured-output
19
+ or installed-CLI research cases below.
20
+ The [recorded library checks](verification.md) are supporting evidence only.
21
+
22
+ This specification applies the task-driven development approach requested by the
23
+ user: define a real task, attempt it through the product, observe the gap, develop
24
+ what is missing, then repeat the same task. It does not publish private Lab
25
+ implementation material or require that application to be running.
26
+
27
+ Candidate skill 0.1.10 adds standalone Capability/Bound artifact production and
28
+ revision, without adding a CLI command. See the [task, evidence and human
29
+ check](skill-surface-artifacts.md). Installed rehearsal and human acceptance remain
30
+ distinct from contract checks.
31
+
32
+ ## Open, research, save and return (#17)
33
+
34
+ Given a configured vault and signed-in Codex, running `n8r-surface` in a terminal
35
+ opens a research prompt and lists saved work by title. Type the investigation;
36
+ the current folder is the default source. Optional `/source PATH` changes it. Confirm source
37
+ transmission once, then converse normally. Type `save` to save the result and
38
+ `exit` to leave. Running `n8r-surface` again offers the saved title; selecting its
39
+ number reopens it with the remembered source and model. Save a successor without
40
+ replacing earlier files. Missing/moved sources require a new source selection.
41
+
42
+ Plain `save`, `save the result` and guided `/save` prepare a checked Surface if
43
+ needed and persist it only after validation. `/save note` saves Markdown.
44
+ Explicit `discover`, `reopen`, their options and legacy `/save` note behavior
45
+ remain available. Noninteractive startup retains the read-only overview.
46
+ A local recent-work index beside settings remembers source/model/output paths;
47
+ it is not part of portable Surface data. Index failure must not conceal an
48
+ otherwise successful artifact save. No saved outputs are removed by this flow.
49
+
50
+ Installed .3 baseline prints configuration and exits after vault readiness;
51
+ it offers no research prompt or remembered-work selection. Verification will
52
+ exercise bare startup, plain-language research/save, exit and fresh startup
53
+ selection through the installed command, then independently check the files.
54
+
55
+ ## CLI Capability/Bound increment (#17)
56
+
57
+ Given an installed candidate, a configured vault, Codex 0.166.0 signed in with
58
+ ChatGPT and permitted local sources, ask `discover SOURCE` to prepare a Capability
59
+ or Bound Surface. Enter `/save surface`, exit, then run
60
+ `reopen SAVED/surface.json --source SOURCE` and request a successor. The same
61
+ commands remain public; there is no new subcommand or automatic migration.
62
+
63
+ Expected: a preview distinguishes possibilities from configured bindings;
64
+ explicit save creates brief, HTML, JSON, dependencies and a checked manifest in
65
+ the next numbered directory. Fresh reopening retains exact dependencies,
66
+ identities, human decisions and parent references. Read the files independently
67
+ and compare predecessor/source bytes. Existing 0.1 pairs remain readable and
68
+ continue in their original format. No runtime-use or Labs compatibility follows.
69
+
70
+ The installed baseline at `5eed2ac` produced an older 0.1 definition for the
71
+ Capability request. The installed development candidate completed save/reopen/revise with independent
72
+ readback; see [the task and bounded evidence](cli-bundles.md). Final candidate
73
+ bytes and human acceptance remain separate from that rehearsal.
74
+
75
+ ## Grow the specification with working verification
76
+
77
+ Work one useful behavior at a time, including behavior that already exists. Add a
78
+ small intent/example, try it, and retain a repeatable check with its observed
79
+ result. If existing behavior meets the intent, adding that evidence is a completed
80
+ increment; no implementation rewrite is required. If it does not, make the bounded
81
+ change and repeat the same check.
82
+
83
+ The command inventory gives direction. Detailed acceptance examples and evidence
84
+ grow alongside each increment; completing the entire future specification is not
85
+ a prerequisite for verifying the next useful behavior. Keep earlier checks and
86
+ rerun those affected by a change. Extend the spec when a new user need or observed
87
+ gap justifies it, while keeping expectations independent of implementation output.
88
+
89
+ Keep each human check as short as its proof allows. Reuse established installation,
90
+ runner and fixture prerequisites, with a setup link for anyone who lacks them. A
91
+ small addition can be verified by its exact command, expected result and relevant
92
+ readback; automated checks retain broader regression and edge-case coverage.
93
+ Expand human steps when changed assumptions or observed gaps require it. A short
94
+ proof must still exercise the intended outcome and identify what remains unproved.
95
+
96
+ Keep progress visible beside the intent: what is specified, what is implemented,
97
+ what was actually verified, and what remains blocked or unattempted. Update the
98
+ example, relevant repeatable checks and evidence together in the same increment.
99
+ A verified claim names its revision and limits; old evidence is not proof of a
100
+ changed path. New scenarios are not verified merely because nearby checks pass.
101
+
102
+ Current progress, with evidence defining the verified scope and revision:
103
+
104
+ | User or consumer intent | Current progress | Verification / next increment |
105
+ | --- | --- | --- |
106
+ | Create, repeat and reopen a standalone workspace through the skill. | Specified in accepted #41; helper and skill candidate 0.1.9 implemented. Installed-product scenarios and readback passed; overall PM acceptance pending. No new CLI command. | [Workspace contract](workspace.md), [human tasks](workspace-human-check.md), [evidence](workspace-verification.md). |
107
+ | Create a security-focused skeleton and reconcile a later declaration change. | Skeleton Surface v0.1 guidance in installed skill 0.1.8; bounded agent brief/successor rehearsal and readback passed. Human acceptance pending; no new CLI command or Lab automation. | [SKELETON-01/02 prompts and readback](researcher-skeleton-check.md); [versioned results and remaining acceptance](researcher-skill-verification.md#skeleton-surface-018). |
108
+ | Read saved research and selected definitions through the library, retaining identities, findings and references. | Implemented and verified for the experimental library profile; no command claim. | [CONTRACT-01 and repeatable fixture/package checks](verification.md#contract-01-retain-useful-attributable-research-and-selected-definitions). |
109
+ | Run `n8r-surface` alone and see settings, saved artefacts and known process status. | Specified, implemented and verified for the read-only overview and guidance question; setup/conversation unavailable. | [STARTUP-01 installed evidence at `b90358a`](startup-verification.md). Historical read-only baseline; setup supersedes its guidance and exit behavior. |
110
+ | Choose a local vault once and reuse it from another source directory. | Setup-only implementation; installed rehearsal and human acceptance tracked separately. | [SETUP-01 evidence and tasks](vault-setup-verification.md). Research and continuation remain pending. |
111
+ | Begin with a description and establish source access progressively. | Candidate 0.1.16 guidance; baseline rehearsal recorded, web acceptance tracked separately. No new CLI command or access adapter. | [First-use tasks and evidence](first-use-access.md). |
112
+ | Research supplied sources through the installed skill and save working notes. | Implemented; bounded Lumen and LibreChat agent rehearsals have saved/read back notes. Actual human input survived fresh-agent continuation; Work UI acceptance remains pending. | [RESEARCH-01 evidence and limits](researcher-skill-verification.md). No structured-output or standalone-runner claim. |
113
+ | Offer to retain an initial partial graph when saving is undecided. | Implemented in skill 0.1.7; acceptance and evidence are tracked separately. | [Optional save offer](researcher-skill-verification.md#optional-save-offer-017). |
114
+ | Resume from saved recommendations and retain useful next investigations. | Implemented in skill 0.1.6; installed fresh-agent save/continue and independent readback passed. Human acceptance remains pending. | [Recommendations evidence](researcher-skill-verification.md#saved-recommendations-016) and [prepared interaction](researcher-prepared-check.md). |
115
+ | Try the installed skill using prepared files or another chat-system repository. | [Vault guide](researcher-vault.md) links prepared fictional inputs and descriptive walkthroughs; the prepared comparison has an installed-0.1.5 agent rehearsal. | [Vault evidence](researcher-skill-verification.md#repository-vault-rehearsal-015). Human acceptance and the next user-chosen repository remain pending; fresh chats are not enforced isolation. |
116
+ | Discover an AI Surface graph using available sources and applicable prior knowledge. | Instruction guidance in skill 0.1.5; code/docs-only and mixed evidence are valid starting points. | [DISCOVER-01 interaction](researcher-discovery.md#graph-discovery-reconciliation-and-live-evidence); distinguish guidance trials from live acceptance. |
117
+ | Reconcile a supplied Surface against current graph evidence. | Implemented instruction guidance; a controlled LibreChat declaration trial using installed 0.1.4 detected the target change and preserved prior research. Current 0.1.5 corrects ownership terminology. | [RECONCILE-02 procedure](researcher-reconciliation-trial.md) and [bounded evidence](researcher-skill-verification.md#controlled-declaration-trial-014); runtime and validated structured output remain unproved. |
118
+ | Inspect a graph-relevant live connection with user-assisted sign-in. | Specified through optional host tools; real admin inspection remains unverified. | [LIVE-01 interaction](researcher-discovery.md#graph-discovery-reconciliation-and-live-evidence); require actual UI/API readback without credential exposure. |
119
+ | Research a supplied repository through the standalone command with a human, then save and reopen the result. | Conversation and Markdown saving/reopening implemented; bounded evidence is tracked in SAVE-01. Structured HTML acceptance remains open. | Verify E2E-01 in #17; E2E-02 before claiming standalone LibreChat research. |
120
+
121
+ ## Governing development loop
122
+
123
+ For each increment, whether verifying existing behavior or adding a capability:
124
+
125
+ 1. Name the useful user task and why it matters.
126
+ 2. Define **State X**, the actual **Input Y**, and independently assessable
127
+ **Outcome Z**. Include the expected changes, observations and evidence source.
128
+ 3. Attempt Y through the current installed product in X. Record what it actually
129
+ does. If the entry point, credentials or environment are unavailable, record
130
+ the blocker; do not invent a baseline failure or bypass the product.
131
+ 4. Compare actual behavior with Z. If it already meets the intent, retain a
132
+ repeatable check and record the verified result; no code change is necessary.
133
+ Otherwise bound the next implementation increment to the observed gap.
134
+ 5. Add supporting automated checks for that gap and implement the increment when
135
+ a change is needed.
136
+ 6. After a change, repeat the original interaction through the installed product.
137
+ Reopen/read back its outputs independently, compare them with Z, and record the
138
+ result and limits.
139
+
140
+ Update the progress snapshot and linked evidence before choosing the next intent.
141
+ Each completed increment should make another useful behavior demonstrably verified,
142
+ or expose a specific blocker that remains visible.
143
+
144
+ The developing agent builds the Researcher's capabilities. It must not perform
145
+ the research itself and place prewritten answers in the output as proof that the
146
+ command works. A canned runner can test orchestration, but it is not a real-runner
147
+ research rehearsal. The same distinction applies to mocked storage and source reads.
148
+
149
+ A useful increment ends in visible, reproducible evidence or a concrete statement
150
+ of what remains unverified. Preserve the user task when implementation changes;
151
+ do not redefine success around whatever the code currently produces.
152
+
153
+ ## Initial public command inventory
154
+
155
+ This is the approved initial terminal surface for the first standalone milestone.
156
+ CMD-01 implements the overview and explicitly accepted local vault setup;
157
+ all argument forms below remain planned. See the [current parser contract](startup.md#settings-and-parser-decisions).
158
+ It includes startup, discover and explicit help/version behavior; the formerly
159
+ planned CMD-02 status command is retired.
160
+ Corpus operations below are conversation
161
+ intents, not additional undocumented subcommands. Any later command or option must
162
+ be added to this inventory with its own outcome and verification case first.
163
+
164
+ | ID | Invocation | User intent and delivered outcome | Observable change and verification |
165
+ | --- | --- | --- | --- |
166
+ | CMD-01 | `n8r-surface` | See readable non-private configuration and its file locations, local artefacts one per line, and process status where known. The setup-only increment offers vault selection and explicit write confirmation; configured reuse exits 0 without questions. Research remains unavailable. | Compare the initial overview with prepared settings/files using STARTUP-01. Read back any accepted setup change. Verify the overview itself changes no files and does not inspect/transmit source repositories or invoke inference. |
167
+ | CMD-03 | `n8r-surface discover` | Research the current directory with the human. | Establish cwd as the source scope, follow the identified Researcher instructions, inspect permitted material, ask relevant questions and save an attributable HTML research record. Verify with E2E-01. |
168
+ | CMD-04 | `n8r-surface discover ./product` | Research an explicitly selected directory. | Resolve the path from invocation cwd and report the actual scope; prove the intended source was read, with no fallback to a different repo. Verify source identity/read evidence and the resulting artefact. |
169
+ | CMD-05 | `n8r-surface discover ./documents/architecture.md` | Research one supplied document. | Inspect that file and retain file-only coverage. Reopen the resulting record and confirm it does not claim repository-wide inspection. |
170
+ | CMD-06 | `n8r-surface --help` | Discover the complete supported command surface and its effects. | Display syntax, purpose, source/destination behavior and links to details; exit without setup, source access, inference or writes. Compare with this inventory. |
171
+ | CMD-07 | `n8r-surface discover --help` | Understand the selected command before invoking it. | Display that command's inputs, outputs, side effects and limitations; no operation or setup begins. |
172
+ | CMD-08 | `n8r-surface --version` | Identify the installed tool being used or verified. | Display the package/build version without inference or mutation; compare with the installed package manifest. |
173
+ | CMD-10 | `n8r-surface reopen [FILE] --source SOURCE [--model MODEL]` | Continue a named Markdown note or saved HTML/JSON pair; omission suggests the latest-edited Markdown note. | Renew transmission consent; compare source evidence; see SAVE-01. |
174
+ | CMD-11 | `/save` at `You>` | Explicitly save or create a successor Markdown note. | Read back saved bytes and preserve predecessors; see SAVE-01. |
175
+ | CMD-12 | `/save surface` at `You>` | Save the exact validated pair previewed in the current conversation. | Immutable paired research HTML and Surface JSON, independent readback; see SURFACE-01. |
176
+ | CMD-09 | Unknown command, unknown option or invalid arguments | Receive an actionable explanation without unintended work. | Report the invalid input and applicable help, return failure, and leave source/corpus/settings unchanged. Never interpret a typo as permission to research. |
177
+
178
+ `discover [source]` also accepts an explicit absolute local source path; the
179
+ resulting portable artefact uses source IDs/portable locators rather than leaking
180
+ that machine's path. A directory need not be a Git repository. Git identity and
181
+ working-copy changes are recorded when present; otherwise file identity, hashes
182
+ and inspected coverage establish the source snapshot.
183
+
184
+ This inventory does not introduce `init`, `config`, `list`, `show`, `resume`,
185
+ `export`, `deploy` or other standalone subcommands. If real task attempts show a
186
+ need for them, specify and review their intent before adding them. Effective
187
+ settings are configurable as required by the design; the exact override syntax
188
+ must be added here when #16 selects it, before implementing that syntax.
189
+
190
+ Successful noninteractive informational commands exit successfully. Invalid input,
191
+ missing required setup and unavailable capabilities return a failure with a
192
+ specific reason; they must not wait on a prompt. Bare startup still prints its
193
+ overview without interactive input. If setup or conversation needs interaction,
194
+ explain the required interactive path and finish promptly. Discovery follows the
195
+ same no-wait rule when interaction is unavailable.
196
+ A future unattended-research interface needs an explicit answer/selection policy;
197
+ it is not implied by this first interactive workflow. Exact error codes belong in
198
+ \#16's parser contract and must preserve these observable distinctions.
199
+
200
+ Until #17 connects the actual Researcher, #16's `discover` reports that research
201
+ is unavailable. Printing a prompt or writing a placeholder HTML file is not CMD-03,
202
+ CMD-04 or CMD-05 success.
203
+
204
+ ## STARTUP-01: run the command and see what is here
205
+
206
+ **Given:** a readable configuration file at `~/.n8r/n8r-surface.json` selects
207
+ `~/n8r/artifacts` as the local artefact folder and JSON as the Surface output
208
+ format. No AI runner or Lab connection is configured. That folder contains one
209
+ valid synthetic Surface definition named LibreChat, stored as
210
+ `librechat-uniqueid.json`. No process status is known.
211
+
212
+ **When:** the user runs `n8r-surface` with no subcommands or switches.
213
+
214
+ **Then:** before any setup question or conversation, the terminal shows a readable
215
+ interpretation of those settings, where they came from, the saved artefact on one
216
+ line, and the fact that process status is unknown. For example:
217
+
218
+ ```text
219
+ $ n8r-surface
220
+
221
+ Configuration
222
+ File: ~/.n8r/n8r-surface.json
223
+ Artefact folder: ~/n8r/artifacts
224
+ Surface output: JSON
225
+ AI runner: Not configured
226
+ Lab connection: Not configured
227
+
228
+ Processes
229
+ Status unknown
230
+
231
+ Local artefacts (1)
232
+ LibreChat | Surface definition | ~/n8r/artifacts/librechat-uniqueid.json
233
+
234
+ Setup and AI conversation are not implemented in this build. Research needs a supported AI runner.
235
+ ```
236
+
237
+ This is representative expected output; the process also identifies its own live
238
+ PID and observation time. The interactive guidance question follows this overview.
239
+ The configured
240
+ folder in this example uses `artifacts`; the command displays the actual effective
241
+ path, whatever the folder is named. LibreChat is a synthetic saved-file label here,
242
+ not evidence that the command has researched LibreChat.
243
+
244
+ **Verify:** prepare those files under a temporary home directory, run the installed
245
+ command with closed input, and capture its output. Check the configuration path,
246
+ the readable values, exactly one artefact row with the right name and location,
247
+ and unknown process status. The command must finish promptly and identify missing
248
+ runner setup. Compare the files before and after: the overview changes nothing.
249
+ Also exercise an interactive launch and confirm the overview appears before the
250
+ first setup question. These are ordinary process, text and file checks; no special
251
+ test language is required. Exact spacing and decorative punctuation are optional.
252
+
253
+ The overview follows a few straightforward rules:
254
+
255
+ - Interpret supported non-private settings with useful labels instead of dumping
256
+ raw JSON. Show every contributing configuration file and explain defaults or
257
+ overrides when used. Adding a setting includes deciding how it appears here.
258
+ Omit secret values and private fields, including credentials inside URLs or
259
+ nested settings. A synthetic private-value marker must never appear in output.
260
+ - List saved research records and Surface definitions in the configured local
261
+ folder, with one logical line per artefact. Use available name/type metadata and
262
+ a distinguishing filename or location. Keep embedded newlines/control characters
263
+ from splitting a row or issuing terminal commands. Reading saved-file metadata
264
+ does not authorize scanning the source repositories those files describe.
265
+ - Say when the folder is empty. For missing/unreadable configuration or folders,
266
+ show the relevant location and problem; do not present failed inspection as an
267
+ empty corpus. An unreadable or unsupported artefact gets a filename and a clear
268
+ limitation on its own line rather than disappearing from the listing.
269
+ - Report a relevant process's identity and status when reliable status information
270
+ is available, including when it was observed if it may be stale. Otherwise say
271
+ unknown. A configured runner or saved PID alone does not establish that a process
272
+ is running. This overview does not introduce a background service.
273
+ - Produce the overview locally without AI inference, Lab credentials or implicit
274
+ network calls. It is read-only until the human accepts a setup change.
275
+
276
+ Repeat the same simple check with two artefacts, an empty folder, inaccessible
277
+ files, a private-value marker, and known versus unknown process status. Compare
278
+ each output to its prepared state. The separately planned status command was
279
+ retired before implementation. Configured vault reuse exits without a prompt;
280
+ first-use setup requires explicit confirmation.
281
+
282
+ **Current result:** verified through the installed command at `b90358a` on
283
+ Node 22/24/26, including closed input and a real terminal. See the
284
+ [observed output, independent readback and limits](startup-verification.md).
285
+ This is historical evidence. Current setup behavior has its own
286
+ [verification record](vault-setup-verification.md); research remains unavailable. [Startup decisions](startup.md) define the bounded path.
287
+
288
+ ## Conversation intents are part of the product surface
289
+
290
+ An explicitly requested research conversation must support these user tasks.
291
+ Wording is illustrative; outcomes, not exact phrasing, are the contract. Each
292
+ session establishes a source scope and destination explicitly enough to prevent
293
+ an accidental source or artefact change.
294
+
295
+ | ID | Human input or intent | Required change/outcome | Independent verification |
296
+ | --- | --- | --- | --- |
297
+ | CHAT-01 | "Research this supplied repository/document." | Establish the actual source, inspect permitted material using the Researcher instructions, retain evidence/gaps, and produce a research record. | Compare source-access evidence and attributed findings with the supplied snapshot; reopen the saved HTML through the reader and in a browser. |
298
+ | CHAT-02 | "Include the archive, but leave callbacks undecided." | Record the human's choice and unresolved option; ask a useful follow-up when the choice matters. | Read the saved decisions/questions and later selected graph. An undecided possibility must not become a selected edge. |
299
+ | CHAT-03 | "Save this research." | Persist the accepted record to the selected destination and report its identity/revision and actual location. | Read the file independently after the command returns; compare identity, revision and digest. A chat statement alone is not save evidence. |
300
+ | CHAT-04 | "Find and open the research I saved for this product." | List only the relevant permitted corpus and let the human select the intended record; no implicit resume or new source upload. | Match the displayed selection to saved IDs/revisions and original bytes; verify no unrelated record changed. |
301
+ | CHAT-05 | "Continue this record with this second document." | Establish access to that document and create a successor retaining earlier identities, evidence, decisions and unresolved work. | Compare before/after records, source hashes and parent digest; reopen both. Earlier revisions remain intact. |
302
+ | CHAT-06 | "I corrected this note/choice." | Preserve the edited bytes, review ambiguity with the human and produce an agreed successor, or report a conflict. | Keep before/edited/after versions; verify the correction is in both readable HTML and data, with no lost extensions or changed historical evidence. |
303
+ | CHAT-07 | "Make a Surface for the options I selected, and save it as JSON/YAML." | Produce a separate partial selected definition with sources, requirements and gaps; preserve the research record. | Reopen the actual output, resolve exact research references, compare selected nodes/edges to the human's decisions, and check supported JSON/YAML equality. |
304
+ | CHAT-08 | "Change the output folder/runner preference." | Show the proposed effective change and apply the human's selection without moving old artefacts or transmitting sources implicitly. | Read effective settings through bare startup; check old files and source-access/inference evidence. Runner and optional Lab destination remain independent. |
305
+
306
+ A host that can only supply downloads must say so and provide the real download;
307
+ it cannot claim to have saved into a local corpus. This command milestone uses
308
+ local persistence. External skill and Lab hosts have separate verification rows.
309
+
310
+ ## State X, input Y, verified Z
311
+
312
+ Use plain language and concrete examples. For a small behavior, a short **Given /
313
+ When / Then / Verify** description and representative output, as in STARTUP-01,
314
+ are enough. These are prose labels, not a parser, technical DSL or new test engine.
315
+ Automate the same interaction with ordinary process, output and file assertions.
316
+ Expected values come from the task and controlled sources, not from the
317
+ implementation under test.
318
+
319
+ The following checklist helps with more involved cases such as repository research;
320
+ it is not a mandatory form to repeat for every small check. Include only relevant
321
+ state and evidence, and record shared run metadata once in the verification record.
322
+
323
+ | Field | Content when relevant |
324
+ | --- | --- |
325
+ | Intent | The user's useful task and why it matters. |
326
+ | State X | Initial settings/files and interaction mode; for research, also instruction revision, source snapshot/dirty state, permitted scope and runner/model availability. Never include credential values. |
327
+ | Input Y | Exact command from its invocation directory, relevant user questions/answers and any supplied files. |
328
+ | Expected change | Files, records, revisions, decisions or configuration that should be created/changed, and important state that should stay unchanged. |
329
+ | Expected observations | What the terminal/conversation should show, including evidence references, questions, limitations and actual output location. |
330
+ | Verification Z | Independent source checks and persisted-state readback that establish each expected outcome. Name the evidence, not just a test command. |
331
+ | Actual result | What happened, with the exercised entry point and returned output; distinguish it from the expectation. |
332
+ | Assessment | Pass, fail, blocked or not attempted, with criterion-level results and remaining limits. |
333
+
334
+ The verification record must also identify who performed it, the date, environment,
335
+ installed package revision and retained evidence location. Redact private material
336
+ before publishing evidence; use public/synthetic fixtures for retained repository
337
+ records. A private rehearsal can retain its evidence privately and publish only
338
+ permitted conclusions and limits.
339
+
340
+ ## E2E-01: research a repository and produce a durable record
341
+
342
+ **Intent:** understand a supplied product repository with Researcher and retain
343
+ findings and human choices for later continuation. This is the minimum complete
344
+ path through source access, instructions, inference, human interaction and storage.
345
+
346
+ **State X:**
347
+
348
+ - Install the built package into a temporary consumer environment, independent of
349
+ its source checkout. Record its package/build, instruction and contract versions.
350
+ - Create a temporary Git repository containing the two tracked Lumen source
351
+ documents from [the shared fixtures](../../examples/researcher/README.md), with
352
+ a known commit and matching byte hashes. Copy no research HTML or answer files
353
+ into this source repository. Run the command from a different directory.
354
+ - Start with valid explicit settings, an empty artefact folder, no Lab connection,
355
+ a supported configured real runner/model and authorized transmission of only
356
+ these synthetic documents. The human can answer through the real interface.
357
+ - Preserve a before snapshot of settings, source and corpus. The independently
358
+ specified facts are: guide limit 10, settings limit 25, no known model version,
359
+ optional archive delivery, external identity and callback choices. Do not load
360
+ the expected research record into the runner's context.
361
+
362
+ **Input Y:**
363
+
364
+ ```sh
365
+ n8r-surface discover ./case-source
366
+ ```
367
+
368
+ The human asks: "Research the components and configuration choices in this repo.
369
+ Tell me where the sources disagree and ask which options I want to include."
370
+ When Researcher presents the consequential choices, the human answers: "Include
371
+ archival delivery and external identity. Leave callbacks undecided and keep the
372
+ batch-limit conflict unresolved. Save the research." Both turns go through the
373
+ command's actual conversation; do not inject the decisions directly into storage.
374
+
375
+ **Outcome and verification Z:**
376
+
377
+ | Step | What must happen or change | What we observe | How we verify it |
378
+ | --- | --- | --- | --- |
379
+ | 1. Find the repo | Establish the supplied repo as the source scope. | Selected source identity and inspected coverage; missing/unreadable material is explicit. | Match reported commit/working-copy state and inspected file hashes to the prepared repo. Check source-read events target only the permitted scope. |
380
+ | 2. Follow the Researcher instructions | Load an identified instruction revision and use it to research source evidence. | Instruction version/hash in the session evidence; claims linked to actual source reads and limitations. | Compare the loaded instruction hash with the packaged asset; inspect the actual runner request/tool trace and source-grounded behavior. A version label alone is insufficient. |
381
+ | 3. Interact with the human | Record requested selections, leave callbacks unresolved, and handle a relevant follow-up or correction. | An actual question/answer or correction exchange, with its consequence explained. | Match the transcript to saved decisions/questions. Do not count hard-coded answers or post-hoc edits by the developing agent. |
382
+ | 4. Preserve findings and uncertainty | Retain the 10/25 conflict and unknown model version without inventing a resolution. | Both attributed claims and the unknown are visible in the result. | Check them against the two frozen sources independently, including precise source locators and hashes. Exact generated wording need not match. |
383
+ | 5. Produce the artefact | Create a nonempty HTML research record at the selected destination. | The command reports the actual path, identity, revision and remaining gaps. | Read those bytes from disk after completion; parse with `readResearchHtml`, inspect readable HTML, and verify source references and decisions. A success message/file existence alone is insufficient. |
384
+ | 6. Reopen useful saved work | Exit and open the saved record through a fresh command conversation. | Previous findings, choices and questions remain available; no silent rerun or upload. | Compare reopened identity/revision/digest and retained decisions with the saved output; inspect the real read operation. |
385
+
386
+ **Pass:** all six steps are evidenced through the installed command with the real
387
+ runner and actual saved bytes. Record unsupported or failed criteria explicitly.
388
+ A fixture-library pass, fake runner, developer-authored artefact, or demonstration
389
+ that skips interaction or reopening cannot pass E2E-01.
390
+
391
+ **Current result:** not attempted; blocked by the missing CLI, Researcher instruction
392
+ bundle and runner. The supplied synthetic HTML files demonstrate the artefact
393
+ contract only. They are not outputs of this command scenario.
394
+
395
+ ## E2E-02: apply the same path to LibreChat
396
+
397
+ Before claiming LibreChat research works, repeat E2E-01 on a permitted, explicitly
398
+ selected LibreChat checkout, recording its exact upstream revision and dirty state.
399
+ Use a bounded task: "Describe the authentication path and the components and
400
+ configuration it depends on. Show the evidence and unknowns; ask what I want to
401
+ include, then save the research."
402
+
403
+ Before running, identify the expected relevant source files and a small set of
404
+ checkable facts directly from that frozen checkout. Record those expectations
405
+ separately from the runner input. Verify that the command really reads those
406
+ sources, distinguishes supported options from the user's chosen setup, and does
407
+ not mistake repository documentation for a running integration. Missing optional
408
+ sources remain coverage gaps. Review unexpected findings against the source;
409
+ do not require a fixed prose answer or silently drop supported new evidence.
410
+
411
+ Apply all six verification steps above, using actual persisted outputs. Also
412
+ check that the same product-agnostic instructions work without LibreChat-specific
413
+ control flow. The source version, independent expected-fact set and real output
414
+ must be recorded when exercised; none is invented here.
415
+
416
+ **Current result:** this installed-command path is not attempted. A separate
417
+ [installed-skill LibreChat source rehearsal](researcher-skill-verification.md#predictable-notes-and-real-source-trial-012)
418
+ has saved and reopened working notes. It does not establish E2E-02, runtime
419
+ authentication, human acceptance or validated HTML/Surface output.
420
+
421
+ ## Other required paths and failure outcomes
422
+
423
+ Each row gets a concrete plain-language example when its increment starts.
424
+ These checks accompany E2E-01; they are not a substitute for the complete path.
425
+
426
+ | Case | State X and input Y | Expected change and observable outcome | Verification |
427
+ | --- | --- | --- | --- |
428
+ | SETUP-01 | Isolated home without settings, source outside the vault; run bare `n8r-surface`, press Enter then `y`. | Show `Vault directory [~/n8r/]:`, resolved path and `Create vault folders and save this location? [y/N]`. Acceptance creates three folders and saves version-1 `vaultRoot`, exit 0. Refusal/EOF/interrupt exits 1 without writes. | Read settings and `research/`, `artifacts/`, `surfaces/` independently; repeat from another source cwd with no question or settings rewrite. Preserve source and legacy bytes. |
429
+ | INPUT-01 | Unknown argument or nonexistent/unreadable source. | Specific error or explicit coverage limitation; no substituted repo or invented completed record. | Observe terminal/exit result; inspect source-access events and corpus changes. |
430
+ | SCOPE-01 | Explicit file source, or cwd different from installation and source. | Inspect exactly the intended scope, retaining omissions/truncation. | Compare read paths/hashes and saved coverage to prepared inputs; ensure file-only research does not claim whole-repo coverage. |
431
+ | RUNNER-01 | Missing credential, unavailable model, network failure or cancelled interaction. | Report blocked/partial progress honestly, preserve useful accepted work, and avoid fallback. | Inspect actual runner destination/results and saved state; no completed-research claim without evidence. |
432
+ | CONTINUE-01 | Saved incomplete Harbor r1 plus the authentication source; CHAT-05. | Add supported authentication evidence under the existing finding ID and a new revision. | Reopen old/new records; verify hashes, parent, retained decisions and new source evidence. |
433
+ | EDIT-01 | Accepted record changed manually after read; CHAT-06/save. | Preserve the manual edit, report conflict and reconcile only the human-reviewed intent. | Keep before/edited/after bytes and compare both data and visible HTML. Verify the old revision remains recoverable. |
434
+ | SAVE-01 | Unwritable destination or interruption during write. | Report failure accurately and retain recoverable previous work. | Read actual filesystem state after the failed operation; check no partial replacement masquerades as the accepted record. |
435
+ | SELECT-01 | Two researched products and explicit human choices; CHAT-07. | Save a separate selected graph with shared nodes, parallel edges, cycles, references, requirements and gaps. | Compare persisted graph to selections and exact research revisions, reopen both JSON/YAML outputs and verify supported meanings. |
436
+ | NONINTERACTIVE-01 | No interactive input; CMD-01 or discover needs a decision. | For bare startup needing setup/repair: `Vault setup required; run n8r-surface in an interactive terminal.`, exit 1 promptly, no writes. Configured reuse exits 0; invalid settings, filesystem and legacy inspection failures exit 2 before setup. | Exercise the installed process with closed input under a bounded harness and inspect its output/state. |
437
+ | HELP-01 | Any setup state; CMD-06/07/08. | Accurate help/version, no work begun. | Compare to the inventory/manifest and verify unchanged settings/corpus and no source/inference calls. |
438
+
439
+ Absence-of-side-effect claims need instrumented boundaries and before/after state,
440
+ not just an absence of terminal messages. Verification traces must omit secrets
441
+ and retain only permitted source excerpts. Record input/version metadata, tool
442
+ calls and returned evidence; internal model reasoning is not required. A later independent check can verify
443
+ the recorded readback; the implementer's report does not replace human acceptance.
444
+
445
+ ## Milestone acceptance and evidence status
446
+
447
+ | Milestone | What its evidence can establish | Required product proof |
448
+ | --- | --- | --- |
449
+ | #15 | Experimental record/graph contracts, synthetic preservation/reference checks and this outcome specification. | Reviewable human-readable examples and concrete inputs for the command work; no successful command claim. |
450
+ | #16 | Installed startup, scoped source operations and safe persistence foundation. | STARTUP-01's readable no-argument overview first, then installed command rehearsals for applicable setup/input/scope/save/help/noninteractive paths. Discovery explicitly remains unavailable until #17. |
451
+ | #17 | The shared Researcher completes standalone discovery with a human. | E2E-01 with a real runner, continued/edited research and selected output; E2E-02 before claiming LibreChat support. External skill behavior is exercised separately. |
452
+ | Later Lab integration | A named consumer imports and continues supported standalone work. | The same facts/choices/gaps survive the named application's actual entry points, with limitations and losses recorded. |
453
+
454
+ Maintain an evidence record beside the capability being delivered. It contains the
455
+ case ID, initial state, exact interaction, expected/actual changes, evidence/readback,
456
+ revision/environment, verdict and unproved limits. Link it from the issue and PR.
457
+ Tests may automate parts of this process, but the record must explain what those
458
+ checks demonstrated in terms a person trying the feature can assess.
459
+
460
+ ## SETUP-01: setup-only increment
461
+
462
+ Specified before implementation on 5 November 2026; setup is implemented.
463
+ Candidate verification and its limits are recorded in
464
+ [the setup evidence](vault-setup-verification.md). The [plan](../superpowers/plans/2026-11-05-standalone-vault.md)
465
+ defines exact prompts, path handling, repair, preservation and the user-approved
466
+ cooperating-writer concurrency boundary. No arguments are added. SOURCE-01 remains
467
+ paused. Earlier read-only STARTUP-01 evidence is historical, not evidence for the
468
+ new setup interaction. Missing legacy corpus now permits setup; other legacy
469
+ inspection errors still take precedence (exit 2). No research is started.
470
+
471
+ ## RESEARCH-01: first standalone conversation
472
+
473
+ Specified on 5 November 2026 before implementation. This is a bounded #17
474
+ increment, not completion of E2E-01. The delivery priority is now standalone AI,
475
+ then save/reopen/continue verification, then distribution (#27). Lab adaptation
476
+ remains separate work in its own repository.
477
+
478
+ **Given** a configured vault, permitted local source and Codex 0.166.0 signed in
479
+ with ChatGPT, **when** the user runs `n8r-surface discover [source]`, accepts the
480
+ source-transmission confirmation and asks about the source, **then** Codex uses
481
+ bounded host tools to inspect it and returns findings with source locations.
482
+ A correction or follow-up stays in the same conversation. **Verify** by comparing
483
+ the cited source lines and tool digests with the unchanged source bytes.
484
+
485
+ CMD-03/04/05 accept one optional directory or file (default cwd), plus optional
486
+ `--model MODEL` for an explicit per-session choice. Without it, use the configured
487
+ Codex model; never silently select another. CMD-06/07 display local help and CMD-08
488
+ (`--version`) displays the package version without setup, source reads or Codex.
489
+ Unknown arguments fail with exit 2 without echoing them or reading configuration.
490
+
491
+ Discovery requires an interactive input/output terminal; otherwise exit 1 without
492
+ loading settings or launching Codex. In a terminal, validate settings, require a
493
+ complete configured vault, resolve the selected scope and display it. Explain
494
+ that inspected source text and the conversation go to OpenAI through Codex using
495
+ ChatGPT sign-in; ask `Start research with OpenAI using Codex ChatGPT sign-in? [y/N]`.
496
+ Only y/yes authorizes inference and source content reads. Refusal/EOF exits 1;
497
+ invalid source/settings, runner failure or failed turns exit 2. Ctrl-C exits 130
498
+ and stops the owned server. No API-key, provider or model fallback is permitted.
499
+
500
+ After connecting, display the model and bundled Researcher version/digest.
501
+ At `You>`, accept one line per turn. Display tool-read paths/digests and completed
502
+ agent messages as they arrive. `/exit` or EOF at the prompt exits 0. Ctrl-C during
503
+ a turn requests interruption and closes the server. A failed or timed-out answer
504
+ is marked incomplete and exits 2. SAVE-01 adds explicit Markdown saving/reopening;
505
+ structured output, web/live access and extra source selection remain unsupported.
506
+ Without `/save`, the CLI creates no research artefact; Codex owns its own authentication, cache and diagnostic state.
507
+
508
+ ## SAVE-01: save, reopen and continue
509
+
510
+ Implemented bounded Markdown increment for #17; see [evidence and limits](save-reopen-verification.md).
511
+
512
+ - Given a configured vault and an authorized research conversation, enter `/save`.
513
+ Expect a numbered `research/<source-slug>/research-NNN.md` destination, a
514
+ Researcher-authored working note, and a saved path plus byte digest after readback.
515
+ The note retains stable component IDs, source references/hashes, human decisions,
516
+ unknowns and recommended next steps. Ordinary conversation does not write;
517
+ natural-language save requests receive guidance to use `/save`.
518
+ - Exit, then run `n8r-surface reopen NOTE --source SOURCE [--model MODEL]`.
519
+ Confirm transmission of the note and source. Expect a fresh conversation which
520
+ compares recorded evidence against that source, retains decisions separately,
521
+ and reports changed/missing evidence rather than silently revising history.
522
+ - Alternatively run `n8r-surface reopen --source SOURCE [--model MODEL]`.
523
+ Expect the most recently filesystem-edited numbered note in that source's
524
+ research folder, with path and edit time, and a yes/no selection prompt.
525
+ Refusal exits without launching Codex or writing. Explicit NOTE bypasses ranking.
526
+ - Continue and `/save` again. Expect the next unused number in the predecessor's
527
+ folder, a predecessor filename/digest, unchanged predecessor bytes and retained
528
+ identities. If the predecessor changes while drafting, stop and require reopening
529
+ the edited note. No general write tool or validated structured output is added.
530
+
531
+ The suggested filename is convenience, not evidence of source identity or a
532
+ selection of a deployment. A fresh process requires explicit `--source`; it never
533
+ restores private source paths from a saved note. Help (`reopen --help`) is read-only.
534
+
535
+ ### Pending-operation feedback
536
+
537
+ While connecting, answering, reopening or preparing a `/save` draft, show an
538
+ interactive-terminal spinner with elapsed seconds and the operation label. Clear
539
+ it before normal output and stop it on completion, failure or cancellation. Do
540
+ not animate at `You>` or in nonterminal output. It means the request is pending,
541
+ not that server-side progress is known. Verify a delayed answer/save and Ctrl-C;
542
+ expect visible activity, clean answer/prompt output, and no continuing timer.
543
+
544
+ ## SURFACE-01: generate, save and revise a partial Surface
545
+
546
+ **Implemented in the candidate; verification is tracked in the
547
+ [Surface evidence record](surface-revisions-verification.md).** The installed baseline
548
+ help checked on 5 November 2026 supported Markdown-only saves. Structured output was
549
+ the authorized known missing capability; no failed live generation trial is claimed.
550
+
551
+ **Given:** a saved numbered note, permitted source, configured vault and supported
552
+ Codex sign-in. **When:** reopen the note, ask “Create a Surface from these notes;
553
+ show me what is selected and still unknown,” inspect the preview and enter
554
+ `/save surface`. **Then:** save and read back linked research HTML and Surface JSON
555
+ without changing the note or source. `/save` continues saving Markdown notes.
556
+
557
+ Exit and start `n8r-surface reopen FILE --source SOURCE`, selecting either saved
558
+ member of the pair. After renewed transmission consent, change a named decision,
559
+ request an updated Surface and save it. Expect a new pair with retained identities,
560
+ evidence, human decisions and exact parent references. Earlier bytes remain intact.
561
+ Omitting FILE continues suggesting a Markdown note only. Unknown or unsupported
562
+ files fail clearly; no implicit search for missing research records is authorized.
563
+
564
+ **Verify:** independently parse/read both pairs, check research logical references,
565
+ parent digests and retained IDs/decisions/evidence, and compare note, predecessor,
566
+ source and settings bytes. Repeat a small second-product case. Real installed Codex
567
+ output is required; scripted protocol tests do not establish research correctness.
568
+ See the [design and short human proof](../superpowers/specs/2026-11-05-surface-revisions-design.md).
569
+
570
+ ## DISTRIBUTION-01: install either official package candidate
571
+
572
+ Given a built checkout and cached dependencies, generate private candidates using
573
+ `npm run pack:candidates -- NEW_DIRECTORY`. Install each tarball independently
574
+ outside the checkout. Expect the same `n8r-surface` command, version, library
575
+ exports and bundled assets; bare startup with a fresh home and closed input exits
576
+ 1 with setup guidance and no writes. Configured startup retains existing read-only
577
+ checks. The public command inventory is unchanged.
578
+
579
+ The [distribution procedure](npm-distribution.md) supplies copyable interactions,
580
+ readback and release blockers. The pre-change registry attempt returned E404 for
581
+ both names and E401 for identity on 5 November 2026. Local candidates cannot prove
582
+ registry installation, permissions or provenance. Candidate checks use scripted
583
+ runner fixtures; no new real-model research claim follows.
584
+
585
+ ## VERSION-01: identify the installed package and its release source
586
+
587
+ Given an installed candidate in an isolated consumer, run `n8r-surface --version`
588
+ from another directory. Expect the installed manifest's version, exit 0, no setup
589
+ or inference. The pre-change installed command reported `0.0.0-experimental.1`;
590
+ a copied installation with manifest `0.7.3-rc.2` reproduced the stale hardcoded
591
+ output. The regression now reads back `n8r-surface 0.7.3-rc.2`.
592
+
593
+ The [version policy and human check](versioning.md) describe source/lockfile
594
+ validation and read-only release mapping verification. Synthetic Git repositories
595
+ exercise missing/wrong tags, dirty source, altered archives and release metadata;
596
+ they do not establish an authenticated release or registry provenance. The public
597
+ CLI inventory is unchanged; `check:version` and `check:release` are maintainer npm
598
+ scripts. The subsequent [scoped release](npm-release.md#verified-scoped-release)
599
+ adds authenticated release and registry evidence beyond those synthetic checks.
600
+
601
+ ## RELEASE-01: prepare and publish the first dual release
602
+
603
+ Given reviewed version `0.1.0-experimental.2`, explicit
604
+ `npm run pack:candidates -- NEW_DIRECTORY --publishable` creates both equivalent
605
+ publishable archives; the source and default candidates remain private. The
606
+ [human procedure](npm-release.md#human-check-before-publication) checks both
607
+ installed routes and unchanged isolated homes. Public CLI inventory is unchanged.
608
+
609
+ The manual workflow prepares retained archives before publication and verifies
610
+ existing registry bytes before staging only absent versions for maintainer 2FA approval. Tests cover altered
611
+ bytes, wrong registry identity/integrity, partial-publication recovery and network
612
+ failure. These use synthetic registry boundaries, not authenticated publication.
613
+ Before the release procedure ran, live workflow, registry installation,
614
+ cryptographic provenance and immutable release acceptance were unverified.
615
+ The subsequent scoped-only result is recorded below.
616
+
617
+ ### Verified first-release outcome
618
+
619
+ The maintainer narrowed RELEASE-01 to scoped-only publication. On 5 November
620
+ 2026, `@n8r/surface@0.1.0-experimental.2` passed exact registry byte/integrity,
621
+ installed library/assets/CLI, isolated startup and signed-provenance checks.
622
+ The GitHub prerelease was finalized and read back as immutable. See the
623
+ [release evidence](npm-release.md#verified-scoped-release). The unscoped
624
+ submission failed with E403 and was removed from the release scope; no unscoped
625
+ registry success or name protection is claimed. Future workflow adaptation
626
+ must remove dual-package assumptions before another scoped release. Unscoped
627
+ publication and name reservation are no longer planned.
628
+
629
+ ## SKILL-PRESENTATION-01: read a useful checked report
630
+
631
+ **Implemented candidate 0.1.11.** Given a saved checked Capability/Bound bundle,
632
+ ask the installed Researcher to save a readable presentation copy in a new folder,
633
+ using the same bundle and original predecessor. Expect the current conclusion,
634
+ what changed, bounded significance, cited evidence, decisions and unknowns in
635
+ both HTML and brief. Exact-parent comparison is unavailable when parent research
636
+ is not retained. All checked data and original bytes remain unchanged; the new
637
+ manifest covers the new presentation. No new research or CLI behavior is added.
638
+ See the [human task and readback](skill-surface-artifacts.md#short-human-check).
639
+
640
+ ## SKILL-SURFACE-02: save and continue an investigation
641
+
642
+ **Candidate 0.1.13 implemented; installed assessment tracked separately.**
643
+ No new product CLI command. Given current-chat supplied sources and an authorized
644
+ Surface destination, ask: “Explain the AI paths, save the Surface and maintain an
645
+ investigation journal as we go.” Expect an initial plan, possible/selected paths,
646
+ inspectable evidence, useful next options and numbered saved revisions.
647
+
648
+ The state change is a self-contained CycloneDX BOM plus derived brief, HTML map,
649
+ Markdown journal and manifest. Given only the latest BOM in a fresh chat, ask to
650
+ continue: evidence, decisions, uncertainties and investigation state must recover.
651
+ A user-directed diversion remains recorded, with deferred work and its reason.
652
+ Earlier bytes remain unchanged. View edits require explicit reconciliation.
653
+ See the [human tasks and evidence](skill-bom-verification.md) and
654
+ [working manual](skill-manual.md). Automated profile checks do not establish
655
+ research accuracy or human acceptance.
656
+
657
+ ## SKILL-OVERVIEW-01: understand a supplied application
658
+
659
+ Given the identified 0.1.14 candidate, readable source and a new output folder,
660
+ when the user asks for an initial architecture/security overview and saves it,
661
+ the brief explains application meaning, major areas, evidence-backed implications,
662
+ coverage gaps and next decisions. The HTML shows connected nodes once, before
663
+ relationship/evidence detail. Intended choices remain separate from configuration
664
+ and dated observations. Existing revisions stay unchanged.
665
+
666
+ Specified in [the first-use verification](first-use-overview.md); renderer and
667
+ research guidance implemented. Installed rehearsal and human acceptance status
668
+ are recorded there. Automated structure checks alone do not verify this outcome.
669
+
670
+ ### SKILL-OVERVIEW-02: continue a source-only investigation
671
+
672
+ Given a saved source investigation with historical runtime blockers and completed
673
+ work, say: “It is just a source checkout. Record that in the Surface, keep
674
+ deployment settings unverified, and show the most useful source-level investigation
675
+ next. Save a successor.” Expect a short current scope, reconciled findings/gaps,
676
+ one recommended source action, and unchanged predecessor bytes. Obsolete blockers
677
+ and actions remain history, not current requirements. No runtime inventory or
678
+ service startup is needed. The brief discloses omitted list items and links full
679
+ detail; it retains limitations beside displayed findings.
680
+
681
+ For separately requested inspection of an identified runtime target, emit only
682
+ that target's relevant safe fields. A broad response must be filtered inside the
683
+ collecting process before output; saved redaction alone is insufficient.
684
+ See [rehearsal evidence and human checks](first-use-overview.md#follow-up-rehearsal).
685
+
686
+ ## SKILL-INSTANCE-01: understand and revisit a running composition
687
+
688
+ Candidate 0.1.15 adds research guidance; no product CLI command or access adapter.
689
+ Given an identified target, permitted host access to sources/instance evidence and
690
+ a private destination, ask: “Understand this running system, show what is
691
+ configured, observed and untested, and save the Surface.” Expect source identity,
692
+ scoped observations, a useful composition beyond a single repository, explicit
693
+ access gaps and saved BOM/brief/map/journal readback. No probes or service changes.
694
+
695
+ Continue from that BOM with current permitted evidence. Expect unchanged stable
696
+ identities and predecessor bytes, with actual target changes distinguished from
697
+ newly learned facts, unchanged checked facts, lost coverage and conflicts. A host
698
+ without required access or saving tools must report the blocked portion without
699
+ fabricating results. Source-only requests need no runtime inventory.
700
+ See the [human tasks and bounded verification](instance-first-research.md).
701
+
702
+ ## SKILL-ACCESS-01: begin without prepared connections
703
+
704
+ Given a fresh session and a description/document, with laptop source and VPS
705
+ access only mentioned, ask Researcher to understand the system and help provide
706
+ sources. Expect a provisional map, one useful next source and host-appropriate
707
+ access guidance. A project upload is not a live folder; SSH details are not access.
708
+ Supply another source and expect progress rather than repeated intake. Saving
709
+ requires observed helper/runtime/delivery capabilities; otherwise retain copyable
710
+ findings and name the blocked step. No credentials in chat or target mutations.
711
+ See [exact interactions, readback and verification status](first-use-access.md).