Commit Graph
100 Commits
Author SHA1 Message Date
Lucas Berger 62eaa4b1ec docs(15): research infrastructure foundation domain 2026-02-09 08:36:44 -05:00
Lucas BergerandClaude Opus 4.6 16034bbdb8 docs: create milestone v1.4 roadmap (4 phases)
Phases 15-18: Infrastructure Foundation, API Migration, Cleanup, Documentation
23 requirements mapped across 4 phases with 0 gaps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 08:29:16 -05:00
Lucas Berger 7eab41eaba docs: define milestone v1.4 requirements 2026-02-09 08:11:54 -05:00
Lucas Berger bab819f6c8 docs: complete v1.4 project research synthesis 2026-02-09 08:08:25 -05:00
Lucas Berger bb47664188 docs: start milestone v1.4 Unraid API Native 2026-02-09 07:52:53 -05:00
Lucas BergerandClaude Opus 4.6 903e73d616 feat: v1.3 Unraid Update Status Sync
Unraid GraphQL API foundation — connectivity, authentication, and
container ID format verified for native Unraid API integration.

Phase 14: Unraid API Access (2 plans, 4 tasks)
- Established Unraid GraphQL API connectivity via myunraid.net cloud relay
- Dual credential storage (.env.unraid-api + n8n env vars)
- Container ID format: {server_hash}:{container_hash} (128-char SHA256 pair)
- Complete API contract documented in ARCHITECTURE.md
- "unraid" test command added to Telegram bot

Phases 15-16 dropped (superseded by v1.4 Unraid API Native).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 07:47:31 -05:00
Lucas Berger ff0773b84b docs(14): create phase plan 2026-02-08 20:22:11 -05:00
Lucas Berger 00f0dcfd21 docs(14): research Unraid GraphQL API access patterns 2026-02-08 20:16:06 -05:00
Lucas Berger 9385deb0da docs(14): capture phase context 2026-02-08 20:10:58 -05:00
Lucas BergerandClaude Opus 4.6 be66f01815 chore: persist research preference in config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:02:00 -05:00
Lucas Berger 96c293f8f4 docs: create milestone v1.3 roadmap (3 phases) 2026-02-08 20:01:15 -05:00
Lucas Berger 59a97d1847 docs: define milestone v1.3 requirements 2026-02-08 19:57:10 -05:00
Lucas Berger 07cde0490a docs: complete v1.3 project research (STACK, FEATURES, ARCHITECTURE, PITFALLS, SUMMARY) 2026-02-08 19:52:57 -05:00
Lucas Berger c071b890ef docs: start milestone v1.3 Unraid Update Status Sync 2026-02-08 19:35:46 -05:00
Lucas BergerandClaude Opus 4.6 1e84472efd chore: set git branching strategy to per-milestone
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 19:26:28 -05:00
Lucas BergerandClaude Opus 4.6 328442554c docs: rename DEPLOY-SUBWORKFLOWS.md to ARCHITECTURE.md and rewrite
Restructured as a proper technical architecture document:
- Added Observability section (correlation IDs, structured errors, debugging)
- Reorganized into logical flow: overview, request flow, contracts, internals
- Removed stale rollback/backup references
- Updated all references in README, CLAUDE.md, PROJECT.md, STATE.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 19:15:56 -05:00
Lucas BergerandClaude Opus 4.6 e7eadd088c chore: complete v1.2 milestone — archive and tag
Archive v1.2 Modularization & Polish milestone:
- Archive ROADMAP.md, REQUIREMENTS.md, and audit to milestones/
- Evolve PROJECT.md with v1.2 validated requirements and decisions
- Reorganize ROADMAP.md with collapsed milestone groupings
- Delete REQUIREMENTS.md (fresh for next milestone)
- Update STATE.md and MILESTONES.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 4b82044031 docs(phase-13): complete phase execution 2026-02-08 18:56:44 -05:00
Lucas Berger 4228cca9a3 docs(13-01): complete documentation overhaul plan
- README expanded from 139 to 264 lines (+90%)
- Added Architecture, Configuration, and Troubleshooting sections
- Documented all v1.2 features (batch selection, Update All button, inline keyboard)
- Removed outdated DEPLOYMENT_GUIDE.md (Phase 10-05, 3 sub-workflows)
- Consolidated to single technical reference: DEPLOY-SUBWORKFLOWS.md
- Updated STATE.md: Phase 13 complete, v1.2 milestone 100% COMPLETE
- Created 13-01-SUMMARY.md with full execution record

