ID |
|
|---|---|
Status |
Backlog |
Bucket |
dx |
Priority |
4 |
Theme |
nodeid |
Created |
2026-08-04 |
Updated |
2026-08-04 |
Diagnostics for implements Node @table over a table with no node metadata
A type declared implements Node @table(name: "x") over a table whose jOOQ class publishes no
__NODE_* metadata has exactly one working spelling, explicit @node, and neither of the two
spellings an author would naturally reach for says so. Bare id: ID! rejects with
column 'id' could not be resolved in the jOOQ table; did you mean: ..., whose candidate list
pushes the author toward @field(name:), which would satisfy the classifier while publishing a
Node contract that cannot round-trip through Query.node. Writing id: ID! @nodeId instead
rejects with @nodeId requires the containing type to be a node type (via @node or
KjerneJooqGenerator metadata), which is accurate about the rule and silent about the remedy. In
both cases the author has already stated their intent unambiguously by implementing the Node
interface, and the build declines to name the one directive that would honour it.
Scope is diagnostics only: no classification changes, no inference. The likely shape is a targeted
rejection at the classifier that fires when a type implements Node, carries @table, and the
bound table has no metadata, naming @node and stating that the table publishes no node identity
to infer from. It should pre-empt the column-lookup message rather than decorating it, since the
did-you-mean list is the actively harmful part.
Sibling to the metadata-present branch of the same trap, which node inference has already fixed
(R580, see roadmap/changelog.md). That item deliberately left this branch alone to avoid mixing
a classification change with a message change, and its non-goals recorded the three-spelling
classification that motivates this one: over a metadata-free table, explicit @node is the only
working spelling, and the two an author would naturally try (bare id: ID!, and id: ID! @nodeId)
both reject. The surviving trap is narrower now that inference covers the metadata-present case, and
the message can say "this table publishes no node metadata" as a contrast with a path that actually
exists.