Files
nanobot-runtime/results/2026-09-18_wiki-indexace-vysetreni.md

103 lines
5.6 KiB
Markdown

# Wiki indexace — výsledky šetření
> **KOREKCE 2026-09-18 17:52:10 — původní šetření níže je ve třech nálezech nesprávné.**
> Text se ponechává jako stopa po chybné analýze. Platí to, co je v této sekci.
## Korekce
### Indexace wiki funguje
`wiki_sync.log` v 17:07 hlásí `workspace: indexed 1 files (3 chunks), deleted 0` a
`done files=197 chunks=789 vectors=789 pending=0 embedded=3`. `wiki/index.sqlite`
mtime 2026-09-18 17:07. Původní report vznikl v 17:06 — **minutu předtím, než běh doběhl**.
Git zdroje (`index`, `travel`, `wood-ng`) souhlasí s remote HEAD, `git ls-remote` i
embedding endpoint `nvidia.hell:11434` odpovídají v řádu ms.
### Root cause je výpadek serveru, ne skill
Všechny crony ustaly **naráz** 2026-09-17 v 19:13 a vrátily se 2026-09-18 ve 14:40 —
`wiki_sync.log` i `ollama_usage_cron.log` končí na stejné minutě. To sedí na pád
virtualizačního hostu. Žádná indexace mezitím neběžela, protože neběželo nic.
### Stale lock BYL (původní nález 3 je vyvrácen neprávem)
`wiki_sync.log`: `2026-09-18T14:40:37+02:00 WARN stale lock, reclaiming`. Lock je
`wiki/.sync.lock` (`STALE_SECONDS = 30 min`, viz `skills/wiki/scripts/wiki_sync.py`), ne
`triggers/.lock` ani `unlock.sh` — ty s wiki nesouvisí a hledaly se špatně. Lock byl
pozůstatek po běhu zabitém pádem hostu a první porebootový běh ho korektně uklidil.
### `wiki-compile` není přejmenovaný `llm-wiki`
`wiki-compile/SKILL.md` sám odkazuje „*that is capture-only (see llm-wiki skill)*" —
byl to **sourozenec** llm-wiki, ne rename. Obsahoval jen `SKILL.md`, žádné skripty.
### Rozbitý cron byl orphan, ne příčina
Retirement `llm-wiki` proběhl korektně (zálohy `backup/skills/llm-wiki/`,
`backup/workspace/cml/`), jen se zapomněl řádek v crontabu. Se skillem `wiki` nesdílel
**nic** — jiná DB, jiný log, jiný lock, jiný adresář. Nemohl indexaci blokovat.
**Pozor na tři nesouvisející věci sdílející slovo „wiki":**
| | živé | retired |
|---|---|---|
| skill `wiki` (hybrid RAG) | `wiki/index.sqlite`, `log/wiki_sync.log` | — |
| `llm-wiki` (PoC LLM-kurátorovaná wiki) | — | `backup/skills/llm-wiki/`, `backup/workspace/cml/` |
| `wiki-compile` (drain pro llm-wiki) | — | `backup/skills/wiki-compile/` |
### `db/wiki.sqlite` byl orphan
Grep přes celý workspace nenašel **žádnou** referenci kromě tohoto reportu. 0 bajtů, smazán.
### Co se opravilo (2026-09-18)
- crontab uživatele `nanobot`: odstraněn mrtvý `wiki-compile` job (zbývá 6 jobů)
- `log/wiki_compile_cron.log` (2,1 MB) + `log/wiki_compile_manual.log``backup/*.retired`
- `skills/wiki-compile/``backup/skills/wiki-compile/`
- `db/wiki.sqlite` (0 B) smazán
### Zbývá prověřit
Běh, který ve 14:40 přebral stale lock, doběhl až v 17:07 — **2 h 27 min** na jeden
zaindexovaný soubor. Hypotéza: `git fetch` nemá timeout (na rozdíl od `ls-remote`, který má
20 s) a po rebootu visel na nedostupné síti. Přesně scénář, před kterým varuje komentář
v `wiki_sync.py`. Neakutní — síť i endpointy teď odpovídají normálně.
---
## Původní šetření (nesprávné — viz korekce výše)
## Souhrn
Poslední úspěšná wiki indexace proběhla **2026-09-17 18:50** (mtime `wiki/index.sqlite`, 7.3 MB).
Od přejmenování skillu `llm-wiki``wiki-compile` jede kompilační cron job nasucho a loguje chybu `No such file or directory`. Žádný stale lock na wiki nezůstal.
## Nález 1: Rozbitý cron job (root cause)
`log/wiki_compile_cron.log` (2.1 MB) končí opakující se chybou:
```
error: Failed to spawn: `/home/nanobot/.nanobot/workspace/skills/llm-wiki/scripts/wiki_compile.py`
Caused by: No such file or directory (os error 2)
```
Cron job stále odkazuje na cestu `skills/llm-wiki/scripts/wiki_compile.py`, ale skill byl přejmenován na `wiki-compile`. Skript na staré cestě neexistuje → každý běh spadne, nic se neindexuje.
Poslední zápis do logu: **2026-09-18 15:09** (log dál roste).
## Nález 2: Vypadaná databáze
`db/wiki.sqlite` je **0 bajtů**, mtime 2026-09-18 15:09 — shodný s posledním zápisem do logu. Něco ji vyprázdnilo/znovu založilo a kompilátor pak nedoběhl. Nepátráno hlouběji, co ji vytáhlo na 0 bajtů.
`wiki/index.sqlite` je naproti tomu v pořádku (7 340 032 B, poslední zápis 2026-09-17 18:50).
## Nález 3: Stale lock — vyvráceno
Žádný wiki lock soubor neexistuje. Kandidáti vyloučeni:
- `triggers/.lock` — nesouvisející (triggery)
- `wiki/remote/wood-ng/wood/bin/unlock.sh`, `wiki/remote/wood-ng/pivo/bin/unlock.sh` — jen notované skripty pro wood/pivo, ne locky
Žádný wiki/embedding proces neběží (`ps` čisté).
## Časová osa
| Čas | Událost |
|---|---|
| 2026-09-17 18:50 | Poslední úspěšná indexace (mtime `wiki/index.sqlite`) |
| po přejmenování skillu | Každý cron běh failuje na chybějící skript |
| 2026-09-18 15:09 | Poslední zápis do logu; `db/wiki.sqlite` vynulována |
## Doporučená oprava
1. V cron jobu aktualizovat cestu na aktuální skill: `skills/wiki-compile/scripts/wiki_compile.py` (před zápisem ověřit skutečný název skriptu v novém skillu — může být jiný).
2. Vyšetřit, co vynulovalo `db/wiki.sqlite` — projít log hlouběji okolo 2026-09-18 15:09.
3. Po opravě spustit kompilaci ručně a ověřit, že `wiki/index.sqlite` dostane nový mtime.
## Kontext
Včera večer (2026-09-17) umřel virtualizační server hostující tento LXC kontejner; mašina byla rebootována. Reboot sám o sobě ale nezpůsobuje chybu „No such file or directory“ — ta je čistě důsledkem přejmenování skillu.