Wiping .index/lancedb leaves an empty index that every health surface reports as healthy
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- python, sqlite
- Ambito
- databases, observability
Direzione di ricerca
Start with reconcile_index_once() and the .index_reconcile_version marker, which the issue says sits in .index/ rather than .index/lancedb/, then trace how cascade status and the GET /health probe read the sqlite ledger. Done means that after rm -rf .index/lancedb, the system reports the mismatch (a per-table row count beside the done count) instead of healthy, and a test covers that case. The issue leaves open whether to refuse startup, enqueue a rebuild, or move the marker, so settle that choice with the maintainers before writing code.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Deleting ~/.everos/.index/lancedb leaves a store that contains nothing and reports perfect health: cascade status shows every file done with lag: 0, GET /health reports cascade.healthy: true with zero failures, and search returns 0 hits against an empty table. Markdown is untouched, so nothing is lost — but nothing says anything is wrong either.
This is a detectability gap, not an undocumented trap. The hazard itself is documented, clearly and in more than one place (see Already documented below). What is missing is that the running system can tell this state apart from a healthy one with a two-number comparison, and doesn't.
Found while reproducing #334 on current main; the rm -rf came from that report's steps.
Reproduce
EverOS 1.4.1 at a345d08, isolated memory root, real everos server start, DeepInfra Qwen3-Embedding-4B. Corpus built with EverOS's own EpisodeWriter: 106 daily-log files, 1060 entries.
- Start the server, let the cascade index everything (
cascade status→done: 106,lag: 0). - Stop the server.
rm -rf <root>/.index/lancedb— onlylancedb, leaving.index/sqliteand the rest of.index/in place.- Start the server again.
Observed
| surface | reports |
|---|---|
everos cascade status |
pending 0 · done 106 · last_processed 106 · lag 0 |
GET /health |
status: ok · cascade.healthy: true · failed_permanent 0 · failed_retryable 0 |
| LanceDB rows | episode 0 · atomic_fact 0 · user_profile 0 |
POST /api/v2/memory/search |
0 hits (HTTP 200) |
| Markdown source of truth | 106 files, intact |
Mechanism
- The cascade ledger survives the wipe. It lives in
.index/sqlite/system.db, so every md row is stillstatus='done'and the scanner enqueues nothing. - The self-heal marker survives too.
reconcile_index_once()force-enqueues every indexed md once perINDEX_RECONCILE_VERSION, recording that in<index_dir>/.index_reconcile_version. That file sits in.index/, not inside.index/lancedb/, so wiping the backend leaves it holding the current version and the pass is a no-op. - Nothing compares the ledger against the tables. "Every row done" and "the tables are empty" are never checked against each other, at startup or in the health probe.
Already documented — scope this accordingly
An earlier revision of this issue claimed the hazard was "only visible to someone who already thought to read the rebuild command's help". That was wrong, and it overstated the problem. The project documents it properly:
docs/cascade_runbook.mdhas a "Why not a barerm" comparison table —rm -rf .index/lancedb→ "❌ scanner skipsdonerows → empty index" — and a bolded paragraph repeating it in prose.docs/how-memory-works.mdcarries the same warning.- The
everos cascade rebuilddocstring states it. - The
LanceDBSchemaMismatchErrormessage now nameseveros cascade rebuild. The 1.1.2-era text that pointed users atrm -rf ~/.everos/.index/lancedb(quoted in #334) is gone.
So the product no longer walks anyone into this, and an operator who reads the runbook will not hit it. Severity should be read as hardening, not as an outage: reaching this state takes a deliberate rm -rf against an internal directory that the documentation tells you not to delete.
What is still worth fixing
The detection, not the documentation. The state is trivially distinguishable and the system reports it as healthy:
- Startup check. When the ledger says a kind is fully
donebut that kind's table holds zero rows, something external removed the index — log an error and either refuse to start or enqueue a rebuild. A row count per table is O(1) against LanceDB metadata. - Move the marker. Put
.index_reconcile_versioninside.index/lancedb/so wiping the backend also invalidates the marker that governs re-indexing it. The reconcile pass then self-arms after exactly the operation it should fire for, and this specific state stops existing. - Surface the comparison. A
rowscount per table beside the queue counters inGET /healthandcascade status. An operator seeingdone: 106next toepisode rows: 0needs no runbook.
Recovery (verified)
everos cascade rebuild restores it — 1060 rows back from the same 106 Markdown files, measured. No memory content is lost.
Related: #334 (origin of the rm -rf), and the same "the system cannot tell a broken index from an empty corpus" shape as #434 and #364.
- Lingua principale
- Python
- Stelle
- 13.3k
- Fork
- 926
- Merge medio
- 17h 40m
- PR unite (30g)
- 31
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di EverMind-AI/EverOS
-
Difficoltà 2/5 Mezza giornata Idoneità per principianti 62/100
EverMind-AI/EverOS#414 ·
I maintainer di solito rispondono entro 1 giorno
-
[Offer] Free independent recomputation of your published memory benchmarks (assayed-tier upgrade)Aperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 3/100
EverMind-AI/EverOS#504 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
EverMind-AI/EverOS#502 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
EverMind-AI/EverOS#498 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
EverMind-AI/EverOS#485 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di EverMind-AI/EverOS
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
EchoTools/nevr-runtime#651 ·
I maintainer di solito rispondono entro 1 giorno
-
bug frontend rt sev-3
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
noontide-co/mainbranch#1211 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[1.x Bug] run-operation --sql reports success but rolls back writes on transaction-capable adaptersApertatriage
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
dbt-labs/dbt#16784 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno