fix(16): resolve 3 UAT issues — update flow, batch cancel, text commands

- Fix update sub-workflow: remove unsupported GraphQL filter arg, fix node
  reference (Format Pull Error → Format Update Error), fix field case
  (data.image → data.Image)
- Fix batch cancel: connect Route Callback output 20 (batchcancel) to
  Prepare Batch UI Input (was empty connection array)
- Fix text commands: change .item.json to .first().json for paired item
  breakage after GraphQL chain expansion; convert Send Batch Confirmation
  from Telegram node to HTTP Request to fix double-serialized reply_markup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lucas Berger
2026-02-09 12:28:21 -05:00
parent d4fcad827a
commit 07aeace1fd
6 changed files with 292 additions and 42 deletions
+85
View File
@@ -0,0 +1,85 @@
---
status: verifying
trigger: "Single container update via inline keyboard fails with execution errors on both main workflow and container update sub-workflow"
created: 2026-02-09T00:00:00Z
updated: 2026-02-09T00:30:00Z
---
## Current Focus
hypothesis: CONFIRMED - Three bugs in n8n-update.json causing update flow failure
test: Push fixed workflow and trigger update via inline keyboard
expecting: Update should complete without execution errors
next_action: User triggers update to verify fix
## Symptoms
expected: Tapping "Update" on inline keyboard confirmation should trigger container update via GraphQL API
actual: Execution errors on both main workflow and update sub-workflow after confirmation dialog
errors: (1) "Unknown argument 'filter' on field 'Docker.containers'" (2) "missing data.docker.containers" (3) Wrong node reference in Return Error
reproduction: Tap Update on container submenu, confirm, observe error
started: After Phase 16 migration (Docker socket proxy -> Unraid GraphQL API)
## Eliminated
- hypothesis: Credential ID issue (placeholder "unraid-api-key-credential-id")
evidence: n8n resolves credentials by name on push; actual n8n has correct ID "6DB4RZZoeF5Raf7V"
timestamp: 2026-02-09
- hypothesis: ContainerId format is wrong (PrefixedID with colon)
evidence: The PrefixedID format is correct and used by the mutation; the issue is the query using a nonexistent filter arg
timestamp: 2026-02-09
- hypothesis: Main workflow "Prepare Text Action Input" error is related
evidence: Execution 1516 was triggered by text command "Start dup", not an update callback - separate bug
timestamp: 2026-02-09
## Evidence
- timestamp: 2026-02-09
checked: n8n execution 1498 (main workflow, callback update flow)
found: Flow reaches "Execute Callback Update" which calls update sub-workflow; sub-workflow fails with "missing data.docker.containers" error
implication: Error originates in update sub-workflow, propagates back to main workflow
- timestamp: 2026-02-09
checked: n8n execution 1500 (update sub-workflow)
found: "Query Single Container" node sends GraphQL query with `filter: { id: "..." }` argument. Unraid API responds HTTP 400: "Unknown argument 'filter' on field 'Docker.containers'"
implication: The `filter` argument does not exist in Unraid GraphQL API schema. All working queries use `query { docker { containers { ... } } }` without filter
- timestamp: 2026-02-09
checked: Working queries in n8n-actions.json, n8n-status.json
found: All working nodes query ALL containers without filter, then filter client-side
implication: Unraid GraphQL API only supports listing all containers, no server-side filtering
- timestamp: 2026-02-09
checked: Update sub-workflow flow routing
found: Main workflow passes containerId (resolved by name). Sub-workflow's "Has Container ID?" = true, routes to "Query Single Container" (broken filter). The "no container ID" path through "Query All Containers" works correctly
implication: Direct ID path is always taken and always fails
- timestamp: 2026-02-09
checked: "Return Error" node code
found: References `$('Format Pull Error')` but node is actually named "Format Update Error"
implication: Error path would also fail with "node not found" if reached
- timestamp: 2026-02-09
checked: "Capture Pre-Update State" node
found: Reads `data.image` (lowercase) from normalizer but normalizer outputs `Image` (capitalized)
implication: currentImage would always be empty string even if normalizer worked
## Resolution
root_cause: Three bugs in n8n-update.json:
1. PRIMARY: "Query Single Container" uses nonexistent GraphQL `filter` argument on `Docker.containers`. Unraid API does not support server-side filtering - returns HTTP 400.
2. SECONDARY: "Return Error" node references `$('Format Pull Error')` but node is named "Format Update Error" (leftover from pre-migration naming).
3. MINOR: "Capture Pre-Update State" reads `data.image` but normalizer outputs `data.Image` (case mismatch).
fix: |
1. Changed "Query Single Container" jsonBody from filter-based query to same all-containers query used by working nodes
2. Rewrote "Normalize Single Container" to fetch all containers, then filter client-side by containerId from trigger data
3. Fixed "Return Error" node reference from `$('Format Pull Error')` to `$('Format Update Error')`
4. Fixed "Capture Pre-Update State" property access from `data.image` to `data.Image`
verification: Pushed to n8n (HTTP 200). Awaiting user test of inline keyboard update flow.
files_changed:
- /home/luc/Projects/unraid-docker-manager/n8n-update.json