Files
MobilityOps/n8n/workflows/fleet-ops-ragcore-procedure-sync.json
NuklearRabbitandClaude Sonnet 5 34df66d28c M8: GUI polish, n8n workflow-3 fixes, RAGcore retrieval root-cause and fix
GUI: dashboard Attention Queue presents a curated severity mix instead of pure
severity-sort (grouped Now/Today/Later headers); Today's Movements seed data
curated so a fresh reset shows a credible day (2+ departures, 2+ returns), with
a new seed-integrity test; About Demo restructured into a compact grid with
progressive disclosure for technical sections; Duplicate Merge shows match/conflict
counts, hides matching fields by default, and previews the final merged record
before confirmation.

Repo hygiene: removed a stray empty `backend;C` directory and an untracked 31MB
zip export; `.gitignore` now excludes future archive exports.

n8n: fixed invalid JSON (a missing `},` between two node objects) in the committed
`fleet-ops-vehicle-return.json` -- the file could not be parsed. Live-validated
workflow 3 (RAGcore Procedure Sync): found and fixed a real defect (three body
parameters had a stray trailing `}}`) and a missing Error Workflow wiring, both
via the safe `n8n import:workflow` CLI path; exported the corrected, still-
inactive workflow as the new source of truth and updated MANIFEST.md/check_drift.py.
Publishing it (starts real daily unattended runs) remains a separate decision.

RAGcore: root-caused and fixed (live, approved) the "zero retrieval candidates"
bug -- a filesystem permission bug (`embedding_profiles.json` unreadable by the
app's own runtime user) that broke every retrieval call before it reached Qdrant.
Every other suspect (grants, scope resolution, Qdrant filters, embeddings) was
verified healthy first. Found a second, deeper gap: the reranker adapter calls
an Ollama HTTP route that does not exist on the deployed Ollama version, so
`/v1/answers` still returns `not_answerable`. `KNOWLEDGE_PROVIDER` stays `demo`
until that is resolved on the RAGcore side. Evidence-based MCP Hub integration
status (real tool-call audit history, not just a boolean flag) replaces the old
`configured`/`not_configured` guess. Full findings in
`docs/final-integrations/current-state-audit.md`.

Backend: 172 tests passing, ruff clean, mypy clean (50 files). Frontend: tsc
clean, production build clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-05 13:05:02 +02:00

247 lines
6.2 KiB
JSON

{
"id": "6wbkc4d1AouGpmWT",
"name": "Fleet Ops — RAGcore Procedure Sync",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
128,
-144
],
"id": "08f41c46-d5a9-4cb9-beec-0f074a9eb7bc",
"name": "Sticky Note"
},
{
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-144,
-144
],
"id": "6edcd359-08eb-4d88-98e9-5ca0625047cc",
"name": "Schedule Trigger"
},
{
"parameters": {
"url": "http://192.168.10.150:1236/api/v1/integrations/n8n/procedures",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"timeout": 15000
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
80,
-144
],
"id": "b66d3ee4-6264-48ab-89fc-aeb4d1597435",
"name": "List procedures",
"retryOnFail": true,
"credentials": {
"httpHeaderAuth": {
"name": "Fleet Ops Service Token"
}
}
},
{
"parameters": {
"jsCode": "const documents = $input.first().json.documents;\nconst results = [];\nfor (const doc of documents) {\n const binary = await this.helpers.prepareBinaryData(Buffer.from(doc.content, 'utf-8'), doc.document_id + '.md', 'text/markdown');\n results.push({json: {id: doc.id, language: doc.language, document_id: doc.document_id, title: doc.title, version: doc.version, content_hash: doc.content_hash}, binary: {file: binary}});\n}\nreturn results;"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
304,
-144
],
"id": "e9699a7a-87ff-4603-b89b-553dc7f2f29d",
"name": "Prepare uploads"
},
{
"parameters": {
"method": "POST",
"url": "https://rag.itworx.tech/v1/uploads",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Idempotency-Key",
"value": "={{ $json.id + '-' + $json.content_hash }}"
}
]
},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "space_id",
"value": "f4c91e49-5cf9-48ba-b3d6-e0e9854ebccc"
},
{
"name": "source_id",
"value": "={{ $json.id }}"
},
{
"parameterType": "formBinaryData",
"name": "file",
"inputDataFieldName": "file"
}
]
},
"options": {
"timeout": 20000
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
528,
-144
],
"id": "6d38f228-ed82-44a7-bc59-c785767d4f35",
"name": "Upload to RAGcore",
"retryOnFail": true,
"credentials": {
"httpHeaderAuth": {
"name": "RAGcore Sync Token"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "const items = $input.all();\nlet synced = 0;\nlet failed = 0;\nfor (const item of items) {\n if (item.json && item.json.error) {\n failed += 1;\n } else {\n synced += 1;\n }\n}\nreturn [{ json: { execution_id: String($execution.id), synced, failed } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
640,
-144
],
"id": "4b90056e-29f8-4df0-b7b4-695f4b9e0004",
"name": "Summarize sync result"
},
{
"parameters": {
"method": "POST",
"url": "http://192.168.10.150:1236/api/v1/integrations/n8n/procedures-sync-result",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "execution_id",
"value": "={{ $json.execution_id }}"
},
{
"name": "synced",
"value": "={{ $json.synced }}"
},
{
"name": "failed",
"value": "={{ $json.failed }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
848,
-144
],
"id": "953cd587-3d3e-44b5-907c-92b8355b00e3",
"name": "Report sync result to Fleet Ops",
"credentials": {
"httpHeaderAuth": {
"name": "Fleet Ops Service Token"
}
}
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "List procedures",
"type": "main",
"index": 0
}
]
]
},
"List procedures": {
"main": [
[
{
"node": "Prepare uploads",
"type": "main",
"index": 0
}
]
]
},
"Prepare uploads": {
"main": [
[
{
"node": "Upload to RAGcore",
"type": "main",
"index": 0
}
]
]
},
"Upload to RAGcore": {
"main": [
[
{
"node": "Summarize sync result",
"type": "main",
"index": 0
}
]
]
},
"Summarize sync result": {
"main": [
[
{
"node": "Report sync result to Fleet Ops",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false,
"errorWorkflow": "Xppn2rAEqUuyiCJF",
"callerPolicy": "workflowsFromSameOwner"
},
"active": false,
"meta": {
"templateCredsSetupCompleted": false
},
"tags": []
}