Files
Lucas Berger 9ae500cdf5 docs(05-01): complete NLU cleanup plan
Tasks completed: 2/2
- Task 1: Remove NLU/Claude nodes and add Keyword Router
- Task 2: Add persistent Telegram menu

SUMMARY: .planning/phases/05-polish-deploy/05-01-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:11:01 -05:00

103 lines
3.0 KiB
Markdown

# Phase 5 Plan 01: NLU Cleanup Summary
**Replaced Claude/NLU with keyword-based routing and persistent Telegram menu buttons**
## Frontmatter
```yaml
phase: 05-polish-deploy
plan: 01
subsystem: workflow-routing
tags: [n8n, telegram, keyword-routing, menu]
dependency-graph:
requires: [04-01]
provides: [keyword-router, persistent-menu, nlu-removal]
affects: []
tech-stack:
added: []
patterns: [keyword-switch-routing, telegram-reply-keyboard]
key-files:
created: []
modified: [n8n-workflow.json]
decisions:
- keyword-order-matters: "restart before start to avoid substring match issues"
- combined-tasks: "Task 1 and Task 2 merged for atomic workflow change"
- no-emojis-on-buttons: "Clean button text for reliable keyword matching"
metrics:
duration: 4m
completed: 2026-02-01
```
## What Changed
### Removed Nodes (NLU/Claude)
- Prepare Claude Request
- Claude Intent Parser (HTTP Request to api.anthropic.com)
- Parse Intent (Code node)
- Intent Router (Switch node)
- Send Unknown Intent
- Send Intent Error
- Send Stats Placeholder
- Format Echo / Send Echo
### Added/Modified Nodes
**Keyword Router** (renamed from Route Message)
- 7 keyword rules with case-insensitive matching
- Order: /start, status, restart, start, stop, update, logs
- Fallback output connects to Show Menu
**Show Menu** (new HTTP Request node)
- Sends persistent keyboard with 6 buttons
- Layout: Status solo, then paired (Start/Stop, Restart/Update, Logs)
- is_persistent: true, resize_keyboard: true
### Code Updates
- Parse and Match: Works with keyword routing, extracts container from message
- Parse Action Command: Parses action and container from message text
- Match Container: References Parse Action Command instead of Parse Intent
- Parse Logs Command: Parses container name and line count from message
## Commits
| Commit | Description |
|--------|-------------|
| a29f444 | feat(05-01): replace NLU/Claude with keyword routing |
## Verification Results
All checks passed:
- Zero Claude/NLU nodes remain
- Zero Anthropic API references in workflow
- Keyword Router handles: /start, status, restart, start, stop, update, logs
- Fallback routes to Show Menu
- Persistent menu has 6 buttons with is_persistent: true
- All keyword routes connect to correct handler nodes
## Deviations from Plan
### Combined Tasks
Tasks 1 and 2 were executed as a single atomic change because:
- Show Menu node required for Keyword Router fallback connection
- Keyword Router updates and Show Menu creation are interdependent
- Single commit ensures workflow remains valid at all times
### Rule Order Optimization
Added rule order optimization to handle substring conflicts:
- `/start` before `start` (command vs keyword)
- `restart` before `start` (restart contains "start")
## Next Steps
The workflow now operates without Claude API dependency:
- All commands work via typed keywords
- Button taps trigger same keyword routes
- Unknown input shows menu (not error)
Ready for Phase 5 Plan 02 (if any additional polish plans exist) or deployment.