echo6-docs/vault/runbooks/recon-operations.md
echo6-autocommit cce29c595d auto: docs sync 2026-07-12T00:00:23+00:00
Files changed: ", c.get(k))\nPY\n\\\"\n\"" engine/config.yaml engine/lib/lint.py engine/lib/vocab_gen.py engine/lint-report.md engine/sweep.sh vault/.obsidian/workspace.json vault/archive/projects/meshai-native-fire-severity-audit-cc-handoff.md vault/archive/projects/vaultwarden-plan.md vault/docs/matrix/matrix_host.md vault/docs/matrix/synapse.md vault/docs/services/services.md vault/docs/software/authentik.md vault/docs/software/caddy.md vault/docs/software/dns.md vault/docs/software/recon.md vault/docs/software/searxng.md vault/glossary.md vault/notes/echo6-landing-page-data-export.md vault/projects/matrix-synapse-deployment.md vault/projects/meshai.md vault/projects/meshtastic-headscale-runbook.md vault/projects/mmud-project.md vault/runbooks/add-peertube-channel.md vault/runbooks/authentik-access-groups.md vault/runbooks/authentik-create-invitation.md vault/runbooks/authentik-oidc-application.md vault/runbooks/authentik-upgrade.md vault/runbooks/expose-service-contabo.md vault/runbooks/lxc-service-migration.md vault/runbooks/mailcow-create-mailbox.md vault/runbooks/meshtastic-sidecar-node.md vault/runbooks/meshtasticd-sim-nodes-runbook.md vault/runbooks/proxmox-create-ubuntu-vm.md vault/runbooks/recon-operations.md vault/runbooks/recon-service-integration.md vault/runbooks/syncthing-add-node.md
2026-07-12 00:00:23 +00:00

5.7 KiB

title type tags aliases related updated
RECON Operations Runbook runbook
recon
recon
deployment
caddy
recon-service-integration
services
2026-07-11

RECON Operations Runbook

Service Info

  • Host: recon-vm (VM 1130 on data node) — migrated from CT 130 on 2026-04-19
  • IP: 192.168.1.130 / 100.64.0.24
  • Install: /opt/recon/
  • User: zvx
  • services: recon.service, recon-watchdog.service, kiwix.service (systemd)

Service Management

ssh zvx@100.64.0.24
sudo systemctl start|stop|restart|status recon
journalctl -u recon -f

Health Check

curl -s http://100.64.0.24:8420/api/health | python3 -m json.tool
# Returns: healthy (200), degraded/unhealthy (503)
# Checks: Qdrant, TEI, NFS, Gemini keys, pipeline counts

Pipeline Status

ssh zvx@100.64.0.24
cd /opt/recon && source venv/bin/activate
python3 recon.py status            # Summary counts
python3 recon.py failures          # Failed documents
python3 recon.py search "query"    # Test search

Dashboard

  • URL: http://100.64.0.24:8420
  • Shows: pipeline progress, per-source breakdown, Qdrant stats
  • Auto-refreshes every 30s

Common Operations

cd /opt/recon && source venv/bin/activate

# Add a PDF
python3 recon.py upload --file /path/to.pdf --category "Reference"

# Add web content
python3 recon.py ingest-url "https://example.com/article" --process

# Crawl a website
python3 recon.py crawl "https://docs.example.com" --process

# Manual pipeline run (normally automatic via service)
python3 recon.py extract
python3 recon.py enrich
python3 recon.py embed

# Scan library for new PDFs (normally hourly via service)
python3 recon.py scan
python3 recon.py queue

Dependencies

Service Host Port Purpose
Qdrant cortex 6333 Vector DB (recon_knowledge collection)
TEI cortex 8090 Text embeddings (bge-m3, 1024-dim)
Ollama cortex 11434 Chat model for Aurora RAG
NFS pi-nas /mnt/library (PDF source)
Gemini API Google Enrichment + vision OCR (4 keys in .env)
edge1 100.64.0.40 Backup destination (was Contabo 100.64.0.1 pre-2026-06-19 rebuild)

