- Remove parallel Send Text Update Started connection
- Text updates now only send result via sub-workflow
- Fixes duplicate message issue (Updating... + already up to date)
- Update Build Batch Keyboard to use bexec: format instead of legacy JSON
- Update Build Suggestion Keyboard to use action: format instead of legacy JSON
- Remove 7 nodes from old batch inline execution path:
- Build Batch Commands
- Prepare Batch Execution
- Execute Batch Action
- Parse Batch Result
- Format Batch Result
- Send Batch Result
- Answer Batch Query
Node count: 199 -> 192 (-7 nodes)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Deploy Container Logs sub-workflow to n8n (ID: oE7aO2GhbksXDEIw)
- Replace TODO_DEPLOY_LOGS_WORKFLOW with actual workflow ID
- Update n8n-container-logs.json with deployed ID
- Redeploy all workflows to n8n
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace PLACEHOLDER_LOGS_ID with TODO_DEPLOY_LOGS_WORKFLOW
- Applies to Execute Text Logs and Execute Inline Logs nodes
- Clear marker indicates n8n-container-logs.json deployment required
- User must replace TODO with actual workflow ID after n8n import
- Add Prepare Batch Update Input node to format sub-workflow input
- Add Execute Batch Update node calling Container Update sub-workflow
- Add Handle Batch Update Result node to process results
- Connect update path (output 0) in Route Batch Loop Action
- Node count: 209 -> 212 (+3)
This completes the batch update integration with the modular sub-workflow,
eliminating the need for duplicate update logic in the main workflow.
Wave 4 plan to finish workflow modularization:
- Wire batch update to Container Update sub-workflow
- Wire batch actions to Container Actions sub-workflow
- Extract logs flow to new Container Logs sub-workflow
- Target: reduce main workflow from 209 to ~120-140 nodes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Docker API returns 204 No Content on success (empty response body).
Changed from checking statusCode (not available in n8n httpRequest)
to checking for absence of error/message in response body.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
n8n typeVersion 1.2 requires workflowId as resource locator object:
{ "__rl": true, "mode": "list", "value": "<id>" }
not a plain string. This was causing "workflow not found" errors.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Recreated Container Actions sub-workflow via API to fix
"workflow not found" error. New ID: fYSZS5PkH0VSEaT5
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed 54 duplicate update nodes from text and callback paths
- Added Execute Sub-workflow nodes for both update entry points
- Text path: Check Update Match Count -> Prepare Text Update Input -> Execute Text Update
- Callback path: Route Confirm Action -> Prepare Callback Update Input -> Execute Callback Update
- Workflow reduced from 246 to 200 nodes (-19%)
- Line count reduced from ~8485 to 7209 (-15%)
DEBT-03 (duplicated update flow) resolved - update logic now in one place
Cleaned up orphan nodes before modularization:
- Removed "Answer Batch Exec" (httpRequest at [1340, 900])
- Removed "Batch Loop" (splitInBatches at [3100, -500])
Both nodes had no incoming connections and were vestigial
from earlier batch operation development that was replaced.
Node count: 248 -> 246
Deployed and verified working via n8n API.
- Created 09-04-SUMMARY.md with verification results
- Documented 5 bugs fixed during verification
- All batch operations tested and working
- Update all testing deferred (Unraid UI issue)
- Updated STATE.md to reflect phase completion
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added missing connection for "update" rule (index 6)
- This shifted "logs" to correct index 7
- Both text-based update and logs commands now work
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add :kb marker to inline keyboard stop confirmation callback
- Parse Callback Data detects :kb and sets fromKeyboard: true
- Prepare Batch Stop Exec passes fromKeyboard through to batch state
- Summary now correctly shows Back to List for keyboard flows only
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Track fromKeyboard in batch state (true for callbacks, false for text)
- Pass fromKeyboard through entire batch loop chain
- Build Batch Summary only includes Back to List when fromKeyboard=true
- Send Batch Summary uses conditional reply_markup from input
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Long container names hit limit
- Batch select limited to ~2 containers with current format
- Consider short IDs or server-side state in Phase 9.1
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reference Prepare Immediate Batch Exec directly for chatId/messageId
instead of $json which is the Telegram response from previous node.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prepare Batch Exec now references Prepare Immediate Batch Exec directly
instead of relying on $json which gets overwritten by Delete Batch
Select Message. Also handles both 'action' and 'batchAction' field names.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add batchPage to Handle Batch Clear output
- Update Rebuild Batch Select Keyboard to also check Handle Batch Clear
as data source
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed Fetch Containers For Batch Mode and Fetch Containers For Toggle
Update to use all=true instead of all=false, so stopped containers
appear in the batch select list for batch start operations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add batch:nav callback type for page navigation with selection
- Parse batch:nav in Parse Callback Data
- Add route for isBatchNav in Route Callback switch
- Add Prepare Batch Nav node to format data for rebuild
- Update Rebuild Batch Select Keyboard to use batch:nav for navigation
- Now Previous/Next buttons preserve selected containers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Don't set isCancel:true for batch:cancel (was routing to wrong handler)
- Add page to batch:toggle callback format: batch:toggle:{page}:{selected}:{name}
- Parse page in Parse Callback Data for toggle callbacks
- Pass page through Handle Batch Toggle
- Add pagination to Rebuild Batch Select Keyboard (6 per page)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Parse Callback Data now handles batch:mode:{page} format
- Build Batch Select Keyboard uses 6 containers per page
- Added Previous/Next navigation buttons
- Shows "Showing X-Y of Z" count when paginated
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace Delete Batch Cancel Message with Prepare Batch Cancel Return code node
- Connect Prepare Batch Cancel Return to Get Containers For List
- Update Build Paginated List to accept data from multiple sources
- Cancel now shows the container list instead of deleting the menu
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>