Wiping .index/lancedb leaves an empty index that every health surface reports as healthy
Los mantenedores suelen responder en 1 día
Ya se ha fusionado un pull request relacionado.
- #522 de @gloryfromca — fusionado
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- python, sqlite
- Área
- databases, observability
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 13.3k
- Forks
- 926
- Merge medio
- 22 h 56 min
- PR fusionados (30 d)
- 27
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de EverMind-AI/EverOS
-
Dificultad 2/5 Medio día Aptitud para principiantes 62/100
EverMind-AI/EverOS#414 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
EverMind-AI/EverOS#537 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: 同一 EverOS 账号下,不同 AI 客户端的记忆无法共享(user 隔离问题) / Cannot share memory between two AI clients under the same EverOS account (user isolation)Posiblemente ocupada @dani1005 la tomó hace 7 días. Abiertobug
Dificultad 4/5 1-2 días Aptitud para principiantes 48/100
EverMind-AI/EverOS#528 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
memorize(): make delivery resumable per memcell so retries and replays are idempotentPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
EverMind-AI/EverOS#516 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: add/flush returns 500 every time when an extraction reply quotes code with an unmatched `}` (everalgo brace-counting JSON extractor)Posiblemente ocupada @Kendrick-Song la tomó hace 9 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
EverMind-AI/EverOS#515 · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de EverMind-AI/EverOS
Issues similares
-
Context/namespace resources fail in-cluster: "Invalid kube-config file. No configuration found."Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
bug documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
awslabs/visual-asset-management-system#880 ·
Los mantenedores suelen responder en 1 día
-
netbox status: needs owner type: documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
netbox-community/netbox#23533 ·
Los mantenedores suelen responder en 1 día
-
app: scripts status: backlog type: documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
netbox-community/netbox-scripts#68 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
marin-community/marin#10765 ·
Los mantenedores suelen responder en 1 día