Files
truenas-stacks/n8n-workflows/TESTING-STATUS.md

8.6 KiB

n8n Workflow Testing Status

Last updated: 2026-05-18


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.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
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)
  • 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
  • Paperless auth now reads $env.PAPERLESS_API_TOKEN; hardcoded token removed from repo artifacts
  • 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)
  • 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
  • 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:

  • 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_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:

  • 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
  • v1.1 removes the require('crypto') dependency for easier live rollout
  • v1.2 fixes the Paperless multipart upload node to use inputDataFieldName for binary form upload
  • Live-tested 2026-05-14 with Why am I here DOCX; Paperless created document 49

Pre-test checklist:

  • PAPERLESS_API_TOKEN exposed to n8n through env vars
  • 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:

  • Workflow JSON validates with python3 -m json.tool

Pre-test checklist:

  • Paperless webhook target configured to POST https://n8n.paccoco.com/webhook/school/intake/paperless-enrich
  • Workflow 18 working so intake-managed filenames exist in Paperless
  • 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.