Backups

  • Destination: root@100.64.0.40:/opt/backups/recon/ (edge1; was root@100.64.0.1 on Contabo pre-2026-06-19 rebuild)
  • Full sync (concepts, text, DB, config): every 6 hours via cron
  • DB snapshot only: every 2 hours via cron
  • Script: /opt/recon/scripts/backup.sh

Verify backups

ssh root@100.64.0.40 'ls -lh /opt/backups/recon/recon_*.db && du -sh /opt/backups/recon/'

Troubleshooting

Pipeline stalled (no progress)

journalctl -u recon -n 50                      # Check errors
curl -s http://100.64.0.24:8420/api/health      # Check dependencies
sudo systemctl restart recon                    # Restart

Gemini rate limits (429 errors)

Built-in: exponential backoff 5s→10s→20s→40s→80s with jitter. Window failures skip that window and continue — partial enrichment beats zero.

If sustained: reduce enrich_workers in config.yaml, restart.

Qdrant down

ssh zvx@cortex
docker ps | grep qdrant
docker restart qdrant
# If data lost: ssh zvx@100.64.0.24 'cd /opt/recon && source venv/bin/activate && python3 recon.py rebuild'

TEI down

ssh zvx@cortex
docker ps | grep tei
docker restart tei

NFS mount lost

ssh zvx@100.64.0.24
mount | grep library
sudo mount -a
sudo systemctl restart recon

Reset stuck documents

cd /opt/recon && source venv/bin/activate
# Find stuck transitional states
sqlite3 data/recon.db "SELECT status, COUNT(*) FROM documents WHERE status IN ('extracting','enriching','embedding') GROUP BY status;"
# Reset them
sqlite3 data/recon.db "UPDATE documents SET status='queued' WHERE status='extracting';"
sqlite3 data/recon.db "UPDATE documents SET status='extracted' WHERE status='enriching';"
sqlite3 data/recon.db "UPDATE documents SET status='enriched' WHERE status='embedding';"

Full recovery from edge1 backup

ssh zvx@100.64.0.24
sudo systemctl stop recon
rsync -av root@100.64.0.40:/opt/backups/recon/concepts/ /opt/recon/data/concepts/
rsync -av root@100.64.0.40:/opt/backups/recon/text/ /opt/recon/data/text/
# Pick the latest DB backup
rsync -av root@100.64.0.40:/opt/backups/recon/recon_latest.db /opt/recon/data/recon.db
cd /opt/recon && source venv/bin/activate
python3 recon.py rebuild       # Rebuilds Qdrant from concept JSONs
sudo systemctl start recon

Key Files

Path Purpose
/opt/recon/config.yaml All configuration
/opt/recon/.env Gemini API keys (GEMINI_KEY_1 through GEMINI_KEY_4)
/opt/recon/data/recon.db SQLite status DB
/opt/recon/data/concepts/ Gemini extraction results (CRITICAL — costs $ to regenerate)
/opt/recon/data/text/ Extracted page text (regenerable from PDFs)
/opt/recon/PROJECT-BIBLE.md Full system documentation
/opt/recon/scripts/backup.sh Backup script
/opt/recon/scripts/validate.py Pipeline consistency checker
/opt/recon/scripts/rebuild_qdrant.py Nuclear Qdrant rebuild

Pipeline Architecture

/mnt/library/ (NFS)
    │
    ▼ hourly scan
[Catalogue] → [Queue] → [Extract] → [Enrich] → [Embed] → [Complete]
                          4 workers    16 workers  4 workers
                          PyPDF2       Gemini      TEI+Qdrant
                          pdftotext    2.0 Flash   bge-m3
                          Tesseract                1024-dim
                          Gemini Vision

Last updated: 2026-04-19 — Updated for CT 130 → VM 1130 migration