Repository navigation
Conversation
This was referenced Sep 16, 2026
This was referenced Oct 3, 2026
tang-vu
force-pushed
the
fix/workflows-n8n-pagination-20260908
branch
from
October 4, 2026 09:18
0429796 to
462aa40
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #7293
Summary
Read the complete n8n workflow inventory within one five-second deadline, and validate list response envelopes before publishing workflow or execution rows. Workflows after n8n's first page now appear in the catalog and can be removed through the existing endpoint. A malformed later page cannot publish a partial inventory or authorize deletion from that inventory.
Why this matters
The shipped n8n 2.6.4 handler defaults to 100 workflows per page. Previously ODS treated that first page as the whole inventory. Successful HTTP responses with a non-object root, missing/non-list
data, or non-object rows also escaped into catalog matching and execution-history responses, causing exceptions or invalid output.Inventory reads retain live API-key loading, discard all accumulated rows after an unavailable or malformed page, propagate cancellation, and close the session. Invalid/repeated cursors return 502, including falsey non-string cursors that previously looked like the end of pagination. Malformed execution-list responses use the existing empty-list/error response. This change validates list envelopes and object rows; it does not redefine workflow ownership matching or paginate the limited recent-executions endpoint.
Overlap check
This updates canonical #3835 and incorporates the response-envelope/object-array validation from closed #3681 and #2469. The older pagination variant #5829 is not resubmitted. The current live
N8N_API_KEYreader is preserved. Activation, catalog identity, duplicate import, and export changes are outside this scope. Onlyrouters/workflows.pyandtests/test_workflow_pagination.pydiffer from the recorded main base.Provider contracts were checked against the shipped n8n 2.6.4 workflow handler and its executions handler.
AI Assistance
The human contributor and Codex collaborated on this PR. The contributor provided project direction, scope decisions and environment setup; Codex assisted with analysis, implementation or reconstruction, tests, review and PR preparation. The validation commands were executed by Codex, with results and limitations documented in this PR. The human contributor remains responsible for the final changes and validation claims. Maintainer review and applicable release gates remain required before merge.
Release Lane / Changed Surface
main.Validation
b4f015a921c59eeb20317c5f48adf2dfb43b1430.d938caab853b702cf91104d24d821d93602010af.test_workflow_pagination.py,test_workflows.py,test_workflows_n8n_api_key.py,test_workflow_missing_dependencies.py): 84 passed.git diff --check: passed..github/workflows/dashboard.ymlruns the service's entiretests/directory under Python 3.11.The earlier branch carried historical public-beta ancestry rejected by the new commit-identity gate. This update reconstructs only the two changed files on current main, preserving the old branch locally rather than rewriting other contributors' identities. The initial recovery commit
462aa4037b3621d1f8d4d42915bb4838ef1729ebhad full-tree equivalence with tested/reviewed657c385950bd922e986d5482895b45a3b3be8e68. The final candidate additionally fixes Python-version-sensitive timeout imports and annotates pagination parameters and the HTTP fixture state. All four workflow suites were rerun after these type fixes: 84 passed. An isolated mypy 2.4.0 check reported no errors in either changed file; 27 errors in three unrelated imported files remain governed by the repository baseline.Operational Validation / Limits
Live provider validation at this candidate SHA passed on Ubuntu 24.04.5 / WSL2, Python 3.12.3 and Docker Desktop 29.8.1, using shipped
n8nio/n8n:2.6.4@sha256:b962d7f8ba9e990a0c530256d841fdc52312dce32173f29808e29a9430811ad3:These checks used an isolated n8n container/volume, a private catalog and FastAPI TestClient with Dashboard auth overridden; outbound aiohttp traffic reached genuine n8n. They do not establish full installed Dashboard browser/auth behavior. The owned fixture container, volume and temporary credentials were removed afterward. Malformed responses and cancellation remain covered by controlled regression fixtures. Completed full-product Portal/model validation and native Python 3.10 remain deferred; no human validation is claimed. No persisted state or schema changes; reverting restores the previous inventory/read behavior.