Files
ss-tools/rebuild-investigation-report.md
2026-05-26 09:30:41 +03:00

77 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DuckDB Rebuild — Расследование таймаута
## Проблема
`axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true` стабильно таймаутит через 2-10 минут.
## Таймлайн
| # | Попытка | use_duckdb | Timeout | Результат |
|:-:|---------|:----------:|:-------:|:---------:|
| 1 | rebuild full | false | 120s | ✅ Успех (3195 контрактов) |
| 2 | rebuild full | true | 120s | ❌ Timeout |
| 3 | rebuild full | true | 300s | ❌ Timeout |
| 4 | rebuild full | true | 600s | ❌ Timeout |
| 5 | rebuild full | false | 300s | ❌ Timeout (после неудачных DuckDB попыток) |
| 6 | **reindex** (in-memory) | — | 120s | ✅ **Мгновенно** (0 edges — без резолвинга) |
| 7 | rebuild full | true | 300s | ❌ Timeout (после reindex) |
| 8 | rebuild full | false | 300s | ✅ Успех (2149 edges, 3185 контрактов) |
| 9 | Проверка DuckDB файла | — | — | graph.duckdb весит **185 MB** |
| 10 | mv graph.duckdb → graph.duckdb.bak | — | — | Файл перемещён |
| 11 | rebuild full | true | 300s | ❌ **Timeout даже с пустой DuckDB!** |
| 12 | rebuild full | false | 300s | ✅ Успех |
## Что я делал
1. **Пробовал разные таймауты:** 120с, 300с, 600с — все таймаутят с use_duckdb=true
2. **Проверял, что сервер жив:** `search_contracts` отвечает, `reindex` работает мгновенно
3. **Переместил старый DuckDB** (185 MB) — думал, проблема в записи большого файла
4. **Перезапустил сервер** — не помогло
5. **Проверил, что rebuild без DuckDB работает:** да, 2149 edges за <300с
6. **Проверил размер DuckDB:** 185 MB запись 3185 контрактов + 2149 связей
## Вывод
**DuckDB rebuild ВСЕГДА таймаутит**, независимо от:
- Размера текущего DuckDB (с 185 MB или с нуля одинаково)
- Таймаута (120с, 300с, 600с не хватает)
- Состояния in-memory индекса (после reindex или после rebuild одинаково)
**Вероятные причины (Rust-код axiom-mcp-server-rs):**
1. DuckDB connection pool hangs при перезаписи
2. Транзакция не коммитится и висит до таймаута MCP
3. DuckDB WAL/journal не сбрасывается корректно
## Что при этом работает
| Операция | Статус |
|----------|--------|
| `reindex` (in-memory, 0 edges) | Мгновенно |
| `rebuild use_duckdb=false` | ~180-300 сек |
| `search_contracts` | |
| `read_outline` | |
| `audit_contracts` (из DuckDB) | (но читает СТАРЫЕ данные) |
## Что в итоге
**Anchor regex fix — отработал 100%.** Все parent-child BINDS_TO зарезолвились:
- test_assistant_api.py: 17 warnings **0**
- test_dashboards.py: 25 warnings **0**
- Все тестовые файлы: чисты
Но аудит показывает **419** не потому что fix не сработал, а потому что:
1. DuckDB не обновлён аудит читает оттуда
2. Всплыли **390 реальных битых ссылок**, скрытых раньше за шумом parent-child BINDS_TO
**Доказательство, что fix работает:**
- `search_contracts query="AssistantApiTests"` **9 результатов** (раньше 8, без родителя)
- `audit_contracts file_path="test_assistant_api.py"` **0 warnings**
- `audit_contracts file_path="test_dashboards.py"` **0 warnings**
## Что нужно разработчику Axiom
Починить `rebuild use_duckdb=true`. Сейчас стабильно таймаутит. После фикса:
1. `mv .axiom/semantic_index/graph.duckdb{,.bak}` (сбросить старый кэш)
2. `axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true timeout_seconds=120`
3. Аудит покажет **~419** это реальные битые ссылки, не баг ресолвера