Phase 13-01 duration: 113 seconds
Tasks: 2/2 complete
Commits: 54437aa, a483bfb
2026-02-08 18:56:44 -05:00
Lucas Berger 062e096cd4 docs(13-01): remove outdated DEPLOYMENT_GUIDE.md
- File written during Phase 10-05 for 3 sub-workflows (now 7)
- References 199 nodes (now 166 in main workflow)
- Fully superseded by DEPLOY-SUBWORKFLOWS.md (725 lines, current)
- README now links only to DEPLOY-SUBWORKFLOWS.md for technical details
- Remaining references in .planning/ are historical records (expected)
2026-02-08 18:56:44 -05:00
Lucas Berger 6cdb9581a1 docs(13-01): overhaul README with architecture, configuration, and troubleshooting sections
- Add dedicated Architecture section with ASCII diagram (main workflow + 7 sub-workflows)
- Add dedicated Configuration section (separated from installation steps)
- Add dedicated Troubleshooting section (5 common issues with fixes)
- Document batch selection workflow (toggle checkmarks, multi-select UI)
- Document inline keyboard Update All button location and usage
- Expand Usage section with inline keyboard and batch operations subsections
- Document infrastructure container exclusion from batch updates
- Link to DEPLOY-SUBWORKFLOWS.md for technical details
- Remove outdated DEPLOYMENT_GUIDE.md reference
- Expand from 139 to 264 lines (comprehensive, not over-documented)
2026-02-08 18:56:44 -05:00
Lucas Berger 70115f7cd6 docs(13): create phase plan 2026-02-08 18:56:44 -05:00
Lucas Berger 820dff47f4 docs(13): research documentation overhaul requirements and best practices 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 afddb6130a docs(12-02): complete Phase 12 — all v1.2 requirements closed
BATCH-04 and BATCH-05 UAT passed. 9 bugs fixed during testing.
All 12 v1.2 requirements now complete. Phase 13 (docs overhaul) next.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 c2c2ce7092 fix(12-02): Update All flow — 9 bug fixes from UAT
Fixes discovered during BATCH-04/BATCH-05 UAT testing:

- Convert confirmation to HTTP Request (editMessageText for inline kb,
  sendMessage for text command) with dynamic endpoint selection
- Fix data chain breaks: use named node refs ($('Parse Callback Data'),
  $('Get Update All Data')) instead of $json after API calls
- Add infrastructure container exclusion (n8n, socket-proxy) by image
  and container name to prevent bot self-destruction during updates
- Add batch responseMode to update sub-workflow (skip Telegram messages)
- Reorder infra check before :latest filter so sha256-digest images
  appear in skipped list
- Add onError:continueRegularOutput to Answer Update All Start for
  expired callback queries
