103 lines
5.6 KiB
Markdown
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` má
|
|
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. |