Files
truenas-stacks/n8n-workflows/TESTING-STATUS.md
2026-05-16 20:11:29 +00:00

138 lines
7.7 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)
- [x] LiteLLM auth now reads `$env.LITELLM_API_KEY`; hardcoded key removed from repo artifacts
**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
- [x] Paperless auth now reads `$env.PAPERLESS_API_TOKEN`; hardcoded token removed from repo artifacts
- [x] LiteLLM auth now reads `$env.LITELLM_API_KEY`; hardcoded key removed from repo artifacts
- [ ] 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)
- [x] Paperless auth now reads `$env.PAPERLESS_API_TOKEN`; hardcoded token removed from repo artifacts
- [ ] 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
- [x] LiteLLM auth now reads `$env.LITELLM_API_KEY`; hardcoded key removed from repo artifacts
- [ ] 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 |
|----------|-------|----------|
| 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.2
**What it does:** Accepts multipart school-work upload plus metadata (`class_name`, `assignment_name`, `submission_kind`, optional semester/course_code/paper_kind), uploads it into Paperless with a deterministic `intake_id`-based filename/title, and returns webhook success context.
**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`
- [x] v1.1 removes the `require('crypto')` dependency for easier live rollout
- [x] v1.2 fixes the Paperless multipart upload node to use `inputDataFieldName` for binary form upload
- [x] Live-tested 2026-05-14 with `Why am I here` DOCX; Paperless created document `49`
**Pre-test checklist:**
- [x] `PAPERLESS_API_TOKEN` exposed to n8n through env vars
- [x] 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 and verify the document lands in Paperless with filename prefix `school-...` and deterministic title.
---
### 19 — Paperless School Intake Metadata Enrichment v1.1
**What it does:** Receives Paperless post-consumption webhook for intake-managed documents, resolves the deterministic `intake_id` from the stored filename, derives metadata from deterministic filename/title, then reapplies deterministic title/tags and optional correspondent mapping.
**Local artifact checks completed:**
- [x] Workflow JSON validates with `python3 -m json.tool`
**Pre-test checklist:**
- [x] Paperless webhook target configured to POST `https://n8n.paccoco.com/webhook/school/intake/paperless-enrich`
- [x] Workflow 18 working so intake-managed filenames exist in Paperless
- [x] `PAPERLESS_API_TOKEN` exposed to n8n
- [ ] Optional mapping env vars supplied when ready: `PAPERLESS_TAG_SCHOOL`, `PAPERLESS_TAG_ASSIGNMENTS`, `PAPERLESS_TAG_TELEGRAM`, `PAPERLESS_TAG_CLASS_MAP_JSON`, `PAPERLESS_TAG_SUBMISSION_KIND_MAP_JSON`, `PAPERLESS_CORRESPONDENT_CLASS_MAP_JSON`
**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 enrichment succeeds. Live-tested on document `49`.