Files
nexa/docs/11-open-questions.md
T
Claude e1c2ba96e2 Resolve Q4/Q5/Q13/Q14/Q18: Obsidian via Nextcloud WebDAV, Karakeep, Octoprint suppress
- Q4 → Obsidian vault is the Notizen/ folder in Nextcloud (multi-device sync).
  Nexa reads via WebDAV using the existing NC_APP_PASSWORD — no filesystem
  mount. Ignore list pinned: .copilot/, .copilot-index/, .smart-env/,
  .caldav-sync/, assets/ (routed to Phase-3.2 visual queue), Templates/,
  BMO/, Excalidraw/. Index target: Notizen/**/*.md.
- Q5 → canonical name is Karakeep; legacy Zoraxy alias hoarder.nuclide.systems
  kept for compatibility.
- Q13 → Octoprint container is intentionally powered down most of the time.
  Phase-5 monitoring must skip names matching octoprint*. Reflected in
  docs/10 monitoring table and CLAUDE.md.
- Q14 → Homepage Zoraxy widget config error; cosmetic, dropped from open
  questions and from docs/12 optimization list.
- Q18 → SAIA does proxy embeddings but rate limit is 10 msg/min, unusable
  for ingest. TEI stays in Phase 3.1.
- docs/12: stale items removed (Octoprint, Zoraxy widget, generic Immich
  vector idea); added new ones derived from the Obsidian discovery (plugin
  embedding collision, notify_push upgrade path, assets/ size note).
- docs/04 integration matrix updated to describe Obsidian-via-Nextcloud
  read path explicitly.
- docs/09 step-4 credentials list collapses NC Tasks / Calendar / WebDAV
  onto a single app password.
2026-05-04 21:55:47 +00:00

5.9 KiB
Raw Blame History

11 — Open Questions (user-info-required)

Items that block progress and need a human decision before a workflow can be implemented or a service deployed. Tick them off as you decide.

Resolved

  • Q1 — Graph DB choice → Ontotext GraphDB (SPARQL). Rationale: explore Nexa's memory through SPARQL is a stated goal. 08-graphrag-architecture is rewritten accordingly.
  • Q2 — Vector store → reuse qdrant_scientific with a nexa_* collection prefix. No dedicated container.
  • Q3 — Embeddings model → not OpenAI. Self-host on the docker host via TEI (HF text-embeddings-inference) — Rust single-binary, OpenAI-compatible, ~500 MB image, no LLM runtime overhead. Speed analysis in §"Speed budget" below.
  • Q5 — Display name → Karakeep. The Zoraxy host alias hoarder.nuclide.systems is legacy — keep it for compatibility, but all docs, prompts and new workflow nodes use "Karakeep".
  • Q13 — Octoprint container is intentionally temporary. Suppress from Phase-5 monitoring: container-up/down alerts must skip names matching octoprint* (or any container tagged proxmox-he 3d-printing).
  • Q14 — Homepage Zoraxy widget → no such widget. Config error in homepage/services.yaml; cosmetic, not Nexa-related.
  • Q15 — Embeddings staging plan → A now, C prepared.
    • Phase 3.1 (now): TEI + BAAI/bge-m3, single collection nexa_knowledge_text (1024-dim). DE/EN multilingual, fits the corpus.
    • Phase 3.2 (later): swap TEI → infinity, add jinaai/jina-clip-v2 (768-dim), second collection nexa_knowledge_visual. Backfill from the queue (see Q16).
    • All schema fields needed for 3.2 (modality, media_uri, graph_iri, nexa:pendingVisualIndex) are introduced now so 3.2 is purely additive — no rename, no migration. See qdrant_schema.json and qdrant_schema_visual.json.
  • Q16 — Image-attachment queue ergonomics → leave bytes at source, reference by media_uri. Zero copy. Memos attachments stay in Memos's data dir, Nextcloud images stay in Nextcloud, Obsidian images stay in the Notizen folder; the Phase-3.2 backfill workflow fetches them on demand via the URI scheme.
  • Q17 — Immich out-of-band. Nexa does not call the Immich smart-search API. Photo-library queries stay inside Immich.
  • Q18 — SAIA proxies an embedding model, but 10 msg/min rate limit makes it unusable for ingest. A 2 k-note Obsidian backfill would take ~3.3 h; real-time #nexa:ask would queue for tens of seconds during a writing burst. Decision: deploy TEI as planned. SAIA embeddings remain available as a manual fallback (e.g. for one-off #nexa:learn calls where rate is irrelevant).
  • Q4 — Obsidian sync via Nextcloud WebDAV. Confirmed the vault is nc.nuclide.systems/Notizen/ (multi-device sync via Nextcloud client). Nexa accesses it through WebDAV (/remote.php/dav/files/<user>/Notizen/) reusing the existing NC_APP_PASSWORD — no filesystem mount, no LXC-to-LXC privilege escalation. Phase 3.1 polls every 15 min; an upgrade to Nextcloud's notify_push for sub-second updates is captured as optimization #15. Ignore list (don't index):
    • .copilot/, .copilot-index/ — Obsidian Copilot's own embeddings cache.
    • .smart-env/ — Smart Connections / Smart Composer plugin data (~13 MB).
    • .caldav-sync/ — calendar sync, not notes.
    • assets/ — 186 MB of binaries; routed through the Phase-3.2 visual queue (nexa:pendingVisualIndex), not the text path.
    • Templates/ — empty templates, low semantic value.
    • BMO/, Excalidraw/ — plugin folders. Anything else under Notizen/**/*.md is fair game.

