# n8n Workflow Testing Status _Last updated: 2026-05-25_ --- ## ✅ 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 | current live alias + v1.2 artifact | Live auth header corrected again on 2026-05-18; repo artifact already matched `Token` auth | | 15 | n8n Health Monitor | v1.2 | Fixed: workflow names (was showing IDs); Postgres dedup working | | 16 | NFS Watchdog + Auto-Heal | v1.3 | Confirmed working; added calibre-web-automated to the /mnt/unraid/data recovery restart set | | 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 | | temp | Temp Postgres Credential Probe | One-shot setup helper removed from live n8n during 2026-05-18 cleanup | | temp | Temp School Intake Table Provision | One-shot provisioning helper removed from live n8n during 2026-05-18 cleanup | ## 🧹 Live Cleanup - 2026-05-18: removed 22 no-longer-needed workflows from live n8n, including inactive superseded copies of Class Recording → RAG, Class Transcript Ingest v1.0, Grafana Alert → AI → Gotify v1.0/v1.1/v1.2, n8n Self-Health Monitor v1.0/v1.1, NFS Mount Watchdog + Auto-Heal v1.0, Paperless Inbox Reminder v1.0/v1.2, duplicate inactive Paperless Intake Triage flows, Whisper Transcription v1.0, RSS Digest v1.0, and the two active temp/setup leftovers. - 2026-05-18: cleared 438 stale errored execution rows that still had `finished=false` despite already having `stoppedAt` set. Open execution count returned to `0`. --- ## 🔲 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.30.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": }` 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": }` 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 | --- ### 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": }` 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": }` to `/webhook/school/intake/paperless-enrich` and verify title/tags enrichment succeeds. Live-tested on document `49`.