chore: complete v1.1 milestone
Archived: - milestones/v1.1-ROADMAP.md - milestones/v1.1-REQUIREMENTS.md Deleted (fresh for next milestone): - REQUIREMENTS.md Updated: - MILESTONES.md (new v1.1 entry) - PROJECT.md (requirements → Validated, updated current state) - ROADMAP.md (v1.1 collapsed, v1.2 phases added) - STATE.md (reset for v1.2) v1.1 shipped: Inline keyboard UX and Docker security hardening - Phases 6-9 complete (11 plans) - 4 requirements deferred to v1.2 (UNR-01, ENV-01, ENV-02, WEB-01) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+44
-28
@@ -2,7 +2,7 @@
|
||||
|
||||
## What This Is
|
||||
|
||||
A Telegram bot that lets you manage Docker containers on your Unraid server. Control containers from your phone without needing to open a laptop — check status, view logs, start/stop/restart/update containers via simple keyword commands.
|
||||
A Telegram bot that lets you manage Docker containers on your Unraid server via inline keyboard buttons and text commands. Control containers from your phone without needing to open a laptop — check status, view logs, start/stop/restart/update containers, batch operations on multiple containers at once.
|
||||
|
||||
## Core Value
|
||||
|
||||
@@ -12,25 +12,32 @@ When you get a container update notification or notice a service is down, you ca
|
||||
|
||||
### Validated
|
||||
|
||||
- [x] Send a message to the bot and receive a response — v1.0
|
||||
- [x] Check container status ("status") — v1.0
|
||||
- [x] Start a container by name — v1.0
|
||||
- [x] Stop a container by name — v1.0
|
||||
- [x] Restart a container by name — v1.0
|
||||
- [x] Update a container (pull new image, recreate) — v1.0
|
||||
- [x] View container logs with configurable line count — v1.0
|
||||
- [x] Bot only responds to your Telegram user ID — v1.0
|
||||
**v1.0:**
|
||||
- ✓ Send a message to the bot and receive a response — v1.0
|
||||
- ✓ Check container status ("status") — v1.0
|
||||
- ✓ Start a container by name — v1.0
|
||||
- ✓ Stop a container by name — v1.0
|
||||
- ✓ Restart a container by name — v1.0
|
||||
- ✓ Update a container (pull new image, recreate) — v1.0
|
||||
- ✓ View container logs with configurable line count — v1.0
|
||||
- ✓ Bot only responds to your Telegram user ID — v1.0
|
||||
|
||||
**v1.1:**
|
||||
- ✓ n8n API access for Claude Code (programmatic workflow read/update/test/logs) — v1.1
|
||||
- ✓ Docker socket security (remove direct socket from internet-exposed n8n) — v1.1
|
||||
- ✓ Telegram inline keyboard buttons (container list with pagination and action buttons) — v1.1
|
||||
- ✓ Batch container operations (update/start/stop/restart multiple at once) — v1.1
|
||||
- ✓ Confirmation dialogs for dangerous actions (stop, update) — v1.1
|
||||
- ✓ Progress feedback during operations (message edits) — v1.1
|
||||
|
||||
### Active
|
||||
|
||||
**Milestone v1.1: n8n Integration & Polish**
|
||||
**Milestone v1.2: Modularization & Polish**
|
||||
|
||||
- [ ] n8n API access for Claude Code (programmatic workflow read/update/test/logs)
|
||||
- [ ] Telegram inline keyboard buttons (work around n8n native node issues)
|
||||
- [ ] Batch container updates (verify/fix multi-container update)
|
||||
- [ ] Docker socket security (remove direct socket from internet-exposed n8n)
|
||||
- [ ] Workflow modularization (break main workflow into sub-workflows)
|
||||
- [ ] Environment variable audit (verify TELEGRAM_USERID/BOT_TOKEN necessity)
|
||||
- [ ] Unraid update sync (clear "update available" when bot updates container)
|
||||
- [ ] Telegram webhook fix (bot responds when workflow is published)
|
||||
|
||||
### Out of Scope
|
||||
|
||||
@@ -42,16 +49,18 @@ When you get a container update notification or notice a service is down, you ca
|
||||
|
||||
## Current State
|
||||
|
||||
**Shipped:** v1.0 (2026-02-02)
|
||||
**Tech stack:** n8n workflow + Telegram Bot API + Docker socket
|
||||
**Files:** n8n-workflow.json (~3,200 lines), README.md
|
||||
**Shipped:** v1.1 (2026-02-04)
|
||||
**Tech stack:** n8n workflow + Telegram Bot API + Docker socket proxy
|
||||
**Files:** n8n-workflow.json (~8,500 lines), README.md
|
||||
**Architecture:** tecnativa/docker-socket-proxy filters Docker API access
|
||||
|
||||
## Context
|
||||
|
||||
**Environment:**
|
||||
- Unraid server with Intel N100 CPU, 32GB RAM
|
||||
- n8n container with Docker socket access
|
||||
- n8n container with Docker socket proxy access (no direct socket mount)
|
||||
- Multiple Docker containers (Plex, Sonarr, lldap, etc.)
|
||||
- docker-socket-proxy on dockernet network
|
||||
|
||||
**Constraints:**
|
||||
- Platform: Unraid (Docker-based)
|
||||
@@ -59,6 +68,7 @@ When you get a container update notification or notice a service is down, you ca
|
||||
- Matching: Keyword/substring with exact-match priority
|
||||
- Auth: Single user via Telegram ID
|
||||
- Logs: Configurable line count, default 50, max 1000
|
||||
- Callback data: 64-byte Telegram limit (affects batch/selection features)
|
||||
|
||||
## Key Decisions
|
||||
|
||||
@@ -72,19 +82,25 @@ When you get a container update notification or notice a service is down, you ca
|
||||
| Exact match priority | Prevents substring collisions (plex vs jellyplex) | ✓ Good |
|
||||
| Default to :latest tag | Prevents Docker API from pulling all tags | ✓ Good |
|
||||
| HTML escape logs | Log content may contain <tag> text | ✓ Good |
|
||||
| Text menu over keyboard | Native Telegram node replyKeyboard had issues | ✓ Good |
|
||||
| docker-socket-proxy for security | Filters dangerous APIs (exec, build, commit) at network level | ✓ Good |
|
||||
| Container create API allowed | Update command needs container recreation | ✓ Good |
|
||||
| Colon callback format | Compact format fits 64-byte limit | ✓ Good |
|
||||
| editMessageText transitions | Clean UX with no message clutter | ✓ Good |
|
||||
| 30-second confirmation timeout | Prevents stale confirmations | ✓ Good |
|
||||
| Batch stop requires confirmation | Fuzzy matching risk for destructive operations | ✓ Good |
|
||||
| Two-phase batch execution | Callbacks have names but no IDs - need lookup | ✓ Good |
|
||||
| Update all filters to :latest | Performance optimization - full check would be slow | ✓ Good |
|
||||
|
||||
## Current Milestone: v1.1 n8n Integration & Polish
|
||||
## Current Milestone: v1.2 Modularization & Polish
|
||||
|
||||
**Goal:** Enable faster development iteration via n8n API access, revisit UX improvements (buttons), and harden security (remove direct Docker socket exposure).
|
||||
**Goal:** Complete remaining v1.1 scope — modularize workflow for maintainability, fix webhook, audit environment, sync Unraid badges.
|
||||
|
||||
**Target features:**
|
||||
- n8n API for Claude Code — programmatic workflow access
|
||||
- Telegram inline keyboard buttons — better UX than text menus
|
||||
- Batch container updates — update multiple at once
|
||||
- Docker socket security — remove direct exposure
|
||||
- Environment variable audit — verify what's needed
|
||||
- Unraid update sync — clear notifications properly
|
||||
- Workflow modularization (carried from Phase 9.1)
|
||||
- Webhook fix (WEB-01)
|
||||
- Environment audit (ENV-01, ENV-02)
|
||||
- Unraid badge sync (UNR-01)
|
||||
- Documentation overhaul
|
||||
|
||||
---
|
||||
*Last updated: 2026-02-02 after starting v1.1 milestone*
|
||||
*Last updated: 2026-02-04 after v1.1 milestone*
|
||||
|
||||
Reference in New Issue
Block a user