All skillsRequire pairedItem on INodeExecutionData objects in execute() methods to preserve item linking (
Skillintermediate
Require pairedItem on INodeExecutionData objects in execute() methods to preserve item linking (`@n8n/community-nodes/missing-paired-item`)
š¼ This rule is enabled in the following configs: ā `recommended`, āļø `recommendedWithoutN8nCloudSupport`.
Claude Code Knowledge Pack7/10/2026
Overview
Require pairedItem on INodeExecutionData objects in execute() methods to preserve item linking (@n8n/community-nodes/missing-paired-item)
š¼ This rule is enabled in the following configs: ā
recommended, āļø recommendedWithoutN8nCloudSupport.
Rule Details
Every INodeExecutionData object returned from execute() should include a pairedItem property. Without it, downstream nodes cannot trace data lineage and expressions like $('NodeName').item will silently fail.
The rule detects object literals with a json property but no pairedItem inside execute() methods of INodeType classes.
Examples
Incorrect
class MyNode implements INodeType {
async execute() {
const items = this.getInputData();
// Missing pairedItem
return [items.map((item) => ({ json: item.json }))];
}
}
class MyNode implements INodeType {
async execute() {
const returnData: INodeExecutionData[] = [];
// Missing pairedItem
returnData.push({ json: { result: true } });
return [returnData];
}
}
Correct
class MyNode implements INodeType {
async execute() {
const items = this.getInputData();
return [items.map((item, index) => ({ json: item.json, pairedItem: { item: index } }))];
}
}
class MyNode implements INodeType {
async execute() {
const returnData: INodeExecutionData[] = [];
returnData.push({ json: { result: true }, pairedItem: { item: 0 } });
return [returnData];
}
}
When to Disable
If your node intentionally does not support item linking (e.g. it aggregates all input items into a single output), you can suppress this rule:
// eslint-disable-next-line @n8n/community-nodes/missing-paired-item
returnData.push({ json: aggregatedResult });