Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions AGENT_DIARY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## Key Historical Decisions

- **CI/тест-параллелизация (2026-09-26, xdist `-n auto`):** внедрено в CI test job (#45), `clean-state` (#46) и локальный pre-commit Gate-zero `verify_diary` (#47, fallback serial без xdist). CI-критпуть **~16мин → ~4мин**: ubuntu 13m44s→**1m58s**, windows 16m23s→**3m11s**, clean-state 13m25s→**1m41s**; локальный коммит ~200с→~70с. Ключ: `-n auto` (а не `-n 4` из E13), `.coveragerc.ci` (CI без `dynamic_context` — несовместим с xdist, pytest-cov#604) + module-fixture temporal (36.6s→20.8s). **CORRECTED E13/Exp 25:** «xdist ~15%, не берём» опровергнуто (×2.76 локально, ×7 в CI). Watch: был отмечен llama-конфликт локального xdist — не воспроизведён за 2 прогона.

- **E6/E7: opencode-хук → MSCodeBase CLI; blind eval каталога кристаллов (2026-09-22):** E6 — плагин `tool.execute.before` на `git commit` зовёт `python -m src.cli stale_detector` (без MCP), при drift>0 бросает; negative/positive control пройдены, модель отказ не обошла (подчинение 4/4 суммарно с E3). Гоча: CLI `--project` игнорируется, проект = cwd. E7 — слепой маппинг 10 реальных симптомов на индекс каталога Tom Jones (`crystal-memory`/`crystals`, Apache-2.0, Spanda Works), 11 прогонов / 3 модели: controls 60/60 валидных (deepseek-low провалил NONE-controls → валидность зависит от reasoning), ключевой входной симптом → NONE 10/10 валидных (семья есть, из симптома недостижима), надёжный hit только 1/10, воспроизводимость qwen 8/10 vs longcat 4/10 (свойство модели). Детали — EXPERIMENTS_LOG Exp 18/19.
- **Deploy 00ec5a6d → extension + live-revive smoke (2026-09-22):** `python install.py --sync-only` (код + очистка `__pycache__`, без pip/llama); символы `is_port_up`/`ensure_embedder_started`/`_revive_llama_cpp` подтверждены в ext. Live-check на РЕАЛЬНОМ llama.cpp (extension venv, без моков): подняли :8080 → embed dim=384 → убили процесс на :8080 (эмуляция watchdog idle-unload) → `RemoteEmbedder.embed` сам поднял сервер (лог: `WinError 10061` → `_revive_llama_cpp` → `ensure_embedder_started`), dim=384 → **PASS**. НЮАНС: ревайв занял **17.7s** (>15s бюджета search_code: 3 батч-ретрая + ~10s старт llama-server) → первый поиск после unload может ещё таймаутить, но сервер поднимается и следующий работает (раньше не восстанавливался никогда). Для активации в живом окне нужен reload Zed.
- **E8: quiet-break gate graph (2026-09-22):** read-only дельта-изоляция узла графа на коммите (git diff + persisted PropertyGraph, БЕЗ мутации индекса). Мотив: абсолютный сигнал бесполезен — **1535/4081 (38%)** функций имеют 0 входящих CALLS (@_step-регистранты, callbacks, entry points). A = правка удаляет последних вызывающих (граф: кто вызывал × рабочее дерево: зовёт ли ещё); B = новая функция без вызовов (diff + текст изменённых файлов). Доступно как `graph_query(action="isolation")` / CLI. Controls (реальный git + seeded graph): POS-A 0 / NEG-A 1 / NEG-B 1 / POS-B 0 / не-git → unavailable; unit `tests/test_quiet_break_gate.py` 10/10; CLI на живом репо 1899ms, 0 ложных. Найден+исправлен баг fail-open (не-git отдавал "empty" вместо "unavailable"). Границы: rename-sweep, динамическая регистрация, soft (не hard-блок). Детали — EXPERIMENTS_LOG Exp 20.
Expand Down Expand Up @@ -50,6 +52,14 @@
- **Чёрные окна CMD (2026-08-14):** MCP запускался как `venv\Scripts\python.exe` (console-подсистема) → каждое окно Zed = своё чёрное окно; фикс: `pythonw.exe` в extension.toml + CREATE_NO_WINDOW во ВСЕХ runtime subprocess (13 файлов) — с pythonw (нет консоли) незакрытые git/wmic/netstat мигали бы окнами
- **FA=0.00 ≠ качество guardrail (2026-08-15):** Exp 1-L Day 3 — qwen3.6/3.7 (zero-shot VOR) достигают FA=0.00 ценой recall(real)=0.08–0.20 (code_first: 2/25 правды принято, 7/25 активно отвергнуто) — fail-closed политика, а не «фильтрация лжи»; выбор LLM для verify-on-read = выбор политики (fail-closed qwen vs max-coverage glm), recall(real) обязан быть в метриках. CoT (V3/Part 5) НЕ окупается: только qwen3.6 recall 0.08→0.20 при цене ×30–65

## [2026-09-26] CI test parallelization (pytest-xdist) — Adopted
**Status:** ✅ Adopted + CI-green (#45/#46/#47 merged).
**Root Cause:** серийные прогоны доминировали в CI (test 13-16м, clean-state 13м); E13 (2026-09-23) отверг xdist по замеру `-n 4` (~15%) — недогрузка ядер на многоядерной машине + CI-overhead (coverage/`dynamic_context`).
**Fix:** `-n auto` в test job + clean-state + `verify_diary` Gate-zero (fallback serial без xdist); `.coveragerc.ci` (без `dynamic_context`) через `COVERAGE_RCFILE` для CI; `pytest-xdist` в dev-extra; module-fixture temporal generator.
**Measure:** локально 197.1с→71.4с (no cov) / 86.4с (+cov, 54.58%>38%); CI ubuntu 13m44s→1m58s, windows 16m23s→3m11s, clean-state 13m25s→1m41s; 1865 passed / 0 failed (выборка и гейты не тронуты).
**Guard:** выборка идентична (addopts `-m 'not slow and not benchmark'`); CI-парность ubuntu+windows; drift/negative-controls/revision гейты не изменены; fallback serial при отсутствии xdist.
**Open:** llama-конфликт (Exp 25) локального xdist — не воспроизведён за 2 прогона, watch.

## [2026-09-25] Reindex deadlock + concurrent indexers + embedder lease — Fixed (live)
**Status:** ✅ Fixed + live-verified (full reindex completed; index collapse confirmed).
**Root Cause:** `_bounded_link` (timeout fix 2026-09-25) ran `bulk_write` on a NEW daemon thread, while `run()` held the global write RLock on the caller thread for the whole reindex. `bulk_write` acquires the SAME RLock → permanent deadlock (py-spy: "bounded-bulk_write" idle at `db_writer.py:336`; job stuck 52% "running", 0 CPU). Timeout only fired at 300s → job failed. Same class for prune/verify (recreate_table_physical).
Expand Down
20 changes: 20 additions & 0 deletions EXPERIMENTS_LOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2628,3 +2628,23 @@ whitelist stdlib+builtins+typing, внешние (Zed/Rust), commit-scopes. По
**Вердикт:** xdist даёт лишь ~15% локально → не стоит сложности по умолчанию. Главный рычаг CI — кэш
deps/install, а не CPU-параллельность. Дальше: кэш pip в `clean-state`; разбор/оптимизация
`test_temporal_facts_generator`. (Локальный xdist отключён по прежнему решению владельца — конфликт с llama.)

**CORRECTED (2026-09-26):** вывод «~15%, не берём» опровергнут: он был снят с `-n 4` на многоядерной
машине (недогрузка CPU). С `-n auto` на 12 ядрах: serial 1865 тестов **197.1с** → `-n auto` **71.4с**
(**×2.76**), с CI-shape coverage — **86.4с**; `0 failed`. В CI эффект ещё больше (см. Exp 26). Решение
владельца 2026-09-23 «не берём» отменено владельцем 2026-09-26. См. AGENT_DIARY 2026-09-26.

## Exp 26 — CI/тест-параллелизация: pytest-xdist `-n auto` (CONFIRMED, внедрено)

**Гипотеза:** `-n auto` (все ядра, не 4) + контекст-независимый CI-coverage дадут кратное ускорение CI без потери качества.

**Метод:** локально (12 ядер) serial vs `-n auto` vs `-n auto --cov`; в CI те же команды на ubuntu/windows (4 ядра), выборка та же (addopts `-m 'not slow and not benchmark'`).

**Сырой результат (локально, 1865 тестов):** serial (no cov) **197.1с** → `-n auto` (no cov) **71.4с** → `-n auto` + CI-cov **86.4с**; **1865 passed / 0 failed**; coverage **54.58%** (gate 38%).
CI до/после: test ubuntu **13m44s→1m58s**, windows **16m23s→3m11s**, clean-state **13m25s→1m41s**.
Плюс `test_temporal_facts_generator` **36.6с→20.8с** (module-fixture для `generate(seed=7)`).

**Ключевое препятствие:** `.coveragerc` `dynamic_context=test_function` несовместим с xdist (pytest-cov#604, DistCovError) → CI использует `.coveragerc.ci` (без контекстов) через `COVERAGE_RCFILE`; локальный/bootstrap сохраняют пер-тестовые контексты.

**Вердикт:** CONFIRMED. Внедрено: #45 (test job), #46 (clean-state), #47 (pre-commit `verify_diary` Gate-zero, с fallback на serial, если xdist нет).
**Остаточный риск:** Exp 25 фиксировал «конфликт с llama» при локальном xdist; полный параллельный прогон локально прошёл `0 failed`, но флейки серверных тестов многократно не проверялись → watch.
Loading