diff --git a/home/doris-kitchen/app/routes/api_dashboard.py b/home/doris-kitchen/app/routes/api_dashboard.py index 73ede2f..53c05a6 100644 --- a/home/doris-kitchen/app/routes/api_dashboard.py +++ b/home/doris-kitchen/app/routes/api_dashboard.py @@ -10,6 +10,10 @@ router = APIRouter(prefix="/api", tags=["dashboard"]) store = JsonStore() +def usable_results(items): + return [entry for entry in items if str(entry.get("status") or "suggested") != "rejected"] + + @router.get("/health") async def health(): return {"status": "ok", "backend": repo.backend} @@ -53,7 +57,7 @@ async def failed_search_results(failed_search_id: str): if not query: raise HTTPException(status_code=400, detail="Failed search query is empty.") all_results = recipe_search.search(query, limit=10) - results = [entry for entry in all_results if str(entry.get("status") or "suggested") == "suggested"] + results = usable_results(all_results) updates = { "last_checked_at": store.now(), "updated_at": store.now(), @@ -77,15 +81,10 @@ async def refresh_failed_searches(): if not query or status != "open": refreshed.append(item) continue - preview_titles: list[str] = [] - result_count = 0 - for candidate_query in recipe_search._candidate_queries(query): - hits = recipe_search._search_page(candidate_query) - if not hits: - continue - preview_titles = [str(hit.get("title") or "") for hit in hits[:4] if str(hit.get("title") or "").strip()] - result_count = len(hits) - break + all_results = recipe_search.search(query, limit=10) + results = usable_results(all_results) + preview_titles = [str(entry.get("title") or "") for entry in results[:4] if str(entry.get("title") or "").strip()] + result_count = len(results) updates = { "last_checked_at": store.now(), "result_count": result_count, diff --git a/n8n-workflows/README.md b/n8n-workflows/README.md index b1ee1be..1ad52f6 100644 --- a/n8n-workflows/README.md +++ b/n8n-workflows/README.md @@ -1,5 +1,27 @@ # n8n AI Workflows for Homelab +## Live Production Set + +Live n8n was pruned on 2026-05-18 to remove superseded inactive copies plus the one-shot setup leftovers `Temp Postgres Credential Probe` and `Temp School Intake Table Provision`. + +Active workflows after cleanup: +- Grafana Alert → AI → Gotify v1.4 +- RAG Pipeline v1.0 +- Paperless AI Processing v1.0 +- Whisper Audio Transcription +- Paperless → RAG v1.0 +- Git Commit → AI Summary → Gotify v1.0 +- Class Recording → Transcribe → RAG +- Class Transcript Ingest v1.1 +- Paperless Inbox Reminder +- n8n Self-Health Monitor +- NFS Mount Watchdog + Auto-Heal v1.2 +- Paperless Intake Triage → Doris Review Queue +- Telegram School Intake → Postgres → Paperless v1.2 +- Paperless School Intake Metadata Enrichment v1.1 + +Operational note: the live `Paperless Inbox Reminder` workflow needed its auth header corrected on 2026-05-18 so it uses `Token $env.PAPERLESS_API_TOKEN` instead of the broken bearer form that had drifted into the active copy. + ## Workflows Included | # | Workflow | Trigger | What It Does | diff --git a/n8n-workflows/TESTING-STATUS.md b/n8n-workflows/TESTING-STATUS.md index ab1e3ff..c2c7153 100644 --- a/n8n-workflows/TESTING-STATUS.md +++ b/n8n-workflows/TESTING-STATUS.md @@ -1,5 +1,5 @@ # n8n Workflow Testing Status -_Last updated: 2026-05-13_ +_Last updated: 2026-05-18_ --- @@ -10,7 +10,7 @@ _Last updated: 2026-05-13_ | 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 | +| 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 | @@ -20,6 +20,13 @@ _Last updated: 2026-05-13_ | # | 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`. --- @@ -80,7 +87,6 @@ _Last updated: 2026-05-13_ | 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 | ---