Identifiers needed (auto-discoverable, but list now if known)

  • Q6 — Nextcloud Tasks list IDs for: Work_Tasks, Personal_Tasks, Shopping, Wishes. Discovery via #nexa:config will fill these — confirm names match.
  • Q7 — Nextcloud Calendar IDs for: Work_Calendar, primary personal calendar.
  • Q8 — IMAP credentials for the personal mail account. Can n8n reuse a Nextcloud Mail account (preferred — no extra password) or must we add a dedicated IMAP entry?
  • Q9 — ntfy topic name for nexa.system. Is the topic public on ntfy.nuclide.systems or should it be authenticated?
  • Q10 — Pocket-ID role. id.nuclide.systems is running. Do we want SSO in front of the n8n / Memos UIs, or skip for now?

Hardware / capacity

  • Q11 — RAM headroom on docker host. Sized against 31 GiB allocated to the LXC; the NUC 14 Pro itself has 64 GB so the LXC's memory cap can be lifted if needed. Phase-3 stack (Qdrant + TEI/bge-m3 ~1.1 GB + Ontotext GraphDB ~4 GB heap, later +infinity/jina-clip-v2 ~1 GB) tops out around ~14 GB. Comfortable. Confirm acceptable.
  • Q12 — S3 archive bucket. s3.nuclide.systems is up. Bucket name + access key for Qdrant snapshots and GraphDB exports?

Speed budget (Q3 follow-up)

Workload on the docker host (16 CPU, ~30 GB free RAM):

Task Volume Latency target Achievable on CPU with bge-m3 Achievable with nomic-embed-text
Real-time memo embed 1 doc <500 ms incl. n8n round-trip ~50100 ms ~20 ms
Daily ingest ~70 docs <60 s ~510 s ~2 s
Obsidian backfill (one-shot) ~2 000 docs <15 min ~24 min <1 min
RAG query embed (#nexa:ask) 1 doc <300 ms ~50 ms ~20 ms

Conclusion: CPU-only TEI is sufficient — no GPU needed for current scope. Bottleneck is SAIA chat (already remote), not embeddings. SAIA's own embedding endpoint is rate-limited to 10 req/min which would block real-time embed; self-hosted TEI side-steps that completely.