Conversation
…letion scoping Scope isCardComplete() placeholder check to only tracked parameters instead of the entire node, so hidden placeholders in un-rendered params don't block card completion. Also improve backend placeholder detection to always surface placeholders (even when param already has validation issues) and include the hint label in the error message.
Bundle ReportChanges will increase total bundle size by 9.74kB (0.02%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: editor-ui-esmAssets Changed:
Files in
Files in
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
No issues found across 5 files
Architecture diagram
sequenceDiagram
participant UI as Setup Wizard (Frontend)
participant Store as Node/Editor Store
participant Service as Setup Workflow Service (Backend)
participant Utils as Placeholder Utils
Note over UI, Utils: Flow 1: Backend Placeholder Detection (Setup Request)
Service->>Service: getParameterIssues()
loop For each parameter in Node
Service->>Utils: hasPlaceholderDeep(paramValue)
Utils-->>Service: boolean
opt has placeholder
Service->>Utils: NEW: extractPlaceholderLabel(paramValue)
Utils-->>Service: label (e.g., "api_key")
Service->>Service: CHANGED: Append placeholder issue even if validation issues exist
Note right of Service: Message includes hint label if found
end
end
Service-->>UI: Return SetupRequests with parameterIssues
Note over UI, Utils: Flow 2: Frontend Card Completion Logic
UI->>Store: Get node parameters and trackedParamNames
UI->>UI: Check getNodeParametersIssues()
alt No validation issues
loop For each paramName in trackedParamNames
UI->>UI: CHANGED: Scope placeholder check to tracked params only
UI->>Utils: hasPlaceholderDeep(storeNode.parameters[paramName])
Utils-->>UI: boolean
end
alt No placeholders in tracked params
UI-->>UI: Mark Card as Complete
else Placeholder found
UI-->>UI: Keep Card Incomplete
end
else Has validation issues
UI-->>UI: Keep Card Incomplete
end
Tests were rendering the component synchronously without awaiting the async onMounted that sets isStoreReady. Added renderAndWait helper that uses waitFor to wait for the loading state to clear before interacting.
Performance ComparisonComparing current → latest master → 14-day baseline Idle baseline with Instance AI module loaded
docker-stats
Memory consumption baseline with starter plan resources
How to read this table
|
|
How does this fix https://linear.app/n8n/issue/AI-2368/fix-setup-wizard-error-indicator-persists-after-entering-valid? From what I see the reported issue is not related to the placeholder params but an empty required ones? |
True! must've slipped in the stacking of PRs (like the unrelated changes), will remove the unrelated changes and the link to this issue |
Consolidate duplicate placeholder detection logic by moving extractPlaceholderLabels, findPlaceholderDetails, formatPlaceholderPath, isPlaceholderValue, and PlaceholderDetail to @n8n/utils/placeholder.ts. The useBuilderTodos module now re-exports from @n8n/utils.
Use findPlaceholderDetails instead of hasPlaceholderDeep + extractPlaceholderLabel, removing the dead code fallback for empty-label placeholders.
There was a problem hiding this comment.
1 issue found across 6 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/@n8n/instance-ai/src/tools/workflows/setup-workflow.service.ts">
<violation number="1" location="packages/@n8n/instance-ai/src/tools/workflows/setup-workflow.service.ts:74">
P1: Placeholder detection now misses unlabeled placeholder sentinels because it only checks `findPlaceholderDetails(...).length > 0` (which excludes empty-label placeholders).</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.
| if (!parameterIssues[paramName] && hasPlaceholderDeep(paramValue)) { | ||
| parameterIssues[paramName] = ['Contains a placeholder value - please provide the real value']; | ||
| const details = findPlaceholderDetails(paramValue); | ||
| if (details.length > 0) { |
There was a problem hiding this comment.
P1: Placeholder detection now misses unlabeled placeholder sentinels because it only checks findPlaceholderDetails(...).length > 0 (which excludes empty-label placeholders).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/@n8n/instance-ai/src/tools/workflows/setup-workflow.service.ts, line 74:
<comment>Placeholder detection now misses unlabeled placeholder sentinels because it only checks `findPlaceholderDetails(...).length > 0` (which excludes empty-label placeholders).</comment>
<file context>
@@ -70,11 +70,9 @@ export async function buildSetupRequests(
- ? `Placeholder "${label}" — please provide the real value`
- : 'Contains a placeholder value — please provide the real value';
+ const details = findPlaceholderDetails(paramValue);
+ if (details.length > 0) {
+ const message = `Placeholder "${details[0].label}" — please provide the real value`;
if (parameterIssues[paramName]) {
</file context>
Summary
isCardComplete()placeholder check to onlytrackedParamNamesinstead of the entire node parameters, so hidden placeholders in un-rendered params don't block card completionbuildSetupRequests()placeholder detection to always surface placeholders (even when param already has validation issues) and include the hint label in error messagesextractPlaceholderLabel()utility to@n8n/utilsfor extracting human-readable hints from placeholder sentinelsRelated Linear tickets
https://linear.app/n8n/issue/AI-2344/setup-workflow-no-placeholder-detection-for-ai-inserted-placeholder
I have seen this code, I have run this code, and I take responsibility for this code.