- Replace all 5 Docker API HTTP Request nodes with GraphQL queries
- Add 5 GraphQL Response Normalizer nodes (one per query path)
- Transform Unraid GraphQL responses to Docker API contract format
- Preserve all downstream Code nodes unchanged (bitmap encoding, keyboard building)
- All connection chains validated and working
- Pushed to n8n successfully (HTTP 200)
- Replace 'Get All Containers' Docker API call with GraphQL query
- Add GraphQL Response Normalizer to transform Unraid format to Docker contract
- Add Container ID Registry update on every container lookup
- Update Resolve Container ID to output unraidId (PrefixedID) for mutations
- Wire: Query All Containers -> Normalizer -> Registry Update -> Resolve Container ID
- Added 15-01-SUMMARY.md documenting implementation and deviations
- Updated STATE.md: Phase 15 complete (2/2 plans), 52 total plans, v1.4 at 20%
- Task 1 (Container ID Registry) was pre-existing in baseline
- Task 2 (Token Encoder/Decoder) implemented and pushed to n8n
- All utility nodes standalone, ready for Phase 16 wiring
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Callback Token Encoder: compress 129-char Unraid PrefixedID to 8-char hex token
- SHA-256 hashing with 7-window collision detection (56 chars / 8-char windows)
- Callback Token Decoder: resolve 8-char token back to PrefixedID
- Both use JSON serialization for static data persistence (_callbackTokens)
- Standalone utility nodes at [600,2400] and [1000,2400]
- Not connected - Phase 16 will wire into active flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
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>
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>
- 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)
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>
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>
- 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)
- 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)
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>
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>