143 lines
8.1 KiB
Markdown
143 lines
8.1 KiB
Markdown
# n8n Workflow Testing Status
|
|
_Last updated: 2026-05-13_
|
|
|
|
---
|
|
|
|
## ✅ Confirmed Working
|
|
|
|
| # | Workflow | Version | Notes |
|
|
|---|----------|---------|-------|
|
|
| 01 | Grafana Alert → AI + Gotify | v1.4 | Dedup + recovery branch confirmed |
|
|
| 08 | Class Recording RAG | v1.2 | Paperless + Gotify end-to-end confirmed |
|
|
| 09 | Class Transcript Ingest | v1.1 | Gotify confirmed |
|
|
| 14 | Paperless Inbox Reminder | v1.2 | Fixed: `Bearer` → `Token` auth; fixed: `hasItemsStr` bug |
|
|
| 15 | n8n Health Monitor | v1.2 | Fixed: workflow names (was showing IDs); Postgres dedup working |
|
|
| 16 | NFS Watchdog + Auto-Heal | v1.2 | Confirmed working |
|
|
| 07 | Git Commit → AI Summary → Gotify | v1.0 | Confirmed working |
|
|
|
|
## ⏸ Retired
|
|
|
|
| # | Workflow | Reason |
|
|
|---|----------|--------|
|
|
| 04 | Whisper Transcription | Replaced — transcription now runs via Docker on Rocinante (RTX 4090) and sends directly to n8n |
|
|
|
|
---
|
|
|
|
## 🔲 Not Yet Tested
|
|
|
|
### 02 — RAG Pipeline v1.0
|
|
**What it does:** Two webhooks — `POST /rag/ingest` chunks + embeds text into Qdrant; `POST /rag/query` embeds query, searches Qdrant, asks LiteLLM, returns answer.
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] `knowledge_base` collection exists in Qdrant (`GET http://10.5.1.6:6333/collections`)
|
|
- [ ] `nomic-embed-text` model pulled in Ollama (`ollama list` on PD)
|
|
- [ ] **Hardcoded LiteLLM key** in `LiteLLM Answer` node — should use `$env.LITELLM_API_KEY`
|
|
|
|
**Test approach:** POST `{"text": "some test content", "source": "test"}` to `/rag/ingest`, then POST `{"query": "test content question"}` to `/rag/query` and verify an answer comes back.
|
|
|
|
---
|
|
|
|
### 03 — Paperless AI Processing v1.0
|
|
**What it does:** Paperless webhook on new document → AI classifies (type/summary/tags) → adds note to doc + sends Gotify + applies tags (parallel branches after `Parse Analysis`).
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] Paperless webhook configured to POST to `https://n8n.paccoco.com/webhook/paperless/new-document` on document add
|
|
- [ ] **Hardcoded Paperless token** in `Fetch Document`, `Add Note to Document`, and inline in `Apply Suggested Tags to Paperless` code — should use `$env.PAPERLESS_API_TOKEN`
|
|
- [ ] **Hardcoded LiteLLM key** in `AI Classify & Extract` — should use `$env.LITELLM_API_KEY`
|
|
- [ ] Gotify credential `ajvRjvj0QldLQYmo` ("Paperless") — already wired ✓
|
|
|
|
**Test approach:** Upload a test document to Paperless, then manually POST `{"document_id": <id>}` to the webhook to trigger processing. Check Paperless for note + tags, check Gotify for notification.
|
|
|
|
---
|
|
|
|
### 05 — Paperless → RAG v1.0
|
|
**What it does:** Webhook on `POST /paperless/rag-ingest` → fetches Paperless doc → chunks + embeds content → upserts to Qdrant `knowledge_base` → Gotify notification.
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] `knowledge_base` collection exists in Qdrant (same as 02)
|
|
- [ ] **Hardcoded Paperless token** in `Fetch Document` — should use `$env.PAPERLESS_API_TOKEN`
|
|
- [ ] Gotify credential `SETUP_REQUIRED` ("Paperless RAG") — needs wiring
|
|
|
|
**Test approach:** POST `{"document_id": <id>}` to the webhook. Verify chunks appear in Qdrant and Gotify notification fires.
|
|
|
|
---
|
|
|
|
### 06 — RSS Digest v1.0
|
|
**What it does:** Every 6 hours (+ manual webhook + manual trigger), fetches 33 RSS feeds, parses items, deduplicates via Postgres (`rss_seen_items` table), scores by keyword relevance/urgency, AI-summarizes new items per feed, pushes per-feed digests to Gotify.
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] `rss_seen_items` table exists in Postgres
|
|
- [ ] **Hardcoded LiteLLM key** in `AI Summarize Feed` node — should use `$env.LITELLM_API_KEY`
|
|
- [ ] Postgres credential `n9svoXemqSZoNNUB` — already wired ✓
|
|
- [ ] Gotify credential `ExUx3oqYQyhkqZcp` ("Rss Feed") — already wired ✓
|
|
|
|
**Test approach:** Use the "When clicking Execute workflow" manual trigger. First run will insert all items as new (expect lots of Gotify notifications). Second run should be silent (all deduped).
|
|
|
|
---
|
|
|
|
## 🐛 Known Issues / Tech Debt
|
|
|
|
| Workflow | Issue | Priority |
|
|
|----------|-------|----------|
|
|
| 02 | Hardcoded LiteLLM API key | Medium |
|
|
| 03 | Hardcoded LiteLLM API key + Paperless token | Medium |
|
|
| 05 | Hardcoded Paperless token | Medium |
|
|
| 06 | Hardcoded LiteLLM API key | Medium |
|
|
| 07 | Hardcoded LiteLLM API key (working but tech debt) | Low |
|
|
| 15 | `includeData: false` means error messages show as "Unknown error" | Low |
|
|
| 09 v1.0 | Still active in n8n alongside v1.1 — should be deactivated | Low |
|
|
|
|
---
|
|
|
|
### 17 — Paperless Intake Triage → Doris Review Queue v1.0
|
|
**What it does:** Paperless post-consumption webhook → fetch document → LiteLLM strict JSON triage → enforce review-first safety gate → write sanitized Doris Dashboard queue JSON → optional urgent Gotify notification. Safe title-only Paperless update branch exists but is disabled unless `PAPERLESS_TRIAGE_APPLY_SAFE=true`.
|
|
|
|
**Local artifact checks completed:**
|
|
- [x] Workflow JSON validates with `python3 -m json.tool`
|
|
- [x] Fixture JSON files validate with `python3 -m json.tool`
|
|
- [x] Dashboard example queue JSON validates with `python3 -m json.tool`
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] Paperless webhook configured to POST `https://n8n.paccoco.com/webhook/paperless/intake-triage`
|
|
- [ ] `PAPERLESS_API_TOKEN` and `LITELLM_API_KEY` exposed to n8n through env vars; no hardcoded secrets
|
|
- [ ] `NODE_FUNCTION_ALLOW_BUILTIN=fs,path` set for queue file writer
|
|
- [ ] n8n has a writeable mount to `doris-dashboard/data/paperless_review.json`
|
|
- [ ] `PAPERLESS_TRIAGE_APPLY_SAFE=false` during initial validation
|
|
|
|
**Test approach:** Upload a harmless test document to Paperless, POST `{"document_id": <id>}` to the webhook, and confirm `doris-dashboard/data/paperless_review.json` contains a sanitized review item. Use a bill/due-date fixture to verify forced human review.
|
|
|
|
---
|
|
|
|
### 18 — Telegram School Intake → Postgres → Paperless v1.0
|
|
**What it does:** Accepts multipart school-work upload plus metadata (`class_name`, `assignment_name`, `submission_kind`, optional semester/course_code/paper_kind), records it in shared Postgres, and uploads it into Paperless with a deterministic `intake_id`-based filename.
|
|
|
|
**Local artifact checks completed:**
|
|
- [x] Workflow JSON validates with `python3 -m json.tool`
|
|
- [x] Companion helper script validates with `node --check school/intake/submit_to_n8n.js`
|
|
- [x] Class profile example JSON validates with `python3 -m json.tool`
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] Shared Postgres table `school_paperless_intake` created from `docs/reference/SCHOOL_INTAKE_POSTGRES_SCHEMA.sql`
|
|
- [ ] `PAPERLESS_API_TOKEN` exposed to n8n through env vars
|
|
- [ ] Postgres credential `Shared Postgres` created in n8n and wired into workflow 18
|
|
- [ ] Webhook path `https://n8n.paccoco.com/webhook/school/intake/upload` reachable from Doris/OpenClaw helper
|
|
|
|
**Test approach:** POST a small DOCX/PDF through the intake webhook, confirm a row appears in `school_paperless_intake`, and verify the document lands in Paperless with filename prefix `school-...`.
|
|
|
|
---
|
|
|
|
### 19 — Paperless School Intake Metadata Enrichment v1.0
|
|
**What it does:** Receives Paperless post-consumption webhook for intake-managed documents, resolves the deterministic `intake_id` from the stored filename, loads the intake record from Postgres, then reapplies deterministic title/tags and optional document type/correspondent mapping.
|
|
|
|
**Local artifact checks completed:**
|
|
- [x] Workflow JSON validates with `python3 -m json.tool`
|
|
|
|
**Pre-test checklist:**
|
|
- [ ] Paperless webhook configured to POST `https://n8n.paccoco.com/webhook/school/intake/paperless-enrich`
|
|
- [ ] Workflow 18 already working so intake-managed filenames exist in Paperless
|
|
- [ ] `PAPERLESS_API_TOKEN`, `PAPERLESS_TAG_SCHOOL`, `PAPERLESS_TAG_ASSIGNMENTS`, and `PAPERLESS_TAG_TELEGRAM` exposed to n8n
|
|
- [ ] Optional mapping env vars supplied when ready: `PAPERLESS_TAG_CLASS_MAP_JSON`, `PAPERLESS_TAG_SUBMISSION_KIND_MAP_JSON`, `PAPERLESS_DOCUMENT_TYPE_PAPER_KIND_MAP_JSON`, `PAPERLESS_CORRESPONDENT_CLASS_MAP_JSON`
|
|
- [ ] Postgres credential `Shared Postgres` created in n8n and wired into workflow 19
|
|
|
|
**Test approach:** After a workflow-18 upload is consumed by Paperless, POST `{"document_id": <id>}` to `/webhook/school/intake/paperless-enrich` and verify title/tags are updated and the DB row status becomes `enriched`.
|