Files
alighasami 3d5eaf9445
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
first commit
2026-03-17 16:22:57 +03:30

3548 lines
104 KiB
JSON

{
"version": 1,
"generated": "2026-02-24T22:17:42.106Z",
"totalViolations": 552,
"violations": {
"pages/AIAssistantPage.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "AIAssistantPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "4dd6c0c1862a"
}
],
"pages/AIBuilderPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "AIBuilderPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "4d204a89414e"
}
],
"pages/CanvasPage.ts": [
{
"rule": "scope-lockdown",
"line": 15,
"message": "CanvasPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "e0c352d26d04"
}
],
"pages/ChatHubChatPage.ts": [
{
"rule": "scope-lockdown",
"line": 9,
"message": "ChatHubChatPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "e4eaeac24146"
}
],
"pages/ChatHubPersonalAgentsPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "ChatHubPersonalAgentsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "f8ca4379facf"
},
{
"rule": "deduplication",
"line": 22,
"message": "Duplicate locator: this.page.getByTestId(\"chat-agent-card\") in pages scope",
"hash": "93472d766ead"
},
{
"rule": "deduplication",
"line": 26,
"message": "Duplicate locator: this.page.getByTestId(\"chat-agent-card\") in pages scope",
"hash": "93472d766ead"
}
],
"pages/ChatHubSettingsPage.ts": [
{
"rule": "scope-lockdown",
"line": 7,
"message": "ChatHubSettingsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "ffbeab089486"
},
{
"rule": "deduplication",
"line": 11,
"message": "Duplicate locator: this.page.getByTestId(\"editCredential-modal\") in pages scope",
"hash": "2823ff890426"
}
],
"pages/ChatHubWorkflowAgentsPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "ChatHubWorkflowAgentsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "deaefa88466a"
},
{
"rule": "deduplication",
"line": 11,
"message": "Duplicate locator: this.page.getByTestId(\"chat-agent-card\") in pages scope",
"hash": "93472d766ead"
}
],
"pages/CommunityNodesPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "CommunityNodesPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "008a055bd8e3"
}
],
"pages/CredentialsPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "CredentialsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "8a192ab0e1af"
},
{
"rule": "deduplication",
"line": 7,
"message": "Duplicate locator: this.page.getByTestId(\"editCredential-modal\") in pages scope",
"hash": "2823ff890426"
}
],
"pages/DataTableDetails.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "DataTableDetails: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "a28b14eea75f"
}
],
"pages/DataTableView.ts": [
{
"rule": "scope-lockdown",
"line": 4,
"message": "DataTableView: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "6d4a9d2ee846"
}
],
"pages/ExecutionsPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "ExecutionsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "35feaf11a7c9"
}
],
"pages/InteractionsPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "InteractionsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "fab9bccc270e"
}
],
"pages/KeycloakLoginPage.ts": [
{
"rule": "scope-lockdown",
"line": 9,
"message": "KeycloakLoginPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "c904517ef2df"
}
],
"pages/MfaLoginPage.ts": [
{
"rule": "scope-lockdown",
"line": 8,
"message": "MfaLoginPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "65f89f81ef90"
}
],
"pages/MfaSetupModal.ts": [
{
"rule": "scope-lockdown",
"line": 9,
"message": "MfaSetupModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "bde632f5ade8"
}
],
"pages/NodeDetailsViewPage.ts": [
{
"rule": "scope-lockdown",
"line": 15,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 16,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 26,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 30,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 34,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 38,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 42,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 90,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 94,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 98,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 102,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 106,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 110,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 123,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 127,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 157,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 180,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 184,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 188,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 192,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 200,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 221,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 239,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 243,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 253,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 262,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 270,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 274,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 278,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 282,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 286,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 290,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 294,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 298,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 302,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 306,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 318,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 322,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 326,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 330,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 334,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 340,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 360,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 366,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 377,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 385,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 389,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 393,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 397,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 433,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 437,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 437,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 441,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 445,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 463,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 467,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 467,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 478,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 487,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 518,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 528,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 529,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 534,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 538,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 550,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 554,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 573,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 579,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 591,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 595,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 599,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 603,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 603,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 607,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 615,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 619,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 623,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 627,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 631,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 639,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 643,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 669,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 705,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 709,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 714,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 719,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 723,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 734,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 738,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 738,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 742,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 748,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 776,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 780,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 784,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 788,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 793,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 799,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 803,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 803,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 811,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 815,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 819,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 851,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
},
{
"rule": "scope-lockdown",
"line": 855,
"message": "NodeDetailsViewPage: Unscoped locator - use this.container instead of this.page",
"hash": "5244a408a8df"
}
],
"pages/NotificationsPage.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "NotificationsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "fadcf75fa385"
}
],
"pages/NpsSurveyPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "NpsSurveyPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "b4532143776c"
}
],
"pages/ProjectSettingsPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "ProjectSettingsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "fbf0ce1ab326"
}
],
"pages/SettingsEnvironmentPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "SettingsEnvironmentPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "36447173c675"
}
],
"pages/SettingsLogStreamingPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "SettingsLogStreamingPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "f334f4d128a2"
}
],
"pages/SettingsUsersPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "SettingsUsersPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "ff0328cb8ec5"
}
],
"pages/SidebarPage.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "SidebarPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "6a6e1341c8f5"
}
],
"pages/SourceControlPullModal.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "SourceControlPullModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "fe2503c9ea8b"
}
],
"pages/SourceControlPushModal.ts": [
{
"rule": "scope-lockdown",
"line": 9,
"message": "SourceControlPushModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "bcc36f59ad8a"
}
],
"pages/TemplateCredentialSetupPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "TemplateCredentialSetupPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "e1981dd460f8"
},
{
"rule": "deduplication",
"line": 7,
"message": "Duplicate locator: this.page.getByTestId(\"editCredential-modal\") in pages scope",
"hash": "2823ff890426"
}
],
"pages/TemplatesPage.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "TemplatesPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "9ee7245554a9"
}
],
"pages/VariablesPage.ts": [
{
"rule": "scope-lockdown",
"line": 6,
"message": "VariablesPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "f5ce7000f714"
},
{
"rule": "deduplication",
"line": 22,
"message": "Duplicate locator: this.page.getByTestId(\"resources-list-search\") in pages scope",
"hash": "3b38dddeafed"
}
],
"pages/VersionsPage.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "VersionsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "06f7a26b38d8"
}
],
"pages/WorkflowActivationModal.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "WorkflowActivationModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "e48153a68aa5"
}
],
"pages/WorkflowCredentialSetupModal.ts": [
{
"rule": "scope-lockdown",
"line": 10,
"message": "WorkflowCredentialSetupModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "fcefbd002d16"
},
{
"rule": "deduplication",
"line": 24,
"message": "Duplicate locator: this.page.getByTestId(\"continue-button\") in pages scope",
"hash": "137ec08820a5"
},
{
"rule": "deduplication",
"line": 16,
"message": "Duplicate locator: this.page.getByTestId(\"setup-workflow-credentials-modal\") in pages scope",
"hash": "30c7a494b54c"
}
],
"pages/WorkflowSettingsModal.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "WorkflowSettingsModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "cff0f23ce5d3"
}
],
"pages/WorkflowSharingModal.ts": [
{
"rule": "scope-lockdown",
"line": 3,
"message": "WorkflowSharingModal: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "524404e370c4"
},
{
"rule": "deduplication",
"line": 5,
"message": "Duplicate locator: this.page.getByTestId(\"workflowShare-modal\") in pages scope",
"hash": "8a7555df8f27"
}
],
"pages/WorkflowsPage.ts": [
{
"rule": "scope-lockdown",
"line": 7,
"message": "WorkflowsPage: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "44a4e1b07c9f"
},
{
"rule": "deduplication",
"line": 24,
"message": "Duplicate locator: this.page.getByTestId(\"resources-list-search\") in pages scope",
"hash": "3b38dddeafed"
},
{
"rule": "deduplication",
"line": 32,
"message": "Duplicate locator: this.page.getByTestId(\"resources-list-search\") in pages scope",
"hash": "3b38dddeafed"
},
{
"rule": "deduplication",
"line": 113,
"message": "Duplicate locator: this.page.getByTestId(\"action-toggle-dropdown\") in pages scope",
"hash": "6e4581e4338b"
},
{
"rule": "deduplication",
"line": 28,
"message": "Duplicate locator: this.page.getByTestId(\"project-name\") in pages scope",
"hash": "7080dca7588e"
},
{
"rule": "deduplication",
"line": 42,
"message": "Duplicate locator: this.page.getByTestId(\"action-delete\") in pages scope",
"hash": "1b8f3012152c"
}
],
"pages/nodes/EditFieldsNode.ts": [
{
"rule": "scope-lockdown",
"line": 5,
"message": "EditFieldsNode: Ambiguous page - add a container (for scoped components) or a navigation method (for top-level pages)",
"hash": "f59dd095b02f"
}
],
"composables/NodeDetailsViewComposer.ts": [
{
"rule": "selector-purity",
"line": 17,
"message": "Direct page locator call: this.n8n.page.getByTestId('rlc-item')",
"hash": "a1b29fbeb1d3"
},
{
"rule": "selector-purity",
"line": 36,
"message": "Direct page locator call: this.n8n.page.getByTestId('rlc-item')",
"hash": "a1b29fbeb1d3"
},
{
"rule": "selector-purity",
"line": 51,
"message": "Direct page locator call: this.n8n.page.getByTestId('radio-button-expression').nth(...",
"hash": "134663b18c78"
},
{
"rule": "selector-purity",
"line": 51,
"message": "Direct page locator call: this.n8n.page.getByTestId('radio-button-expression').nth(1)",
"hash": "ff909ccb232e"
},
{
"rule": "selector-purity",
"line": 51,
"message": "Direct page locator call: this.n8n.page.getByTestId('radio-button-expression')",
"hash": "8832b7bb36bf"
},
{
"rule": "selector-purity",
"line": 61,
"message": "Direct page locator call: this.n8n.page.getByTestId('rlc-item-add-resource').first()",
"hash": "0e33bf783799"
},
{
"rule": "selector-purity",
"line": 61,
"message": "Direct page locator call: this.n8n.page.getByTestId('rlc-item-add-resource')",
"hash": "9f5c3611eea6"
},
{
"rule": "no-page-in-flow",
"line": 17,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
},
{
"rule": "no-page-in-flow",
"line": 36,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
},
{
"rule": "no-page-in-flow",
"line": 51,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
},
{
"rule": "no-page-in-flow",
"line": 61,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
}
],
"composables/ProjectComposer.ts": [
{
"rule": "selector-purity",
"line": 14,
"message": "Direct page locator call: this.n8n.page.getByTestId('universal-add').click()",
"hash": "e8d2b760e894"
},
{
"rule": "selector-purity",
"line": 14,
"message": "Direct page locator call: this.n8n.page.getByTestId('universal-add')",
"hash": "c3464fda06c4"
},
{
"rule": "selector-purity",
"line": 15,
"message": "Direct page locator call: this.n8n.page.getByTestId('navigation-menu-item').filter(...",
"hash": "c8ba53fd5fa6"
},
{
"rule": "selector-purity",
"line": 15,
"message": "Direct page locator call: this.n8n.page.getByTestId('navigation-menu-item').filter(...",
"hash": "c8ba53fd5fa6"
},
{
"rule": "selector-purity",
"line": 15,
"message": "Direct page locator call: this.n8n.page.getByTestId('navigation-menu-item')",
"hash": "921cd5cfb22b"
},
{
"rule": "no-page-in-flow",
"line": 14,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
},
{
"rule": "no-page-in-flow",
"line": 15,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
},
{
"rule": "no-page-in-flow",
"line": 51,
"message": "Direct page access in composable: this.n8n.page.url",
"hash": "504827a38388"
}
],
"composables/WorkflowComposer.ts": [
{
"rule": "selector-purity",
"line": 155,
"message": "Direct page locator call: this.n8n.page.getByTestId('move-to-folder-option').getByT...",
"hash": "fee6a7ca0898"
},
{
"rule": "selector-purity",
"line": 155,
"message": "Direct page locator call: this.n8n.page.getByTestId('move-to-folder-option')",
"hash": "cfc91da57766"
},
{
"rule": "no-page-in-flow",
"line": 21,
"message": "Direct page access in composable: this.n8n.page.waitForResponse",
"hash": "07f5f1ebe32b"
},
{
"rule": "no-page-in-flow",
"line": 155,
"message": "Direct page access in composable: this.n8n.page.getByTestId",
"hash": "c324de315cb4"
}
],
"tests/e2e/ai/assistant-basic.spec.ts": [
{
"rule": "selector-purity",
"line": 166,
"message": "Chained locator call in test: n8n.aiAssistant .getNewAssistantSessionModal() .getByRole...",
"hash": "8a89adbe00d9"
}
],
"tests/e2e/ai/assistant-credential-help.spec.ts": [
{
"rule": "selector-purity",
"line": 34,
"message": "Chained locator call in test: n8n.aiAssistant .getCredentialEditAssistantButton() .loca...",
"hash": "2544eec958d1"
},
{
"rule": "selector-purity",
"line": 61,
"message": "Chained locator call in test: n8n.aiAssistant .getCredentialEditAssistantButton() .loca...",
"hash": "2544eec958d1"
},
{
"rule": "api-purity",
"line": 84,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
},
{
"rule": "api-purity",
"line": 126,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
}
],
"tests/e2e/ai/hitl-for-tools.spec.ts": [
{
"rule": "selector-purity",
"line": 37,
"message": "Chained locator call in test: n8n.ndv.getParameterInput(parameterName).locator('.cm-con...",
"hash": "46f4ca4bc7eb"
},
{
"rule": "selector-purity",
"line": 87,
"message": "Direct page locator call: n8n.page.getByTestId('add-connection-button')",
"hash": "e87a57e25440"
},
{
"rule": "selector-purity",
"line": 116,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('description').locator('textarea')",
"hash": "00a4addafb63"
},
{
"rule": "selector-purity",
"line": 142,
"message": "Direct page locator call: n8n.page.getByTestId('canvas-chat').getByText('Approve')",
"hash": "158ef58d883a"
},
{
"rule": "selector-purity",
"line": 142,
"message": "Chained locator call in test: n8n.page.getByTestId('canvas-chat').getByText('Approve')",
"hash": "9717a7a385c3"
},
{
"rule": "selector-purity",
"line": 142,
"message": "Direct page locator call: n8n.page.getByTestId('canvas-chat')",
"hash": "0810223b0675"
}
],
"tests/e2e/ai/langchain-memory.spec.ts": [
{
"rule": "selector-purity",
"line": 92,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Define below' }).cl...",
"hash": "39e5d44a50a7"
},
{
"rule": "selector-purity",
"line": 92,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Define below' })",
"hash": "5c42d41d0397"
},
{
"rule": "selector-purity",
"line": 93,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('sessionKey').locator('input')",
"hash": "4860c40ad30b"
},
{
"rule": "selector-purity",
"line": 107,
"message": "Chained locator call in test: n8n.ndv.getAiOutputModeToggle().locator('[role=\"radio\"]')",
"hash": "712bf333eaaf"
},
{
"rule": "selector-purity",
"line": 115,
"message": "Chained locator call in test: n8n.ndv.getOutputPanel().getByTestId('node-error-message')",
"hash": "9436eb5e9511"
},
{
"rule": "selector-purity",
"line": 118,
"message": "Chained locator call in test: n8n.ndv.getOutputPanel().getByTestId('node-error-message')",
"hash": "9436eb5e9511"
},
{
"rule": "selector-purity",
"line": 169,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Define below' }).cl...",
"hash": "39e5d44a50a7"
},
{
"rule": "selector-purity",
"line": 169,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Define below' })",
"hash": "5c42d41d0397"
},
{
"rule": "selector-purity",
"line": 170,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('text').locator('textarea')",
"hash": "986a0637e45b"
}
],
"tests/e2e/ai/langchain-vectorstores.spec.ts": [
{
"rule": "selector-purity",
"line": 87,
"message": "Chained locator call in test: n8n.canvas.getManualChatModal().getByTestId('canvas-chat-...",
"hash": "0651461e8fda"
},
{
"rule": "selector-purity",
"line": 93,
"message": "Chained locator call in test: n8n.canvas.getManualChatModal().getByTestId('canvas-chat-...",
"hash": "0651461e8fda"
}
],
"tests/e2e/ai/workflow-builder.spec.ts": [
{
"rule": "selector-purity",
"line": 81,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: 'Execute and refine' })",
"hash": "ba2cdfe0e07b"
},
{
"rule": "selector-purity",
"line": 115,
"message": "Direct page locator call: n8n.page.getByText('Task aborted')",
"hash": "beba4221d694"
}
],
"tests/e2e/app-config/security-notifications.spec.ts": [
{
"rule": "selector-purity",
"line": 184,
"message": "Chained locator call in test: versionCard.locator('.el-tag--danger').getByText('Securit...",
"hash": "41e0381dfdf0"
},
{
"rule": "selector-purity",
"line": 184,
"message": "Chained locator call in test: versionCard.locator('.el-tag--danger')",
"hash": "60a61866e32a"
}
],
"tests/e2e/building-blocks/node-details-configuration.spec.ts": [
{
"rule": "selector-purity",
"line": 60,
"message": "Chained locator call in test: n8n.ndv.getAssignmentName('assignments', 0).getByRole('te...",
"hash": "fa1cc41275f1"
},
{
"rule": "selector-purity",
"line": 74,
"message": "Chained locator call in test: n8n.ndv.getAssignmentCollectionContainer('assignments').g...",
"hash": "f36b5d7ebe58"
},
{
"rule": "selector-purity",
"line": 89,
"message": "Chained locator call in test: n8n.ndv.getAssignmentCollectionContainer('assignments').g...",
"hash": "f36b5d7ebe58"
}
],
"tests/e2e/chat-hub/chat-hub-attachment.spec.ts": [
{
"rule": "selector-purity",
"line": 61,
"message": "Chained locator call in test: newPage.locator('img')",
"hash": "787461cb35dd"
},
{
"rule": "selector-purity",
"line": 62,
"message": "Chained locator call in test: newPage.locator('img')",
"hash": "787461cb35dd"
},
{
"rule": "selector-purity",
"line": 63,
"message": "Chained locator call in test: newPage.locator('img')",
"hash": "787461cb35dd"
},
{
"rule": "no-direct-page-instantiation",
"line": 42,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 68,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 84,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
}
],
"tests/e2e/chat-hub/chat-hub-basic.spec.ts": [
{
"rule": "selector-purity",
"line": 34,
"message": "Direct page locator call: n8n.page.getByTestId('editCredential-modal')",
"hash": "2786a49972b3"
},
{
"rule": "no-direct-page-instantiation",
"line": 13,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 33,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 60,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
}
],
"tests/e2e/chat-hub/chat-hub-personal-agent.spec.ts": [
{
"rule": "selector-purity",
"line": 92,
"message": "Direct page locator call: n8n.page.getByRole('dialog').getByText('Delete', { exact:...",
"hash": "5fd52ad894c3"
},
{
"rule": "selector-purity",
"line": 92,
"message": "Direct page locator call: n8n.page.getByRole('dialog').getByText('Delete', { exact:...",
"hash": "5fd52ad894c3"
},
{
"rule": "selector-purity",
"line": 92,
"message": "Chained locator call in test: n8n.page.getByRole('dialog').getByText('Delete', { exact:...",
"hash": "41d47e05bb02"
},
{
"rule": "selector-purity",
"line": 92,
"message": "Direct page locator call: n8n.page.getByRole('dialog')",
"hash": "68deb7ade2bb"
},
{
"rule": "no-direct-page-instantiation",
"line": 16,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 47,
"message": "Direct page instantiation: new ChatHubPersonalAgentsPage(n8n.page)",
"hash": "e85eb6a08ae6"
},
{
"rule": "no-direct-page-instantiation",
"line": 48,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
}
],
"tests/e2e/credentials/crud.spec.ts": [
{
"rule": "selector-purity",
"line": 347,
"message": "Direct page locator call: n8n.page.locator('.el-overlay').first()",
"hash": "6e0141ec89e6"
},
{
"rule": "selector-purity",
"line": 347,
"message": "Direct page locator call: n8n.page.locator('.el-overlay')",
"hash": "4668d190d0af"
},
{
"rule": "api-purity",
"line": 300,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
}
],
"tests/e2e/credentials/global.spec.ts": [
{
"rule": "selector-purity",
"line": 39,
"message": "Chained locator call in test: n8n.credentials.credentialModal.getVisibleDropdown().getB...",
"hash": "5ffd78437b38"
},
{
"rule": "selector-purity",
"line": 48,
"message": "Chained locator call in test: n8n.credentials.cards .getCredential('Global HTTP Header ...",
"hash": "05e7dd651e5e"
},
{
"rule": "selector-purity",
"line": 65,
"message": "Chained locator call in test: n8n.credentials.cards .getCredential('Global HTTP Header ...",
"hash": "05e7dd651e5e"
},
{
"rule": "selector-purity",
"line": 95,
"message": "Chained locator call in test: dropdown.getByText('Global HTTP Header Cred')",
"hash": "4a7662ea3718"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Chained locator call in test: dropdown.getByText('Global HTTP Header Cred')",
"hash": "4a7662ea3718"
},
{
"rule": "selector-purity",
"line": 125,
"message": "Chained locator call in test: n8n.credentials.credentialModal .getModal() .getByTestId(...",
"hash": "ea4ed603d27a"
},
{
"rule": "selector-purity",
"line": 132,
"message": "Chained locator call in test: n8n.credentials.credentialModal .getModal() .getByTestId(...",
"hash": "ea4ed603d27a"
},
{
"rule": "selector-purity",
"line": 132,
"message": "Chained locator call in test: n8n.credentials.credentialModal .getModal() .getByTestId(...",
"hash": "ea4ed603d27a"
},
{
"rule": "selector-purity",
"line": 145,
"message": "Chained locator call in test: n8n.credentials.cards .getCredential('Global HTTP Header ...",
"hash": "05e7dd651e5e"
}
],
"tests/e2e/node-creator/categories.spec.ts": [
{
"rule": "selector-purity",
"line": 23,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Triggers').locato...",
"hash": "7bf32888198a"
},
{
"rule": "selector-purity",
"line": 28,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Actions').locator...",
"hash": "408e6ab6e61d"
},
{
"rule": "selector-purity",
"line": 34,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Actions').locator...",
"hash": "408e6ab6e61d"
},
{
"rule": "selector-purity",
"line": 49,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Actions').locator...",
"hash": "408e6ab6e61d"
},
{
"rule": "selector-purity",
"line": 55,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Actions').locator...",
"hash": "408e6ab6e61d"
},
{
"rule": "selector-purity",
"line": 60,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Triggers').locato...",
"hash": "7bf32888198a"
},
{
"rule": "selector-purity",
"line": 66,
"message": "Chained locator call in test: n8n.canvas.nodeCreator.getCategoryItem('Triggers').locato...",
"hash": "7bf32888198a"
}
],
"tests/e2e/nodes/community-nodes.spec.ts": [
{
"rule": "selector-purity",
"line": 83,
"message": "Direct page locator call: n8n.page.getByTestId('credentials-label').click()",
"hash": "b487b1272454"
},
{
"rule": "selector-purity",
"line": 83,
"message": "Direct page locator call: n8n.page.getByTestId('credentials-label')",
"hash": "c57d3abbea50"
},
{
"rule": "selector-purity",
"line": 84,
"message": "Direct page locator call: n8n.page.getByTestId('node-credentials-select-item-new')....",
"hash": "b9824deca284"
},
{
"rule": "selector-purity",
"line": 84,
"message": "Direct page locator call: n8n.page.getByTestId('node-credentials-select-item-new')",
"hash": "ba4a66294bfb"
},
{
"rule": "selector-purity",
"line": 86,
"message": "Direct page locator call: n8n.page.getByTestId('editCredential-modal')",
"hash": "2786a49972b3"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Direct page locator call: n8n.page.getByTestId('credentials-label').click()",
"hash": "b487b1272454"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Direct page locator call: n8n.page.getByTestId('credentials-label')",
"hash": "c57d3abbea50"
},
{
"rule": "selector-purity",
"line": 99,
"message": "Direct page locator call: n8n.page.getByTestId('node-credentials-select-item-new')....",
"hash": "b9824deca284"
},
{
"rule": "selector-purity",
"line": 99,
"message": "Direct page locator call: n8n.page.getByTestId('node-credentials-select-item-new')",
"hash": "ba4a66294bfb"
},
{
"rule": "selector-purity",
"line": 101,
"message": "Direct page locator call: n8n.page.getByTestId('editCredential-modal')",
"hash": "2786a49972b3"
},
{
"rule": "api-purity",
"line": 19,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
},
{
"rule": "api-purity",
"line": 34,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
}
],
"tests/e2e/nodes/form-trigger-node.spec.ts": [
{
"rule": "selector-purity",
"line": 63,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: 'Add Field Option' }...",
"hash": "c3629563dd24"
},
{
"rule": "selector-purity",
"line": 63,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: 'Add Field Option' })",
"hash": "69e3d4b550e1"
},
{
"rule": "selector-purity",
"line": 106,
"message": "Direct page locator call: n8n.page.locator('text=/form-test\\\\/[a-f0-9-]+/')",
"hash": "ccdce08746cc"
},
{
"rule": "selector-purity",
"line": 115,
"message": "Chained locator call in test: formPage.getByLabel('What is your first name?')",
"hash": "1223d29492d9"
},
{
"rule": "selector-purity",
"line": 116,
"message": "Chained locator call in test: formPage.getByRole('button', { name: 'Submit' })",
"hash": "e4d7841ebb40"
},
{
"rule": "selector-purity",
"line": 120,
"message": "Chained locator call in test: formPage.getByLabel('What is your last name?')",
"hash": "cfc3f214f389"
},
{
"rule": "selector-purity",
"line": 121,
"message": "Chained locator call in test: formPage.getByRole('button', { name: 'Submit' })",
"hash": "e4d7841ebb40"
},
{
"rule": "selector-purity",
"line": 124,
"message": "Chained locator call in test: formPage.getByText('Your response has been recorded')",
"hash": "0e9a9b561cfa"
},
{
"rule": "selector-purity",
"line": 197,
"message": "Direct page locator call: n8n.page.locator('text=/form-test\\\\/[a-f0-9-]+/')",
"hash": "ccdce08746cc"
},
{
"rule": "selector-purity",
"line": 206,
"message": "Chained locator call in test: formPage.getByRole('button', { name: 'Submit' })",
"hash": "e4d7841ebb40"
},
{
"rule": "selector-purity",
"line": 207,
"message": "Chained locator call in test: formPage.getByText('This worked')",
"hash": "a0552602d3c9"
},
{
"rule": "selector-purity",
"line": 311,
"message": "Direct page locator call: n8n.page.locator('text=/form-test\\\\/[a-f0-9-]+/')",
"hash": "ccdce08746cc"
},
{
"rule": "selector-purity",
"line": 320,
"message": "Chained locator call in test: formPage.getByRole('button', { name: 'Submit' })",
"hash": "e4d7841ebb40"
},
{
"rule": "selector-purity",
"line": 321,
"message": "Chained locator call in test: formPage.getByText('Step 2')",
"hash": "94ffa2350779"
},
{
"rule": "selector-purity",
"line": 324,
"message": "Chained locator call in test: formPage.getByRole('button', { name: 'Submit' })",
"hash": "e4d7841ebb40"
},
{
"rule": "selector-purity",
"line": 325,
"message": "Chained locator call in test: formPage.getByText('This worked')",
"hash": "a0552602d3c9"
}
],
"tests/e2e/nodes/if-node.spec.ts": [
{
"rule": "selector-purity",
"line": 25,
"message": "Chained locator call in test: n8n.ndv.getFilterConditionLeft(FILTER_PARAM_NAME, 0).loca...",
"hash": "c3fc875effa7"
},
{
"rule": "selector-purity",
"line": 26,
"message": "Chained locator call in test: n8n.ndv.getFilterConditionLeft(FILTER_PARAM_NAME, 1).loca...",
"hash": "5f2f690a0a6a"
},
{
"rule": "selector-purity",
"line": 33,
"message": "Chained locator call in test: n8n.ndv.getFilterConditionLeft(FILTER_PARAM_NAME, 0).loca...",
"hash": "c3fc875effa7"
}
],
"tests/e2e/nodes/webhook.spec.ts": [
{
"rule": "selector-purity",
"line": 70,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Response Code' }).c...",
"hash": "4ec8fd179f0d"
},
{
"rule": "selector-purity",
"line": 70,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Response Code' })",
"hash": "3f5a68018809"
}
],
"tests/e2e/projects/folders-basic.spec.ts": [
{
"rule": "selector-purity",
"line": 155,
"message": "Chained locator call in test: n8n.modal.container.getByText(errorMessage, { exact: fals...",
"hash": "493ced26c9ed"
},
{
"rule": "selector-purity",
"line": 159,
"message": "Chained locator call in test: n8n.modal.container.getByText(emptyErrorMessage)",
"hash": "1a0616eac3d8"
},
{
"rule": "selector-purity",
"line": 162,
"message": "Chained locator call in test: n8n.modal.container.getByText(tooLongErrorMessage)",
"hash": "d7e82d2a75eb"
},
{
"rule": "selector-purity",
"line": 165,
"message": "Chained locator call in test: n8n.modal.container.getByText(dotsErrorMessage)",
"hash": "bbb98f3cbb44"
},
{
"rule": "selector-purity",
"line": 181,
"message": "Chained locator call in test: n8n.notifications .getNotificationByTitleOrContent(FOLDER...",
"hash": "ef7efad8acb2"
}
],
"tests/e2e/projects/project-settings.spec.ts": [
{
"rule": "selector-purity",
"line": 64,
"message": "Direct page locator call: n8n.page.getByText('Project Updated Project Name saved su...",
"hash": "5c8bb96d8da1"
},
{
"rule": "selector-purity",
"line": 84,
"message": "Chained locator call in test: table.getByText('User')",
"hash": "35eb3e7e10a1"
},
{
"rule": "selector-purity",
"line": 85,
"message": "Chained locator call in test: table.getByText('Role')",
"hash": "598e22980502"
},
{
"rule": "selector-purity",
"line": 88,
"message": "Chained locator call in test: table.locator('tbody tr')",
"hash": "fdc278cf27e4"
},
{
"rule": "selector-purity",
"line": 93,
"message": "Chained locator call in test: ownerRow.getByTestId('project-member-role-dropdown')",
"hash": "c69f7e1bd77a"
},
{
"rule": "selector-purity",
"line": 109,
"message": "Direct page locator call: n8n.page.locator('tbody tr').first()",
"hash": "c57a14994e07"
},
{
"rule": "selector-purity",
"line": 109,
"message": "Direct page locator call: n8n.page.locator('tbody tr')",
"hash": "48de3852588f"
},
{
"rule": "selector-purity",
"line": 110,
"message": "Chained locator call in test: currentUserRow.getByTestId('project-member-role-dropdown')",
"hash": "f1e1476c1fc9"
},
{
"rule": "selector-purity",
"line": 113,
"message": "Chained locator call in test: currentUserRow.getByText('Admin')",
"hash": "1927ce34d19a"
},
{
"rule": "selector-purity",
"line": 180,
"message": "Direct page locator call: n8n.page.getByText('Danger zone')",
"hash": "58fee023d77a"
},
{
"rule": "selector-purity",
"line": 182,
"message": "Direct page locator call: n8n.page.getByText( 'When deleting a project, you can als...",
"hash": "f2d055ed66a9"
},
{
"rule": "selector-purity",
"line": 208,
"message": "Direct page locator call: n8n.page.getByText('Project Persisted Project Name saved ...",
"hash": "0f573d3d200b"
}
],
"tests/e2e/projects/projects-move-resources.spec.ts": [
{
"rule": "selector-purity",
"line": 106,
"message": "Chained locator call in test: n8n.resourceMoveModal.getProjectSelectCredential().locato...",
"hash": "e8eff63d49af"
},
{
"rule": "selector-purity",
"line": 107,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 123,
"message": "Chained locator call in test: n8n.resourceMoveModal.getProjectSelectCredential().locato...",
"hash": "e8eff63d49af"
},
{
"rule": "selector-purity",
"line": 124,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 140,
"message": "Chained locator call in test: n8n.resourceMoveModal.getProjectSelectCredential().locato...",
"hash": "e8eff63d49af"
},
{
"rule": "selector-purity",
"line": 141,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
}
],
"tests/e2e/projects/projects.spec.ts": [
{
"rule": "selector-purity",
"line": 89,
"message": "Chained locator call in test: n8n.workflows.cards.getWorkflow('My workflow').getByText(...",
"hash": "c5bffdc35ac3"
},
{
"rule": "selector-purity",
"line": 165,
"message": "Direct page locator call: subn8n.page.getByRole('heading', { name: 'My Sub-Workflow...",
"hash": "788ef93cfb62"
},
{
"rule": "selector-purity",
"line": 165,
"message": "Chained locator call in test: subn8n.page.getByRole('heading', { name: 'My Sub-Workflow...",
"hash": "9e664e14b0a8"
},
{
"rule": "selector-purity",
"line": 170,
"message": "Direct page locator call: subn8n.page.getByRole('heading', { name: 'Notion account' })",
"hash": "43671aca120d"
},
{
"rule": "selector-purity",
"line": 170,
"message": "Chained locator call in test: subn8n.page.getByRole('heading', { name: 'Notion account' })",
"hash": "c98e5c7b276b"
},
{
"rule": "selector-purity",
"line": 210,
"message": "Chained locator call in test: n8n.projectSettings.getIconPickerButton().locator('svg')",
"hash": "4342f0cc13b8"
},
{
"rule": "selector-purity",
"line": 247,
"message": "Direct page locator call: n8n.page.locator('body').click()",
"hash": "4484dbdcd879"
},
{
"rule": "selector-purity",
"line": 247,
"message": "Direct page locator call: n8n.page.locator('body')",
"hash": "6667df4502c4"
}
],
"tests/e2e/regression/ADO-2372-prevent-clipping-params.spec.ts": [
{
"rule": "selector-purity",
"line": 66,
"message": "Chained locator call in test: editor.locator('.cm-line')",
"hash": "1ac80885fc71"
},
{
"rule": "selector-purity",
"line": 67,
"message": "Chained locator call in test: editor.locator('.cm-line')",
"hash": "1ac80885fc71"
},
{
"rule": "selector-purity",
"line": 68,
"message": "Chained locator call in test: editor.locator('.cm-line')",
"hash": "1ac80885fc71"
},
{
"rule": "selector-purity",
"line": 69,
"message": "Chained locator call in test: editor.locator('.cm-line')",
"hash": "1ac80885fc71"
}
],
"tests/e2e/regression/AI-1401-sub-nodes-input-panel.spec.ts": [
{
"rule": "selector-purity",
"line": 23,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().locator('[data-test-id*=\"input-s...",
"hash": "396dc4f1d5af"
},
{
"rule": "selector-purity",
"line": 26,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Edit Fields' })",
"hash": "c6c4cc5bf6c4"
},
{
"rule": "selector-purity",
"line": 27,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Manual Trigger' })",
"hash": "503597d4ef3e"
},
{
"rule": "selector-purity",
"line": 28,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'No Operation, do no...",
"hash": "7a16d85129d2"
}
],
"tests/e2e/regression/SUG-121-fields-reset-after-closing-ndv.spec.ts": [
{
"rule": "selector-purity",
"line": 25,
"message": "Chained locator call in test: n8n.ndv.getParameterByLabel('JavaScript').getByRole('text...",
"hash": "f8105d6d3a8d"
},
{
"rule": "selector-purity",
"line": 28,
"message": "Chained locator call in test: n8n.ndv.getParameterByLabel('JavaScript').getByRole('text...",
"hash": "f8105d6d3a8d"
}
],
"tests/e2e/settings/environments/source-control.spec.ts": [
{
"rule": "selector-purity",
"line": 56,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'main' })",
"hash": "8e36dd6e7c35"
},
{
"rule": "selector-purity",
"line": 75,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'main' })",
"hash": "8e36dd6e7c35"
},
{
"rule": "selector-purity",
"line": 76,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'development' })",
"hash": "4157d0d852a3"
},
{
"rule": "selector-purity",
"line": 77,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'staging' })",
"hash": "5ea1e1189ae1"
},
{
"rule": "selector-purity",
"line": 78,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'production' })",
"hash": "13bbd087b456"
},
{
"rule": "selector-purity",
"line": 79,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'development' }).cli...",
"hash": "2d47edbe9c6a"
},
{
"rule": "selector-purity",
"line": 79,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'development' })",
"hash": "4157d0d852a3"
},
{
"rule": "api-purity",
"line": 83,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
},
{
"rule": "api-purity",
"line": 92,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
}
],
"tests/e2e/sharing/access-control.spec.ts": [
{
"rule": "selector-purity",
"line": 79,
"message": "Chained locator call in test: adminN8n.credentials.credentialModal.getVisibleDropdown()...",
"hash": "466547047099"
},
{
"rule": "selector-purity",
"line": 140,
"message": "Chained locator call in test: credentialDropdown.getByText(testCredName)",
"hash": "88f241af5012"
},
{
"rule": "selector-purity",
"line": 141,
"message": "Chained locator call in test: credentialDropdown.getByText(devCredName)",
"hash": "7c1126e1a52a"
},
{
"rule": "api-purity",
"line": 105,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
}
],
"tests/e2e/sharing/credential-visibility.spec.ts": [
{
"rule": "selector-purity",
"line": 52,
"message": "Chained locator call in test: credentialDropdown.getByText(testCredName)",
"hash": "88f241af5012"
},
{
"rule": "selector-purity",
"line": 53,
"message": "Chained locator call in test: credentialDropdown.getByText(personalCredName)",
"hash": "8a03b8f32fa8"
},
{
"rule": "selector-purity",
"line": 54,
"message": "Chained locator call in test: credentialDropdown.getByText(devCredName)",
"hash": "7c1126e1a52a"
},
{
"rule": "selector-purity",
"line": 96,
"message": "Chained locator call in test: credentialDropdown.getByText(ownerCredName)",
"hash": "7b09c1090b15"
},
{
"rule": "selector-purity",
"line": 97,
"message": "Chained locator call in test: credentialDropdown.getByText(memberCredName)",
"hash": "241866f0d4df"
},
{
"rule": "selector-purity",
"line": 154,
"message": "Chained locator call in test: credentialDropdown.getByText(memberCredName)",
"hash": "241866f0d4df"
},
{
"rule": "selector-purity",
"line": 155,
"message": "Chained locator call in test: credentialDropdown.getByText(ownerCredName)",
"hash": "7b09c1090b15"
},
{
"rule": "selector-purity",
"line": 209,
"message": "Chained locator call in test: n8n.ndv.getVisiblePopper().locator('li')",
"hash": "eb4832404c9b"
},
{
"rule": "selector-purity",
"line": 239,
"message": "Chained locator call in test: n8n.ndv.getVisiblePopper().locator('li')",
"hash": "eb4832404c9b"
}
],
"tests/e2e/source-control/pull.spec.ts": [
{
"rule": "selector-purity",
"line": 94,
"message": "Chained locator call in test: n8n.canvas.tagsManagerModal.getTable().getByText('pull-te...",
"hash": "9cd079655a6b"
}
],
"tests/e2e/workflows/checklist/production-checklist.spec.ts": [
{
"rule": "selector-purity",
"line": 67,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-settings-dialog')",
"hash": "6dff31c05187"
},
{
"rule": "selector-purity",
"line": 68,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-settings-error-workflow')",
"hash": "e86d143e5094"
},
{
"rule": "selector-purity",
"line": 83,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-settings-dialog')",
"hash": "6dff31c05187"
},
{
"rule": "selector-purity",
"line": 95,
"message": "Chained locator call in test: n8n.canvas.getProductionChecklistActionItem().first().get...",
"hash": "b99bf85bffb8"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Direct page locator call: n8n.page.locator('body').click({ position: { x: 0, y: 0 } })",
"hash": "82ea0a8120b9"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Direct page locator call: n8n.page.locator('body')",
"hash": "6667df4502c4"
},
{
"rule": "selector-purity",
"line": 136,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-settings-dialog')",
"hash": "6dff31c05187"
},
{
"rule": "selector-purity",
"line": 142,
"message": "Chained locator call in test: n8n.canvas .getProductionChecklistActionItem() .first() ....",
"hash": "049e1b469b18"
},
{
"rule": "selector-purity",
"line": 159,
"message": "Direct page locator call: n8n.page.locator('.el-message-box')",
"hash": "a41c304c373a"
}
],
"tests/e2e/workflows/demo-diff.spec.ts": [
{
"rule": "selector-purity",
"line": 120,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 127,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 145,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 149,
"message": "Direct page locator call: n8n.page.getByRole('heading', { name: /Test Workflow/, ex...",
"hash": "27a3f117a93a"
},
{
"rule": "selector-purity",
"line": 153,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: /Changes/ })",
"hash": "1daa8f688214"
},
{
"rule": "selector-purity",
"line": 160,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 177,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 180,
"message": "Direct page locator call: n8n.page.getByRole('heading', { name: 'Test Workflow - Af...",
"hash": "284153f6d798"
},
{
"rule": "selector-purity",
"line": 187,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 204,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 207,
"message": "Direct page locator call: n8n.page.getByRole('heading', { name: 'Test Workflow - Be...",
"hash": "dd7b576b2982"
},
{
"rule": "selector-purity",
"line": 214,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 233,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 237,
"message": "Direct page locator call: n8n.page.getByRole('heading', { name: /Test Workflow/, ex...",
"hash": "27a3f117a93a"
},
{
"rule": "selector-purity",
"line": 241,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: /Changes/ })",
"hash": "1daa8f688214"
},
{
"rule": "selector-purity",
"line": 248,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 256,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 263,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 277,
"message": "Direct page locator call: n8n.page.getByText('Waiting for workflow data...')",
"hash": "b6b8ed64d974"
},
{
"rule": "selector-purity",
"line": 282,
"message": "Direct page locator call: n8n.page.locator('body')",
"hash": "6667df4502c4"
},
{
"rule": "selector-purity",
"line": 287,
"message": "Direct page locator call: n8n.page.locator('body')",
"hash": "6667df4502c4"
},
{
"rule": "duplicate-logic",
"line": 117,
"message": "Duplicate test logic: \"shows waiting state initially\" has identical structure to tests/e2e/ai/workflow-builder.spec.ts:\"should show Build with AI button on empty canvas\"",
"hash": "6cf55be1ebdb"
}
],
"tests/e2e/workflows/editor/canvas/canvas-nodes.spec.ts": [
{
"rule": "selector-purity",
"line": 28,
"message": "Direct page locator call: n8n.page.getByText('Add Routing Rule').click()",
"hash": "bb9ccdaa6e0f"
},
{
"rule": "selector-purity",
"line": 28,
"message": "Direct page locator call: n8n.page.getByText('Add Routing Rule')",
"hash": "f13800d70ddd"
}
],
"tests/e2e/workflows/editor/canvas/canvas-zoom.spec.ts": [
{
"rule": "selector-purity",
"line": 222,
"message": "Chained locator call in test: n8n.canvas.nodeByName('n8n').getByTestId('overflow-node-b...",
"hash": "3d500494797e"
},
{
"rule": "selector-purity",
"line": 223,
"message": "Direct page locator call: n8n.page.getByTestId('context-menu-item-open').click()",
"hash": "803edc6e2d15"
},
{
"rule": "selector-purity",
"line": 223,
"message": "Direct page locator call: n8n.page.getByTestId('context-menu-item-open')",
"hash": "049003f6550b"
}
],
"tests/e2e/workflows/editor/code/code-node.spec.ts": [
{
"rule": "selector-purity",
"line": 28,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for Each I...",
"hash": "354ddeafe76a"
},
{
"rule": "selector-purity",
"line": 28,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for Each I...",
"hash": "354ddeafe76a"
},
{
"rule": "selector-purity",
"line": 35,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for All It...",
"hash": "03087d1206ad"
},
{
"rule": "selector-purity",
"line": 35,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for All It...",
"hash": "03087d1206ad"
},
{
"rule": "selector-purity",
"line": 50,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for Each I...",
"hash": "354ddeafe76a"
},
{
"rule": "selector-purity",
"line": 50,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Run Once for Each I...",
"hash": "354ddeafe76a"
}
],
"tests/e2e/workflows/editor/execution/execution.spec.ts": [
{
"rule": "selector-purity",
"line": 149,
"message": "Direct page locator call: n8n.page.getByTestId('copy-input').click()",
"hash": "20e9bf63ae83"
},
{
"rule": "selector-purity",
"line": 149,
"message": "Direct page locator call: n8n.page.getByTestId('copy-input')",
"hash": "dd5c167f4482"
},
{
"rule": "api-purity",
"line": 153,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
}
],
"tests/e2e/workflows/editor/execution/inject-previous.spec.ts": [
{
"rule": "selector-purity",
"line": 59,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[contenteditable=\"true...",
"hash": "cae3335d44be"
}
],
"tests/e2e/workflows/editor/execution/logs.spec.ts": [
{
"rule": "selector-purity",
"line": 253,
"message": "Chained locator call in test: n8n.ndv.outputPanel .getDataContainer() .locator('a')",
"hash": "6a673016ebff"
},
{
"rule": "api-purity",
"line": 263,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
}
],
"tests/e2e/workflows/editor/expressions/inline.spec.ts": [
{
"rule": "selector-purity",
"line": 55,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('value').getByRole('textbox')",
"hash": "e6c73a21e494"
}
],
"tests/e2e/workflows/editor/expressions/mapping.spec.ts": [
{
"rule": "selector-purity",
"line": 60,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByText(expectedJsonText)",
"hash": "9865414150f3"
},
{
"rule": "selector-purity",
"line": 106,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByText('Schedule Trigger')",
"hash": "2043cf03c7a7"
},
{
"rule": "selector-purity",
"line": 117,
"message": "Chained locator call in test: schemaItem.locator('span')",
"hash": "dae1f9ee44ac"
},
{
"rule": "selector-purity",
"line": 158,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'String' }).click()",
"hash": "c3130f54285b"
},
{
"rule": "selector-purity",
"line": 158,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'String' })",
"hash": "6351fa2e946a"
}
],
"tests/e2e/workflows/editor/expressions/transformation.spec.ts": [
{
"rule": "selector-purity",
"line": 19,
"message": "Chained locator call in test: assignmentValue.locator('text=Expression')",
"hash": "398682465503"
},
{
"rule": "selector-purity",
"line": 114,
"message": "Chained locator call in test: n8n.ndv.getOutputDataContainer().locator('[class*=value_]')",
"hash": "78a1c969575d"
},
{
"rule": "selector-purity",
"line": 134,
"message": "Chained locator call in test: n8n.ndv.getOutputDataContainer().locator('[class*=value_]')",
"hash": "78a1c969575d"
}
],
"tests/e2e/workflows/editor/ndv/io-filter.spec.ts": [
{
"rule": "selector-purity",
"line": 32,
"message": "Chained locator call in test: pagination.locator('li')",
"hash": "5a7163c291f8"
},
{
"rule": "selector-purity",
"line": 33,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getDataContainer().locator('mark')",
"hash": "fc731709a0e9"
},
{
"rule": "selector-purity",
"line": 42,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getDataContainer().locator('mark')",
"hash": "fc731709a0e9"
},
{
"rule": "selector-purity",
"line": 46,
"message": "Chained locator call in test: pagination.locator('li')",
"hash": "5a7163c291f8"
},
{
"rule": "selector-purity",
"line": 66,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByTestId('ndv-data-pagination')",
"hash": "1a869dd91e67"
},
{
"rule": "selector-purity",
"line": 68,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().getByTestId('ndv-data-pagination')",
"hash": "58e725977612"
},
{
"rule": "selector-purity",
"line": 72,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 74,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
},
{
"rule": "selector-purity",
"line": 81,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
},
{
"rule": "selector-purity",
"line": 88,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
},
{
"rule": "selector-purity",
"line": 92,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 94,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
},
{
"rule": "selector-purity",
"line": 104,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 106,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
},
{
"rule": "selector-purity",
"line": 111,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 118,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 124,
"message": "Chained locator call in test: getInputPagination().locator('li')",
"hash": "5aa75994ab8d"
},
{
"rule": "selector-purity",
"line": 126,
"message": "Chained locator call in test: getOutputPagination().locator('li')",
"hash": "d452a5950767"
}
],
"tests/e2e/workflows/editor/ndv/ndv-core.spec.ts": [
{
"rule": "selector-purity",
"line": 120,
"message": "Chained locator call in test: n8n.ndv.getContainer().getByText('Webhook URLs').locator(...",
"hash": "15c9e3d9aeba"
},
{
"rule": "selector-purity",
"line": 120,
"message": "Chained locator call in test: n8n.ndv.getContainer().getByText('Webhook URLs')",
"hash": "9026e28e4f47"
},
{
"rule": "selector-purity",
"line": 175,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('jsCode').locator('.cm-content')",
"hash": "b09a3f3d56fc"
},
{
"rule": "selector-purity",
"line": 206,
"message": "Chained locator call in test: n8n.ndv.getParameterInput('jsCode').locator('.cm-content')",
"hash": "b09a3f3d56fc"
}
],
"tests/e2e/workflows/editor/ndv/ndv-data-display.spec.ts": [
{
"rule": "selector-purity",
"line": 63,
"message": "Chained locator call in test: objectValueItem.locator('.toggle')",
"hash": "45d8699925c6"
},
{
"rule": "selector-purity",
"line": 82,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().getByText('5 items')",
"hash": "beef6d951ce8"
},
{
"rule": "selector-purity",
"line": 98,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().getByText('26 items')",
"hash": "f1b1cc3c04b4"
},
{
"rule": "selector-purity",
"line": 120,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getTableRow(1).locator('mark')",
"hash": "6212a0d5e5bc"
},
{
"rule": "selector-purity",
"line": 135,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[class*=\"active\"]')",
"hash": "ddd992a3778f"
},
{
"rule": "selector-purity",
"line": 147,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getTableRow(1).locator('mark')",
"hash": "6212a0d5e5bc"
},
{
"rule": "selector-purity",
"line": 151,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getDataContainer().locator('.json-data')",
"hash": "8c80e9607f84"
},
{
"rule": "selector-purity",
"line": 254,
"message": "Chained locator call in test: n8n.ndv.outputPanel .get() .getByText('To search field va...",
"hash": "6bd1281071a1"
}
],
"tests/e2e/workflows/editor/ndv/ndv-parameters.spec.ts": [
{
"rule": "selector-purity",
"line": 119,
"message": "Chained locator call in test: n8n.ndv.getResourceLocatorInput('documentId').locator('in...",
"hash": "a10387b2b4a5"
},
{
"rule": "selector-purity",
"line": 177,
"message": "Chained locator call in test: n8n.ndv.getAssignmentValue('assignments').getByText('Expr...",
"hash": "25491e82dd43"
}
],
"tests/e2e/workflows/editor/ndv/paired-item.spec.ts": [
{
"rule": "selector-purity",
"line": 95,
"message": "Direct page locator call: n8n.page.locator('[data-test-id=\"hovering-item\"]')",
"hash": "170e68f7b7b7"
},
{
"rule": "selector-purity",
"line": 101,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Set1' }).click()",
"hash": "7363e0425bfb"
},
{
"rule": "selector-purity",
"line": 101,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Set1' })",
"hash": "7e6cc145ca37"
},
{
"rule": "selector-purity",
"line": 105,
"message": "Chained locator call in test: n8n.ndv.inputPanel.getTable().locator('text=1000')",
"hash": "d54ea49f3e0f"
},
{
"rule": "selector-purity",
"line": 106,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[data-test-id=\"hoverin...",
"hash": "6e9d8666bad6"
},
{
"rule": "selector-purity",
"line": 113,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Sort' }).click()",
"hash": "dab3a0c3f01f"
},
{
"rule": "selector-purity",
"line": 113,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Sort' })",
"hash": "57ea397df648"
},
{
"rule": "selector-purity",
"line": 117,
"message": "Chained locator call in test: n8n.ndv.inputPanel.getTable().locator('text=1111')",
"hash": "20de742a14d7"
},
{
"rule": "selector-purity",
"line": 118,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[data-test-id=\"hoverin...",
"hash": "6e9d8666bad6"
},
{
"rule": "selector-purity",
"line": 197,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().getByText('False Branch (2 item...",
"hash": "4ed4184926d5"
},
{
"rule": "selector-purity",
"line": 221,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByText('True Branch')",
"hash": "cc551456a986"
},
{
"rule": "selector-purity",
"line": 228,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().locator('[data-test-id=\"hovering...",
"hash": "8d39d87925b5"
},
{
"rule": "selector-purity",
"line": 233,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[data-test-id=\"hoverin...",
"hash": "6e9d8666bad6"
},
{
"rule": "selector-purity",
"line": 237,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByText('False Branch')",
"hash": "dee1bac10eac"
},
{
"rule": "selector-purity",
"line": 248,
"message": "Chained locator call in test: n8n.ndv.outputPanel.get().locator('[data-test-id=\"hoverin...",
"hash": "6e9d8666bad6"
}
],
"tests/e2e/workflows/editor/ndv/pinning.spec.ts": [
{
"rule": "selector-purity",
"line": 81,
"message": "Chained locator call in test: runDataHeader.getByRole('button', { name: 'Edit Output' })",
"hash": "aa1904651d9c"
},
{
"rule": "selector-purity",
"line": 175,
"message": "Chained locator call in test: n8n.ndv.getAssignmentValue('assignments').getByText('Expr...",
"hash": "25491e82dd43"
},
{
"rule": "selector-purity",
"line": 184,
"message": "Chained locator call in test: n8n.ndv.getParameterInputHint().getByText(expectedOutput)",
"hash": "393fc24d0bf4"
}
],
"tests/e2e/workflows/editor/ndv/resource-locator.spec.ts": [
{
"rule": "selector-purity",
"line": 91,
"message": "Direct page locator call: n8n.page.locator('.el-message-box').locator('button:has-t...",
"hash": "066ea6c93563"
},
{
"rule": "selector-purity",
"line": 91,
"message": "Chained locator call in test: n8n.page.locator('.el-message-box').locator('button:has-t...",
"hash": "6dae6a423842"
},
{
"rule": "selector-purity",
"line": 91,
"message": "Direct page locator call: n8n.page.locator('.el-message-box')",
"hash": "a41c304c373a"
},
{
"rule": "selector-purity",
"line": 120,
"message": "Chained locator call in test: n8n.ndv.getResourceLocatorInput('sheetName').locator('inp...",
"hash": "8c2440762013"
},
{
"rule": "selector-purity",
"line": 129,
"message": "Direct page locator call: n8n.page.getByTestId('rlc-item').first()",
"hash": "4466b60c399e"
},
{
"rule": "selector-purity",
"line": 129,
"message": "Direct page locator call: n8n.page.getByTestId('rlc-item')",
"hash": "84df99d6a586"
},
{
"rule": "selector-purity",
"line": 132,
"message": "Chained locator call in test: visiblePopper.getByTestId('rlc-item')",
"hash": "50584e5d1477"
},
{
"rule": "selector-purity",
"line": 143,
"message": "Direct page locator call: n8n.page.getByTestId('rlc-item').first()",
"hash": "4466b60c399e"
},
{
"rule": "selector-purity",
"line": 143,
"message": "Direct page locator call: n8n.page.getByTestId('rlc-item')",
"hash": "84df99d6a586"
},
{
"rule": "selector-purity",
"line": 146,
"message": "Chained locator call in test: visiblePopperAfter.getByTestId('rlc-item')",
"hash": "160fc14cc93a"
}
],
"tests/e2e/workflows/editor/ndv/schema-preview.spec.ts": [
{
"rule": "selector-purity",
"line": 15,
"message": "Chained locator call in test: n8n.ndv.inputPanel.get().getByText('No input data')",
"hash": "89dc9850c2d6"
}
],
"tests/e2e/workflows/editor/subworkflows/debugging.spec.ts": [
{
"rule": "selector-purity",
"line": 42,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getTbodyCell(0, 0).locator('a')",
"hash": "11bb70e5e4f9"
},
{
"rule": "selector-purity",
"line": 85,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getTbodyCell(0, 0).locator('a')",
"hash": "11bb70e5e4f9"
},
{
"rule": "selector-purity",
"line": 99,
"message": "Chained locator call in test: n8n.ndv.outputPanel.getTbodyCell(0, 0).locator('a')",
"hash": "11bb70e5e4f9"
}
],
"tests/e2e/workflows/editor/subworkflows/workflow-selector.spec.ts": [
{
"rule": "selector-purity",
"line": 62,
"message": "Chained locator call in test: n8n.ndv.getResourceLocatorInput('workflowId').locator('in...",
"hash": "d4ee6d0058ed"
},
{
"rule": "selector-purity",
"line": 68,
"message": "Chained locator call in test: n8n.ndv.getResourceLocatorInput('workflowId').locator('a')",
"hash": "1cadf974d1a1"
},
{
"rule": "selector-purity",
"line": 77,
"message": "Chained locator call in test: n8n.ndv.getResourceLocatorModeSelector('workflowId').loca...",
"hash": "b893416c36ed"
},
{
"rule": "selector-purity",
"line": 91,
"message": "Chained locator call in test: addResourceItem.getByText(/Create a/)",
"hash": "f7f77ebf40c7"
}
],
"tests/e2e/workflows/editor/tags.spec.ts": [
{
"rule": "selector-purity",
"line": 63,
"message": "Chained locator call in test: n8n.canvas.tagsManagerModal.getTable().getByText(tag1)",
"hash": "f31292c4e171"
},
{
"rule": "selector-purity",
"line": 68,
"message": "Chained locator call in test: n8n.canvas.tagsManagerModal.getTable().getByText(tag2)",
"hash": "20fbe08893cc"
},
{
"rule": "selector-purity",
"line": 213,
"message": "Chained locator call in test: n8n.canvas.getVisibleDropdown().locator('li')",
"hash": "4febc57392da"
}
],
"tests/e2e/workflows/editor/workflow-actions/archive.spec.ts": [
{
"rule": "selector-purity",
"line": 40,
"message": "Chained locator call in test: n8n.workflowSettingsModal.getArchiveMenuItem().locator('..')",
"hash": "ec8d53703e0b"
}
],
"tests/e2e/workflows/editor/workflow-actions/settings.spec.ts": [
{
"rule": "selector-purity",
"line": 32,
"message": "Direct page locator call: n8n.page.getByRole('option').count()",
"hash": "43ba2cdb87a8"
},
{
"rule": "selector-purity",
"line": 32,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 34,
"message": "Direct page locator call: n8n.page.getByRole('option').last().click()",
"hash": "4dcd8e905b3c"
},
{
"rule": "selector-purity",
"line": 34,
"message": "Direct page locator call: n8n.page.getByRole('option').last()",
"hash": "a8b0a552c436"
},
{
"rule": "selector-purity",
"line": 34,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 37,
"message": "Direct page locator call: n8n.page.getByRole('option').first()",
"hash": "f8c4aff6a0b3"
},
{
"rule": "selector-purity",
"line": 37,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 38,
"message": "Direct page locator call: n8n.page.getByRole('option').nth(1).click()",
"hash": "5a25d5a68877"
},
{
"rule": "selector-purity",
"line": 38,
"message": "Direct page locator call: n8n.page.getByRole('option').nth(1)",
"hash": "0e8a6f4130fa"
},
{
"rule": "selector-purity",
"line": 38,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 41,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 42,
"message": "Direct page locator call: n8n.page.getByRole('option').last().click()",
"hash": "4dcd8e905b3c"
},
{
"rule": "selector-purity",
"line": 42,
"message": "Direct page locator call: n8n.page.getByRole('option').last()",
"hash": "a8b0a552c436"
},
{
"rule": "selector-purity",
"line": 42,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 45,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 46,
"message": "Direct page locator call: n8n.page.getByRole('option').last().click()",
"hash": "4dcd8e905b3c"
},
{
"rule": "selector-purity",
"line": 46,
"message": "Direct page locator call: n8n.page.getByRole('option').last()",
"hash": "a8b0a552c436"
},
{
"rule": "selector-purity",
"line": 46,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 49,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 50,
"message": "Direct page locator call: n8n.page.getByRole('option').last().click()",
"hash": "4dcd8e905b3c"
},
{
"rule": "selector-purity",
"line": 50,
"message": "Direct page locator call: n8n.page.getByRole('option').last()",
"hash": "a8b0a552c436"
},
{
"rule": "selector-purity",
"line": 50,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 53,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
},
{
"rule": "selector-purity",
"line": 54,
"message": "Direct page locator call: n8n.page.getByRole('option').last().click()",
"hash": "4dcd8e905b3c"
},
{
"rule": "selector-purity",
"line": 54,
"message": "Direct page locator call: n8n.page.getByRole('option').last()",
"hash": "a8b0a552c436"
},
{
"rule": "selector-purity",
"line": 54,
"message": "Direct page locator call: n8n.page.getByRole('option')",
"hash": "c58b0877f9a1"
}
],
"tests/e2e/workflows/executions/list.spec.ts": [
{
"rule": "selector-purity",
"line": 48,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Success' }).click()",
"hash": "fbad8571f166"
},
{
"rule": "selector-purity",
"line": 48,
"message": "Direct page locator call: n8n.page.getByRole('option', { name: 'Success' })",
"hash": "75835fe42ab8"
},
{
"rule": "selector-purity",
"line": 192,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 233,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 236,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 239,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 242,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 245,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 248,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 251,
"message": "Chained locator call in test: iframe.locator('body')",
"hash": "44c6c75041a8"
},
{
"rule": "selector-purity",
"line": 270,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-execution-no-trigger-conte...",
"hash": "407bd53b3360"
},
{
"rule": "selector-purity",
"line": 272,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: 'Add first step' })....",
"hash": "90ae792f4909"
},
{
"rule": "selector-purity",
"line": 272,
"message": "Direct page locator call: n8n.page.getByRole('button', { name: 'Add first step' })",
"hash": "ae0e7537f378"
},
{
"rule": "selector-purity",
"line": 278,
"message": "Direct page locator call: n8n.page.getByTestId('workflow-execution-no-content')",
"hash": "36b71f3e9617"
}
],
"tests/e2e/workflows/templates/templates.spec.ts": [
{
"rule": "selector-purity",
"line": 246,
"message": "Chained locator call in test: n8n.templates.getDescription().locator('img')",
"hash": "5f06d991a2b6"
}
],
"composables/CanvasComposer.ts": [
{
"rule": "no-page-in-flow",
"line": 138,
"message": "Direct page access in composable: this.n8n.page.url",
"hash": "504827a38388"
},
{
"rule": "no-page-in-flow",
"line": 148,
"message": "Direct page access in composable: this.n8n.page.url",
"hash": "504827a38388"
}
],
"composables/DataTablesComposer.ts": [
{
"rule": "no-page-in-flow",
"line": 29,
"message": "Direct page access in composable: this.n8n.page.goto",
"hash": "bb450d59c911"
},
{
"rule": "no-page-in-flow",
"line": 31,
"message": "Direct page access in composable: this.n8n.page.goto",
"hash": "bb450d59c911"
},
{
"rule": "no-page-in-flow",
"line": 40,
"message": "Direct page access in composable: this.n8n.page.goto",
"hash": "bb450d59c911"
}
],
"composables/ExecutionsComposer.ts": [
{
"rule": "no-page-in-flow",
"line": 21,
"message": "Direct page access in composable: this.n8n.page.waitForResponse",
"hash": "07f5f1ebe32b"
},
{
"rule": "no-page-in-flow",
"line": 47,
"message": "Direct page access in composable: this.n8n.page.waitForRequest",
"hash": "468594c2598a"
}
],
"composables/TestEntryComposer.ts": [
{
"rule": "no-page-in-flow",
"line": 44,
"message": "Direct page access in composable: this.n8n.page.goto",
"hash": "bb450d59c911"
},
{
"rule": "no-page-in-flow",
"line": 62,
"message": "Direct page access in composable: this.n8n.page.goto",
"hash": "bb450d59c911"
},
{
"rule": "no-page-in-flow",
"line": 72,
"message": "Direct page access in composable: this.n8n.page.waitForEvent",
"hash": "4b068bc8ea06"
},
{
"rule": "no-page-in-flow",
"line": 102,
"message": "Direct page access in composable: this.n8n.page.context",
"hash": "c24e4c27fc5b"
}
],
"tests/e2e/app-config/nps-survey.spec.ts": [
{
"rule": "api-purity",
"line": 50,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
}
],
"tests/e2e/auth/password-reset.spec.ts": [
{
"rule": "api-purity",
"line": 11,
"message": "Raw API call detected: request.post(",
"hash": "fc24119a27f0"
}
],
"tests/e2e/building-blocks/workflow-entry-points.spec.ts": [
{
"rule": "api-purity",
"line": 39,
"message": "Raw API call detected: request.post(",
"hash": "fc24119a27f0"
}
],
"tests/e2e/capabilities/proxy-server.spec.ts": [
{
"rule": "api-purity",
"line": 27,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
},
{
"rule": "api-purity",
"line": 64,
"message": "Raw API call detected: fetch(",
"hash": "b52df352569e"
}
],
"tests/e2e/sharing/workflow-sharing.spec.ts": [
{
"rule": "api-purity",
"line": 122,
"message": "Raw API call detected: request.get(",
"hash": "5128d500e46f"
}
],
"tests/e2e/workflows/editor/subworkflows/subworkflow-version-resolution.spec.ts": [
{
"rule": "api-purity",
"line": 64,
"message": "Raw API call detected: request.patch(",
"hash": "8b1d786219ad"
},
{
"rule": "api-purity",
"line": 116,
"message": "Raw API call detected: request.post(",
"hash": "fc24119a27f0"
},
{
"rule": "api-purity",
"line": 145,
"message": "Raw API call detected: request.patch(",
"hash": "8b1d786219ad"
},
{
"rule": "api-purity",
"line": 298,
"message": "Raw API call detected: request.patch(",
"hash": "8b1d786219ad"
}
],
"pages/WorkerViewPage.ts": [
{
"rule": "deduplication",
"line": 13,
"message": "Duplicate locator: this.page.getByTestId(\"menu-item\") in pages scope",
"hash": "d2fda13bfcbe"
}
],
"workflows/Test_workflow_5.json": [
{
"rule": "test-data-hygiene",
"line": 1,
"message": "Poorly named test data: Test_workflow_5.json",
"hash": "dad4916c95c2"
}
],
"workflows/Test_workflow_3.json": [
{
"rule": "test-data-hygiene",
"line": 1,
"message": "Poorly named test data: Test_workflow_3.json",
"hash": "f8c622dd26a0"
}
],
"workflows/Test_workflow_1.json": [
{
"rule": "test-data-hygiene",
"line": 1,
"message": "Poorly named test data: Test_workflow_1.json",
"hash": "59565c005bcb"
}
],
"pages/components/VariableModal.ts": [
{
"rule": "duplicate-logic",
"line": 36,
"message": "Duplicate method logic: VariableModal.close() has identical structure to pages/components/CredentialModal.ts:CredentialModal.close()",
"hash": "271e51542c85"
}
],
"tests/e2e/workflows/editor/canvas/actions.spec.ts": [
{
"rule": "duplicate-logic",
"line": 66,
"message": "Duplicate test logic: \"should add disconnected node if nothing is selected\" has identical structure to tests/e2e/building-blocks/canvas-actions.spec.ts:\"should add disconnected node when nothing selected\"",
"hash": "5cda70c65afc"
}
],
"tests/e2e/chat-hub/chat-hub-chat-user.spec.ts": [
{
"rule": "no-direct-page-instantiation",
"line": 28,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
}
],
"tests/e2e/chat-hub/chat-hub-settings.spec.ts": [
{
"rule": "no-direct-page-instantiation",
"line": 14,
"message": "Direct page instantiation: new ChatHubSettingsPage(n8n.page)",
"hash": "03642a3feb2b"
},
{
"rule": "no-direct-page-instantiation",
"line": 39,
"message": "Direct page instantiation: new ChatHubChatPage(memberN8n.page)",
"hash": "397d824f0d69"
},
{
"rule": "no-direct-page-instantiation",
"line": 61,
"message": "Direct page instantiation: new ChatHubSettingsPage(n8n.page)",
"hash": "03642a3feb2b"
},
{
"rule": "no-direct-page-instantiation",
"line": 98,
"message": "Direct page instantiation: new ChatHubChatPage(memberN8n.page)",
"hash": "397d824f0d69"
}
],
"tests/e2e/chat-hub/chat-hub-tools.spec.ts": [
{
"rule": "no-direct-page-instantiation",
"line": 16,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
}
],
"tests/e2e/chat-hub/chat-hub-workflow-agent.spec.ts": [
{
"rule": "no-direct-page-instantiation",
"line": 16,
"message": "Direct page instantiation: new ChatHubWorkflowAgentsPage(n8n.page)",
"hash": "c9be1b5d1bc9"
},
{
"rule": "no-direct-page-instantiation",
"line": 17,
"message": "Direct page instantiation: new ChatHubChatPage(n8n.page)",
"hash": "4c6c3053ee95"
},
{
"rule": "no-direct-page-instantiation",
"line": 35,
"message": "Direct page instantiation: new CanvasPage(tab1)",
"hash": "57ca97b38297"
},
{
"rule": "no-direct-page-instantiation",
"line": 36,
"message": "Direct page instantiation: new NodeDetailsViewPage(tab1)",
"hash": "b2f3d965950b"
},
{
"rule": "no-direct-page-instantiation",
"line": 58,
"message": "Direct page instantiation: new CanvasPage(tab2)",
"hash": "0bd465646efa"
},
{
"rule": "no-direct-page-instantiation",
"line": 59,
"message": "Direct page instantiation: new NodeDetailsViewPage(tab2)",
"hash": "e3b9a2a545fd"
},
{
"rule": "no-direct-page-instantiation",
"line": 84,
"message": "Direct page instantiation: new ChatHubWorkflowAgentsPage(n8n.page)",
"hash": "c9be1b5d1bc9"
},
{
"rule": "no-direct-page-instantiation",
"line": 89,
"message": "Direct page instantiation: new ChatHubWorkflowAgentsPage(memberN8n.page)",
"hash": "13e61175005b"
},
{
"rule": "no-direct-page-instantiation",
"line": 107,
"message": "Direct page instantiation: new ChatHubChatPage(memberN8n.page)",
"hash": "397d824f0d69"
}
]
}
}