@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.
- package/LICENSE +202 -0
- package/LICENSE-DOCS +395 -0
- package/LICENSING.md +36 -0
- package/README.md +207 -2
- package/dist/activity.d.ts +16 -0
- package/dist/activity.js +44 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +412 -0
- package/dist/codec.d.ts +6 -0
- package/dist/codec.js +56 -0
- package/dist/codex.d.ts +72 -0
- package/dist/codex.js +526 -0
- package/dist/contracts.d.ts +235 -0
- package/dist/contracts.js +1 -0
- package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
- package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
- package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
- package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
- package/dist/cyclonedx-validation.d.ts +1 -0
- package/dist/cyclonedx-validation.js +45 -0
- package/dist/html.d.ts +5 -0
- package/dist/html.js +74 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +5 -0
- package/dist/notes.d.ts +52 -0
- package/dist/notes.js +184 -0
- package/dist/portable.d.ts +10 -0
- package/dist/portable.js +71 -0
- package/dist/recent.d.ts +9 -0
- package/dist/recent.js +71 -0
- package/dist/revisions.d.ts +2 -0
- package/dist/revisions.js +60 -0
- package/dist/settings.d.ts +23 -0
- package/dist/settings.js +100 -0
- package/dist/setup.d.ts +9 -0
- package/dist/setup.js +161 -0
- package/dist/skill-artifacts-cli.d.ts +1 -0
- package/dist/skill-artifacts-cli.js +13 -0
- package/dist/skill-artifacts.d.ts +15 -0
- package/dist/skill-artifacts.js +184 -0
- package/dist/skill-cyclonedx.d.ts +26 -0
- package/dist/skill-cyclonedx.js +214 -0
- package/dist/skill-presentation.d.ts +10 -0
- package/dist/skill-presentation.js +108 -0
- package/dist/skill-surface-cli.d.ts +1 -0
- package/dist/skill-surface-cli.js +37 -0
- package/dist/skill-surface-store.d.ts +7 -0
- package/dist/skill-surface-store.js +126 -0
- package/dist/source-tools.d.ts +102 -0
- package/dist/source-tools.js +201 -0
- package/dist/startup.d.ts +7 -0
- package/dist/startup.js +74 -0
- package/dist/surface-bom.d.ts +73 -0
- package/dist/surface-bom.js +139 -0
- package/dist/surface-draft.d.ts +22 -0
- package/dist/surface-draft.js +112 -0
- package/dist/surface-instructions.d.ts +3 -0
- package/dist/surface-instructions.js +32 -0
- package/dist/surface-overview.d.ts +15 -0
- package/dist/surface-overview.js +86 -0
- package/dist/surface-store.d.ts +34 -0
- package/dist/surface-store.js +213 -0
- package/dist/surface-view.d.ts +3 -0
- package/dist/surface-view.js +50 -0
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +482 -0
- package/docs/n8r-surface/README.md +133 -0
- package/docs/n8r-surface/cli-bundles.md +72 -0
- package/docs/n8r-surface/codex-research-transcript.md +51 -0
- package/docs/n8r-surface/codex-research-verification.md +176 -0
- package/docs/n8r-surface/command-outcomes.md +711 -0
- package/docs/n8r-surface/contracts.md +220 -0
- package/docs/n8r-surface/critical-path.md +184 -0
- package/docs/n8r-surface/design.md +289 -0
- package/docs/n8r-surface/first-use-access.md +143 -0
- package/docs/n8r-surface/first-use-overview.md +262 -0
- package/docs/n8r-surface/getting-started.md +74 -0
- package/docs/n8r-surface/guided-journey-verification.md +137 -0
- package/docs/n8r-surface/host-contract.md +176 -0
- package/docs/n8r-surface/implementation-decisions.md +96 -0
- package/docs/n8r-surface/instance-first-research.md +209 -0
- package/docs/n8r-surface/npm-distribution.md +107 -0
- package/docs/n8r-surface/npm-release.md +315 -0
- package/docs/n8r-surface/product-direction.md +327 -0
- package/docs/n8r-surface/recreation-handoff.md +117 -0
- package/docs/n8r-surface/researcher-discovery.md +157 -0
- package/docs/n8r-surface/researcher-prepared-check.md +117 -0
- package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
- package/docs/n8r-surface/researcher-repository-check.md +95 -0
- package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
- package/docs/n8r-surface/researcher-skill-verification.md +725 -0
- package/docs/n8r-surface/researcher-skill.md +309 -0
- package/docs/n8r-surface/researcher-vault.md +134 -0
- package/docs/n8r-surface/save-reopen-transcript.md +211 -0
- package/docs/n8r-surface/save-reopen-verification.md +152 -0
- package/docs/n8r-surface/security-assurance-strategy.md +267 -0
- package/docs/n8r-surface/skill-bom-verification.md +142 -0
- package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
- package/docs/n8r-surface/skill-cyclonedx.md +85 -0
- package/docs/n8r-surface/skill-manual.md +129 -0
- package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
- package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
- package/docs/n8r-surface/skill-workspace-automation.md +359 -0
- package/docs/n8r-surface/startup-human-check.md +172 -0
- package/docs/n8r-surface/startup-verification.md +161 -0
- package/docs/n8r-surface/startup.md +151 -0
- package/docs/n8r-surface/surface-description-contract.md +224 -0
- package/docs/n8r-surface/surface-descriptions.md +173 -0
- package/docs/n8r-surface/surface-relationships.md +231 -0
- package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
- package/docs/n8r-surface/surface-revisions-verification.md +161 -0
- package/docs/n8r-surface/tester-candidate.md +158 -0
- package/docs/n8r-surface/vault-setup-verification.md +210 -0
- package/docs/n8r-surface/verification.md +117 -0
- package/docs/n8r-surface/versioning.md +172 -0
- package/docs/n8r-surface/workspace-human-check.md +101 -0
- package/docs/n8r-surface/workspace-installation.md +68 -0
- package/docs/n8r-surface/workspace-verification.md +350 -0
- package/docs/n8r-surface/workspace.md +83 -0
- package/examples/researcher/README.md +100 -0
- package/examples/researcher/composed.surface.json +430 -0
- package/examples/researcher/composed.surface.yaml +283 -0
- package/examples/researcher/cyclonedx/configured/README.md +7 -0
- package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
- package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
- package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
- package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
- package/examples/researcher/descriptions/README.md +29 -0
- package/examples/researcher/descriptions/bound-r1.json +141 -0
- package/examples/researcher/descriptions/bound-r2.json +153 -0
- package/examples/researcher/descriptions/capability.json +167 -0
- package/examples/researcher/descriptions/research-r1.json +153 -0
- package/examples/researcher/descriptions/research-r2.json +157 -0
- package/examples/researcher/descriptions/sources.md +24 -0
- package/examples/researcher/harbor-r1.research.html +193 -0
- package/examples/researcher/harbor-r2.research.html +226 -0
- package/examples/researcher/lumen-manual-edit.pending.html +271 -0
- package/examples/researcher/lumen-r1.research.html +271 -0
- package/examples/researcher/lumen-r2.research.html +280 -0
- package/examples/researcher/relationships/README.md +34 -0
- package/examples/researcher/relationships/bound-r1.json +346 -0
- package/examples/researcher/relationships/bound-r2.json +358 -0
- package/examples/researcher/relationships/capability.json +325 -0
- package/examples/researcher/relationships/config/assistant.env.example +4 -0
- package/examples/researcher/relationships/research-r1.json +300 -0
- package/examples/researcher/relationships/research-r2.json +304 -0
- package/examples/researcher/relationships/sources.md +38 -0
- package/examples/researcher/sources/harbor-api.md +16 -0
- package/examples/researcher/sources/harbor-auth.md +8 -0
- package/examples/researcher/sources/lumen-guide.md +28 -0
- package/examples/researcher/sources/lumen-settings.md +9 -0
- package/examples/researcher/surface-bom/README.md +17 -0
- package/examples/researcher/surface-bom/initial.cdx.json +188 -0
- package/package.json +45 -4
- package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
- package/plugins/n8r-surface/LICENSE +202 -0
- package/plugins/n8r-surface/LICENSE-DOCS +395 -0
- package/plugins/n8r-surface/LICENSING.md +39 -0
- package/plugins/n8r-surface/assets/icon.svg +5 -0
- package/plugins/n8r-surface/plugin.json +27 -0
- package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
- package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
- package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
- package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
- package/plugins/n8r-surface/skills/research/references/discovery-map.md +178 -0
- package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
- package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
- package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
- package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
- package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
- package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
- package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
- package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
- package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
- package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
- package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
- package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
- package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
- package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
- package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
- 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).
|