docs(16-02): complete Container Actions GraphQL Migration plan

- Container lifecycle operations (start/stop/restart) migrated to Unraid GraphQL
- Restart implemented as sequential stop+start chain
- ALREADY_IN_STATE errors map to HTTP 304
- Format Result nodes unchanged (zero-change migration)
- Duration: 3 minutes (2 tasks, 1 file, 2 commits)
This commit is contained in:
Lucas Berger
2026-02-09 10:26:16 -05:00
parent 50326b9ed7
commit 0610f05dc8
2 changed files with 267 additions and 10 deletions
+14 -10
View File
@@ -3,9 +3,9 @@
## Current Position
- **Milestone:** v1.4 Unraid API Native
- **Phase:** 16 of 18 (API Migration) - In Progress (3/5 plans)
- **Status:** Phase 16 in progress, 16-01, 16-03, and 16-04 complete
- **Last activity:** 2026-02-09 — Phase 16-03 complete (single container update migrated to updateContainer mutation)
- **Phase:** 16 of 18 (API Migration) - In Progress (4/5 plans)
- **Status:** Phase 16 in progress, 16-01 through 16-04 complete
- **Last activity:** 2026-02-09 — Phase 16-02 complete (container actions migrated to GraphQL mutations)
## Project Reference
@@ -22,16 +22,16 @@ v1.0: [**********] 100% SHIPPED (Phases 1-5, 12 plans)
v1.1: [**********] 100% SHIPPED (Phases 6-9, 11 plans)
v1.2: [**********] 100% SHIPPED (Phases 10-13 + 10.1-10.2, 25 plans)
v1.3: [**********] 100% SHIPPED (Phase 14, 2 plans — descoped)
v1.4: [*****....] 50% IN PROGRESS (Phases 15-18, 5 of 10 plans)
v1.4: [******...] 60% IN PROGRESS (Phases 15-18, 6 of 10 plans)
Overall: 4 milestones shipped (14 phases, 50 plans), v1.4 in progress (Phase 15: 2/2, Phase 16: 3/5)
Overall: 4 milestones shipped (14 phases, 50 plans), v1.4 in progress (Phase 15: 2/2, Phase 16: 4/5)
```
## Performance Metrics
**Velocity:**
- Total plans completed: 55
- Total execution time: 12 days + 15 minutes (v1.0: 5 days, v1.1: 2 days, v1.2: 4 days, v1.3: 1 day, v1.4: 15 min)
- Total plans completed: 56
- Total execution time: 12 days + 18 minutes (v1.0: 5 days, v1.1: 2 days, v1.2: 4 days, v1.3: 1 day, v1.4: 18 min)
- Average per milestone: 3 days
**By Milestone:**
@@ -42,7 +42,7 @@ Overall: 4 milestones shipped (14 phases, 50 plans), v1.4 in progress (Phase 15:
| v1.1 | 11 | 2 days | ~4 hours |
| v1.2 | 25 | 4 days | ~4 hours |
| v1.3 | 2 | 1 day | ~2 minutes |
| v1.4 | 5 | 15 minutes | 3 minutes |
| v1.4 | 6 | 18 minutes | 3 minutes |
**Phase 15 Details:**
@@ -56,6 +56,7 @@ Overall: 4 milestones shipped (14 phases, 50 plans), v1.4 in progress (Phase 15:
| Plan | Duration | Tasks | Files |
|------|----------|-------|-------|
| 16-01 | 2 min | 1 | 1 |
| 16-02 | 3 min | 2 | 1 |
| 16-03 | 2 min | 1 | 1 |
| 16-04 | (unknown) | 1 | 1 |
@@ -79,6 +80,9 @@ Key decisions from v1.3 and v1.4 planning:
- [Phase 16-01]: Use inline Code nodes for normalizer and registry updates (sub-workflows cannot cross-reference parent workflow utility nodes)
- [Phase 16-01]: Same GraphQL query for all 3 status paths (downstream Code nodes filter/process as needed)
- [Phase 16-01]: Update Container ID Registry after every status query (keeps mapping fresh for mutations)
- [Phase 16-02]: Restart as sequential stop+start (no native GraphQL restart mutation)
- [Phase 16-02]: ALREADY_IN_STATE errors map to HTTP 304 (idempotent operation tolerance)
- [Phase 16-02]: Format Result nodes unchanged (GraphQL Error Handler maps to existing patterns)
- [Phase 16-03]: 60-second timeout for updateContainer (accommodates 10GB+ images, was 600s for docker pull)
- [Phase 16-03]: ImageId field comparison determines update success (not image digest like Docker)
- [Phase 16-03]: Error routing uses IF node after Handle Update Response (Code nodes have single output)
@@ -99,7 +103,7 @@ None.
**Next phase readiness:**
- Phase 15 complete (both plans) — All infrastructure utility nodes ready
- Phase 16 (API Migration) in progress — 16-01, 16-03, and 16-04 complete; plans 16-02 and 16-05 remaining
- Phase 16 (API Migration) in progress — 16-01 through 16-04 complete, 1 plan remaining (16-05)
- Complete utility node suite: Container ID Registry, Token Encoder/Decoder, GraphQL Normalizer, Error Handler
- Single container update pattern proven (query → mutate → handle response)
- No blockers
@@ -111,7 +115,7 @@ None.
- `n8n-status.json` -- Container Status sub-workflow (17 nodes, migrated to GraphQL) -- ID: `lqpg2CqesnKE2RJQ`
- `n8n-confirmation.json` -- Confirmation Dialogs sub-workflow (16 nodes) -- ID: `fZ1hu8eiovkCk08G`
- `n8n-update.json` -- Container Update sub-workflow (29 nodes, migrated to GraphQL) -- ID: `7AvTzLtKXM2hZTio92_mC`
- `n8n-actions.json` -- Container Actions sub-workflow (11 nodes) -- ID: `fYSZS5PkH0VSEaT5`
- `n8n-actions.json` -- Container Actions sub-workflow (22 nodes, migrated to GraphQL) -- ID: `fYSZS5PkH0VSEaT5`
- `n8n-logs.json` -- Container Logs sub-workflow (9 nodes) -- ID: `oE7aO2GhbksXDEIw` -- TO BE REMOVED
- `n8n-matching.json` -- Container Matching sub-workflow (23 nodes) -- ID: `kL4BoI8ITSP9Oxek`
- `ARCHITECTURE.md` -- Full architecture docs, contracts, and node analysis