Skip to content

Developer reference

github-actions[bot] edited this page Oct 19, 2026 · 18 revisions

Developer reference

This page describes main, which the nightly build is made from. The latest release is 0.7.0: ✅ is in it, 🌙 is only in the nightly build, 🟡 is being built and ⏳ is planned.

The numbers and lists a plug-in, a host or a tool that reads graph notes is built against.

Versions

Interface Version Changes when
Plug-in interface (PLUGIN_API) 1 A plug-in built for another version is refused.
Host interface (HOST_CONTRACT_VERSION) 3 Every change to DisplayHost.

Problem codes

Every problem the reader raises has a stable code, the same in JavaScript and Python, and given as the Language Server Protocol diagnostic code. A code is never reused. Each {name} is filled in by the problem.

Code Problem Fix Spec Raised by
GN101 the block names no graph start it with '// graph: <name>' (§3) §3 JavaScript, Python
GN102 the graph name '{name}' is not one word use letters, digits and underscores only — reader_choice, not reader-choice (§3) §3 JavaScript, Python
GN103 a comment must be on a line of its own: // also occurs inside identifiers, such as ni:/// hashes (§3) put the comment on its own line §3 JavaScript, Python
GN104 cannot read '{text}' a data block holds only nodes, relationships and simple values — JavaScript, Python
GN105 '{escape}' is not an escape GQL names double the backslash to write a backslash: \{escape} — JavaScript, Python
GN201 expected '{expected}', found '{found}' keep to the document profile (§3) §3 JavaScript, Python
GN202 expected a name, found '{found}' keep to the document profile (§3) §3 JavaScript, Python
GN203 '{text}' is not a date write DATE 'YYYY-MM-DD' — JavaScript, Python
GN204 '{text}' is not an instant write DATETIME 'YYYY-MM-DDTHH:MM:SS+HH:MM' — JavaScript, Python
GN205 '{text}' has no offset an instant carries its offset (§9, principle 11) §9 JavaScript, Python
GN206 '{text}' is not an instant: in UTC it falls outside years 1 to 9999 write DATETIME 'YYYY-MM-DDTHH:MM:SS+HH:MM' within years 1 to 9999 — Python
GN207 '{token}' is not a value in the profile use 'text', a number, TRUE, FALSE, DATE '…' or DATETIME '…' — no lists, no expressions — JavaScript, Python
GN208 id {written} is not text write id: {quoted} — a node's id is always text (§3) §3 JavaScript, Python
GN209 SET would change {var}'s id, and a node's id never changes (§3) write the right node, then link {var} to it or supersede it (§12) §3 JavaScript, Python
GN210 unexpected '{token}' a data block ends after its INSERT and SET (§3) §3 JavaScript, Python
GN301 [{written}] has no colon, and graph {graph} has no relationship type called {written} a relationship type is written with its colon: [:{type}] — JavaScript, Python
GN302 [{written}] has no colon, and graph {graph} has relationship types {types} and {last}, which differ only by case write the one meant with its colon, such as [:{type}] — JavaScript, Python
GN303 this is a query block queries ask questions of a graph; they are not data — JavaScript, Python
GN304 this is an excerpt an excerpt illustrates part of a graph; it is not data — JavaScript, Python
GN305 MATCH must find a node by its id alone write MATCH (v:Label {id: '…'}) — JavaScript, Python
GN306 MATCH finds no {labels} with id '{id}' in graph {graph} the node must be written earlier — in this document or one loaded before it — JavaScript, Python
GN307 {var} is written twice give each new node its own variable — JavaScript, Python
GN308 id '{id}' is already a node in graph {graph} an id names one node (§10) — MATCH it to add to it, or supersede it (§12) §10 JavaScript, Python
GN309 {var} is used before it is written write the node before any relationship that uses it — GQL binds a name only once its node is written (§3) §3 JavaScript, Python
GN310 no thing called {var} in graph {graph} check the spelling — or write it here with its kind: ({var}:Kind {…}) — JavaScript, Python
GN311 SET names {var}, which is no thing in graph {graph} check the spelling — SET names a thing by its id — JavaScript, Python
GN401 a target is named by its id alone write MATCH (v:Kind {id: '…'}) — a thing by its name, a link by its two ends and its type — JavaScript, Python
GN402 a link is named by its type write [r:TYPE] — a link by its two ends and its type — JavaScript, Python
GN403 a link is named by its two ends and its type alone leave its values to a SET — JavaScript, Python
GN404 this names more than one target a DELETE or SET names exactly one target (§24) §24 JavaScript, Python
GN405 {var} is not the one target a DELETE or SET names exactly one target (§24) §24 JavaScript, Python
GN406 a DELETE needs the target it removes write MATCH (v:Kind {id: '…'}) DELETE v — JavaScript, Python
GN407 DETACH is followed by DELETE write DETACH DELETE v — JavaScript, Python
GN408 this removes more than one target a DELETE or SET names exactly one target (§24) §24 JavaScript, Python
GN409 unexpected '{token}' a DELETE ends after the one target it removes — JavaScript, Python
GN410 a link has no links to detach write DELETE r — JavaScript, Python
GN411 a change is a DELETE or a SET write DELETE or SET after the MATCH — JavaScript, Python
GN412 this changes more than one target a DELETE or SET names exactly one target (§24) §24 JavaScript, Python
GN413 SET would change {var}'s id, and a node's id never changes (§3) write the right node, then supersede it (§12) §3 JavaScript, Python
GN414 {key} is not a name a SET may give a value to choose another name for the value — JavaScript, Python
GN415 unexpected '{token}' a SET ends after its values — JavaScript, Python
GN416 the block names graph {named}, but the base gives it as graph {graph} give it as graph {named} — a block is loaded into the graph its first line names (§3) §3 Python
GN501 id '{id}' is already a node an id names one node (§10) — MATCH it to add to it, or supersede it (§12) §10 Python
GN502 cannot find where {var} is written write it as (name:Kind {…}) — Python
GN503 [{written}] has no colon an engine is given only corrected text — read the block with its graph and load Store.corrected(block), or write it with its colon: [:{type}] — Python

Standard schemas

A graph can name one in its first line, such as // graph: reader · schema decision@1, and needs no schema of its own.

Schema What it is for
decision@1 The standard schema for a decision: a question, the options that answer it, and the reasons for and against each.

Made from packages/graph-spec/src/reader/problem-codes.json, the core and its contracts at d0d6f56 on 19 Oct 2026. This page is generated: change the repository, not this page, as edits here are overwritten.

Clone this wiki locally