8.1 KiB
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_basecollection exists in Qdrant (GET http://10.5.1.6:6333/collections)nomic-embed-textmodel pulled in Ollama (ollama liston PD)- Hardcoded LiteLLM key in
LiteLLM Answernode — 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-documenton document add - Hardcoded Paperless token in
Fetch Document,Add Note to Document, and inline inApply Suggested Tags to Paperlesscode — 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_basecollection 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_itemstable exists in Postgres- Hardcoded LiteLLM key in
AI Summarize Feednode — 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:
- Workflow JSON validates with
python3 -m json.tool - Fixture JSON files validate with
python3 -m json.tool - 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_TOKENandLITELLM_API_KEYexposed to n8n through env vars; no hardcoded secretsNODE_FUNCTION_ALLOW_BUILTIN=fs,pathset for queue file writer- n8n has a writeable mount to
doris-dashboard/data/paperless_review.json PAPERLESS_TRIAGE_APPLY_SAFE=falseduring 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:
- Workflow JSON validates with
python3 -m json.tool - Companion helper script validates with
node --check school/intake/submit_to_n8n.js - Class profile example JSON validates with
python3 -m json.tool
Pre-test checklist:
- Shared Postgres table
school_paperless_intakecreated fromdocs/reference/SCHOOL_INTAKE_POSTGRES_SCHEMA.sql PAPERLESS_API_TOKENexposed to n8n through env vars- Postgres credential
Shared Postgrescreated in n8n and wired into workflow 18 - Webhook path
https://n8n.paccoco.com/webhook/school/intake/uploadreachable 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:
- 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, andPAPERLESS_TAG_TELEGRAMexposed 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 Postgrescreated 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.