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>
This commit is contained in:
Lucas Berger
2026-02-08 18:50:03 -05:00
parent 4b82044031
commit e7eadd088c
7 changed files with 458 additions and 203 deletions
+36 -27
View File
@@ -2,7 +2,7 @@
## What This Is
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.
A Telegram bot that lets you manage Docker containers on your Unraid server via inline keyboard buttons and text commands. Built on a modular n8n sub-workflow architecture with 7 domain-specific sub-workflows. Control containers from your phone — check status, view logs, start/stop/restart/update containers, batch operations, and update all :latest containers at once.
## Core Value
@@ -30,16 +30,23 @@ When you get a container update notification or notice a service is down, you ca
- ✓ Confirmation dialogs for dangerous actions (stop, update) — v1.1
- ✓ Progress feedback during operations (message edits) — v1.1
**v1.2:**
- ✓ Workflow modularization into 7 domain sub-workflows — v1.2
- ✓ Sub-workflows callable from main without code duplication — v1.2
- ✓ Update all :latest containers via text command ("update all") — v1.2
- ✓ Update all :latest containers via inline keyboard button — v1.2
- ✓ Bitmap-encoded batch selection (supports 50+ containers, eliminates 64-byte limit) — v1.2
- ✓ Batch selection supports containers with long names — v1.2
- ✓ Unraid update badge documented as known limitation — v1.2
- ✓ Environment variable documentation (TELEGRAM_USERID, BOT_TOKEN) — v1.2
- ✓ README documents proxy architecture and all v1.2 features — v1.2
- ✓ Duplicate --max-time flags fixed — v1.2
- ✓ Update flow consolidated (no duplicate logic) — v1.2
- ✓ Correlation ID tracking across sub-workflow boundaries — v1.2
### Active
**Milestone v1.2: Modularization & Polish**
- [ ] Workflow modularization (break main workflow into sub-workflows)
- [ ] Update all containers via text command and inline keyboard
- [ ] Fix callback data limits (batch selection >2 containers, long names)
- [ ] Unraid update sync (clear "update available" when bot updates container)
- [ ] Environment variable audit (verify TELEGRAM_USERID/BOT_TOKEN necessity)
- [ ] Documentation update (proxy architecture, new features)
(No active requirements — define in next milestone)
### Out of Scope
@@ -47,14 +54,16 @@ When you get a container update notification or notice a service is down, you ca
- Deploying new containers — manage existing only, not create new ones
- Natural language understanding — simple keyword matching sufficient, Claude API adds complexity
- Proactive monitoring/notifications — bot is reactive (you ask, it answers)
- Resource queries — "what's using the most memory?" deferred to future version
- Offline mode — real-time Docker API access is core to functionality
- Ring buffer / persistent debug logging — n8n static data is execution-scoped, not workflow-scoped
## Current State
**Shipped:** v1.1 (2026-02-04)
**Shipped:** v1.2 (2026-02-08)
**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
**Architecture:** 1 main workflow (166 nodes) + 7 sub-workflows (121 nodes) = 287 total nodes
**Files:** 8 workflow JSON files (10,987 LOC), README.md (264 lines), DEPLOY-SUBWORKFLOWS.md (725 lines)
**Sub-workflows:** Update, Actions, Logs, Batch UI, Status, Confirmation, Matching
## Context
@@ -70,7 +79,13 @@ 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)
- Callback data: Bitmap encoding overcomes 64-byte Telegram limit
- n8n static data: Execution-scoped only (no persistent cross-execution state)
**Known tech debt:**
- 3 orphan nodes in main workflow (legacy dead code, unreachable)
- Legacy batch parsers retained alongside bitmap parsers (graceful migration)
- Phase 10.2 logging features descoped (n8n platform limitation)
## Key Decisions
@@ -92,18 +107,12 @@ When you get a container update notification or notice a service is down, you ca
| 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.2 Modularization & Polish
**Goal:** Modularize workflow for maintainability, add "update all" functionality, fix callback limits, and polish remaining issues.
**Target features:**
- Workflow modularization into sub-workflows
- "Update all" command (text and inline keyboard)
- Callback data limit fix (batch selection, long names)
- Unraid badge sync (UNR-01)
- Environment audit (ENV-01, ENV-02)
- Documentation overhaul (proxy architecture)
| 7 domain sub-workflows | Clean boundaries: Update, Actions, Logs, Batch UI, Status, Confirmation, Matching | ✓ Good |
| Bitmap-encoded batch callbacks | Base36 BigInt supports 50+ containers in 64-byte limit | ✓ Good |
| Action-based sub-workflow routing | Sub-workflow returns action field, main routes to Telegram handlers | ✓ Good |
| Correlation IDs without persistent logging | Timestamp+random string traces requests; ring buffer non-viable on n8n | ✓ Good |
| Infrastructure container exclusion | Exclude n8n and socket-proxy from "update all" to prevent self-destruction | ✓ Good |
| Document Unraid badge as limitation | Unraid API integration adds complexity for cosmetic issue | ✓ Good |
---
*Last updated: 2026-02-04 after v1.1 milestone*
*Last updated: 2026-02-08 after v1.2 milestone*