@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,178 @@
|
|
|
1
|
+
# AI Surface discovery guide
|
|
2
|
+
|
|
3
|
+
The goal is an evidence-backed graph of AI-relevant components and connections,
|
|
4
|
+
not a complete application inventory. Follow how information enters, reaches
|
|
5
|
+
models/tools/data, and produces effects. Include supporting storage, identity,
|
|
6
|
+
infrastructure and observability when they explain those paths or boundaries.
|
|
7
|
+
Settings are supporting evidence: inspect them when they change a node, edge,
|
|
8
|
+
route, authority, data flow or a material uncertainty about the graph.
|
|
9
|
+
|
|
10
|
+
This is provisional research guidance within the AI Surface Model, not another
|
|
11
|
+
model, a universal schema or a mandatory list of components.
|
|
12
|
+
|
|
13
|
+
## Start with the available evidence
|
|
14
|
+
|
|
15
|
+
Establish the task: **discover** a graph, **continue** saved research, or
|
|
16
|
+
**reconcile** an existing Surface with current evidence. Honor a bounded question.
|
|
17
|
+
For broad requests, identify the application boundary and shallow AI-related
|
|
18
|
+
connections before detailed subsystem research. Degree is relative to the start
|
|
19
|
+
node; follow a useful route beyond one hop without imposing a depth ceiling.
|
|
20
|
+
|
|
21
|
+
| Available material | Use and limit |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Unknown folder | Inspect structure, entry points and manifests to locate evidence of AI relevance. Unread files and dependency names are clues, not findings. |
|
|
24
|
+
| Code without docs | Follow calls, configuration readers and dependencies relevant to graph edges; runtime state remains separate. |
|
|
25
|
+
| Docs without code | Use navigation, headings and examples to map documented capabilities; implementation and effective setup remain unverified. |
|
|
26
|
+
| Local/remote documentation | Follow relevant links into source or setup material. Record the URL, applicable version, section and inspection time; current vendor docs may describe another release. |
|
|
27
|
+
| Product guide or earlier research | Reuse navigation, evidence and gaps after checking identity, scope and revision. Distinguish inherited from rechecked findings. |
|
|
28
|
+
| Surface definition(s) | Establish each composition's identity and claims. Compare applicable claims; omitted detail is not absence. |
|
|
29
|
+
| Supplied configuration | Establish environment, revision, defaults and overrides when relevant. An example is not a selected setup; a file is not proof it was loaded. |
|
|
30
|
+
| Human input | Record scoped intent, corrections and decisions separately from source or runtime evidence. |
|
|
31
|
+
| Live UI/API observations | Identify the target environment and dated observed settings; reading a setting does not exercise its connection. |
|
|
32
|
+
|
|
33
|
+
Use what is available. Record unavailable, unreadable, excluded or truncated
|
|
34
|
+
material without inventing its contents. A locator does not grant access.
|
|
35
|
+
Enough evidence for the user's question, with visible gaps, is a useful stopping
|
|
36
|
+
point; obtaining every source type is not a completion requirement.
|
|
37
|
+
|
|
38
|
+
## Reuse product knowledge
|
|
39
|
+
|
|
40
|
+
Look for related material in supplied notes, selected local libraries or a
|
|
41
|
+
connected collection that the host can actually search. Do not scan unrelated
|
|
42
|
+
folders/accounts or presume an n8r-labs connection. A simple index of versioned
|
|
43
|
+
documents and links is sufficient; this skill creates no registry service.
|
|
44
|
+
|
|
45
|
+
Distinguish a product guide (capabilities/navigation), a particular selected
|
|
46
|
+
Surface (composition), and research (evidence/decisions/gaps). Match repository
|
|
47
|
+
identity, forks, releases and scope rather than a display name alone. An older
|
|
48
|
+
guide can direct reads without establishing current behavior. Several Surfaces
|
|
49
|
+
may select different providers; never union their selections into one deployment.
|
|
50
|
+
Retain provenance and contradictions. A library's origin is not automatic
|
|
51
|
+
authority, and a note repeating a source is not independent corroboration.
|
|
52
|
+
|
|
53
|
+
When saving, retain reusable product findings separately from private deployment
|
|
54
|
+
choices. Making private research public requires its own authorization.
|
|
55
|
+
|
|
56
|
+
## Follow graph clues
|
|
57
|
+
|
|
58
|
+
Documentation indexes and navigation often provide the first paths. Follow
|
|
59
|
+
relevant headings, setup examples and links into code. When links are absent,
|
|
60
|
+
search distinctive configuration keys, symbols and route names. If documentation
|
|
61
|
+
is absent, use entry points and manifests. Read scripts as evidence; do not run
|
|
62
|
+
them merely to discover architecture.
|
|
63
|
+
|
|
64
|
+
| Area | Clue leads to next useful read |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| Inputs and effects | Web/chat UI, API, CLI, bot, upload, webhook or scheduled task → handler → AI processing and returned result/action. A generic UI alone is not AI evidence. |
|
|
67
|
+
| Models and inference | Inference call or endpoint → configuration source → proxy/router/aggregator → service → model identity. Cover embeddings, speech, vision and other AI operations, not only chat. A provider SDK or compatible API does not identify the service behind a custom URL. |
|
|
68
|
+
| Agents and orchestration | Prompt/workflow/agent definition → context assembly, model selection, delegation, tools and stopping conditions relevant to connections. |
|
|
69
|
+
| Tools and actions | MCP or other integration → host/client/server role, exposed/consumed capability, transport, executor, target and authority. SDK installation alone does not establish a configured connection. |
|
|
70
|
+
| Knowledge and retrieval | Upload/source connector → parsing/chunking → embeddings/index/store → retrieval/reranking → model context. RAG need not be a separate server; identify who provides and consumes each capability. |
|
|
71
|
+
| State and storage | Conversation, memory or document persistence call → storage adapter → configured store. Include a database such as MongoDB for its AI-related data role; avoid unrelated application tables. |
|
|
72
|
+
| Identity and controls | Login/provider gate, permission check or approval → identity/authority boundary governing relevant access and actions. OIDC enablement and issuer can explain an edge; credential values do not belong in the graph. |
|
|
73
|
+
| Observability and evaluation | Tracing/evaluation hook → instrumentation → destination and covered AI operations. A logging dependency alone does not establish a live telemetry connection. |
|
|
74
|
+
| Software identity and delivery | Manifest, lockfile, entry point, container or deployment declaration → relevant component/version/runtime and configuration binding. These support graph identity; do not enumerate every package or setting. |
|
|
75
|
+
|
|
76
|
+
For example, `package.json` suggests JavaScript package/tooling context. Inspect
|
|
77
|
+
scripts, engines, workspaces and relevant imports before inferring a runtime;
|
|
78
|
+
it may describe browser tooling alongside a Python service. Keep application,
|
|
79
|
+
package, source revision, deployed build and model versions distinct.
|
|
80
|
+
|
|
81
|
+
A CRM can have no identified AI capability in the inspected scope, or participate
|
|
82
|
+
as an evidenced tool/data source in a larger AI Surface. Neither a database nor a
|
|
83
|
+
generic API alone establishes AI membership. Report scoped negative findings and
|
|
84
|
+
insufficient evidence distinctly; do not force an AI graph into every repository.
|
|
85
|
+
|
|
86
|
+
## Reconcile a Surface with current sources
|
|
87
|
+
|
|
88
|
+
Preserve the supplied bytes and establish format/version, vocabulary, component
|
|
89
|
+
identity, scope and intended versus observed meaning. Only claim validation for
|
|
90
|
+
a supported format actually checked. Unrecognized meanings remain unsupported;
|
|
91
|
+
successful JSON parsing does not make arbitrary Surface JSON understood.
|
|
92
|
+
|
|
93
|
+
Use the graph as the comparison spine. For each relevant node/edge or supporting
|
|
94
|
+
setting, report: prior claim and basis; current evidence and applicability;
|
|
95
|
+
agreement, difference, additional discovery, conflict, unknown or unsupported
|
|
96
|
+
meaning; and the next useful check. These are prose comparison outcomes, not new
|
|
97
|
+
contract states. Missing search hits or omitted attributes do not establish that
|
|
98
|
+
a node/edge was removed. Preserve stable identities where evidence supports them.
|
|
99
|
+
|
|
100
|
+
Compare like with like: documented support, implemented support, human intent,
|
|
101
|
+
declared configuration, observed effective configuration, reachability and
|
|
102
|
+
exercised behavior answer different questions. Example: a baseline selects OIDC;
|
|
103
|
+
current code supports OIDC; a staging file declares it disabled. That can establish
|
|
104
|
+
a declared difference for the same staging target, but not its running state or
|
|
105
|
+
that the historical baseline was wrong. Locate applicable override/effective
|
|
106
|
+
evidence if that distinction matters. Do not dump unrelated settings into the diff.
|
|
107
|
+
|
|
108
|
+
Save the comparison as research. A proposed successor must preserve the original,
|
|
109
|
+
its evidence and unresolved claims. For requested checked Capability/Bound JSON
|
|
110
|
+
and research HTML, follow [standalone artifacts](artifacts.md). The skill does
|
|
111
|
+
not modify deployments.
|
|
112
|
+
|
|
113
|
+
## Inspect live connections with the human
|
|
114
|
+
|
|
115
|
+
For a running composition, use [instance-first research](instance-first.md) to
|
|
116
|
+
connect host access, deployment identity and evidence across multiple sources.
|
|
117
|
+
|
|
118
|
+
Identify the user's target before listing runtime resources. For source-only
|
|
119
|
+
research, continue source analysis without runtime inventory. If inspection is
|
|
120
|
+
requested but the target is unknown, ask for its identity or location while
|
|
121
|
+
continuing the source work; do not expand into unrelated projects or contexts.
|
|
122
|
+
|
|
123
|
+
Filter at collection time, before stdout, stderr, tool results or saved evidence.
|
|
124
|
+
Use a server-side target filter and a narrow field projection when available.
|
|
125
|
+
If only a broad response is available, capture it inside the local process,
|
|
126
|
+
select the target and safe fields there, then emit only that projection. Report
|
|
127
|
+
sanitized failure categories without dumping raw responses or stderr. Do not
|
|
128
|
+
print unrelated names, images, IDs, mount paths or Compose file locations and
|
|
129
|
+
then redact them only in the saved artifact. No match means only that the scoped
|
|
130
|
+
query did not identify the target; it does not establish global absence.
|
|
131
|
+
|
|
132
|
+
Use live inspection when the user's task calls for it and the host provides
|
|
133
|
+
authorized access. Establish the selected application, environment/tenant and
|
|
134
|
+
question from available context; ask only for missing information needed to
|
|
135
|
+
identify the target. Prefer a suitable connected read tool or documented admin
|
|
136
|
+
API; use browser/computer tools where they provide the required access. Respect
|
|
137
|
+
the tools' scopes and restrictions. A blocked route must not be bypassed.
|
|
138
|
+
|
|
139
|
+
Let the user complete password, MFA or private sign-in flows directly using the
|
|
140
|
+
host's supported handoff. Do not ask for credentials in chat, extract sessions,
|
|
141
|
+
reveal masked secrets, export credentials or copy passwords/keys/tokens into
|
|
142
|
+
notes. Prefer narrow nonsecret fields or settings views to raw configuration
|
|
143
|
+
dumps. If incidental secrets appear, do not repeat or retain them. Avoid saving
|
|
144
|
+
screenshots or payloads containing secrets; record a sanitized observation and
|
|
145
|
+
its location, with the resulting evidence limitation.
|
|
146
|
+
|
|
147
|
+
Ask graph questions: is this connection enabled; which service/issuer is the
|
|
148
|
+
target; what role, protocol and authority does it use? A masked configured-secret
|
|
149
|
+
indicator may establish presence, never credential validity. Keep target identity
|
|
150
|
+
as specific as needed in private notes; redact sensitive infrastructure details
|
|
151
|
+
from portable/shared output and keep the stable component ID.
|
|
152
|
+
|
|
153
|
+
Remain read-only: do not toggle/save settings, reveal secrets, rotate keys,
|
|
154
|
+
create clients or invoke a connection test as part of inspection. Those are
|
|
155
|
+
separate user tasks. Do not invent API endpoints or assume any product exposes
|
|
156
|
+
all its configuration through an admin UI.
|
|
157
|
+
|
|
158
|
+
Record the actual page/section or API operation, environment, time, available
|
|
159
|
+
version and nonsecret result. Distinguish an editable stored setting from a
|
|
160
|
+
runtime-effective setting. Re-read the relevant view/field when verifying the
|
|
161
|
+
observation; inaccessible fields remain unknown. Keep source declarations and
|
|
162
|
+
earlier observations even when they disagree. Live settings are dated evidence,
|
|
163
|
+
not proof of a successful login, inference call, database query or complete setup.
|
|
164
|
+
|
|
165
|
+
## Present and retain the graph
|
|
166
|
+
|
|
167
|
+
Lead with a compact graph or edge table: stable components, directed/purposed
|
|
168
|
+
connections, evidence basis and unresolved endpoints. Put supported alternatives
|
|
169
|
+
in a separate view/list from selected composition. Label a connection as declared
|
|
170
|
+
only when an applicable declaration supports it; keep possibilities, inferences
|
|
171
|
+
and unresolved clues explicit. Do not turn a UI settings read into an exercised edge. Include shared
|
|
172
|
+
components and useful deeper routes without inventing separate services for every
|
|
173
|
+
route, configuration key or package. Keep graph-relevant settings beside the edge
|
|
174
|
+
they explain, followed by evidence, coverage and the next consequential question.
|
|
175
|
+
|
|
176
|
+
Use the [working-note convention](working-notes.md) for durable progress. Sources
|
|
177
|
+
and observation summaries may be incomplete; a successful save does not establish
|
|
178
|
+
runtime behavior, universal compatibility or security certification.
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "urn:demo:relationship-bound",
|
|
3
|
+
"title": "Synthetic Bound Surface with integration details",
|
|
4
|
+
"scope": "Synthetic role/product identities only; runtime unverified.",
|
|
5
|
+
"revision": {
|
|
6
|
+
"id": "r1",
|
|
7
|
+
"parent": null,
|
|
8
|
+
"createdAt": "2026-11-08T00:00:00Z",
|
|
9
|
+
"author": "Synthetic author",
|
|
10
|
+
"reason": "Initial synthetic example"
|
|
11
|
+
},
|
|
12
|
+
"extensions": {},
|
|
13
|
+
"contract": "n8r.surface/0.3",
|
|
14
|
+
"kind": "bound",
|
|
15
|
+
"capability": {
|
|
16
|
+
"id": "urn:demo:relationship-capability",
|
|
17
|
+
"revision": "r1",
|
|
18
|
+
"digest": "sha256:0febad60567f68c75979e1f614200e7163f9a89a550423e53ff48ab22d2befaa"
|
|
19
|
+
},
|
|
20
|
+
"instance": {
|
|
21
|
+
"id": "urn:instance:demo",
|
|
22
|
+
"label": "Synthetic instance"
|
|
23
|
+
},
|
|
24
|
+
"records": [
|
|
25
|
+
{
|
|
26
|
+
"id": "urn:demo:relationship-research",
|
|
27
|
+
"revision": "r1",
|
|
28
|
+
"digest": "sha256:615bc6f8f443b986f78a46414faf97822206bcfcc9781e8d7c03d2dcb83940a0"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"vocabularies": [
|
|
32
|
+
{
|
|
33
|
+
"id": "urn:v:demo",
|
|
34
|
+
"version": "1"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"nodes": [
|
|
38
|
+
{
|
|
39
|
+
"id": "urn:node:app",
|
|
40
|
+
"label": "Assistant",
|
|
41
|
+
"type": {
|
|
42
|
+
"vocabulary": "urn:v:demo",
|
|
43
|
+
"term": "component"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "urn:node:mongodb",
|
|
48
|
+
"label": "MongoDB",
|
|
49
|
+
"type": {
|
|
50
|
+
"vocabulary": "urn:v:demo",
|
|
51
|
+
"term": "component"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "urn:node:oidc",
|
|
56
|
+
"label": "OIDC",
|
|
57
|
+
"type": {
|
|
58
|
+
"vocabulary": "urn:v:demo",
|
|
59
|
+
"term": "component"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "urn:node:saml",
|
|
64
|
+
"label": "SAML",
|
|
65
|
+
"type": {
|
|
66
|
+
"vocabulary": "urn:v:demo",
|
|
67
|
+
"term": "component"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "urn:node:inference",
|
|
72
|
+
"label": "Inference service",
|
|
73
|
+
"type": {
|
|
74
|
+
"vocabulary": "urn:v:demo",
|
|
75
|
+
"term": "component"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "urn:target:atlas",
|
|
80
|
+
"label": "MongoDB Atlas",
|
|
81
|
+
"type": {
|
|
82
|
+
"vocabulary": "urn:v:demo",
|
|
83
|
+
"term": "component"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "urn:target:oidc",
|
|
88
|
+
"label": "OIDC service",
|
|
89
|
+
"type": {
|
|
90
|
+
"vocabulary": "urn:v:demo",
|
|
91
|
+
"term": "component"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "urn:target:saml",
|
|
96
|
+
"label": "SAML service",
|
|
97
|
+
"type": {
|
|
98
|
+
"vocabulary": "urn:v:demo",
|
|
99
|
+
"term": "component"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"coverage": [
|
|
104
|
+
"Sanitized configuration summary"
|
|
105
|
+
],
|
|
106
|
+
"gaps": [
|
|
107
|
+
"Authentication conflict; inference unknown; runtime unverified"
|
|
108
|
+
],
|
|
109
|
+
"relationships": [
|
|
110
|
+
{
|
|
111
|
+
"id": "urn:cap:database",
|
|
112
|
+
"from": "urn:node:app",
|
|
113
|
+
"to": "urn:node:mongodb",
|
|
114
|
+
"type": {
|
|
115
|
+
"vocabulary": "urn:v:demo",
|
|
116
|
+
"term": "persists-data"
|
|
117
|
+
},
|
|
118
|
+
"basis": [
|
|
119
|
+
{
|
|
120
|
+
"record": "urn:demo:relationship-research",
|
|
121
|
+
"revision": "r1",
|
|
122
|
+
"items": [
|
|
123
|
+
"urn:f:database"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"conditions": [],
|
|
128
|
+
"note": "Supported possibility, not a selected composition",
|
|
129
|
+
"purpose": {
|
|
130
|
+
"state": "known",
|
|
131
|
+
"claims": [
|
|
132
|
+
{
|
|
133
|
+
"value": "Persist conversation history and user profiles.",
|
|
134
|
+
"basis": [
|
|
135
|
+
{
|
|
136
|
+
"record": "urn:demo:relationship-research",
|
|
137
|
+
"revision": "r1",
|
|
138
|
+
"items": [
|
|
139
|
+
"urn:f:database-purpose"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"note": "Supported by synthetic source pack."
|
|
146
|
+
},
|
|
147
|
+
"integration": {
|
|
148
|
+
"state": "known",
|
|
149
|
+
"claims": [
|
|
150
|
+
{
|
|
151
|
+
"value": "MongoDB client driver using the MongoDB wire protocol.",
|
|
152
|
+
"basis": [
|
|
153
|
+
{
|
|
154
|
+
"record": "urn:demo:relationship-research",
|
|
155
|
+
"revision": "r1",
|
|
156
|
+
"items": [
|
|
157
|
+
"urn:f:database-integration"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"note": "Supported by synthetic source pack."
|
|
164
|
+
},
|
|
165
|
+
"configuration": {
|
|
166
|
+
"state": "known",
|
|
167
|
+
"claims": [
|
|
168
|
+
{
|
|
169
|
+
"value": [
|
|
170
|
+
{
|
|
171
|
+
"owner": "urn:node:app",
|
|
172
|
+
"mechanism": "environment-variable",
|
|
173
|
+
"key": "CHAT_STORE_URI",
|
|
174
|
+
"location": "config/assistant.env.example"
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
"basis": [
|
|
178
|
+
{
|
|
179
|
+
"record": "urn:demo:relationship-research",
|
|
180
|
+
"revision": "r1",
|
|
181
|
+
"items": [
|
|
182
|
+
"urn:f:database-configuration"
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"note": "Supported by synthetic source pack."
|
|
189
|
+
},
|
|
190
|
+
"binding": {
|
|
191
|
+
"state": "configured",
|
|
192
|
+
"claims": [
|
|
193
|
+
{
|
|
194
|
+
"target": "urn:target:atlas",
|
|
195
|
+
"basis": [
|
|
196
|
+
{
|
|
197
|
+
"record": "urn:demo:relationship-research",
|
|
198
|
+
"revision": "r1",
|
|
199
|
+
"items": [
|
|
200
|
+
"urn:f:database-bound"
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"decisions": [],
|
|
207
|
+
"note": "Configuration sufficient; runtime unverified"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"id": "urn:cap:oidc",
|
|
212
|
+
"from": "urn:node:app",
|
|
213
|
+
"to": "urn:node:oidc",
|
|
214
|
+
"type": {
|
|
215
|
+
"vocabulary": "urn:v:demo",
|
|
216
|
+
"term": "authenticates-via"
|
|
217
|
+
},
|
|
218
|
+
"basis": [
|
|
219
|
+
{
|
|
220
|
+
"record": "urn:demo:relationship-research",
|
|
221
|
+
"revision": "r1",
|
|
222
|
+
"items": [
|
|
223
|
+
"urn:f:oidc"
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"conditions": [
|
|
228
|
+
"OIDC and SAML are alternatives"
|
|
229
|
+
],
|
|
230
|
+
"note": "Supported possibility, not a selected composition",
|
|
231
|
+
"purpose": {
|
|
232
|
+
"state": "known",
|
|
233
|
+
"claims": [
|
|
234
|
+
{
|
|
235
|
+
"value": "Authenticate users through an identity service.",
|
|
236
|
+
"basis": [
|
|
237
|
+
{
|
|
238
|
+
"record": "urn:demo:relationship-research",
|
|
239
|
+
"revision": "r1",
|
|
240
|
+
"items": [
|
|
241
|
+
"urn:f:oidc-purpose"
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"note": "Supported by synthetic source pack."
|
|
248
|
+
},
|
|
249
|
+
"integration": {
|
|
250
|
+
"state": "known",
|
|
251
|
+
"claims": [
|
|
252
|
+
{
|
|
253
|
+
"value": "OpenID Connect",
|
|
254
|
+
"basis": [
|
|
255
|
+
{
|
|
256
|
+
"record": "urn:demo:relationship-research",
|
|
257
|
+
"revision": "r1",
|
|
258
|
+
"items": [
|
|
259
|
+
"urn:f:oidc-integration"
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
]
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
"note": "Supported by synthetic source pack."
|
|
266
|
+
},
|
|
267
|
+
"configuration": {
|
|
268
|
+
"state": "unknown",
|
|
269
|
+
"claims": [],
|
|
270
|
+
"note": "Not researched; no absence assertion."
|
|
271
|
+
},
|
|
272
|
+
"binding": {
|
|
273
|
+
"state": "conflicting",
|
|
274
|
+
"claims": [
|
|
275
|
+
{
|
|
276
|
+
"target": "urn:target:oidc",
|
|
277
|
+
"basis": [
|
|
278
|
+
{
|
|
279
|
+
"record": "urn:demo:relationship-research",
|
|
280
|
+
"revision": "r1",
|
|
281
|
+
"items": [
|
|
282
|
+
"urn:f:identity"
|
|
283
|
+
]
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"target": "urn:target:saml",
|
|
289
|
+
"basis": [
|
|
290
|
+
{
|
|
291
|
+
"record": "urn:demo:relationship-research",
|
|
292
|
+
"revision": "r1",
|
|
293
|
+
"items": [
|
|
294
|
+
"urn:f:identity"
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"decisions": [
|
|
301
|
+
{
|
|
302
|
+
"record": "urn:demo:relationship-research",
|
|
303
|
+
"revision": "r1",
|
|
304
|
+
"items": [
|
|
305
|
+
"urn:decision:oidc"
|
|
306
|
+
]
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
"note": "Preference retained separately; configuration sources disagree"
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"id": "urn:cap:inference",
|
|
314
|
+
"from": "urn:node:app",
|
|
315
|
+
"to": "urn:node:inference",
|
|
316
|
+
"type": {
|
|
317
|
+
"vocabulary": "urn:v:demo",
|
|
318
|
+
"term": "uses"
|
|
319
|
+
},
|
|
320
|
+
"basis": [],
|
|
321
|
+
"conditions": [],
|
|
322
|
+
"note": "Unknown support",
|
|
323
|
+
"purpose": {
|
|
324
|
+
"state": "unknown",
|
|
325
|
+
"claims": [],
|
|
326
|
+
"note": "Not researched; no absence assertion."
|
|
327
|
+
},
|
|
328
|
+
"integration": {
|
|
329
|
+
"state": "unknown",
|
|
330
|
+
"claims": [],
|
|
331
|
+
"note": "Not researched; no absence assertion."
|
|
332
|
+
},
|
|
333
|
+
"configuration": {
|
|
334
|
+
"state": "unknown",
|
|
335
|
+
"claims": [],
|
|
336
|
+
"note": "Not researched; no absence assertion."
|
|
337
|
+
},
|
|
338
|
+
"binding": {
|
|
339
|
+
"state": "unknown",
|
|
340
|
+
"claims": [],
|
|
341
|
+
"decisions": [],
|
|
342
|
+
"note": "Missing evidence is not unbound"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
]
|
|
346
|
+
}
|