diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md new file mode 100644 index 0000000..211c3a5 --- /dev/null +++ b/.planning/REQUIREMENTS.md @@ -0,0 +1,82 @@ +# Requirements: Unraid Docker Manager + +**Defined:** 2026-02-08 +**Core Value:** When you get a container update notification or notice a service is down, you can immediately investigate and act from your phone. + +## v1.3 Requirements + +Requirements for Unraid Update Status Sync. Each maps to roadmap phases. + +### Infrastructure + +- [ ] **INFRA-01**: n8n container can reach Unraid GraphQL API endpoint +- [ ] **INFRA-02**: Unraid API key created with Docker update permission, stored securely +- [ ] **INFRA-03**: Container ID format verified via GraphQL query (document actual format) + +### Sync + +- [ ] **SYNC-01**: After bot updates a single container (text command), Unraid badge clears automatically +- [ ] **SYNC-02**: After bot updates a single container (inline keyboard), Unraid badge clears automatically +- [ ] **SYNC-03**: After batch "update all" operation, all updated containers sync to Unraid in one call +- [ ] **SYNC-04**: After batch selection update, all selected containers sync to Unraid in one call +- [ ] **SYNC-05**: Sync failure does not block or fail the container update itself (best-effort) +- [ ] **SYNC-06**: User receives no false-positive Unraid update notifications for bot-updated containers + +### Documentation + +- [ ] **DOC-01**: README documents Unraid API setup (key creation, n8n container config) +- [ ] **DOC-02**: ARCHITECTURE.md documents Unraid sync integration (GraphQL API, data flow, new nodes) + +## Future Requirements + +Deferred to v1.4+. Tracked but not in current roadmap. + +### Manual Sync + +- **MSYNC-01**: User can trigger manual `/sync` command to sync all containers to Unraid +- **MSYNC-02**: User can trigger `/sync ` to sync a specific container + +### Unraid Status Read + +- **UREAD-01**: Bot can read Unraid's update detection data (which containers Unraid thinks need updates) +- **UREAD-02**: Container status keyboard shows Unraid's update view alongside Docker state + +## Out of Scope + +Explicitly excluded. Documented to prevent scope creep. + +| Feature | Reason | +|---------|--------| +| Bidirectional status (Unraid as source of truth) | Unraid's update detection has known bugs; sync-back must be proven first | +| Persistent monitoring daemon | Conflicts with n8n's workflow execution model; adds operational complexity | +| Full Unraid API integration (auth, templates) | Overkill for status sync; GraphQL mutation is sufficient | +| Automatic template XML regeneration | Risks breaking container configuration; status sync is separate from config | +| Sync ALL containers on every operation | Performance impact, unnecessary — sync only updated containers | +| Real-time Docker event monitoring | Requires separate service; n8n handles this reactively via bot commands | + +## Traceability + +Which phases cover which requirements. Updated during roadmap creation. + +| Requirement | Phase | Status | +|-------------|-------|--------| +| INFRA-01 | — | Pending | +| INFRA-02 | — | Pending | +| INFRA-03 | — | Pending | +| SYNC-01 | — | Pending | +| SYNC-02 | — | Pending | +| SYNC-03 | — | Pending | +| SYNC-04 | — | Pending | +| SYNC-05 | — | Pending | +| SYNC-06 | — | Pending | +| DOC-01 | — | Pending | +| DOC-02 | — | Pending | + +**Coverage:** +- v1.3 requirements: 11 total +- Mapped to phases: 0 +- Unmapped: 11 + +--- +*Requirements defined: 2026-02-08* +*Last updated: 2026-02-08 after initial definition*