- Show "Back to List" button in batch summary for update-all flow
- Add Prepare Update All Batch fallback in Prepare Batch Loop

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 b3909f00e5 docs(12-01): complete documentation audit plan
- Create 12-01-SUMMARY.md with execution metrics and decisions
- Update STATE.md: Phase 12 complete (1/1 plan)
- Record decision: Document Unraid limitation vs programmatic fix
- Closed 4 requirements: ENV-01, ENV-02, DEBT-01, DEBT-02
- Resolved UNR-01 as documented limitation
- Duration: 140 seconds, 2 tasks completed, 3 files modified

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 7601e245a9 docs(12-01): document Unraid update badge limitation
- Add Known Limitations section to DEPLOY-SUBWORKFLOWS.md
- Document UNR-01: Unraid shows "apply update" after bot updates a container
- Explain root cause: bot bypasses Unraid's XML template system
- Provide workaround: click Apply Update in Unraid (instant, image cached)
- Clarify "Check for Updates" does NOT clear badge, may create new ones
- Mark UNR-01 as complete (documented limitation with workaround)
2026-02-08 18:56:44 -05:00
Lucas Berger e6e5df8754 docs(12-01): update environment and architecture documentation
- Update README to document docker-socket-proxy architecture instead of direct socket mount
- Clarify TELEGRAM_BOT_TOKEN needs both n8n credential AND env var
- Clarify user ID is hardcoded in IF nodes (no env var needed)
- Add missing commands to usage table (update all, /list)
- Document all 8 workflow files (main + 7 sub-workflows)
- Mark ENV-01, ENV-02, DEBT-01, DEBT-02 as complete in REQUIREMENTS.md
- Verify DEBT-02 is fixed (single --max-time 600 flag, no duplicates)
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 1ef726942a docs(12): plan phase with Unraid badge research and UAT
Research found Unraid badge issue is architectural (bot bypasses
Unraid's XML template system). Updated plans to document limitation
with workaround instead of attempting programmatic fix. Plan 01
covers docs/env/debt, Plan 02 covers deferred Update All UAT.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 510b7d50dc docs(12): create phase plan 2026-02-08 18:56:44 -05:00
Lucas Berger c1d988f0e7 docs(12): research phase domain 2026-02-08 18:56:44 -05:00
Lucas Berger 732f692544 docs(12): capture phase context 2026-02-08 18:56:44 -05:00
Lucas Berger 16ae0b8bc0 docs(quick-1-1): complete orphan node removal task 2026-02-08 18:56:44 -05:00
Lucas Berger d153453aa9 refactor(workflow): remove orphan callback node chain (172→166 nodes) 2026-02-08 18:56:44 -05:00
Lucas Berger db3df53800 docs(quick-1): create plan to remove orphan node chain 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 a15df26b7b docs(phase-11): complete phase execution — bitmap encoding + Update All
Verification: 7/9 must-haves pass, 2 deferred (Update All UAT → Phase 12).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 642d1ec73d docs(11-02): complete plan — Update All button, deployment, UAT
UAT results: tests 1-3,6 pass (bitmap, long names, batch exec, regression).
Tests 4-5 (Update All UAT) deferred to after Phase 12.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 0810c0919a fix(11-01): fix bitmap node references to use Parse Callback Data
Is Bitmap Batch Stop and Resolve Batch Stop Names were checking $json.bitmap
which contains the Telegram API response, not the parsed callback data. Changed
both to reference $("Parse Callback Data").item.json directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 551a69f1f3 fix(11-01): fix batch stop bitmap resolution wiring and parser return
Three bugs from plan 11-01 execution:
1. Parse Callback Data bstop return missing bitmap/isBitmapBatchStop fields
2. Is Bitmap Batch Stop wired to expired branch [0] instead of not-expired [1]
3. Is Bitmap Batch Stop false branch went to Initialize Batch State, bypassing Prepare Batch Stop Exec

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 3275e190c4 feat(11-02): add Update All button to container list with callback routing
- Add 'Update All :latest' button to Build Container List and Build Paginated List
- Add uall:start parser to Parse Callback Data (sets isUpdateAllStart flag)
- Add updateallstart rule to Route Callback (index 2)
- Add Answer Update All Start node with 'Checking for updates...' callback response
- Wire Route Callback [updateallstart] -> Answer Update All Start -> Get All Containers For Update All
- Fix Check Available Updates to support both text and callback origins (try/catch for Keyword Router vs Parse Callback Data)
2026-02-08 18:56:44 -05:00
Lucas Berger 339b366bcc docs(11-01): complete bitmap encoding plan -- unlimited container selection
- Created 11-01-SUMMARY.md with technical details and verification results
- Updated STATE.md: Phase 11 plan 1/2 complete, 50% progress
- Key metrics: 5m 16s duration, 2 tasks, 4 nodes added (1 batch-ui + 3 main workflow)
- Node counts: n8n-batch-ui.json 17 nodes, n8n-workflow.json 171 nodes
- Decisions: base36 BigInt encoding, graceful migration via dual parsers
2026-02-08 18:56:44 -05:00
Lucas Berger bac38634a3 feat(11-01): update main workflow for bitmap-encoded batch callbacks
- Add new parsers for b: (toggle), bn: (nav), be: (exec) formats in Parse Callback Data
- Update Prepare Batch UI Input to forward bitmap field instead of selectedCsv
- Retain old batch:toggle/nav/exec parsers for backward compatibility with in-flight messages
- Add bitmap detection in bstop:confirm parser (detects alphanumeric vs CSV format)
- Add 3 new nodes for bitmap resolution flow:
  - Is Bitmap Batch Stop (IF node)
  - Fetch Containers For Bitmap Stop (HTTP)
  - Resolve Batch Stop Names (Code node with decodeBitmap)
- Wire bitmap resolution flow: Check Batch Stop Expired -> Is Bitmap -> [true] Fetch -> Resolve -> Initialize
- Legacy CSV format routes directly to Initialize Batch State (false path)
- Total: 171 nodes (168 + 3 new)
2026-02-08 18:56:44 -05:00
Lucas Berger cea467f493 feat(11-01): implement bitmap encoding in batch UI sub-workflow
- Replace CSV-in-callback with base36 bitmap encoding
- Add Fetch Containers For Exec node for bitmap->name resolution
- Update all code nodes to use BigInt bitmap operations
- New callback formats: b:{page}:{bitmap}:{index}, bn:{bitmap}:{page}, be:{action}:{bitmap}
- Remove 64-byte limit check (bitmap encoding ~20 bytes max for 50 containers)
- Update trigger schema: selectedCsv -> bitmap, add containerIndex field
- Total: 17 nodes (16 original + 1 new)
2026-02-08 18:56:44 -05:00
Lucas Berger 1245aeed4f docs(11): create phase plan — bitmap batch selection + update all button 2026-02-08 18:56:44 -05:00
Lucas Berger 23ba84ae4e docs(11): research phase domain 2026-02-08 18:56:44 -05:00
Lucas Berger d2c44c0254 docs(phase-10.2): complete phase verification — all gaps closed 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 dd30a899aa docs: add CLAUDE.md project instructions and debug analysis
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger f86ed83d00 docs(10.2-04): update UAT status - gaps 1-3 closed, gap 4 accepted
- Updated UAT status to gap-closure-complete
- Marked gaps 1-3 as closed by 10.2-04-PLAN.md
- Marked gap 4 as accepted (minor, no scope creep)
2026-02-08 18:56:44 -05:00
Lucas Berger 642162e0d3 docs(10.2-04): complete gap closure plan
- Created 10.2-04-SUMMARY.md with execution details
- Updated STATE.md: 4/4 plans complete, correlation IDs wired
- Documented UAT gaps 1-3 closed (gap 4 accepted as minor)
- Final state: 168 nodes, correlation IDs functional
2026-02-08 18:56:44 -05:00
Lucas Berger 43f525a89c fix(10.2-04): wire correlation ID generators and remove orphan nodes
- Renamed connection keys from node IDs to node names (Generate Correlation ID, Generate Callback Correlation ID)
- Rewired IF User Authenticated -> Generate Correlation ID -> Keyword Router
- Rewired IF Callback Authenticated -> Generate Callback Correlation ID -> Parse Callback Data
- Removed 2 orphan nodes (Delete Batch Confirm Message, Send Text Update Started)
- Removed ghost connection key (code-log-error)
- Node count reduced from 170 to 168
2026-02-08 18:56:44 -05:00
Lucas Berger 5434ef20d1 docs(10.2): create gap closure plan for correlation ID wiring 2026-02-08 18:56:44 -05:00
Lucas Berger c288fa1d39 test(10.2): complete UAT - 2 passed, 4 issues 2026-02-08 18:56:44 -05:00
Lucas Berger 03af26598f docs(phase-10.2): complete phase execution 2026-02-08 18:56:44 -05:00
Lucas Berger f620229cec docs(10.2-03): complete plan — scope reduction due to n8n static data limitation
- Created 10.2-03-SUMMARY.md documenting scope reduction and platform limitation
- Updated STATE.md: Phase 10.2 complete (3/3 plans)
- Documented critical finding: n8n static data does not persist between executions
- Final state: 170 nodes (168 baseline + 2 correlation ID generators)
- Correlation ID infrastructure and structured error returns retained
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 7f579d5fe9 refactor(10.2): remove static-data-dependent debug commands and logging nodes
n8n workflow static data does not persist between executions on this
instance, making the ring buffer, debug commands, and trace capture
non-functional. Removed:
- 4 Keyword Router debug rules (/errors, /clear, /debug, /trace)
- Process Debug Command + Send Debug Response nodes
- Log Error + Log Trace utility nodes
- 2 error detection IF nodes (Check Execute *Action Success)
- Inline trace blocks from 7 result-handling Code nodes

Kept: structured error returns in sub-workflows (success/false + error
objects), correlation ID generation, correlationId pass-through.

Node count: 176 -> 170.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 10ad20f495 fix(10.2-03): use JSON-serialized top-level key for n8n static data persistence
n8n $getWorkflowStaticData only reliably tracks top-level property changes.
Deep nested mutations (staticData.errorLog.debug.enabled = true) are not
persisted between executions. Fix: serialize errorLog as JSON string in
staticData._errorLog — every read does JSON.parse, every write does
JSON.stringify as a top-level assignment.

Fixed in: Process Debug Command, Log Error, Log Trace, 6 inline trace
nodes, Parse Callback Data callback routing trace.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 e331d1618e fix(10.2-03): fix correlationId placement in 19 Prepare Input nodes
Plan 02 executor placed correlationId outside the json object in all
Prepare Input code nodes, creating "Unexpected token '}'" syntax errors.
Moved correlationId inside the json return object in all 19 affected nodes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 69eb4e0b9d fix(10.2-03): reorder Keyword Router rules — debug commands before generic contains
Two bugs: (1) connection array had old fallback at index [9] shifting debug
connections off-by-one, so /errors routed to Show Menu. (2) /debug status
matched rule 1 (contains "status") before rule 11 (startsWith /debug).
Fix: move startsWith debug rules [1-4] before contains rules [5-12].

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger e7074288f0 feat(10.2-03): wire debug trace capture at sub-workflow boundaries and callback routing
- Added debug trace capture to 6 result-handling Code nodes
- Traces capture sub-workflow boundary data (success, action, hasError)
- Added callback routing trace to Parse Callback Data node
- Traces only activate when debug mode enabled (staticData.errorLog.debug.enabled)
- Auto-disable after 100 executions to prevent performance impact
- Inline tracing (no new nodes added, node count remains 176)
2026-02-08 18:56:44 -05:00
Lucas Berger 2ac0ba78bd docs(10.2-02): complete plan -- error propagation and correlation IDs
Summary:
- All 7 sub-workflows now return structured error objects
- Main workflow generates correlation IDs for request tracing
- Error detection active for 2 high-value paths
- 8 workflow JSON files modified (1 main + 7 sub-workflows)
- Main workflow: 172 -> 176 nodes (+4)
- Duration: 5.5 minutes
- Deviations: 2 (error detection scope reduced, logs trigger workaround)

STATE.md updates:
- Plan 2 of 3 complete (67% progress)
- Added achievements for 10.2-02
- Added 3 new decisions
- Updated next step to Plan 03
2026-02-08 18:56:44 -05:00
Lucas Berger f7130f61fc feat(10.2-02): add correlation ID generation and error capture to main workflow
Part A - Correlation ID Generation:
- Added Generate Correlation ID node for text command path
- Added Generate Callback Correlation ID node for callback path
- Wired between authentication and routing nodes
- Uses timestamp + random string pattern (no external dependencies)

Part B - Correlation ID Propagation:
- Modified 19 Prepare Input nodes to pass correlationId to sub-workflows
- Uses $input.item.json.correlationId pattern for flexibility
- Supports both text and callback paths

Part C - Error Capture Infrastructure:
- Added 2 error detection IF nodes for high-value paths:
  * Check Execute Container Action Success
  * Check Execute Inline Action Success
- Error path: success === false → Log Error node
- Success path: continues to original result handling
- Log Error node receives error data from sub-workflows
- Pass-through design preserves data for downstream handlers

Main workflow: 172 → 176 nodes (+4)
- 2 correlation ID generators
- 2 error detection IF nodes

Error ring buffer now captures:
- Container action failures (Docker API errors)
- Sub-workflow errors with full diagnostic context
- Correlation IDs for request tracing
- Workflow name, node, HTTP codes, raw responses
2026-02-08 18:56:44 -05:00
Lucas Berger 1c632d039a feat(10.2-02): add structured error returns to all 7 sub-workflows
- Added correlationId field to all sub-workflow trigger schemas
- Added success: true/false fields to return paths
- Added error objects to failure paths with workflow, node, message, httpCode, rawResponse
- Implemented correlationId pass-through for error correlation
- Preserved backward compatibility (existing return fields unchanged)

Modified sub-workflows:
- n8n-actions.json: 3 Format Result nodes with full error objects
- n8n-update.json: Pull/Create/Start error paths with error objects
- n8n-logs.json: Added correlationId pass-through
- n8n-batch-ui.json: Added correlationId to trigger
- n8n-status.json: Added correlationId to trigger
- n8n-confirmation.json: Added correlationId pass-through to stop action
- n8n-matching.json: Added correlationId to trigger

All sub-workflows now return structured error objects on failures for main workflow error ring buffer capture.
2026-02-08 18:56:44 -05:00
Lucas Berger 6833641ad1 docs(10.2-01): complete error ring buffer foundation plan
- Create 10.2-01-SUMMARY.md with full plan execution details
- Update STATE.md: Phase 10.2 plan 1 of 3 complete (33% progress)
- Document all technical decisions and architecture patterns
- Self-check verification passed: all files and commits present
- Duration: 156 seconds (2.6 minutes)
- Node count: 168 -> 172 (+4 nodes: 2 command, 2 utility)
- Ring buffer infrastructure ready for Plan 02 wiring
2026-02-08 18:56:44 -05:00
Lucas Berger 030118efb3 feat(10.2-01): add error and trace logging utility nodes
- Create Log Error code node with ring buffer write logic
- Create Log Trace code node with debug mode check and auto-disable
- Both nodes implement ring buffer (max 50 entries) with auto-rotation
- Log Error: accepts error data, truncates large fields (stack 500, raw 1000)
- Log Error: passes through input data with _errorLogged flag
- Log Trace: checks debug.enabled before logging, passes through unchanged
- Log Trace: auto-disables debug mode after 100 executions
- Both nodes positioned at utility area (2600, -200/-400)
- Nodes are standalone (no connections) - ready for Plan 02 wiring
- Node count: 170 -> 172 (+2 utility nodes)
2026-02-08 18:56:44 -05:00
Lucas Berger d1d13ca671 feat(10.2-01): add hidden debug commands and error ring buffer foundation
- Add 4 new keyword routes: /errors, /clear-errors, /debug, /trace
- Create Process Debug Command code node with unified command handling
- Initialize workflow static data structure (errorLog with debug, errors, traces)
- Implement /errors command to display recent errors (default 5, max 50)
- Implement /clear-errors command to reset error buffer
- Implement /debug on|off|status for debug mode toggle
- Implement /trace <correlationId> for correlation-based query
- Add Send Debug Response Telegram node with HTML formatting
- Wire Keyword Router -> Process Debug Command -> Send Debug Response
- Commands remain hidden (not listed in /start menu)
- Node count: 168 -> 170 (+2 nodes)
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 c79a3fbf87 docs(10.2): plan phase — error ring buffer, sub-workflow error propagation, debug tracing
3 plans in 3 waves:
- Wave 1: Ring buffer foundation + hidden debug commands (/errors, /debug, /trace, /clear-errors)
- Wave 2: Structured error returns in all 7 sub-workflows + correlation ID tracking
- Wave 3: Debug mode tracing at sub-workflow boundaries + deployment verification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger e9a84794b9 docs(10.2): create phase plan 2026-02-08 18:56:44 -05:00
Lucas Berger 0ef36ab4c8 docs(10.2): research phase domain 2026-02-08 18:56:44 -05:00
Lucas Berger df637c9286 docs(10.2): capture phase context 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 ac2d745e1d fix(10.1-09): wire /list command connection to Prepare Status Input
The list keyword rule was added to Keyword Router but its connection
pointed to Show Menu (fallback) instead of Prepare Status Input.
Added proper connection at index 8 and shifted fallback to index 9.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 8db937683e docs(phase-10.1): complete phase execution 2026-02-08 18:56:44 -05:00
Lucas Berger 0b6b12ee7e docs(10.1-09): complete UAT gap closure plan 2026-02-08 18:56:44 -05:00
Lucas Berger e67800c4f6 chore(10.1-09): deploy updated workflow to n8n
- Successfully deployed n8n-workflow.json to n8n instance
- Workflow ID: HmiXBlJefBRPMS0m4iNYc
- All three UAT gap fixes now live
2026-02-08 18:56:44 -05:00
Lucas Berger f4fd5d5256 docs(10.1-08): complete container action status code handling plan 2026-02-08 18:56:44 -05:00
Lucas Berger a5cffc3745 feat(10.1-09): add /list command to Keyword Router
- Added 'list' route with same output as 'status'
- Both /list and /status now show paginated container list
- Provides user-expected /list command while leveraging existing functionality
2026-02-08 18:56:44 -05:00
Lucas Berger 0ba573a24d feat(10.1-08): add statusCode handling to container action result formatters
- Add HTTP 304 detection for 'already in desired state' (success: true)
- Add HTTP 404 detection for 'container not found' (success: false)
- Add HTTP 500+ detection for server errors (success: false)
- Apply to Format Stop/Start/Restart Result nodes
- StatusCode checks run before existing message-based fallback logic
2026-02-08 18:56:44 -05:00
Lucas Berger 9982a59adc fix(10.1-09): use dynamic input in Build Cancel Return Submenu
- Changed $('Prepare Cancel Return').item.json to $input.item.json
- Allows node to work with both cancel paths (batch cancel and confirmation cancel)
- Fixes confirmation dialog cancel button returning to container status view
2026-02-08 18:56:44 -05:00
Lucas Berger 95f29e5433 fix(10.1-09): use actionType field in Build Batch Keyboard
- Changed const action = $json.action to $json.actionType
- Fixes disambiguation keyboard showing 'multiple all?' instead of actual action
- Ensures correct callback_data format: bexec:{action}:... not bexec:multiple:...
2026-02-08 18:56:44 -05:00
Lucas Berger f3ab7cf312 docs(10.1): create UAT gap closure plans (08-09) 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 b74fb3c19c test(10.1): diagnose 4 UAT issues with root causes
- Gap 1: Format Stop/Start/Restart missing statusCode 304 check
- Gap 2: Build Batch Keyboard reads action instead of actionType
- Gap 3: /list not implemented in Keyword Router (minor)
- Gap 4: Build Cancel Return Submenu references wrong predecessor

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 14589f3cb6 test(10.1): complete UAT - 11 passed, 4 issues
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 22bbe4b6ba docs(10.1): mark Phase 10.1 complete in roadmap (7/7 plans)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 2a4505d2d4 docs(10.1-07): complete Code classification and contract documentation plan
- 10.1-07-SUMMARY.md: Plan execution results with self-check passed
- STATE.md: Phase 10.1 marked COMPLETE (7/7 plans), decisions updated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 178bc544dc docs(10.1-07): document sub-workflow contracts and node count analysis
- Add detailed I/O contracts for all 7 sub-workflows with field-level docs
- Verify all 17 Execute Workflow nodes receive correct input fields
- Add node count analysis proving 168 nodes is 2 above structural minimum
- Show diminishing returns evidence (extraction efficiency: 81% -> 0% -> -50%)
- Close verification gaps 2 and 3 with documented evidence

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 f0aae416aa docs(10.1-07): classify all 60 Code nodes in main workflow
- Add Code Node Classification section to DEPLOY-SUBWORKFLOWS.md
- Classify each Code node into 6 categories with evidence
- 58 nodes confirmed as orchestration infrastructure (must stay)
- 2 domain-logic candidates identified but extraction is net-negative
- Summary proves no further extraction is viable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 4eeed1d9e1 docs(10.1-06): complete matching extraction plan 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 6824697295 fix(10.1-06): fix batch text command data flow through matching sub-workflow
Added "Prepare Batch Execution" Code node between Route Batch Match Result
and Route Batch Action to transform matching sub-workflow output:
- matchedContainers -> allMatched (field name expected by downstream nodes)
- action from Detect Batch Command (stop/start/restart) instead of
  "batch_matched" routing label from sub-workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 aae95e2405 fix(10.1-06): strip inline keyboard from text-mode status responses
Text commands like "status book" should show plain text status without
inline keyboard buttons. Added "Strip Status Keyboard" Code node that
removes reply_markup before sending via Send Container Submenu Direct.
Callback-based status (with messageId) still gets the full UI with buttons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 138728a7b1 fix(10.1-06): fix action type passthrough and text status routing
- Prepare Text Action Input now reads action (stop/start/restart) from
  Parse Action Command instead of matching sub-workflow's actionType field
- Added "Has Status Message ID" If node to route status_direct results:
  messageId > 0 → Edit Container List (callback), messageId == 0 →
  Send Container Submenu Direct (text command)
- Pre-existing bug: text "status <name>" routed to editMessageText with
  messageId 0, causing Telegram API error

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 596b0e5dab fix(10.1-06): replace matching workflow placeholders with deployed ID kL4BoI8ITSP9Oxek
- Updated 3 Execute Workflow nodes: Execute Action Match, Execute Update Match, Execute Batch Match
- Deployed n8n-matching.json as workflow kL4BoI8ITSP9Oxek
- Pushed main workflow to n8n API

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 d5246ba1c6 feat(10.1-06): update main workflow to call matching sub-workflow
- Remove 12 matching/disambiguation logic nodes from main workflow
- Add 9 integration nodes: 3 Prepare Input + 3 Execute Workflow + 3 Route Result
- Net reduction: 3 nodes (168 -> 165)
- Wire Docker List for Action -> Prepare -> Execute -> Route -> existing handlers
- Wire Docker List for Update -> Prepare -> Execute -> Route -> existing handlers
- Wire Get Containers for Batch -> Prepare -> Execute -> Route -> existing handlers
- Preserve all 6 Telegram response nodes in main workflow
- Update Prepare Text Action/Update Input to use sub-workflow return data
- Backup created at n8n-workflow.json.backup-matching

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.6 f57c706e01 feat(10.1-06): create n8n-matching.json sub-workflow
- Extract 12 matching/disambiguation logic nodes into sub-workflow
- 23 nodes total: trigger + router + 12 logic + 9 format-return nodes
- Three action paths: match_action, match_update, match_batch
- Every exit path returns JSON with action field per established pattern
- Adapted input references to use trigger data instead of main workflow refs
- No response nodes included (stay in main per locked decision)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:56:44 -05:00
Lucas Berger 18f8976a7f fix(10.1): revise plans based on checker feedback 2026-02-08 18:56:44 -05:00
Lucas Berger c437aa534f docs(10.1): create gap closure plans (06-07) 2026-02-08 18:56:44 -05:00
Lucas BergerandClaude Opus 4.5 1337f89114 docs(10.1): create gap closure plan for verification gaps
Phase 10.1 verification found 3 gaps:
- Gap 1: Node count 168 vs 115-125 target (needs user decision)
- Gap 2: Code node analysis incomplete (documentation task)
- Gap 3: Sub-workflow contracts not documented (documentation task)

Plan 10.1-06 addresses gaps with:
- Task 1: Document all 6 sub-workflow input/output contracts
- Task 2: Classify all 62 Code nodes by purpose
- Task 3: User decision checkpoint on node count approach

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 09:03:57 -05:00
Lucas BergerandClaude Opus 4.5 4d101a4299 wip: 10.1 paused at verification decision point
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:37:24 -05:00
Lucas BergerandClaude Opus 4.5 36a6ff2e8e docs(10.1-05): complete integration verification plan
- Created 10.1-05-SUMMARY.md documenting verification and UAT
- Updated STATE.md to reflect phase completion (5/5 plans)
- Updated ROADMAP.md to mark phase 10.1 complete
- Updated DEPLOY-SUBWORKFLOWS.md with deployed workflow IDs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:31:04 -05:00
Lucas BergerandClaude Opus 4.5 66574efed2 fix(logs): properly parse Docker multiplexed stream format
Docker logs API returns multiplexed stream with 8-byte headers per frame,
not just newline-separated text. The old code split on \n which missed
frames that weren't newline-terminated.

Now properly parses the binary stream format:
- Reads 8-byte header (stream type + frame size)
- Extracts frame data based on size
- Splits frame content by newlines
- Correctly counts and displays requested number of lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:26:18 -05:00
Lucas BergerandClaude Opus 4.5 df9a4420e9 fix(batch): support text-based batch commands (not just keyboard)
Text-based batch commands (e.g., /start container1 container2) were
failing because Send Batch Start Message always used editMessageText,
but you can't edit the user's message.

Fixed by:
- Conditionally use sendMessage vs editMessageText based on fromKeyboard
- Capture new message_id from sendMessage response for progress updates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:21:50 -05:00
Lucas BergerandClaude Opus 4.5 e9a971a014 fix(routing): connect batchStopConfirm to Answer Batch Stop Confirm
Output 11 was incorrectly going to Build Callback Action (single
container handler) instead of Answer Batch Stop Confirm (batch handler).

The batch stop confirm flow should be:
Answer Batch Stop Confirm -> Check Batch Stop Expired -> Prepare Batch Stop Exec

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 22:16:54 -05:00